Oracle-34-闪回操作

Oracle数据库的闪回分一下几类

回收站还原删除的表、闪回版本查询、闪回查询、闪回事务处理查询、闪回事务处理

回收站

连接到SCOTT用户,查看用户下的对象

[oracle@RHEL6 ~]$ sqlplus scott/scott

SQL*Plus: Release 11.2.0.1.0 Production on Sat Jul 28 22:51:51 2018

Copyright (c) 1982, 2009, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options
SCOTT@ orcl>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
E1                             TABLE
EMP                            TABLE
OB1                            TABLE
OB2                            TABLE
OB3                            TABLE
SALGRADE                       TABLE
TEST                           TABLE

9 rows selected.

Elapsed: 00:00:00.03

我们用E1表模拟回收站,删除表

SCOTT@ orcl>drop table e1;

Table dropped.

Elapsed: 00:00:00.43

再次查看用户模式下的对象

SCOTT@ orcl>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIN$chFkqSV+9BTgUAB/AQAK4w==$0 TABLE
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
OB1                            TABLE
OB2                            TABLE
OB3                            TABLE
SALGRADE                       TABLE
TEST                           TABLE

9 rows selected.

Elapsed: 00:00:00.01

由于第一张表名字不符合命名规则,我们用双引号括起来查看对象的格式

SCOTT@ orcl>desc "BIN$chFkqSV+9BTgUAB/AQAK4w==$0"
 Name                                                              Null?    Type
 ----------------------------------------------------------------- -------- ---------------
 EMPNO                                                                      NUMBER(4)
 ENAME                                                                      VARCHAR2(10)
 JOB                                                                        VARCHAR2(9)
 MGR                                                                        NUMBER(4)
 HIREDATE                                                                   DATE
 SAL                                                                        NUMBER(7,2)
 COMM                                                                       NUMBER(7,2)
 DEPTNO                                                                     NUMBER(2)

发现这张表就是刚才删掉的e1

查看回收站信息

SCOTT@ orcl>show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
E1               BIN$chFkqSV+9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:22:53:37
SCOTT@ orcl>

也可以

SQL> select * from user_recyclebin;

OBJECT_NAME    ORIGINAL_NAME   OPERATION TYPE                TS_NAME              CREATETIME DROPTIME    DROPSCN PARTITION_NAME CAN_UNDROP CAN_PURGE    RELATED BASE_OBJECT PURGE_OBJECT      SPACE
------------------------------ -------------------------------- --------- ------------------------- ------------------------------ ------------------- ------------------- ---------- -------------------------------- ---------- --------- ---------- ----------- ------------ ----------
BIN$chFkqSV+9BTgUAB/AQAK4w==$0 E1                             DROP TABLE              TEST                      2018-07-24:18:49:35 2018-07-28:22:53:37    1241988                                  YES    YES        75404       75404        75404          0

吧回收站里面的表还原

SCOTT@ orcl>flashback table e1 to before drop;

Flashback complete.

Elapsed: 00:00:00.02

查看对象

SCOTT@ orcl>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
E1                             TABLE
EMP                            TABLE
OB1                            TABLE
OB2                            TABLE
OB3                            TABLE
SALGRADE                       TABLE
TEST                           TABLE

9 rows selected.

Elapsed: 00:00:00.00

如果回收站中有多个重名的对象

SCOTT@ orcl>drop table e1;

Table dropped.

Elapsed: 00:00:00.02
SCOTT@ orcl>create table e1 as select * from emp;

Table created.

Elapsed: 00:00:00.08
SCOTT@ orcl>drop table e1;

Table dropped.

Elapsed: 00:00:00.02
SCOTT@ orcl>show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
E1               BIN$chFkqSWA9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:03:33
E1               BIN$chFkqSV/9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:02:50
SCOTT@ orcl>

用之前的命令还原,看下是还原的哪张表

SCOTT@ orcl>flashback table e1 to before drop;

Flashback complete.

Elapsed: 00:00:00.01
SCOTT@ orcl>show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
E1               BIN$chFkqSV/9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:02:50
SCOTT@ orcl>

如果我们还想将之前的e1闪回,那么需要重新命名

SCOTT@ orcl>flashback table e1 to before drop;
flashback table e1 to before drop
*
ERROR at line 1:
ORA-38312: original name is used by an existing object


Elapsed: 00:00:00.02
SCOTT@ orcl>flashback table e1 to before drop rename to e2;

Flashback complete.

Elapsed: 00:00:00.02
SCOTT@ orcl>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
E1                             TABLE
E2                             TABLE
EMP                            TABLE
OB1                            TABLE
OB2                            TABLE
OB3                            TABLE
SALGRADE                       TABLE
TEST                           TABLE

10 rows selected.

Elapsed: 00:00:00.00

如果要闪回指定的表,我们可以用回收站名称做闪回

SCOTT@ orcl>drop table e1;

Table dropped.

Elapsed: 00:00:00.01

SCOTT@ orcl>rename e2 to e1;

Table renamed.

Elapsed: 00:00:00.06
SCOTT@ orcl>drop table e1;

Table dropped.

Elapsed: 00:00:00.02
SCOTT@ orcl>show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
E1               BIN$chFkqSWC9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:09:40
E1               BIN$chFkqSWB9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:09:03
SCOTT@ orcl>
SCOTT@ orcl>flashback table "BIN$chFkqSWB9BTgUAB/AQAK4w==$0" to before drop; 

Flashback complete.

Elapsed: 00:00:00.01
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
E1               BIN$chFkqSWC9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:09:40
SCOTT@ orcl>

如果要清理回收站的某张表

SCOTT@ orcl>drop table e1;

Table dropped.

Elapsed: 00:00:00.01
SCOTT@ orcl>show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
E1               BIN$chFkqSWD9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:13:40
E1               BIN$chFkqSWC9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:09:40
SCOTT@ orcl>
SCOTT@ orcl>purge table "BIN$chFkqSWC9BTgUAB/AQAK4w==$0";

Table purged.

Elapsed: 00:00:00.08
SCOTT@ orcl>show recyclebin
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
E1               BIN$chFkqSWD9BTgUAB/AQAK4w==$0 TABLE        2018-07-28:23:13:40
SCOTT@ orcl>

如果要清空回收站

SCOTT@ orcl>purge recyclebin;

Recyclebin purged.

Elapsed: 00:00:00.03
SCOTT@ orcl>show recyclebin
SCOTT@ orcl>

如果想删除的时候不进回收站

SCOTT@ orcl>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
OB1                            TABLE
OB2                            TABLE
OB3                            TABLE
SALGRADE                       TABLE
TEST                           TABLE

8 rows selected.

Elapsed: 00:00:00.00
SCOTT@ orcl>drop table ob3 purge;

Table dropped.

Elapsed: 00:00:00.01
SCOTT@ orcl>show recyclebin
SCOTT@ orcl>

闪回版本查询

连接SCOTT用户查看用户下的表

SYS@ orcl>conn scott/scott
Connected.
SCOTT@ orcl>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
OB1                            TABLE
OB2                            TABLE
SALGRADE                       TABLE
TEST                           TABLE

7 rows selected.

Elapsed: 00:00:00.05

重新构建一张实验用表

SCOTT@ orcl>create table e1 as select * from emp;

Table created.

Elapsed: 00:00:00.94

查看表信息

SCOTT@ orcl>select * from e1;

     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.

Elapsed: 00:00:00.01

修改其中数据

SCOTT@ orcl>update e1 set sal=sal*1.125 where empno=7369;

1 row updated.

Elapsed: 00:00:00.02
SCOTT@ orcl>select * from e1;

     EMPNO ENAME      JOB              MGR HIREDATE                  SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------ ---------- ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80                 900                    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.

Elapsed: 00:00:00.00

我们做提交

SCOTT@ orcl>commit;

Commit complete.

Elapsed: 00:00:00.00

这时我们可以用闪回版本查询找出更改表之前的数据

VERSIONS_STARTTIME             VERSIONS_ENDTIME               VERSIONS_XID     V ENAME         SAL
------------------------------ ------------------------------ ---------------- - ---------- ------
30-JUL-18 10.16.40 AM                                         0500210015040000 U SMITH         900
                               30-JUL-18 10.16.40 AM                             SMITH         800

Elapsed: 00:00:00.01

再次做修改

SCOTT@ orcl>update e1 set sal=sal*1.25 where empno=7369;

1 row updated.

Elapsed: 00:00:00.00
SCOTT@ orcl>commit;

Commit complete.

Elapsed: 00:00:00.01
SCOTT@ orcl>select * from e1;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------ ------ ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80            1125                    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.

Elapsed: 00:00:00.00

再看闪回版本查询

SCOTT@ orcl>select versions_starttime,
  2  versions_endtime,
  3  versions_xid,
  4  versions_operation,
  5  ename,sal
  6  from e1
  7  versions between scn minvalue and maxvalue
  8  where empno=7369;

VERSIONS_STARTTIME             VERSIONS_ENDTIME               VERSIONS_XID     V ENAME         SAL
------------------------------ ------------------------------ ---------------- - ---------- ------
30-JUL-18 10.25.11 AM                                         09000B0077030000 U SMITH        1125
30-JUL-18 10.16.40 AM          30-JUL-18 10.25.11 AM          0500210015040000 U SMITH         900
                               30-JUL-18 10.16.40 AM                             SMITH         800

Elapsed: 00:00:00.00

我们把参数换成scn来做闪回版本查询

SCOTT@ orcl>select versions_startscn,
  2  versions_endscn,
  3  versions_xid,
  4  versions_operation,
  5  ename,sal
  6  from e1
  7  versions between scn minvalue and maxvalue
  8  where empno=7369;

VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID     V ENAME         SAL
----------------- --------------- ---------------- - ---------- ------
          1245014                 09000B0077030000 U SMITH        1125
          1244498         1245014 0500210015040000 U SMITH         900
                          1244498                    SMITH         800

Elapsed: 00:00:00.00

闪回查询

SCOTT@ orcl>select * from e1 as of scn 1244498;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------ ------ ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80             900                    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.

Elapsed: 00:00:00.00

闪回事务查询

要求数据库打开追加日志数据模式

SYS@ orcl>select supplemental_log_data_min from v$database;

SUPPLEME
--------
NO

Elapsed: 00:00:00.03

打开追加日志

SYS@ orcl>alter database add supplemental log data;

Database altered.

Elapsed: 00:00:00.10

SYS@ orcl>select supplemental_log_data_min from v$database;

SUPPLEME
--------
YES

Elapsed: 00:00:00.02

再次修改数据

SCOTT@ orcl>update e1 set sal=sal*1.25 where empno=7369;

1 row updated.

Elapsed: 00:00:00.01
SCOTT@ orcl>commit;

Commit complete.

Elapsed: 00:00:00.00
SCOTT@ orcl>select versions_startscn,
  2  versions_endscn,
  3  versions_xid,
  4  versions_operation,
  5  ename,sal
  6  from e1
  7  versions between scn minvalue and maxvalue
  8  where empno=7369;

VERSIONS_STARTSCN VERSIONS_ENDSCN VERSIONS_XID     V ENAME         SAL
----------------- --------------- ---------------- - ---------- ------
          1247683                 02001B006C030000 U SMITH        1406
          1245014         1247683 09000B0077030000 U SMITH        1125
                          1245014                    SMITH         900

Elapsed: 00:00:00.01
SYS@ orcl>col UNDO_SQL for a80
SYS@ orcl>select undo_sql from flashback_transaction_query where xid='02001B006C030000';

UNDO_SQL
--------------------------------------------------------------------------------
update "SCOTT"."E1" set "SAL" = '1125' where ROWID = 'AAASbmAAEAAAAyjAAA';


Elapsed: 00:00:01.45

查询出的结果是修改数据时操作的反向操作SQL

我们利用反向SQL还原修改操作

SYS@ orcl>update "SCOTT"."E1" set "SAL" = '1125' where ROWID = 'AAASbmAAEAAAAyjAAA';

1 row updated.

Elapsed: 00:00:00.00
SYS@ orcl>commit;

Commit complete.

Elapsed: 00:00:00.00
SCOTT@ orcl>select * from e1;

     EMPNO ENAME      JOB              MGR HIREDATE              SAL       COMM     DEPTNO
---------- ---------- --------- ---------- ------------------ ------ ---------- ----------
      7369 SMITH      CLERK           7902 17-DEC-80            1125                    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.

Elapsed: 00:00:00.01

猜你喜欢

转载自blog.csdn.net/Paul_George/article/details/81266294