有些时候,不小心删除了一些需要的表,而且数据库不能停止,只能一直运行下去,这样的话很麻烦

下面介绍的方法就是删除表后通过时间戳后者scn找回删除的数据

模拟实验环境:

创建一个新表

SQL> create table www as select * from hr.employees;


Table created.

查看新表是否有数据
SQL> select count(*) from www;


  COUNT(*)
----------
       107

查看当前的时间,这里时间或者scn有一个就行。后面会有通过scn恢复的案例

SQL> select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;


TO_CHAR(SYSDATE,'YY
-------------------
2017-11-13 17:34:45

查找时间戳之前是否有数据

SQL> select count(*) from www as of timestamp to_timestamp('2017-11-13 17:30:45','yyyy-mm-dd hh24:mi:ss');
select count(*) from www as of timestamp to_timestamp('2017-11-13 17:30:45','yyyy-mm-dd hh24:mi:ss')
                     *
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed

查询下这个时间段的数据是存在的
SQL> select count(*) from www as of timestamp to_timestamp('2017-11-13 17:34:45','yyyy-mm-dd hh24:mi:ss');


  COUNT(*)
----------
       107

删除表:

SQL> delete from  www;


107 rows deleted.

SQL> commit;


Commit complete.

查看www表是没有数据的

SQL> select * from www;


no rows selected

当前时间查看也是没有数据了

SQL> select count(*) from www as of timestamp to_timestamp('2017-11-13 17:37:45','yyyy-mm-dd hh24:mi:ss');


  COUNT(*)
----------
         0

我们需要这样做,查看下删除之前的时间,根据删除之前的时间戳找到www表中的数据

SQL>  select count(*) from www as of timestamp to_timestamp('2017-11-13 17:34:45','yyyy-mm-dd hh24:mi:ss');


  COUNT(*)
----------
       107

查看时间戳发现有数据存在,说明数据可以恢复

SQL> insert into www select * from www as of timestamp to_timestamp('2017-11-13 17:34:45','yyyy-mm-dd hh24:mi:ss');


107 rows created.

SQL> commit;


Commit complete.

数据恢复成功

SQL> select count(*) from www;


  COUNT(*)
----------
       107

同理,scn也是可以恢复的

SQL> select current_scn from v$database;


CURRENT_SCN
-----------
    3698087


SQL> create table www as select * from hr.employees;


Table created.


SQL> select count(*) from www;


  COUNT(*)
----------
       107

查看创建表之后的scn

SQL> select current_scn from v$database;


CURRENT_SCN
-----------
    3698135

SQL> delete from www;


107 rows deleted.

表中的数据已经没有了

SQL> select count(*) from www;


  COUNT(*)
----------
         0

SQL> commit;


Commit complete.

通过创建表之后的scn号来查询后,找到了相关数据

SQL> select count(*) from www as of scn  3698135;


  COUNT(*)
----------
       107

将数据插入到表中即可

SQL> insert into www select * from www as of scn 3698135;

107 rows created.


SQL> commit;





Commit complete.


完成恢复。

同理scn和时间戳可以互相转换
scn-->timestamp

SQL> select scn_to_timestamp(3698087) scn from dual;





SCN

---------------------------------------------------------------------------

13-NOV-17 05.43.11.000000000 PM



timestamp-->scn

SQL> select timestamp_to_scn(to_timestamp('2017-11-13 17:34:45','yyyy-mm-dd hh24-mi-ss')) scn  from dual;





       SCN

----------

   3697660







【Oracle】delete表后commit后怎么找回,方法的更多相关文章

  1. Oracle误删表空间文件后数据库无法启动

    [问题描述]Oracle误删表空间文件后数据库无法启动,报错表空间文件不存在 [解决办法]sqlplus / as sysdba       #以dba身份登陆数据库shutdown immediat ...

  2. oracle多表关联删除的两种方法

    oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...

  3. Oracle system表空间满的暂定解决方法

    Oracle system表空间满的暂定解决方法 数据库用的是Oracle Express 10.2版本的.利用Oracle Text做全文检索应用,创建用户yxl时没有初始化默认表空间,在系统开发过 ...

  4. Oracle 之 表新增字段后修改字段顺序

    工作中遇到:在为一个表新增字段后,新增字段在最后,想调整新增字段的位置. 1.原始方法: --新建临时表以存储正确的顺序 create table A_2 as select (column1,col ...

  5. Oracle数据表被drop后的恢复

    对于被drop的表和索引,都会存放在回收站中(所以对于生产的数据库必须设置好回收站功能) 由于本次生成环境在drop掉已有的表后,又一次创建了很多的表,全部直接还原的话会提示原有对象存在,表名反复.当 ...

  6. oracle 大表删除数据后,回收空间的问题。

    在oracle中由于表结构设计不合理或者需要清楚老数据的时候,经常需要对大表数据进行清理. 一般有一下几种方法: 1. 删除大部分数据,留下小部分数据.我们可以把需要保留的数据转移到别的表,然后再把大 ...

  7. Oracle的表被锁后的恢复

    运行下列SQL,找出数据库的serial#,执行结果如下图所示 SELECT T2.USERNAME, T2.SID, T2.SERIAL#, T2.LOGON_TIME   FROM V$LOCKE ...

  8. oracle多表关联删除数据表记录方法

    oracle多表关联删除的两种方法 第一种使用exists方法 delete from tableA where exits ( select 1 from tableB Where tableA.i ...

  9. Oracle误删除表数据后的恢复具体解释

    Oracle误删除表数据后的恢复具体解释 測试环境: SYSTEM:IBM AIX 5L                         Oracle Version:10gR2 1. undo_re ...

随机推荐

  1. Python 学习笔记 之 01 - 基础总结

    数据类型 整数 十六进制和八进制使用0开头,0x12f, 010 浮点数 可以用科学记数法,如1.23x10^9 可以写成 12.3e8 ,0.000012可以写成 1.2e-5 空值 用None表示 ...

  2. 查询是否sci或者ei收录

    1,如果查文章是不是被SCI检索:进入ISI Web of Knowledge,选择Web of Science 数据库,进行查询:2,如果查文章是不是被EI检索:进入EI Village, 选择Co ...

  3. JavaSE14-集合·其一

    1.Collection集合 1.1 集合体系结构 集合 (接口)Collection:单列 (接口)List:可重复 (实现类)ArrayList (实现类)LinkedList (接口)Set:不 ...

  4. idea的下载与安装

    1.下载idea.到idea的官网选择你需要下载的,你最喜欢的版本https://www.jetbrains.com/idea/download/ 2.下载jdk.进入Oracle官网,鼠标指在Dow ...

  5. 牛客练习赛 73 D

    题目链接 离别 离线算法+线段树 容易发现当我们枚举右端点r时,符合条件的左端点是一段连续的区间 我们可以用队列来维护这个连续区间的左右端点 当枚举到端点\(i\)时,将下标\(i\)插入到队列\(q ...

  6. JQuery ajax request及Java服务端乱码问题及设置

    今天花了半天功夫才搞定2个乱码问题 1. 原先一直用form提交,现在改作JQuery ajax 提交,发现乱码. 2. window.location url中含有中文提交后,乱码. 第一个问题: ...

  7. Unity射击实例讲解—子弹创建

    前言: 这一篇章会介绍如何创建最基本的射击用子弹,示例用工程进度也往后推了许多,有时间会都整理了发出来,学艺尚浅有一些东西不能讲明白,后续学习深入会慢慢补足.另外自己魔改过的版本也是花钱买了一些模型, ...

  8. Spring Cloud Ribbon之URL重构(三)

    接着前面的说,前两篇中分析了解析和动态服务列表的获取,这两步完成后那接下来要做的事就是重组解析后的URL路径和发起通信了,这一步完成应该是在前面分析的RibbonLoadBalancerClient. ...

  9. Autofac官方文档翻译--一、注册组件--2传递注册参数

    官方文档:http://docs.autofac.org/en/latest/register/parameters.html 二.Autofac 传递注册参数 当你注册组件时能够提供一组参数,可以在 ...

  10. Python序列(十一)集合

    集合试无序可变列表,使用一对大括号界定,元素不可重复,同一个集合中每一个元素的都是唯一的. 集合只能包含数字.字符串.元祖等不可变类型(或者说可哈希)的数据,而不能包含列表.字典.集合等可变类型额数据 ...