返回顶部
首页 > 资讯 > 数据库 >Oracle Study中数据恢复神器Flashback怎么用
  • 290
分享到

Oracle Study中数据恢复神器Flashback怎么用

2024-04-02 19:04:59 290人浏览 独家记忆
摘要

这篇文章将为大家详细讲解有关oracle Study中数据恢复神器Flashback怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Flashback: 

这篇文章将为大家详细讲解有关oracle Study中数据恢复神器Flashback怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。

Flashback:

            Flashback 技术是以Undo segment中的内容为基础的, 因此受限于UNDO_RETENTON参数。要使用flashback 的特性,必须启用自动撤销管理表空间。

            在Oracle 11g里又出了一个新特性:Oracle Flashback Data ArcHive. FDA通过将变化数据另外存储到创建的闪回归档区(Flashback Archive)中,以和undo区别开来,这样就可以为闪回归档区单独设置存储策略,使之可以闪回到指定时间之前的旧数据而不影响undo策略。

            在Oracle 10g中, Flash back家族分为以下成员: Flashback Database, Flashback Drop,Flashback Query(分Flashback Query,Flashback Version Query, Flashback Transaction Query 三种) 和Flashback Table。

用户误操作数据恢复

       对于用户误操作产生的数据丢失,传统上都采用备份(逻辑备份)或物理备份(不完全恢复)来恢复数据;如果有逻辑备份,恢复相对较容易,如果没有逻辑备份,通过物理备份进行不完全恢复,需要付出很大的成本才能恢复数据;而从Oracle 9i以来,Oracle推出了Flashback得工具,可以通过此工具快速恢复因用户误操作而丢失的数据。

    对于DML操作,Flashback可以通过Undo block来恢复用户产生的误操作。

1、Flashback  query 特性flashback可以通过undo block查询过去时间点或scn的数据
2、Flashback  version query 特性可以得到特定的表在某一个时间段内的任何修改记录
3、Flashback transaction query 特性可以限制用户在某一个事务级别上检查数据库的修改操作,适用于诊断问题、分析性能、审计事务。
4、Flashback table 特性允许oracle通过flashback table语句,将表回滚到前一个时间点或者scn上。

一、Flashback Query

     Flashback 是ORACLE 自9i 就开始提供的一项特性,在9i 中利用oracle 查询多版本一致的特点,实现从回滚段中读取表一定时间内操作过的数据,可用来进行数据比对,或者修正意外提交造成的错误数据,该项特性也被称为Flashback Query。

     正如前言中所提,Flashback Query 是利用多版本读一致性的特性从UNDO 表空间读取操作前的记录数据!

什么是多版本读一致性

      Oracle 采用了一种非常优秀的设计,通过undo 数据来确保写不堵塞读,简单的讲,不同的事务在写数据时,会将数据的前映像写入undo 表空间,这样如果同时有其它事务查询该表数据,则可以通过undo 表空间中数据的前映像来构造所需的完整记录集,而不需要等待写入的事务提交或回滚。

      flashback query 有多种方式构建查询记录集,记录集的选择范围可以基于时间或基于scn,甚至可以同时查询出记录在undo 表空间中不同事务时的前映象。用法与标准查询非常类似,要通过flashback query 查询undo 中的撤销数据,最简单的方式只需要在标准查询语句的表名后面跟上as of timestamp(基于时间)或as of scn(基于scn)即可。as of timestamp|scn 的语法是自9iR2 后才开始提供支持。

 案例分析:

1、基于时间点(As of Timestamp)

    利用在undo tablespace 里已经被提交的undo block(未被覆盖),可以通过查询的方式将表里面的记录回到过去某个时间点。

1、构建测试环境
07:01:37 sql> conn scott/tiger                                                                                                         
Connected.
07:01:41 SQL> select * from test;                                                                                                        
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
14 rows selected.

2、DML误操作

07:01:45 SQL> delete from test ;                                                                                                        
14 rows deleted.
07:01:59 SQL> commit;                                                                                                                    
Commit complete.

07:02:03 SQL> select * from test;                                                                                                        
no rows selected

07:02:05 SQL> insert into test select * from emp where rownum <3;                                                                        
2 rows created.
07:02:35 SQL> select * from test;                                                                                                        
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
07:02:37 SQL> commit;                                                                                                                    
Commit complete.

2、利用logminer工具查找误操作的时间点(挖掘current redo或archive log)

07:03:03 SQL> select * from v$log;                                                                                                       
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1          1          0   52428800          1 YES UNUSED                       0
         2          1          1   52428800          1 NO  CURRENT                1261015 17-AUG-11
         3          1          0   52428800          1 YES UNUSED                       0
07:03:20 SQL> col member for a50                                                                                                         
07:03:23 SQL> select group#,member from v$logfile
    GROUP# MEMBER
---------- --------------------------------------------------
         3 /u01/app/oracle/oradata/prod/redo03.log
         2 /u01/app/oracle/oradata/prod/redo02.log
         1 /u01/app/oracle/oradata/prod/redo01.log

11:19:31 SQL> conn /as sysdba
Connected.
11:19:35 SQL> select * from v$log;
    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIM
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ---------
         1          1         12   52428800          2 YES INACTIVE                823116 29-SEP-11
         2          1         14   52428800          2 NO  CURRENT                 828692 29-SEP-11
         3          2          9   52428800          2 YES INACTIVE                824371 29-SEP-11
         4          2         11   52428800          2 NO  CURRENT                 828868 29-SEP-11
         5          1         13   52428800          2 YES INACTIVE                828670 29-SEP-11
         6          2         10   52428800          2 YES INACTIVE                828817 29-SEP-11
6 rows selected.

11:19:41 SQL> col member for a50
11:19:57 SQL> select group# ,member from v$logfile;
    GROUP# MEMBER
---------- --------------------------------------------------
         2 +DG1/prod/onlinelog/group_2.262.762877491
         2 +RECOVERY/prod/onlinelog/group_2.258.762877501
         1 +DG1/prod/onlinelog/group_1.261.762877473
         1 +RECOVERY/prod/onlinelog/group_1.257.762877479
         3 +DG1/prod/onlinelog/group_3.266.762877849
         3 +RECOVERY/prod/onlinelog/group_3.259.762877855
         4 +DG1/prod/onlinelog/group_4.267.762877859
         4 +RECOVERY/prod/onlinelog/group_4.260.762877867
         6 +DG1/prod/onlinelog/group_6.272.763037401
         6 +RECOVERY/prod/onlinelog/group_6.262.763037407
         5 +DG1/prod/onlinelog/group_5.271.763037441
    GROUP# MEMBER
---------- --------------------------------------------------
         5 +RECOVERY/prod/onlinelog/group_5.261.763037613
12 rows selected.

启动数据库附加日志:

11:19:58 SQL>Alter database add supplemental log data;

分析current redolog:

11:20:07 SQL> execute dbms_logmnr.add_logfile(logfilename=>'+DG1/prod/onlinelog/group_2.262.762877491',options=>dbms_logmnr.new);
PL/SQL procedure successfully completed.

11:20:57 SQL> alter session set nls_date_fORMat='yyyy-mm-dd';
Session altered.
11:21:32 SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.

07:05:21 SQL>  execute dbms_logmnr.end_logmnr;                                                                                           
PL/SQL procedure successfully completed.

查看DML操作的时间点:
11:23:11 SQL> select username,scn,timestamp,sql_redo from v$logmnr_contents where seg_name='EMP1';
USERNAME                              SCN TIMESTAMP  SQL_REDO
------------------------------ ---------- ---------- --------------------------------------------------
                                   830293 2011-09-29 delete from "SCOTT"."EMP1" where "EMPNO" = '7369'
                                                     and "ENAME" = 'SMITH' and "JOB" = 'CLERK' and "MGR
                                                     " = '7902' and "HIREDATE" = TO_DATE('1980-12-17',
                                                     'yyyy-mm-dd') and "SAL" = '800' and "COMM" IS NULL
                                                      and "DEPTNO" = '20' and ROWID = 'AAAM01AAEAAAAGEA
                                                     AA';
3、flashback query基于时间点的查询
 07:08:42 SQL> conn scott/tiger                                                                                                           
Connected.

07:08:48 SQL> select * from test as of timestamp to_timestamp('2011-08-17 07:01:59','yyyy-mm-dd hh34:mi:ss');                            
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
14 rows selected.

将查询到的数据写入到表中:

07:08:50 SQL> insert into test (select * from test as of timestamp to_timestamp('2011-08-17 07:01:59','yyyy-mm-dd hh34:mi:ss'));         
14 rows created.

07:09:10 SQL> select * from test;                                                                                                        
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
16 rows selected.
---至此,数据恢复完成!

2、基于SCN(As of SCN)

 ---对于事务的scn亦可以通过logminer对日志分析得到!

07:09:13 SQL> conn /as sysdba                                                                                                            
Connected.
07:10:28 SQL> 
07:10:28 SQL> select current_scn from v$database;                                                                                        
CURRENT_SCN
-----------
    1263945
07:10:39 SQL> conn scott/tiger                                                                                                           
Connected.
07:13:44 SQL> delete from test;                                                                                                          
16 rows deleted.
07:13:51 SQL> commit;                                                                                                                    
Commit complete.

07:13:56 SQL> select * from test as of scn 1263945 ;                                                                                     
     EMPNO ENAME      JOB              MGR HIREDATE         SAL       COMM     DEPTNO
---------- ---------- --------- ---------- --------- ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7369 SMITH      CLERK           7902 17-DEC-80        800                    20
      7499 ALLEN      SALESMAN        7698 20-FEB-81       1600        300         30
      7521 WARD       SALESMAN        7698 22-FEB-81       1250        500         30
      7566 JONES      MANAGER         7839 02-APR-81       2975                    20
      7654 MARTIN     SALESMAN        7698 28-SEP-81       1250       1400         30
      7698 BLAKE      MANAGER         7839 01-MAY-81       2850                    30
      7782 CLARK      MANAGER         7839 09-JUN-81       2450                    10
      7788 SCOTT      ANALYST         7566 19-APR-87       3000                    20
      7839 KING       PRESIDENT            17-NOV-81       5000                    10
      7844 TURNER     SALESMAN        7698 08-SEP-81       1500          0         30
      7876 ADAMS      CLERK           7788 23-MAY-87       1100                    20
      7900 JAMES      CLERK           7698 03-DEC-81        950                    30
      7902 FORD       ANALYST         7566 03-DEC-81       3000                    20
      7934 MILLER     CLERK           7782 23-JAN-82       1300                    10
      16 rows selected.

Oracle 事务timestamp和scn关系:

      每隔5 分钟,系统产生一次系统时间标记与scn 的匹配并存入sys.smon_scn_time 表,该表中记录了最近1440个系统时间标记与scn 的匹配记录,由于该表只维护了最近的1440 条记录,因此如果使用as of timestamp 的方式则只能flashback 最近5 天内的数据(假设系统是在持续不断运行并无中断或关机重启之类操作的话)。

       注意理解系统时间标记与scn 的每5 分钟匹配一次这句话,举个例子,比如scn:339988,339989 分别匹配08-05-3013:52:00 和2008-13:57:00,则当你通过as of timestamp 查询08-05-30 13:52:00 或08-05-30 13:56:59 这段时间点

内的时间时,oracle 都会将其匹配为scn:339988 到undo 表空间中查找,也就说在这个时间内,不管你指定的时间点是什么,查询返回的都将是08-05-30 13:52:00 这个时刻的数据。

       查看SCN 和 timestamp 之间的对应关系:

select scn,to_char(time_dp,'yyyy-mm-dd hh34:mi:ss')from sys.smon_scn_time;

15:49:45 SYS@ test3 >select scn,to_char(time_dp,'yyyy-mm-dd hh34:mi:ss')from sys.smon_scn_time order by 2 desc;
       SCN TO_CHAR(TIME_DP,'YY
---------- -------------------
    623337 2015-01-13 07:45:26
    623229 2015-01-13 07:40:13
    623128 2015-01-13 07:35:28
    623009 2015-01-13 07:30:12
    622906 2015-01-13 07:25:24
    622799 2015-01-13 07:20:11
    622695 2015-01-13 07:15:12
    622580 2015-01-13 07:10:24
    622474 2015-01-13 07:05:11
    622390 2015-01-13 07:01:17
    622161 2015-01-13 06:56:04
    622063 2015-01-13 06:51:20
    621954 2015-01-13 06:46:04
    621855 2015-01-13 06:41:19

二、Flashback version query

        相对于Flashback Query只能看到某一点的对象状态,Oracle 10g引入的Flashback Version Query可以看到过去某个时间段内,记录如何变化的。根据这个变化的历史,可以决断数据是在什么时间点发生了错误。

        Oracle10g可以通过Flashback Version Query允许对不同时间段内数据表的不同版本进行查询,查询可以反映不同时间段内数据表的变更。
        Oracle Flashback Version Query特性,利用保存的回滚信息,可以看到特定的表在时间段内的任何修改,如电影的回放一样,可以了解表在该期间的任何变化。Flashback version query一样依赖于AUM,提供了一个查看行改变的功能,能找到所有已经提交了的行的记录,分析出过去时间都执行了什么操作。Flashback version query采用VERSIONS BETWEEN语句来进行查询,常用的方法:
·VERSIONS_SCN – 系统改变号
·VERSIONS_TIMESTAMP – 时间

#查看表EMP1的操作历史

col versions_xid format a16 heading 'XID'
col versions_startscn format 99999999 heading 'Vsn|Start|SCN'
col versions_endscn  format 99999999 heading 'Vsn|End|SCN'
col versions_operation format a12  heading 'Operation'

select versions_xid, versions_startscn, versions_endscn,
     decode( versions_operation, 'I', 'Insert', 'U', 'Update', 'D', 'Delete', 'Original') "operation",
     empno, enamefrom emp1
     versions between scn minvalue and maxvalue;

            注意结果主从下向上看。Original代表最开始的数据。 

            3 相关的伪列

            1) ORA_ROWSCN记录最后一次被修改时的SCN, 这里的修改是指"被提交的修改",如果没有提交,那么这个伪列不会发生变化。ORA_ROWSCN 缺省是数据块级别的,也就是一个数据块内的所有记录都是一个ORA_ROWSCN. 数据块内的任意一条记录被修改,这个数据块内的所有记录ORA_ROWSCN都会同时改变。通过在建表时使用关键字rowdependencies, 可以改变这咱缺省行为。使用这个关键字后,每条记录都有自己的ORA_ROWSCN.

创建表时,如果没有使用rowdependencies关键字,则ORA_ROWSCN使用的是数据块头的SCN,因此在一个数据块内所有记录的ORA_ROWSCN都一样。如果使用了rowdependencies关键字,则每个记录都有自己的ORA_ROWSCN。这个值来自于ITL或dscn字段。             2)VERSIONS_STARTSCN表示这行记录获得的值是在哪个SCN获得的,如果为NULL,则表明这一行的值早于versions between scn MINVALUE and MAXVALUE中的MINVALUE。

          3) VERSIONS_STARTTIME同上

          4) VERSIONS_ENDSCN这行记录的这个值是到哪个SCN过期的。

          5) VERSIONS_TIME同上

          6) VERSIONS_XID导致事务修改的事务号

          7) VERSIONS_OPERATION修改类型U: updateI: insertD: delete

          两个函数:SCN_TO_TIMESTAMP(current_scn)

          select current_scn,scn_to_timestamp(current_scn) curr_time  from v$database;

TIMESTAMP_TO_SCN('yyyy-mm-dd hh34:mi:ss1')

Notes要使用Flashback Version Query, 用户首先要有对象的Select, flashback权限,对表执行过DDL语句之后,就只能查看DDL语句之后的版本,也就是说Flashback Version Query 不会跨越DDL操作。

案例分析:

12:50:06 SYS@ test1 >conn scott/tiger
Connected.

12:50:14 SCOTT@ test1 >create table emp1 as select * from emp;
Table created.

12:50:32 SCOTT@ test1 >insert into emp1 select * from emp where empno=7788;
1 row created.

12:51:53 SCOTT@ test1 >commit;
Commit complete.

12:51:56 SCOTT@ test1 >update emp1 set sal=9000 where empno=7369;
1 row updated.

12:52:10 SCOTT@ test1 >commit;
Commit complete.

12:52:11 SCOTT@ test1 >delete from emp where empno=7788;
1 row deleted.

12:52:23 SCOTT@ test1 >rollback;
Rollback complete.


col versions_xid format a16 heading 'XID'
col versions_startscn format 99999999 heading 'Vsn|Start|SCN'
col versions_endscn  format 99999999 heading 'Vsn|End|SCN'
col versions_operation format a12  heading 'Operation'

select versions_xid, versions_startscn, versions_endscn,
decode( versions_operation, 'I', 'Insert', 'U', 'Update', 'D', 'Delete', 'Original') "operation",
empno, ename
from emp1
versions between scn minvalue and maxvalue;
Elapsed: 00:00:00.03
12:53:12 SCOTT@ test1 >select versions_xid, versions_startscn, versions_endscn,
12:54:33   2  decode( versions_operation, 'I', 'Insert', 'U', 'Update', 'D', 'Delete', 'Original') "operation",
12:54:33   3  empno, ename
12:54:33   4  from emp1
12:54:33   5  versions between scn minvalue and maxvalue;
                       Vsn       Vsn
                     Start       End
XID                    SCN       SCN operation                             EMPNO ENAME
---------------- --------- --------- -------------------------------- ---------- ----------
08001F007D260000  11966074           Update                                 7369 SMITH
                            11966074 Original                               7369 SMITH
                                     Original                               7499 ALLEN
                                     Original                               7521 WARD
                                     Original                               7566 JONES
                                     Original                               7654 MARTIN
                                     Original                               7698 BLAKE
                                     Original                               7782 CLARK
                                     Original                               7788 SCOTT
                                     Original                               7839 KING
                                     Original                               7844 TURNER
                                     Original                               7876 ADAMS
                                     Original                               7900 JAMES
                                     Original                               7902 FORD
                                     Original                               7934 MILLER
                       Vsn       Vsn
                     Start       End
XID                    SCN       SCN operation                             EMPNO ENAME
---------------- --------- --------- -------------------------------- ---------- ----------
0A0020006B260000  11966067           Insert                                 7788 SCOTT
16 rows selected.

三、Flashback transaction query

      Flashback Transaction Query 与Flashback Version Query类似,也是使用UNDO信息来实现,利用这个功能可以查看某个事务执行的所有变化。使用这个功能,需要访问Flashback_transaction_query视图

      Oracle Flashback Transaction Query特性确保检查数据库的任何改变在一个事务级别,可以利用此功能进行诊断问题、性能分析和审计事务。它其实是Flashback Version Query查询的一个扩充,Flashback Version Query说明了可以审计一段时间内表的所有改变,但是也仅仅是能发现问题,对于错误的事务,没有好的处理办法。而Flashback Transaction Query提供了从FLASHBACK_TRANSACTION_QUERY视图中获得事务的历史以及Undo_sql(回滚事务对应的sql语句),也就是说审计一个事务到底做了什么,甚至可以回滚一个已经提交的事务。

select xid, operation, commit_scn, undo_sql
      from flashback_transaction_query
          where xid in(select versions_xid 
                              from emp1 versions between scn minvalue and                                          maxvalue);

案例分析:

在使用flashback transaction query之前需要启动Oracle附加日志(supplemental redo log)

启动数据库附加日志:

13:04:58 SQL>Alter database add supplemental log data;

13:06:14 SYS@ test1 >col undo_sql for a50
13:07:17 SYS@ test1 >select xid, operation, commit_scn, undo_sql
  2  from flashback_transaction_query
  3  where xid in(
  4  select versions_xid
  5  from scott.emp1
  6* versions between scn minvalue and maxvalue)
  
XID              OPERATION                        COMMIT_SCN UNDO_SQL
---------------- -------------------------------- ---------- --------------------------------------------------
0A0020006B260000 INSERT                             11966067 delete from "SCOTT"."EMP1" where ROWID = 'AAAEgIAA
                                                             JAAAAC3AAA';
0A0020006B260000 BEGIN                              11966067
08001F007D260000 UPDATE                             11966074 update "SCOTT"."EMP1" set "SAL" = '800' where ROWI
                                                             D = 'AAAEgIAAJAAAACzAAA';
08001F007D260000 BEGIN                              11966074

案例2:
13:08:40 SYS@ test1 >conn scott/tiger
Connected.
14:03:14 SCOTT@ test1 >insert into emp1 select * from emp where rownum=1;
1 row created.

14:03:30 SCOTT@ test1 >commit;
Commit complete.

14:03:45 SCOTT@ test1 >update emp set sal=9000 where empno=7788;
1 row updated.

14:03:55 SCOTT@ test1 >commit;
Commit complete.

14:03:57 SCOTT@ test1 >delete from emp where empno=7369;
0 rows deleted.

14:04:08 SCOTT@ test1 >commit;
Commit complete.
14:08:10 SYS@ test1 >col undo_sql for a50
14:08:24 SYS@ test1 >select xid, operation, commit_scn, undo_sql
  2  from flashback_transaction_query
  3  where xid in(
  4  select versions_xid
  5  from scott.emp1
  6   versions between timestamp
  7   to_timestamp('2015-01-14 14:00:00','yyyy-mm-dd hh34:mi:ss')
  8* and to_timestamp('2015-01-14 14:05:00','yyyy-mm-dd hh34:mi:ss'))

XID              OPERATION                        COMMIT_SCN UNDO_SQL
---------------- -------------------------------- ---------- --------------------------------------------------
04001B0028260000 INSERT                             11985210 delete from "SCOTT"."EMP1" where ROWID = 'AAAEgIAA
                                                             JAAAAC1AAA';

04001B0028260000 BEGIN                              11985210

关于“Oracle Study中数据恢复神器Flashback怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

您可能感兴趣的文档:

--结束END--

本文标题: Oracle Study中数据恢复神器Flashback怎么用

本文链接: https://lsjlt.com/news/67130.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Oracle Study中数据恢复神器Flashback怎么用
    这篇文章将为大家详细讲解有关Oracle Study中数据恢复神器Flashback怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。Flashback:  ...
    99+
    2024-04-02
  • Oracle Study之案例--数据恢复神器Flashback(3)
    Oracle Study之案例--数据恢复神器Flashback(3)Flashback Database:案例分析:      flashback database:利用fl...
    99+
    2024-04-02
  • Oracle Study之案例--数据恢复神器Flashback(2)
    Oracle Study之案例--数据恢复神器Flashback(2)一、Flashback Table:对于DML的误操作,可以通过Undo block对表进行回退(两种模式:基于时间和基于SCN)案例分...
    99+
    2024-04-02
  • 如何使用Oracle Flashback技术实现数据恢复和历史数据查询
    Oracle Flashback技术是一种用于数据库恢复和历史数据查询的功能。它允许用户在不需要恢复整个数据库的情况下,快速恢复某个...
    99+
    2024-03-02
    Oracle
  • 怎么使用oracle快照恢复数据
    使用Oracle快照恢复数据的步骤如下:1. 确保你有一个可用的数据库快照。在Oracle数据库中,可以使用RMAN(Recover...
    99+
    2023-08-26
    oracle
  • oracle误删数据怎么恢复
    误删 oracle 数据可以使用以下方法恢复:检查回收站。使用闪回查询查看特定时间的数据。使用归档日志进行恢复(需要归档日志已启用)。联系 oracle 支持以寻求高级恢复选项。 误删...
    99+
    2024-04-18
    oracle 数据丢失
  • oracle数据误删怎么恢复
    oracle 中误删的数据可以通过以下步骤恢复:确定已删除数据的表和行。通过运行 recover data 查询来恢复已删除的数据。运行查询确认数据已恢复。注意:如果数据已从撤消段中清除...
    99+
    2024-04-18
    oracle 数据丢失
  • Oracle数据库数据丢失怎么恢复
    这篇文章主要介绍“Oracle数据库数据丢失怎么恢复”,在日常操作中,相信很多人在Oracle数据库数据丢失怎么恢复问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Oracle...
    99+
    2024-04-02
  • oracle数据库delete的数据怎么恢复
    oracle数据库中已删除的数据可以通过以下步骤恢复:检查回收站:进入回收站查看已删除的数据,如在则恢复。使用flashback query:在数据不在回收站时使用flashback q...
    99+
    2024-04-18
    oracle 数据丢失
  • oracle怎么恢复修改的数据
    要恢复修改的数据,可以使用Oracle数据库的恢复功能。以下是一些步骤:1. 首先,确认数据库的备份情况。如果有备份,可以使用备份恢...
    99+
    2023-08-31
    oracle
  • oracle删除数据后怎么恢复
    oracle 数据恢复:删除后如何恢复?如果在事务过程中删除数据,可以通过回滚段恢复数据。如果启用了闪回区域,可以通过闪回查询恢复数据。如果定期备份数据库,可以通过备份恢复数据。 Or...
    99+
    2024-04-18
    oracle 数据丢失
  • oracle怎么恢复删除的数据
    要恢复删除的数据,可以通过以下步骤使用Oracle的备份和恢复功能: 检查备份:首先要确认是否有可用的数据库备份,备份通常会包含...
    99+
    2024-04-22
    oracle
  • oracle数据库误删怎么恢复
    oracle 数据库中误删数据恢复指南:确认误删: 检查数据库日志或备份,并尝试检索已删除的数据。恢复数据:从备份恢复,如果可用。从闪回区域恢复,如果已启用。使用 undo 表空间恢复,...
    99+
    2024-04-18
    oracle 数据丢失
  • oracle删掉的数据怎么恢复
    oracle 提供多种恢复已删除数据的机制:回滚操作:恢复到删除前状态从备份中恢复:覆盖自备份以来更改闪回查询:查询过去时间点数据undo 表空间:通过事务日志恢复数据第三方工具:提供高...
    99+
    2024-04-18
    oracle
  • oracle数据误删除怎么恢复
    oracle 提供了多种数据误删恢复方法:从回收站中恢复(30 天内可用);使用闪回查询(特定时间点恢复);从备份中恢复(备份需及时);使用第三方工具(更高级)。预防措施:定期备份、使用...
    99+
    2024-04-18
    oracle 数据丢失
  • oracle表数据误删怎么恢复
    oracle 提供以下数据恢复方法:回滚段:适用于自动提交模式外的表删除,使用 rollback 命令。闪回查询:查询过去表版本,要求启用了闪回日志记录,使用 select 语...
    99+
    2024-04-18
    oracle 数据丢失
  • oracle删除表数据怎么恢复
    oracle 中恢复已删除的表数据涉及以下步骤:检查回收站,如果找到已删除的表,执行步骤 2;运行查询还原表,可指定时间戳恢复到特定时间点;还原后可从回收站中删除表(可选);检查数据是否...
    99+
    2024-05-11
    oracle
  • oracle数据库中怎么实现误删恢复
    oracle数据库中怎么实现误删恢复,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一.如果只是误删部分数据或者某条数据可以通过1、sele...
    99+
    2024-04-02
  • Oracle中怎么恢复被误删除的数据
    在Oracle中,如果数据被误删除,可以使用以下方法来恢复数据: 回滚操作:在数据被删除后,立即使用ROLLBACK命令回滚事务...
    99+
    2024-04-19
    Oracle
  • oracle数据库误删除数据怎么恢复
    误删数据恢复步骤:检查回收站中是否有误删数据。使用闪回查询恢复误删数据(如时间戳在误删后不久)。从备份中恢复数据(如果回收站和闪回查询无法恢复)。 Oracle 数据库误删除数据恢复 ...
    99+
    2024-04-18
    oracle
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作