RMAN DUPLICATE建立DataGuard物理備庫

us_yunleiwang發表於2013-12-04

Oracle推薦使用rman來建立物理備庫,可以在不影響主庫的情況下,輕鬆完成物理備庫的建立。

這裡只記敘物理備庫與主庫位於不用的主機,並且資料庫的目錄結構一致的情況,這應該也是Dataguard環境比較常見的部署方式,這種方式也比較簡單。

系統執行環境為windows 2003 server 64bits + oracle 10g 10.2.0.4 64bits。

一、建立物理備庫例項(物理備庫端)

1、安裝oracle 10g

只安裝軟體,不建立資料庫。

2、建立例項

CMD>oradim -new -sid orcl
此處指定的例項名為orcl,同時會建立系統服務OracleServiceorcl和OracleJobSchedulerorcl

3、建立standby的初始化引數檔案

從主庫建立pfile根據物理備庫的實際情況進行相應修改即可

主庫端執行:
SQL>create pfile='d:\INITorcl.ora' from spfile;

將生成的INITorcl.ora複製到物理備機的$ORACLE_HOME/database目錄下,並做相應修改,參見

然後透過針對standby修改的INITorcl.ora為物理備庫生成spfile

備庫端執行:
CMD>sqlplus / as sysdba;
SQL>create spfile from pfile; //也可以指定pfile的詳細位置pfile='/path/to/pfile',此處使用的預設位置和預設檔名

4、建立物理備庫

備庫必須透過Oracle NEt並以SYSDBA許可權訪問,因此密碼檔案是必須的,因為不能使用OS認證。

備庫端執行:
CMD>orapwd file=PWDorcl.ora password=yourpasswd
這會在備庫的$ORACLE_HOME/database目錄下生成密碼檔案PWDorcl.ora

5、啟動備庫到nomount

備庫端:
CMD>sqlplus / as sysdba;
SQL>startup nomount
因為此時尚沒有控制檔案和資料檔案,因此只能啟動到nomount狀態

這是可能會有錯誤提示:
ORA-02778: Name given for the log directory is invalid
這是因為dump檔案儲存路徑尚未建立,根據你引數檔案的設定建立相關的dump路徑,這裡建立了這幾個路徑
E:\oracle\product\10.2.0\admin\orcl\{adump,bdump,cdump,udump}

然後再執行
SQL>startup nomount
還有可能會有錯誤提示:
ORA-01261: Parameter db_recovery_file_dest destination string cannot be translated
ORA-01263: Name given for file destination directory is invalid
OSD-04018: Unable to access the specified directory or device.
O/S-Error: (OS 2) 系統找不到指定的檔案。
這是因為引數db_recovery_file_dest指向的路徑沒有建立起來,這裡根據引數檔案建立目錄
E:\oracle\product\10.2.0\flash_recovery_area

6、配置監聽檔案,建立監聽服務
可以從主庫複製$ORACLE_HOME/NETWORK/ADMIN/目錄下的檔案tnsname.ora,listener.ora,sqlnet.ora到備庫相同的位置,並作相應的修改,特別要注意主機名部分。
只安裝預設沒有建立監聽服務,lsnrctl命令可以在沒有監聽服務時自動建立監聽服務

備庫端:
CMD>lsnrctl
LSNRCTL> status
Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
TNS-12541: TNS:no listener
TNS-12560: TNS:protocol adapter error
TNS-00511: No listener
64-bit Windows Error: 61: Unknown error
啟動監聽:
LSNRCTL> start
Starting tnslsnr: please wait...

Failed to open service , error 1060.
TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Production
Log messages written to E:\oracle\product\10.2.0\db_1\network\log\listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localdb)(PORT=1521)))

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for 64-bit Windows: Version 10.2.0.4.0 - Production
Start Date 07-AUG-2012 15:32:42
Uptime 0 days 0 hr. 0 min. 7 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Log File E:\oracle\product\10.2.0\db_1\network\log\listener.log
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localdb)(PORT=1521)))
The listener supports no services
The command completed successfully
這樣會建立起tns監聽系統服務OracleOraDb10g_home1TNSListener

二、RMAN全備主庫併為備庫生成控制檔案

1、對主庫執行全備份
RMAN正常全備主庫,可以使用也可以不使用恢復目錄,最重要一點,在物理備庫上要可以以相同的路徑訪問到主庫的全備份。可以在備庫上建立相同的備份檔案存放路徑,然後透過ftp等方式將主庫全備份複製至備庫主機相同位置。也可以使用NFS等網路路徑,這樣可以避免在主備庫之間複製全備份。

2、建立物理備庫控制檔案

有多種方式為物理備庫生成控制檔案。

  • 備份主庫時同時為備庫生成控制檔案

    透過使用INCLUDE CURRENT CONTROLFILE FOR STANDBY語句,可以在備份集中生成備庫的控制檔案,類似如下:

    RMAN>BACKUP DATABASE FORMAT 'D:\RMAN\bak_%U'
    INCLUDE CURRENT CONTROLFILE FOR STANDBY
    PLUS ARCHIVELOG FORMAT 'D:\RMAN\ARC_%U';

  • 使用RMAN COPY命令

    RMAN>COPY CURRENT CONTROLFILE FOR STANDBY TO 'D:\RMAN\sby_control01.ctl';

  • 使用alter database語句

    sqlplus登入主庫端執行
    SQL>alter database create standby controlfile as 'd:\rman\control01.ctl';
    然後rman連線target(主庫)和恢復目錄, 如果使用的話,然後執行

    RMAN>CATALOG CONTROLFILECOPY 'd:\rman\control01.ctl';
    這樣RMAN就知道去那裡找物理備庫的控制檔案了。

三、建立物理備庫

1、用RMAN連線主庫、物理備庫和恢復目錄,使用target關鍵字連線主庫,使用auxiliary關鍵字連線待建立的物理備庫,catalog關鍵字連線恢復目錄資料庫
$ rman target sys/passwd@primarydb auxiliary sys/passwd@standbydb catalog user/passwd@catalogdb
然後執行
rman>duplicate target database for standby nofilenamecheck;
因為是異機相同目錄結構複製到備庫,所以必須指定引數nofilenamecheck,不然rman會暈菜。這裡也沒有指定dorecover選項,不進行日誌恢復,物理備庫建立完成後開啟日誌恢復自然就可以同步到主庫一致的狀態了。

備庫建立完成後rman將其置於mounted狀態。

2、建立備庫時並不會將主庫的online redo log files和standby redo log files複製到備庫,但是控制檔案中包含了這些資訊。

"因為在備份前主庫建立了standby redo log,備庫是根據主庫的資訊建立的,一開始它是包含了主庫的standby redo log資訊,如果主庫設定的日誌傳送方式是LGWR,當主庫發生日誌切換時,備庫的RFS會嘗試使用standby redo log來儲存主庫傳送過來的日誌,因為此時備庫實際上是不存在standby redo log的,所以備庫會報錯。當備庫嘗試開啟字典資訊的所有standby redo log失敗以後,備庫會自動把日誌傳送方式轉為ARCN,並同時清除資料字典中的standby redo log資訊。"參見DG使用中遇到的幾個錯誤

因此如果需要開啟實時redo apply的話,需要手動提前,如下:
備庫端:
SQL>alter database add standby logfile group 4 ('E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\STDBYREDO01.LOG') size 50M;
Database altered.
SQL>alter database add standby logfile group 5 ('E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\STDBYREDO02.LOG') size 50M;
Database altered.
SQL>alter database add standby logfile group 6 ('E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\STDBYREDO03.LOG') size 50M;
Database altered.
SQL>alter database add standby logfile group 7 ('E:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\STDBYREDO04.LOG') size 50M;
Database altered.

然後就可以開啟realtime redo apply了,如下開啟實時日誌應用:
備庫端:
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

3、此時會後臺日志檔案中會報如下錯誤

ORA-19527: physical standby redo log must be renamed

物理standby並不需要線上redo日誌,因為其並不以讀寫方式開啟。但當物理standby要switch over成為主庫時是必須要使用線上redo log的,在switch over之前,oracle會清除online redo log檔案,為了加快switch over進度,oracle會在開啟日誌應用之時提前將物理standby的online redo log檔案clear。oracle為了防止意外清除了主庫的online redo log檔案,即使物理standby與主庫不在同一臺主機上,只要其路徑相同則必須明確的設定log_file_name_convert引數,這樣才能避免此錯誤提示。
因此可以透過alter system set log_file_name_convert更改此引數設定或者在備庫初始化檔案中新增此引數並重新生成spfile啟動資料庫

pfile中新增:
*.log_file_name_convert='E:\oracle\product\10.2.0\oradata\orcl\redo01.log','E:\oracle\product\10.2.0\oradata\orcl\redo01.log','E:\oracle\product\10.2.0\oradata\orcl\redo02.log','E:\oracle\product\10.2.0\oradata\orcl\redo02.log','E:\oracle\product\10.2.0\oradata\orcl\redo03.log','E:\oracle\product\10.2.0\oradata\orcl\redo03.log'

4、檢查下兩邊的日誌同步情況
SQL>select sequence# from $archived_log where applied='YES';

物理備庫建立完成。

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

相關文章