建立DATAGUARD最大保護模式-測試手記

jinqibingl發表於2013-04-08

建立DATAGUARD最大保護模式(自寫)

(備註:本文件符合最大保護模式,所有引數均為最大保護模式下適用,其他模式不適用)

1、主庫,啟動歸檔,開啟強制歸檔。

alter database archivelog;

alter database force logging;

2、建立standby日誌。

alter database add standby logfile group 4 ('D:\oracle\product\10.2.0\oradata\orcl\standbyredo04.log') size 50m;

3、建立備庫用的控制檔案。

alter database create standby controlfile as 'd:\standbycontrol01.ctl';

4、建立pfile引數檔案。

create pfile from spfile;

5、修改主庫pfile引數檔案。

增加以下內容:

    *.DB_UNIQUE_NAME='PRIMARY'

    *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIMARY,STANDBY)'

    *.LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\product\10.2.0\oradata\ARCH\ MANDATORY REOPEN=60 MAX_FAILURE=3 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIMARY'

    *.LOG_ARCHIVE_DEST_2='SERVICE=STANDBY LGWR SYNC AFFIRM VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STANDBY'

    *.LOG_ARCHIVE_DEST_STATE_1=ENABLE

    *.LOG_ARCHIVE_DEST_STATE_2=ENABLE

    *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

    *.LOG_ARCHIVE_FORMAT=ORCL_%T_%S_%R.ARC

    *.FAL_CLIENT = 'PRIMARY'

    *.FAL_SERVER = 'STANDBY'

*.STANDBY_FILE_MANAGEMENT =AUTO

pfile引數檔案啟動後,建立spfile檔案,然後用spfile啟動資料庫。

6、修改主庫listenernet解析配置檔案。(這部分主要的目的是要保證兩邊資料庫要互相能夠登入,所以在啟動DG之前,一定要用從各自主機上用sqlplus登入,嘗試能不能登入,記得用sys使用者登入要加上as sysdba,否則會報異常錯誤,由於備庫會處於mount狀態,經過驗證,在mount下,動態註冊監聽會導致遠端sqlplussys使用者登入會報錯,所以備庫還是使用靜態註冊監聽)(NET部分配置,可以使用NETCA來配置,只是從主庫上建立到備庫的連線時,由於沒有啟動或者處於mount狀態,只能用sys使用者來做測試,輸入本地服務名主要和log_archive_dest_2中的service後面的服務名相關,要一樣才能讓主庫進行解析,備庫一樣配置的目的,主要為了切換之後可以正常使用.

由於備庫沒有啟動,所以用netca配置可能不靈光,還是推薦直接用配置檔案的方式做。

listener.ora配置

    SID_LIST_LISTENER =

    (SID_LIST =

下增加: (SID_DESC =

        (SID_NAME = orcl)

        (ORACLE_HOME = D:\oracle\product\10.2.0\db_1)

        (PROGRAM = orcl)

        )

        就是增加一個靜態監聽註冊,其實主庫可以不這樣配置,但是為了以後切換之後,可以正常使用,所以還是按照standby資料要求來配置。

tnsnames.ora配置

增加:

PRIMARY =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

 

STANDBY =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.11)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME = orcl)

    )

  )

7、複製檔案到備庫:資料庫資料檔案,生成出來的控制檔案,做好的pfile引數檔案,日誌檔案,以及修改過的listener.oratnsnames.ora。這裡和網上的不太一樣,但是我推薦還是將聯機日誌檔案全部複製到備庫。

8、修改備庫上的pfile檔案

    *.DB_UNIQUE_NAME='STANDBY'

    *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIMARY,STANDBY)'

    *.LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\product\10.2.0\oradata\ARCH\ MANDATORY REOPEN=60 MAX_FAILURE=3 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STANDBY'

    *.LOG_ARCHIVE_DEST_2='SERVICE=PRIMARY LGWR SYNC AFFIRM VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIMARY'

    *.LOG_ARCHIVE_DEST_STATE_1=ENABLE

    *.LOG_ARCHIVE_DEST_STATE_2=ENABLE

    *.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

    *.LOG_ARCHIVE_FORMAT=ORCL_%T_%S_%R.ARC

    *.FAL_CLIENT = 'STANDBY'

    *.FAL_SERVER = 'PRIMARY'

    *.STANDBY_FILE_MANAGEMENT =AUTO

9、檢查listener.oratnsnames.ora檔案配置是否正確,主要可能是目錄不太一樣。

10、將控制檔案複製2份,複製到和主庫一樣的位置,並且檔名改成和主庫一樣的。

11、將資料檔案複製到和主庫一樣的位置。

12、將修改好的pfile引數檔案,複製到db_1\database下。

13、將listener.oratnsnames.ora複製到到db_1\network\admin下。

14、備庫上的資料夾要建立和主庫一樣的。主要有D:\oracle\product\10.2.0\admin\orcl下的6個資料夾,D:\oracle\product\10.2.0\flash_recovery_areaD:\oracle\product\10.2.0\oradata下的資料檔案存放資料夾及歸檔日誌資料夾。

15pfilelistener.oratnsnames.ora修改檢查複製完成,資料檔案、聯機日誌檔案及控制檔案複製完成之後,可以開始了。

16、建立服務:oradim -new -sid orcl -startmode m

17、生成密碼檔案:orapwd file='D:\oracle\product\10.2.0\db_2\database\pwdorcl.ora' password=XXXX entris=5;

18、用pfile引數檔案啟動資料庫到mount狀態,建立spfile,然後用spfile重新啟動到mount狀態,由於在複製過來的時候,帶過來了關於standby日誌的配置,這裡最好是刪除之後重新建立:

alter database drop standby logfile group 4;

alter database add standby logfile group 4 ('D:\oracle\product\10.2.0\oradata\orcl\standbyredo04.log') size 50m;

19、啟動備庫中的redo實時應用:

alter database recover managed standby database using current logfile disconnect from session;

19、回到主庫:

sqlplus來檢查一下standby 資料庫能不能正常登陸。記得用SYS使用者登入,加上as sysdba

20、啟動主庫到mount狀態,mount狀態下修改主庫到最大保護模式:

alter database set standby database to maximize protection;

21、啟動正常,說明DG建立成功。

 

22、資料庫切換

主庫執行:

Alter database commit to switchover to phiscal standby with session shutdown;

Shutdown immediate

Startup mount

備庫執行:

Alter databse commit to switchover to primary;

可能需要執行一下redo應用之後,才能切換

Alter databse recover managed standby database disconnect from session;

Alter databse commit to switchover to primary;

主要是備庫切換過來之後,由於是雙向都是最大保護,所以要備庫能連線到主庫,所以首先要在備庫上執行sqlplus,看看能不能正常登入到主庫,也有可能登入不上,那麼有可能是主庫的listener.ora的服務名不一樣,將備庫中tnsnames.ora中的service_name改成要主庫一樣的就可以了,這主要是因為主庫和備庫都配置了db_unique_name,listener.ora有netca配置的時候,可能會將db_unique_name配置為服務名,但是oracle_sid還是orcl,這個要務必注意。

總結 :

一、DG主要,是有引數檔案的引數來確定,只要正確,建立一般沒有問題,每種DG保護模式引數都不一樣,不能套用。

二 、DG啟動,則是有SQLPLUS命令來控制的,引數正確,命令執行就沒有問題。

三、DG中的NET部分非常重要,很多錯誤可能會發生在NET配置部分,由於DB_UNIQUE_NAME的設立,可能會導致listener.ora中的配置和一般的不一樣,也就是裡面的服務名和oracle_sid 不一定是一樣的,這點要注意,如果不一樣,也需要改動太多,只要將對面的資料庫(主庫或者備庫)中的tnsnames.ora中的service_name改成一樣就可以了,儘量不要修改太多。


本 文件 已經經過3次驗證,沒有問題,如果有錯誤,一定要仔細看看引數是否正確,配置是否一致,NET部分是否支援相互正常登入。再三提醒,本文件中的引數,只適合DG最大保護模式,其他模式,可能需要更改.

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

相關文章