Oracle 9I dataguard(standby)

xiayulai發表於2008-03-19

Oracle 9I dataguard

一個主資料庫可以有物理standby或邏輯的standby,也可以有兩者都有。資料的同步主要是主庫將archive log 傳送到standby系統上面,然後standby上將archive log恢復(即物理的standby)或者使用logmnr生成sql語句寫到standby庫上(即邏輯的standby),這樣的機制資料是不會立即從主庫上到standby上面,不能提供實時性要求高的查詢。邏輯standby的資料庫可以提供查詢功能,物理的standby需要先切換到readonly模式下才能提供查詢功能。

物理standby

物理standbyread only狀態下不能夠恢復redo log,但是可以繼續從主庫上接收redo log,如果需要的話可以重複轉換readonly狀態和recoveryredo apply)狀態。

物理standby可以作為一個工具去克隆一個新的資料庫和原來的一模一樣,克隆完了可以直接openread/write),此時不能接收redo data 從主庫上,也不能提供災難保護。

物理standby 的優點:

1、災難恢復和高可用性

當主庫發生問題時,容易的主備切換機制,可以立即切換到standby,保證最短的當機時間。

2、資料保護

可以確保資料不丟失,其支援主庫支援的任何資料型別、物件以及sql。主庫上儲存級的物理錯誤不會被傳遞到standby上面。Standby在應用日誌的時候還會去校驗一下redo log的。

3、減低主庫的工作壓力

首先備份可以使用standby去備份,standby還可以開啟刀readonly狀態提供查詢。

4、效能

應用日誌是使用底層的機制去恢復資料,繞過了sql級的程式碼層,所以對於大量的資料來說它是最有效的恢復機制。

邏輯standby

邏輯standby初始時複製了一個和主庫一樣的資料庫,邏輯資料庫是執行sql語句生成的資料,即它是處在open的狀態下的,可以read/write,但是透過sql重新生成的表是隻讀的。當表被更新生成時也是可以查詢生成報表的,當然可以另外的建立索引去提高效能。邏輯standby是有資料型別、表的型別及sql型別等的限制的。

邏輯standby的優點:

有效的使用了standby庫的硬體資源

降低主庫的壓力

測試例子:

主庫: primarydb net servicepdb

備庫: standbydb net servicesdb

第一階段:建立一個物理的standby

1、修改主庫的初始化引數

LOG_ARCHIVE_DEST_2=’SERVICE=sdb optional reopen=180’

LOG_ARCHIVE_DEST_STATE_2=ENABLE

STANDBY_FILE_MANAGEMENT=AUTO

FAL_SERVER=SDB

FAL_CLIENT=PDB

LOG_ARCHIVE_DEST_2作為主庫角色時,說明了主庫會將日誌透過net8傳輸到net service namesdb的資料庫上,即備庫上。Optional是指當主庫的聯機重做日誌沒有成功的歸檔到該地(sdb),也可以被迴圈使用。此處還有引數mandatory,強制規定聯機重做日誌歸檔到該位置後才能夠被迴圈使用。Reopen是指歸檔過程中發生故障,是否是強制嘗試重新歸檔到目標,此處的reopen=180,是指經過180秒後將嘗試重新歸檔。STANDBY_FILE_MANAGEMENT=AUTO 說明了主庫的資料檔案的增加刪除會自動地應用到備庫。FAL_SERVER引數是說明本庫作為standby角色時,日誌出現傳輸丟失,告訴standby去哪一個主庫去取日誌。FAL_CLIENT引數是說明從主庫取回日誌後送到哪個standby去。

如果主庫和備庫的資料檔案目錄不一致,需要在初始化引數中增加:

DB_FILE_NAME_CONVERT=’/data/oradata/primarydb/’,’/data/oradata/standbydb/’

LOG_FILE_NAME_CONVERT=’/arch1/pdb/’,’/arch1/sdb/’,’/arch2/pdb/’,’/arch2/sdb/’

2、主庫處於歸檔模式執行,如果不是請更改為歸檔模式:

sql>shutdown immediate

sql>startup mount;

sql>alter database archivelog;

sql>alter database open;

sql>

修改初始化引數檔案,增加:

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_1=/arch/oradata/

LOG_ARCHIVE_START=TRUE

3、備份主庫:冷備或者rman

冷備:將主庫shutdown,複製資料檔案、歸檔日誌檔案、線上日誌檔案。

Rman

備份資料檔案:

Backup database filesperset 2 format='/disk3/oradata/backup/%U_%s.bak';

歸檔當前日誌:

sql "Alter System Archive Log Current";

檢查歸檔日誌刪除過期的:

Crosscheck archivelog all;

Report obsolete;

Delete noprompt expired archivelog all;

Delete noprompt obsolete;

建立控制檔案並備份控制檔案和歸檔日誌:

Backup filesperset 10 archivelog all format=’/disk3/oradata/backup/%U_%s.log’;

sql環境下執行:

Alter database create standby controlfile as ‘/data/oradata/test2/control01.ctl’;

4、給備庫準備初始化引數檔案

在主庫上執行:

sql>create pfile=’/tmp/initpdb.ora’ from spfile;

將該初始化引數檔案搞到備庫上去。

備庫上的目錄環境如果按照主庫上的一樣,則可以不用修改,如果不一樣,請修改為備庫上的目錄環境,主要是控制檔案的位置,db_file_name_convertlog_file_name_convert是根據需要來設定的。

Log_archive_dest_1=’location=/arch/sdb/’

Log_archive_dest_2=’service=pdb optional reopen=180’

Fal_server=pdb

Fal_client=sdb

Standby_file_management=auto

當作為standby角色時Log_archive_dest_1這個引數是說明從主庫傳過來的日誌放到的位置,Log_archive_dest_2作為standby角色時是被忽略掉的。

5、將主庫備份的資料檔案拷到備庫

在備庫上建立與主庫一致的路徑(也可以不一致,但是需要和初始化引數檔案中指定的一致),將主庫的密碼檔案複製到備庫,放到相應的位置:$ORACLE_HOME/dbs/。將3步中生成的standby的控制檔案拷到對應的目錄下,注意要和初始化引數檔案中指定的路徑數量一致。

啟動standby資料庫:

sql>Startup nomount pfile=’/opt/oracle/products/9.2.0/dbs/initinstancename.ora’

sql>alter database mount standby database;

如果是冷備,將相應的檔案複製到對應的位置;

如果是rman備份,使用rman命令進行

rman>restore database;

rman>recover database;此時可能會出現錯誤,需要手工將主庫日誌歸檔,然後拷到備庫的日誌對應的路徑,然後註冊alter database register logfile ‘..’,再進行恢復recover automatic standby database until cancel;

完畢後,將資料庫直接啟動到自動恢復模式即可:

Alter database recover managed standby database disconnect from session;

至此物理的standby搭建完畢.

可以進行日誌切換來測試是否配置成功,alter system switch logfile;

第二階段:主備庫切換

下面介紹物理standby進行相互轉換得過程,如上配置已經完全滿足了主備庫相互轉換的要求。

在主庫上執行:

sql>alter database commit to switchover to physical standby with session shutdown;

sql>hutdown immediate

sql>tartup nomount pfile=’’

sql>alter database mount standby database;

sql>alter database recover managed standby database disconnect from session;

在備庫上執行:

Sql>alter database commit to switchover to primary;

Sql>shutdown immediate

Sql>startup

第三階段:恢復模式和只讀模式切換

Standbyshutdown狀態到read only狀態。

SQL> STARTUP NOMOUNT pfile=initSTANDBY.ora

SQL> ALTER DATABASE MOUNT STANDBY DATABASE;

SQL> ALTER DATABASE OPEN READ ONLY;

Standbymanual recovery模式下到read only狀態

SQL> RECOVER CANCEL

SQL> ALTER DATABASE OPEN READ ONLY;

Standbymanaged recovery模式下到read only狀態

SQL> RECOVER MANAGED STANDBY DATABASE CANCEL

SQL> ALTER DATABASE OPEN READ ONLY;

從只讀模式轉到自動恢復模式

SQL> RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION

從只讀模式轉到手工恢復模式

SQL> RECOVER STANDBY DATABASE DISCONNECT FROM SESSION

[@more@]

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

相關文章