oracle實驗記錄 (oracle 10G dataguard(10)flashback 與dg)

fufuh2o發表於2009-11-16

關於primary resetlogs 與  standby flashback

 

情況一:primary resetlogs時 standby還未應用(未開應用or實時應用)primary 要resetlogs後(從SCN 判斷)的 archived log
,那麼當primary resetlogs 併產生新的archived log時候 standby可以 正常接收新的archive log並應用~~但會忽略resetlogs 時,已經產生 在要resetlogs 後scn的archivelog,另外也可以用SCN方式判斷
primary的 TO_CHAR(RESETLOGS_CHANGE# - 2)>standby 的current_scn (都從v$database中查 ) 表示 standby不用有任何操作 可以繼續接受archivedlog並應用

 

SQL> alter system set log_archive_dest_2='service=standby1 valid_for=(online_log           (primary)
files,primary_role) db_unique_name=standby1';

系統已更改。


SQL> shutdown immediate; (standby)
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount (standby)
ORACLE 例程已經啟動。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              96469696 bytes
Database Buffers          184549376 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。


SQL> alter database flashback  on; (standby,為standby開啟flashback database)

資料庫已更改。

SQL> select applied from v$archived_log;(standby)

APP
---
YES
YES
YES
YES
YES
SQL> select process,client_process,status,sequence# from v$managed_standby; (standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CONNECTED             0
ARCH      ARCH     CONNECTED             0
RFS       N/A      IDLE                  0


C:\>rman target /  catalog rman/rman@orcl

恢復管理器: Release 10.2.0.1.0 - Production on 星期四 11月 12 15:31:01 2009

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

連線到目標資料庫: XH (DBID=3098165337)
連線到恢復目錄資料庫
RMAN> backup database ;
完成 backup 於 12-11月-09

SQL> select current_scn from v$database;(primary)

CURRENT_SCN
-----------
     733042

SQL> drop table t1;(primary)

表已刪除。

SQL> alter system switch logfile;(primary)  產生一個 歸檔

系統已更改。

SQL>
SQL> select applied from v$archived_log;(standby)

APP
---
YES
YES
YES
YES
YES
NO~~~~~~~~~~~~~~~~~~~~~~~~`standby未應用

已選擇6行。

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
     727931

RMAN> run{startup force mount;
2> set until scn=733042;
3> restore database;
4> recover database;
5> sql'alter database open resetlogs';}

Oracle 例項已啟動
資料庫已裝載

 


SQL> select * from t1;(primary)

         A
----------
         1
         2
         3 ~~~~~~~~~~~~~~~~~~~~不完全恢復resetlogs open

 

SQL> SELECT TO_CHAR(RESETLOGS_CHANGE# - 2) FROM V$DATABASE; (primary)

TO_CHAR(RESETLOGS_CHANGE#-2)
----------------------------------------
733044


SQL> select current_scn from v$database;(standby)

CURRENT_SCN
-----------
     727931
primary的 TO_CHAR(RESETLOGS_CHANGE# - 2)>standby 的current_scn (都從v$database中查 ) 表示 standby不用有任何操作 可以繼續接受archivedlog並應用


SQL> select applied from v$archived_log;(standby)

APP
---
YES
YES
YES
YES
YES
NO~~~~~~~~~~~~~~~~~~~~~~~還沒應用

已選擇6行。
SQL> insert into t1 values(4);(primary)

已建立 1 行。

SQL> commit;(primary)

提交完成。

SQL> alter system switch logfile;(primary)

系統已更改。
SQL> select process,client_process,status,sequence# from v$managed_standby;(standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING              17
ARCH      ARCH     CLOSING               1
RFS       ARCH     IDLE                  0
SQL> select applied from v$archived_log;(standby)

APP
---
YES
YES
YES
YES
YES
NO
NO~~~~~~~~~~~~接受新archive log

已選擇7行。
SQL> alter database recover managed standby database using current logfile disco  (standby)
nnect from session;

資料庫已更改。

SQL> alter database recover managed standby database cancel;(standby)

資料庫已更改。

SQL> select applied from v$archived_log;(standby)

APP
---
YES
YES
YES
YES
YES
NO~~~忽略了這個 在resetlogs scn後 產生的 archived log(不是resetlog open後新產生的 archived log)
YES**********************應用了

已選擇7行。

SQL> select * from t1;

         A
----------
         1
         2
         3
         4


情況2:standby開啟實時應用,或一直開著恢復模式,此時應用了primary 要resetlogs 後產生的 SCN,當primary resetlogs open後 此時standby 可以接受新archive log 或redo 但不會應用,需要flashback standby,既 primary的 TO_CHAR(RESETLOGS_CHANGE# - 2)


RMAN> backup database;

啟動 backup 於 12-11月-09
使用通道 ORA_DISK_1

SQL> alter database recover managed standby database  disconnect from session;(standby)

資料庫已更改。

SQL> select process,client_process,status,sequence# from v$managed_standby;(standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING               2
ARCH      ARCH     CLOSING               1
RFS       UNKNOWN  IDLE                  0
MRP0      N/A      WAIT_FOR_LOG          3
SQL> select current_scn from v$database;(primary)

CURRENT_SCN
-----------
     734858


SQL> drop table t1;(primary)

表已刪除。

SQL> alter system switch logfile;(primary)

系統已更改。

SQL> select applied from v$archived_log;

APP
---
YES
YES
YES
YES
YES
NO
YES
YES~~~~~~~~~~~~~~~~~~應用了我們要 不完全恢復 scn 734858後 產生的resetlogs

已選擇8行。

 

RMAN> run{startup force mount;
2> set until scn=734858;
3> restore database;
4> recover database;
5> sql'alter database open resetlogs';}


SQL> select * from t1;(primary)

         A
----------
         1
         2
         3
         4

SQL> insert into t1 values(5);(primary)

已建立 1 行。

SQL> commit;primary)

提交完成。

SQL> alter system switch logfile;(primary)

系統已更改。
SQL> select process,client_process,status,sequence# from v$managed_standby;(standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING               2
ARCH      ARCH     CLOSING               1
RFS       N/A      IDLE                  0
MRP0      N/A      WAIT_FOR_LOG          3

SQL> select applied from v$archived_log;(standby)


APP
---
YES
YES
YES
YES
YES
NO
YES
YES
NO~~~~~~~~~~~~~~~~resetlogs open後 新的archived log(insert t1 值=5)

已選擇9行。

SQL> SELECT TO_CHAR(RESETLOGS_CHANGE# - 2) FROM V$DATABASE;(primary)

TO_CHAR(RESETLOGS_CHANGE#-2)
----------------------------------------
734863

SQL> select current_scn from v$database;(standby)

CURRENT_SCN
-----------
     734935


standby alert.log  下面表明standby資料檔案是孤立的 來自resetlogs open前
Thu Nov 12 16:28:59 2009
Errors in file e:\standby\bdump\standby1_mrp0_4444.trc:
ORA-19909: datafile 1 belongs to an orphan incarnation
ORA-01110: data file 1: 'E:\STANDBY\DATAFILE\SYSTEM01.DBF'


SQL> shutdown immediate (standby)
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount (standby)
ORACLE 例程已經啟動。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              96469696 bytes
Database Buffers          184549376 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。


SQL> flashback database to scn 734858;(standby)

閃回完成。

SQL>

SQL> alter database recover managed standby database  disconnect from session;(standby)

資料庫已更改。

SQL> select process,client_process,status,sequence# from v$managed_standby;(standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CONNECTED             0
ARCH      ARCH     CONNECTED             0
MRP0      N/A      WAIT_FOR_LOG          2

SQL> select applied from v$archived_log;(standby)

APP
---
YES
YES
YES
YES
YES
NO
YES
YES
YES~~~~~~~~~~~~~~~`應用了

已選擇9行。

 


SQL> alter database recover managed standby database  cancel;(standby)

資料庫已更改。

SQL> alter database open;(standby)

資料庫已更改。


SQL> select* from t1;(standby)

         A
----------
         1
         2
         3
         4
         5


另外 也可以 對standby 執行不完全恢復 (until scn),推薦用flashback database


關於alter database activate standby database

這是一個強行啟用standby 到read write的操作,oracle不推薦 此操作,因為如果standby 沒開flashback database,那麼這是一個單向操作,standby轉換成primary後 永遠也轉換不成standby了,因為 在open後 這個過程將自動 resetlogs(standby)。因此,在 startup 之前要做一次 cold backup,因為以往的 backup 最多隻能 recover 到 standby database 被activated 這一點。 因此  這個是個單項過程

 

SQL>  select db_unique_name ,database_role,open_mode,switchover_status from v$da 
tabase;

DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE  SWITCHOVER_STATUS
------------------------------ ---------------- ---------- --------------------
standby1                       PHYSICAL STANDBY READ ONLY  NOT ALLOWED

 

SQL> create restore point test_point guarantee flashback database;(standby)

還原點已建立。

SQL> alter database activate standby database;(standby)

資料庫已更改。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size              96469696 bytes
Database Buffers          184549376 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL>  select db_unique_name ,database_role,open_mode,switchover_status from v$da
tabase;

DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE  SWITCHOVER_STATUS
------------------------------ ---------------- ---------- --------------------
standby1                       PRIMARY          READ WRITE SESSIONS ACTIVE   ~~~~~~~~已經到 讀寫狀態

SQL>

SQL> alter database commit to switchover to physical standby;  (standby)
alter database commit to switchover to physical standby
*
第 1 行出現錯誤:
ORA-16416: 切換目標與主目標不同步

正常的轉換 無法進行

 

SQL> shutdown immediate;  (standby)
資料庫已經關閉。
已經解除安裝資料庫。
ORACLE 例程已經關閉。
SQL> startup mount           (standby)
ORACLE 例程已經啟動。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size             100664000 bytes
Database Buffers          180355072 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。
SQL> flashback database to restore point test_point;   (standby)

閃回完成。


SQL> alter database convert to physical standby;    (standby)

資料庫已更改。

SQL> startup force                   (standby)
ORACLE 例程已經啟動。

Total System Global Area  289406976 bytes
Fixed Size                  1248576 bytes
Variable Size             100664000 bytes
Database Buffers          180355072 bytes
Redo Buffers                7139328 bytes
資料庫裝載完畢。
資料庫已經開啟。
SQL>  select db_unique_name ,database_role,open_mode,switchover_status from v$da  (standby)
tabase;

DB_UNIQUE_NAME                 DATABASE_ROLE    OPEN_MODE  SWITCHOVER_STATUS
------------------------------ ---------------- ---------- --------------------
standby1                       PHYSICAL STANDBY READ ONLY  TO PRIMARY


SQL> select count(*) from v$archived_log; (standby)

  COUNT(*)
----------
         9

SQL> alter system switch logfile;(primary)

系統已更改。
SQL> select count(*) from v$archived_log;(standby)

  COUNT(*)
----------
        10
SQL> alter database recover managed standby database  disconnect from session;   (standby)

資料庫已更改。

SQL> select process,client_process,status,sequence# from v$managed_standby; (standby)

PROCESS   CLIENT_P STATUS        SEQUENCE#
--------- -------- ------------ ----------
ARCH      ARCH     CLOSING               2
ARCH      ARCH     CONNECTED             0
RFS       UNKNOWN  IDLE                  0
MRP0      N/A      WAIT_FOR_LOG          0

SQL> select applied from v$archived_log;(standby)

APP
---
YES
YES
YES
YES
YES
NO
YES
YES
YES
YES

已選擇10行。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12020513/viewspace-619720/,如需轉載,請註明出處,否則將追究法律責任。

相關文章