针对主库和备库都可以创建闪回快照点,然后恢复到指定的快照点,但主库一旦恢复到快照点,备库的同步则需要重新同步
SQL> select * from scott.dept; DEPTNO DNAME LOC ADDR ---------- -------------- ------------- ------------------------------ ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO SQL> create restore point before_201712151111 guarantee flashback database; Restore point created. SQL> create table scott.t as select * from scott.dept; Table created. SQL> truncate table scott.t; Table truncated. SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started. Total System Global Area 9.4067E+10 bytes Fixed Size 2263936 bytes Variable Size 9663677568 bytes Database Buffers 8.4289E+10 bytes Redo Buffers 112766976 bytes Database mounted. SQL> flashback database to restore point before_201712151111; Flashback complete. SQL> alter database open resetlogs; Database altered. 此时主库scott.t已不存在: SQL> select * from scott.t; select * from scott.t * ERROR at line 1: ORA-00942: table or view does not exist 此时从库的scott.依旧存在,主备同步终止 解决方案:在主库创建快照时间点,从库自动停止应用日志,等主库闪回后,重新应用日志即可。 如果已经做了上述操作,从库可以选择重建 ALTER DATABASE REGISTER LOGFILE '/xx/xx/archive.dbf';
c.闪回snapshot standby
此功能在11GR2非常实用,可自动创建闪回点、开启闪回日志,可完成线上数据测试后,然后做数据库闪回恢复主备关系
select scn, STORAGE_SIZE ,to_char(time,'yyyy-mm-dd hh24:mi:ss') time,NAME from v$restore_point; select database_role,open_mode,db_unique_name,flashback_on from v$database; SQL> set line 200; SQL> set pagesize 2000; SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database; DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON ---------------- -------------------- ------------------------------ ------------------ PHYSICAL STANDBY READ ONLY testdbms NO SQL> ALTER DATABASE CONVERT TO SNAPSHOT STANDBY; Database altered. SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database; DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON ---------------- -------------------- ------------------------------ ------------------ SNAPSHOT STANDBY MOUNTED testdbms RESTORE POINT ONLY SQL> alter database open; Database altered. SQL> select open_mode from v$database; OPEN_MODE -------------------- READ WRITE 此时备库操作: SQL> select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- SMITH CLERK 7902 1980-12-17 00:00:00 800 20 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20 KING PRESIDENT 1981-11-17 00:00:00 5000 10 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20 JAMES CLERK 7698 1981-12-03 00:00:00 950 30 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10 rows selected. SQL> truncate table scott.emp; Table truncated. 主库操作: SQL> create table scott.t as select * from scott.dept; Table created. SQL> select * from scott.t; DEPTNO DNAME LOC ADDR ---------- -------------- ------------- ------------------------------ ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO 备库恢复到物理standby SQL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. SQL> startup mount; ORACLE instance started. Total System Global Area 9.4067E+10 bytes Fixed Size 2263936 bytes Variable Size 9663677568 bytes Database Buffers 8.4289E+10 bytes Redo Buffers 112766976 bytes Database mounted. SQL> ALTER DATABASE CONVERT TO PHYSICAL STANDBY; Database altered. SQL> shutdown immediate; ORA-01507: database not mounted ORACLE instance shut down. SQL> startup ; ORACLE instance started. Total System Global Area 9.4067E+10 bytes Fixed Size 2263936 bytes Variable Size 9663677568 bytes Database Buffers 8.4289E+10 bytes Redo Buffers 112766976 bytes Database mounted. Database opened. ##此时备库的数据已经恢复到转变snapshot standby时间点 SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database; DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON ---------------- -------------------- ------------------------------ ------------------ PHYSICAL STANDBY READ ONLY testdbms NO SQL> select * from scott.emp; EMPNO ENAME JOB MGR HIREDATE SAL COMM DEPTNO ---------- ---------- --------- ---------- ------------------- ---------- ---------- ---------- SMITH CLERK 7902 1980-12-17 00:00:00 800 20 ALLEN SALESMAN 7698 1981-02-20 00:00:00 1600 300 30 WARD SALESMAN 7698 1981-02-22 00:00:00 1250 500 30 JONES MANAGER 7839 1981-04-02 00:00:00 2975 20 MARTIN SALESMAN 7698 1981-09-28 00:00:00 1250 1400 30 BLAKE MANAGER 7839 1981-05-01 00:00:00 2850 30 CLARK MANAGER 7839 1981-06-09 00:00:00 2450 10 SCOTT ANALYST 7566 1987-04-19 00:00:00 3000 20 KING PRESIDENT 1981-11-17 00:00:00 5000 10 TURNER SALESMAN 7698 1981-09-08 00:00:00 1500 0 30 ADAMS CLERK 7788 1987-05-23 00:00:00 1100 20 JAMES CLERK 7698 1981-12-03 00:00:00 950 30 FORD ANALYST 7566 1981-12-03 00:00:00 3000 20 MILLER CLERK 7782 1982-01-23 00:00:00 1300 10 rows selected. SQL> alter database recover managed standby database using current logfile disconnect; Database altered. SQL> select * from scott.t; DEPTNO DNAME LOC ADDR ---------- -------------- ------------- ------------------------------ ACCOUNTING NEW YORK RESEARCH DALLAS SALES CHICAGO SQL> select database_role,open_mode,db_unique_name,flashback_on from v$database; DATABASE_ROLE OPEN_MODE DB_UNIQUE_NAME FLASHBACK_ON ---------------- -------------------- ------------------------------ ------------------ PHYSICAL STANDBY READ ONLY WITH APPLY testdbms NO
(5)闪回归档(增加、修改、重命名、删除表的列、truncate表、修改表的约束、以及修改分区表的分区规范)
3、闪回注意事项
(1)数据库闪回需要在mounted下进行,并且open时需要使用resetlogs
(2)闪回DROP只能用于非系统表空间和本地管理的表空间,外键约束无法恢复,对方覆盖、重命名需注意
(3)表DROP,对应的物化视图会被彻底删除,物化视图不会存放在recyclebin里
(4)闪回表,如果在做过dml,然后进行了表结构修改、truncate等DDL操作,新增/删除结构无法做闪回
(5)闪回归档,必须在assm管理tablespace和undo auto管理下进行
(6)注意闪回区管理,防止磁盘爆满,闪回区空间不足等
(7)主库做库的闪回,会影响备库,需要重新同步
(8)snapshot standby 不支持最高保护模式
三、备注
1、相关数据字典
V$FLASHBACK_DATABASE_LOG ##查看数据库可闪回的时间点/SCN等信息 V$flashback_database_stat ##查看闪回日志空间记录信息
2、常用查询语句
(1)查看数据库状态
SQL> select NAME,OPEN_MODE ,DATABASE_ROLE,CURRENT_SCN,FLASHBACK_ON from v$database; NAME OPEN_MODE DATABASE_ROLE CURRENT_SCN FLASHBACK_ON ------------- -------------------- ---------------- ----------- ------------------ TESTDB READ WRITE PRIMARY 16812246 YES
(2)获取当前数据库的系统时间和SCN
SQL> select to_char(systimestamp,'yyyy-mm-dd HH24:MI:SS') as sysdt , dbms_flashback.get_system_change_number scn from dual; SYSDT SCN ------------------- ---------- 2017-12-14 14:28:33 16813234
(3)查看数据库可恢复的时间点
SQL> select * from V$FLASHBACK_DATABASE_LOG; OLDEST_FLASHBACK_SCN OLDEST_FLASHBACK_TI RETENTION_TARGET FLASHBACK_SIZE ESTIMATED_FLASHBACK_SIZE -------------------- ------------------- ---------------- -------------- ------------------------ 16801523 2017-12-14 11:35:05 4320 104857600 244113408
(4)查看闪回日志空间情况
SQL> select * from V$flashback_database_stat; BEGIN_TIME END_TIME FLASHBACK_DATA DB_DATA REDO_DATA ESTIMATED_FLASHBACK_SIZE ------------------- ------------------- -------------- ---------- ---------- ------------------------ 2017-12-14 14:34:53 2017-12-14 14:56:43 1703936 9977856 1487872 0
(5)SCN和timestamp装换关系查询
select scn,to_char(time_dp,'yyyy-mm-dd hh24:mi:ss')from sys.smon_scn_time;
(6)查看闪回restore_point
select scn, STORAGE_SIZE ,to_char(time,'yyyy-mm-dd hh24:mi:ss') time,NAME from v$restore_point;
(7)闪回语句
a.闪回数据库
FLASHBACK DATABASE TO TIMESTAMP to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd HH24:MI:SS');; flashback database to scn 16813234;
b.闪回DROP
其中table_name可以是删除表名称,也可以是别名
flashback table table_name to before drop; flashback table table_name to before drop rename to table_name_new;
c.闪回表
flashback table table_name to scn scn_number; flashback table table_name to timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss');
d.闪回查询
select * from table_name as of timestamp to_timestamp('2017-12-14 14:28:33','yyyy-mm-dd hh24:mi:ss'); select * from scott.dept as of scn 16801523;
e.闪回快照
create restore point before_201712151111 guarantee flashback database; flashback database to restore point before_201712151111;
(7)闪回空间爆满问题处理
请参照 基于ORA-19815闪回空间爆满问题的处理方法
以上这篇基于Oracle闪回详解(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。