Oracle9iR2 Data Guard的保護模式

一、三種保護模式
最大性能(maximize performance):這是data guard默認的保護模式。primay上的事務commit前不需要從standby上收到反饋信息。該模式在primary故障時可能丟失數據,但standby對primary的性能影響最小。
最大可用(maximize availability):在正常情況下,最大可用模式和最大保護模式一樣;在standby不可用時,最大可用模式會自動降低成最大性能模式,所以standby故障不會導致primay不可用。只要至少有一個standby可用的情況下,即使primarydown機,也能保證不丟失數據。
最大保護(maximize protection):最高級別的保護模式。primay上的事務在commit前必須確認redo已經傳遞到至少一個standby上,如果所有standby不可用,則primary會掛起。該模式能保證零數據丟失。

二、查看當前保護模式
SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE

三、兩種日誌傳輸方式
Arch:傳統的日誌傳送方式。現在只有在最大性能模式時才能採用。歸檔日誌通過primary上的arch進程傳送給standby的RFS進程。
LGWr:oracle9i開始可以使用LGWR即時將日誌傳送到standby,而不再需要等到歸檔操作時才傳送,已減少可能的數據丟失。在三種保護模式下都可以使用該方式傳送日誌。使用LGWR方式傳送,在standby必須先建立standby redo logfile

四、查看日誌傳送方式
SQL> select dest_name,archiver from v$archive_dest;

DEST_NAME ARCHIVER
-------------------- ----------
LOG_ARCHIVE_DEST_1 ARCH
LOG_ARCHIVE_DEST_2 LGWR
LOG_ARCHIVE_DEST_3 ARCH
LOG_ARCHIVE_DEST_4 ARCH
LOG_ARCHIVE_DEST_5 ARCH
LOG_ARCHIVE_DEST_6 ARCH
LOG_ARCHIVE_DEST_7 ARCH
LOG_ARCHIVE_DEST_8 ARCH
LOG_ARCHIVE_DEST_9 ARCH
LOG_ARCHIVE_DEST_10 ARCH

10 rows selected.

五、添加standby redo logfile

首先停止standby的自動恢復狀態
SQL> alter database recover managed standby database finish;

Database altered.

如果沒有停止自動恢復狀態就添加standby logfile,會報錯:
ORA-01156: recovery in progress may need access to files

SQL> alter database add standby logfile group 4 ('d:oracleoradatateststandby
04.redo') size 10m;

Database altered.

SQL> alter database add standby logfile group 5 ('d:oracleoradatateststandby
05.redo') size 10m;

Database altered.

SQL> alter database add standby logfile group 6 ('d:oracleoradatateststandby
06.redo') size 10m;

Database altered.

SQL> alter database add standby logfile group 7 ('d:oracleoradatateststandby
07.redo') size 10m;

Database altered.

注意standby logfile的group名不能和primary的redo logfile group重複,因爲我的primay已經有3組日誌了,這裏添加的四組standby logfile從group 4開始。standby redo logfile的大小要和primary保持一致,另外由於主備庫歸檔的速度可能不一致,standby redo logfile一般要比主庫的online redo logfile多建一組,否則在最大保護模式時可能導致主庫掛起。

六、設置standby的歸檔路徑
log_archive_dest_1='location=d:oraclearchtest'

七、在primary上修改爲用LGWR傳送日誌

SQL> alter system set log_archive_dest_2='service=test lgwr async';

System altered.

在primary上swith logfile
SQL> alter system switch logfile;

System altered.

在primary的alter中可以看到成功的記錄
Thu Nov 23 12:41:28 2006
ALTER SYSTEM SET log_archive_dest_2='service=test lgwr async' SCOPE=BOTH;
Thu Nov 23 12:43:12 2006
******************************************************************
LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
******************************************************************
Creating archive destination LOG_ARCHIVE_DEST_2: 'test'
LNS0 started with pid=13
Thu Nov 23 12:43:16 2006
LGWR: Beginning to archive log 3 thread 1 sequence 102
Thread 1 advanced to log sequence 102
Current log# 3 seq# 102 mem# 0: D:ORACLEORADATANINGREDO03.LOG
Thu Nov 23 12:43:16 2006
ARC0: Evaluating archive log 2 thread 1 sequence 101
ARC0: LGWR is actively archiving destination LOG_ARCHIVE_DEST_2
ARC0: Beginning to archive log 2 thread 1 sequence 101
Creating archive destination LOG_ARCHIVE_DEST_2: 'test'
Creating archive destination LOG_ARCHIVE_DEST_1: 'D:ORACLEARCHNINGARC00101.001'
ARC0: Completed archiving log 2 thread 1 sequence 101

八、切換standby的保護模式
切換保護模式的操作必須在primay執行,且primay必須處於mount狀態
如果在open狀態執行,則報錯:
ORA-01126: database must be mounted EXCLUSIVE and not open for this operation

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 134814580 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 143360 bytes
Database mounted.
SQL> alter database set standby database to maximize availability;

Database altered.

SQL> alter database open;
alter database open
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel

注意,這時需要先修改日誌傳送方式爲lgwr同步方式,否則,數據庫是無法open的
SQL> conn / as sysdba
Connected to an idle instance.
SQL> startup mount;
ORACLE instance started.

Total System Global Area 134814580 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 143360 bytes
Database mounted.

SQL> alter system set log_archive_dest_2='service=test lgwr sync';

System altered.

SQL> alter database open;

Database altered.

再來看看當前保護模式
SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
---------------- -------------------- --------------------
PHYSICAL STANDBY MAXIMUM AVAILABILITY MAXIMUM AVAILABILITY

切換成maximize protection也需要類似的步驟,這裏就不演示了。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章