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