ORACLE闪回----闪回表flashback table

本文通过实例详细展示了Oracle数据库中闪回表(Flashback Table)的功能,包括如何将表恢复到之前的某个状态或SCN,以及在启用行移动后如何成功进行闪回操作。在过程中,强调了行移动的重要性,以及在有索引的情况下,闪回操作会自动维护索引的完整性和一致性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

flashback分类:

   1)flashback drop

   2)flashback query

   3)flashback data archive

   4)flashback table

   5)flashback version query

   6)flashback transaction

   7)flashback database

闪回表

要点

闪回表通常是把表的状态回退到以前的某个时刻或者SCN上。(其实向前向后都能闪)。自动恢复相关的属性,包括索引、触发器等。

前提

对表启用行移动 使能行移动 row movement

sys的表不能闪回

物化视图下不许闪回表操作

语法

flashback table <table_name> to timestamp | scn 

示例

SYS@ prod>select * from test.emp;

     EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 1980-12-17 00:00:00        800                    20
      7499 ALLEN                          SALESMAN                          7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD                           SALESMAN                          7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES                          MANAGER                           7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN                         SALESMAN                          7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE                          MANAGER                           7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK                          MANAGER                           7839 1981-06-09 00:00:00       2450                    10
      7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20
      7839 KING                           PRESIDENT                              1981-11-17 00:00:00       5000                    10
      7844 TURNER                         SALESMAN                          7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS                          CLERK                             7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES                          CLERK                             7698 1981-12-03 00:00:00        950                    30
      7902 FORD                           ANALYST                           7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER                         CLERK                             7782 1982-01-23 00:00:00       1300                    10

已选择14行。

SYS@ prod>update test.emp set sal=1000 where sal<1000;

已更新2行。

SYS@ prod>commit;

提交完成。

SYS@ prod>select checkpoint_change#,name from v$datafile_header;

CHECKPOINT_CHANGE# NAME
------------------ ------------------------------
           2030857 /u01/oradata/prod/system01.dbf
           2030857 /u01/oradata/prod/sysaux01.dbf
           2030857 /u01/oradata/prod/undotbs01.db
                   f

           2030857 /u01/oradata/prod/users01.dbf
           2030857 /u01/oradata/prod/example01.db
                   f

           2030857 /u01/oradata/prod/tbsttt.dbf
           2030857 /u01/oradata/prod/test01.dbf
           2030857 /u01/oradata/prod/fda01.dbf
           2031430 /u01/oradata/prod/arch.tbs

已选择9行。

切归档

SYS@ prod>select * from test.emp;

     EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 1980-12-17 00:00:00       1000                    20
      7499 ALLEN                          SALESMAN                          7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD                           SALESMAN                          7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES                          MANAGER                           7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN                         SALESMAN                          7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE                          MANAGER                           7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK                          MANAGER                           7839 1981-06-09 00:00:00       2450                    10
      7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20
      7839 KING                           PRESIDENT                              1981-11-17 00:00:00       5000                    10
      7844 TURNER                         SALESMAN                          7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS                          CLERK                             7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES                          CLERK                             7698 1981-12-03 00:00:00       1000                    30
      7902 FORD                           ANALYST                           7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER                         CLERK                             7782 1982-01-23 00:00:00       1300                    10

已选择14行。



SYS@ prod>col name for a30;
SYS@ prod>select checkpoint_change#,name  from v$datafile;

CHECKPOINT_CHANGE# NAME
------------------ ------------------------------
           2064247 /u01/oradata/prod/system01.dbf
           2064247 /u01/oradata/prod/sysaux01.dbf
           2064247 /u01/oradata/prod/undotbs01.db
                   f

           2064247 /u01/oradata/prod/users01.dbf
           2064247 /u01/oradata/prod/example01.db
                   f

           2064247 /u01/oradata/prod/tbsttt.dbf
           2064247 /u01/oradata/prod/test01.dbf
           2064247 /u01/oradata/prod/fda01.dbf
           2064247 /u01/oradata/prod/arch.tbs

已选择9行。

SYS@ prod>

再次切归档,查看SCN号

SYS@ prod>select checkpoint_change#,name  from v$datafile;

CHECKPOINT_CHANGE# NAME
------------------ ------------------------------
           2064247 /u01/oradata/prod/system01.dbf
           2064247 /u01/oradata/prod/sysaux01.dbf
           2064247 /u01/oradata/prod/undotbs01.db
                   f

           2064247 /u01/oradata/prod/users01.dbf
           2064247 /u01/oradata/prod/example01.db
                   f

           2064247 /u01/oradata/prod/tbsttt.dbf
           2064247 /u01/oradata/prod/test01.dbf
           2064247 /u01/oradata/prod/fda01.dbf
           2064247 /u01/oradata/prod/arch.tbs

已选择9行。

SYS@ prod>alter system switch logfile;

系统已更改。

SYS@ prod>alter system switch logfile;

系统已更改。

SYS@ prod>select checkpoint_change#,name  from v$datafile;

CHECKPOINT_CHANGE# NAME
------------------ ------------------------------
           2066403 /u01/oradata/prod/system01.dbf
           2066403 /u01/oradata/prod/sysaux01.dbf
           2066403 /u01/oradata/prod/undotbs01.db
                   f

           2066403 /u01/oradata/prod/users01.dbf
           2066403 /u01/oradata/prod/example01.db
                   f

           2066403 /u01/oradata/prod/tbsttt.dbf
           2066403 /u01/oradata/prod/test01.dbf
           2066403 /u01/oradata/prod/fda01.dbf
           2066403 /u01/oradata/prod/arch.tbs

已选择9行。

SYS@ prod>

 

SYS@ prod>drop table test.emp;

表已删除。

SYS@ prod>
SYS@ prod>
SYS@ prod>
SYS@ prod>
SYS@ prod>select checkpoint_change#,name  from v$datafile;

CHECKPOINT_CHANGE# NAME
------------------ ------------------------------
           2066407 /u01/oradata/prod/system01.dbf
           2066407 /u01/oradata/prod/sysaux01.dbf
           2066407 /u01/oradata/prod/undotbs01.db
                   f

           2066407 /u01/oradata/prod/users01.dbf
           2066407 /u01/oradata/prod/example01.db
                   f

           2066407 /u01/oradata/prod/tbsttt.dbf
           2066407 /u01/oradata/prod/test01.dbf
           2066407 /u01/oradata/prod/fda01.dbf
           2066407 /u01/oradata/prod/arch.tbs

已选择9行。

一系列操作后,使用闪回

我把表删了...........

必须使用一次闪回删除

TEST@ prod>flashback table  emp  to before drop;

闪回完成。

TEST@ prod>
TEST@ prod>select * from emp;

     EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 1980-12-17 00:00:00       1000                    20
      7499 ALLEN                          SALESMAN                          7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD                           SALESMAN                          7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES                          MANAGER                           7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN                         SALESMAN                          7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE                          MANAGER                           7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK                          MANAGER                           7839 1981-06-09 00:00:00       2450                    10
      7839 KING                           PRESIDENT                              1981-11-17 00:00:00       5000                    10
      7844 TURNER                         SALESMAN                          7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS                          CLERK                             7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES                          CLERK                             7698 1981-12-03 00:00:00       1000                    30
      7902 FORD                           ANALYST                           7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER                         CLERK                             7782 1982-01-23 00:00:00       1300                    10

已选择13行。

TEST@ prod>
TEST@ prod>
TEST@ prod>
TEST@ prod>flashback table emp to scn 2064247;
flashback table emp to scn 2064247
                *
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表

未启动行移动所以闪回表不生效

启动行移动

TEST@ prod>select * from emp;

     EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 1980-12-17 00:00:00       1000                    20
      7499 ALLEN                          SALESMAN                          7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD                           SALESMAN                          7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES                          MANAGER                           7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN                         SALESMAN                          7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE                          MANAGER                           7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK                          MANAGER                           7839 1981-06-09 00:00:00       2450                    10
      7839 KING                           PRESIDENT                              1981-11-17 00:00:00       5000                    10
      7844 TURNER                         SALESMAN                          7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS                          CLERK                             7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES                          CLERK                             7698 1981-12-03 00:00:00       1000                    30
      7902 FORD                           ANALYST                           7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER                         CLERK                             7782 1982-01-23 00:00:00       1300                    10

已选择13行。

TEST@ prod>
TEST@ prod>
TEST@ prod>
TEST@ prod>flashback table emp to scn 2064247;
flashback table emp to scn 2064247
                *
第 1 行出现错误:
ORA-08189: 因为未启用行移动功能, 不能闪回表


TEST@ prod>
TEST@ prod>
TEST@ prod>
TEST@ prod>alter table emp enable row movement;

表已更改。

TEST@ prod>
TEST@ prod>
TEST@ prod>
TEST@ prod>flashback table emp to scn 2064247;

闪回完成。

TEST@ prod>
TEST@ prod>select * from emp;

     EMPNO ENAME                          JOB                                MGR HIREDATE                   SAL       COMM     DEPTNO
---------- ------------------------------ --------------------------- ---------- ------------------- ---------- ---------- ----------
      7369 SMITH                          CLERK                             7902 1980-12-17 00:00:00       1000                    20
      7499 ALLEN                          SALESMAN                          7698 1981-02-20 00:00:00       1600        300         30
      7521 WARD                           SALESMAN                          7698 1981-02-22 00:00:00       1250        500         30
      7566 JONES                          MANAGER                           7839 1981-04-02 00:00:00       2975                    20
      7654 MARTIN                         SALESMAN                          7698 1981-09-28 00:00:00       1250       1400         30
      7698 BLAKE                          MANAGER                           7839 1981-05-01 00:00:00       2850                    30
      7782 CLARK                          MANAGER                           7839 1981-06-09 00:00:00       2450                    10
      7788 SCOTT                          ANALYST                           7566 1987-04-19 00:00:00       3000                    20
      7839 KING                           PRESIDENT                              1981-11-17 00:00:00       5000                    10
      7844 TURNER                         SALESMAN                          7698 1981-09-08 00:00:00       1500          0         30
      7876 ADAMS                          CLERK                             7788 1987-05-23 00:00:00       1100                    20
      7900 JAMES                          CLERK                             7698 1981-12-03 00:00:00       1000                    30
      7902 FORD                           ANALYST                           7566 1981-12-03 00:00:00       3000                    20
      7934 MILLER                         CLERK                             7782 1982-01-23 00:00:00       1300                    10

已选择14行。

当有索引的时候,索引是自动维护的!

Jrojyun

2021-03-29

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值