1. 程式人生 > >Oracle11gR2_ADG管理之恢復主庫的truncate表實戰

Oracle11gR2_ADG管理之恢復主庫的truncate表實戰

acl ack min cnblogs com body alt logs ase

備庫開啟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

Oracle11gR2_ADG管理之恢復主庫的truncate表實戰