Oracle11gR2_ADG管理之恢复主库的truncate表实战

备库开启flashback database

#关闭备库的同步
SQL> alter database recover managed standby database cancel;

Database altered.

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
NO

SQL> alter database flashback on;

Database altered.

SQL> select flashback_on from v$database;

FLASHBACK_ON
------------------
YES

SQL> alter database recover managed standby database using current logfile disconnect;

Database altered.

查看同步状态,备库实时应用主库的归档

#主库上执行
SQL> set linesize 300
SQL> col DESTINATION format a10
SQL> col db_unique_name format a10
SQL> col database_mode format a20
SQL> col recovery_mode format a20
SQL> col synchronization_status format a10
SQL> col gap_status format a10

SQL> SELECT DESTINATION,db_unique_name,type,STATUS,database_mode,recovery_mode,ARCHIVED_THREAD#,ARCHIVED_SEQ#,applied_seq#,synchronization_status,gap_status FROM V$ARCHIVE_DEST_STATUS WHERE STATUS <> 'DEFERRED' AND STATUS <> 'INACTIVE';

DESTINATIO DB_UNIQUE_ TYPE           STATUS    DATABASE_MODE        RECOVERY_MODE        ARCHIVED_THREAD# ARCHIVED_SEQ# APPLIED_SEQ# SYNCHRONIZ GAP_STATUS
---------- ---------- -------------- --------- -------------------- -------------------- ---------------- ------------- ------------ ---------- ----------
		   NONE       LOCAL          VALID     OPEN                 IDLE                                1            44            0 CHECK CONF
																																	 IGURATION

snewtest   snewtest   PHYSICAL       VALID     OPEN_READ-ONLY       MANAGED REAL TIME AP                1            44           43 CHECK CONF NO GAP
																	PLY                                                              IGURATION

SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
-----------
	4410236

主库发生误操作将表test truncate 掉

SQL> truncate table test;

Table truncated.

SQL> select count(*) from test;

  COUNT(*)
----------
		 0

#记录scn
SQL> SELECT CURRENT_SCN FROM V$DATABASE;

CURRENT_SCN
-----------
	4410383

#通过logminer搜索一定范围内的archivelog,确定drop操作对应的准确SCN号 
SQL> exec dbms_logmnr.start_logmnr(startscn=>4410236,endscn=>4410383,options=>DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG + DBMS_LOGMNR.CONTINUOUS_MINE);

PL/SQL procedure successfully completed.

SQL> col sql_redo format a110
SQL> set linesize 180
SQL> select scn,sql_redo,timestamp from v$logmnr_contents where table_name='TEST';

	   SCN SQL_REDO                                                                                                       TIMESTAMP
---------- -------------------------------------------------------------------------------------------------------------- ---------
   4410319 truncate table test;   



#确定flashback database的目标时间为4410319

在备库上执行flashback database

SQL>  select count(*) from test;

  COUNT(*)
----------
		 0

SQL> alter database recover managed standby database cancel;

Database altered.


SQL> flashback database to scn 4410236;

Flashback complete.

SQL> alter database open read only;

Database altered.

SQL> select count(1) from test;

  COUNT(1)
----------
		23

使用dblink或者datapump将数据恢复到主库上

:
create public database link system_snewtest connect to sys identified by "oracle" using 'snewtest';
insert into test select * from system.test@system_snewtest;

SQL> select count(1) from test;

	COUNT(1)
----------
		23

重新开启备库上的MRP

SQL> alter database recover managed standby database using current logfile disconnect  ;


Database altered.

SQL> select count(1) from test;

	COUNT(1)
----------
		2
posted @ 2018-04-01 16:36  chinesern  阅读(948)  评论(0编辑  收藏  举报