Networker 8.2異機恢復Oracle 11g RAC集群環境
本文是一篇遲來的博文,寫這篇博文源於近日在整理技術筆記時,看到2年前寫的EMC Networker 8.1異機恢復Oracle 11gR2數據庫的操作筆記(測試的是假如生產數據庫服務器崩潰宕機,而將備份數據恢復到備用數據庫服務器)。雖然去年EMC就已推出了Networker 9,但本文可能多少還有一點參考價值,便稍加整理后發了出來。
一、測試環境
計算機名 |
IP地址 |
操作系統 |
角色 |
安裝軟件 |
Bakserver |
172.16.3.18 |
RedHat 6 |
備份服務器 |
EMC Networker 8.2.2 |
dm01db01 |
RedHat 5 |
生產數據庫服務器(源數據庫) |
Oracle 11g R2、 lgtoclnt-8.2.2-1.x86_64.rpm(Networker客戶端) lgtonmda-8.2.2-1.x86_64.rpm (Networker數據庫模塊) |
|
oracletesta |
172.16.0.69 |
RedHat 6 |
測試數據庫服務器(目標數據庫) |
Oracle 11g R2、 lgtoclnt-8.2.2-1.x86_64.rpm(Networker客戶端) lgtonmda-8.2.2-1.x86_64.rpm (Networker數據庫模塊) |
注:測試數據庫服務器的Oracle版本、實例名、Oracle相關目錄、創建數據庫時ASM路徑及權限必須和生產數據庫服務器一致。
二、測試數據庫服務器准備
1、安裝配置Oracle數據庫,其中版本、實例名、相關目錄及權限均需要和生產數據庫服務器一致,這部分操作不是本文重點故略過。
2、安裝Networker客戶端及數據庫模塊,版本需與生產數據庫服務器一致。
(1)解壓networker客戶端安裝包配置好yum源並生成緩存,解決安裝包依賴問題。
(2)安裝Networker客戶端
(3)如果恢復數據量較大最好使用SAN存儲網絡恢復,需要安裝存儲節點客戶端。
(4)啟動Networker客戶端
(5)解壓NMDA8.2.2數據庫模塊安裝包
(6)安裝NMDA8.2.2數據庫模塊
3、鏈接庫文件,切換到oracle用戶進入到/$ORACLE_HOME/lib/,然后執行以下命令:
ln –s /usr/lib/libnsrora.so libobk.so
切換root用戶 nsrorara -i oracle 模塊啟用
4、確保歸檔已開啟
[oracle@oracletesta ~]$ sqlplus / as sysdba
SQL>archive log list;
Database log mode Archive Mode
Automatic archival Enabled
Archive destination /oradata/arch
Oldest online log sequence 363
Next log sequence to archive 365
Current log sequence 365
5、打開控制文件自動備份
[oracle@oracletesta ~]$rman target /
RMAN> configure controlfile autobackup on;
RMAN> configure controlfile autobackup format for device type 'sbt_tape' to '/NMDA_%F/'
6、做好hosts解析,確保備份服務器、目標數據庫服務器之間能互相解析。
7、創建SAN網絡存儲節點(這里省略具體步驟)
(1)首先配置SAN網絡交換機,將虛擬帶庫或者物理帶庫,設備光口和主機HBA卡光口划zone
(2) 再到虛擬帶庫添加主機連接信息並分配驅動器
(3)最后在Networker 創建存儲節點,並掃描設備
(4)配置在Networker 庫管理重新配置庫,勾選分配的驅動器並啟動配置
8、在Networker控制台操作,新客戶端向導
(1)輸入客戶端名稱,並按默認選擇傳統客戶端
(2)點擊選擇Oracle
(3)選擇目標池為Data Domain存儲中的池
(4)按默認選擇第一項
(5)填寫相關目錄路徑,以及用戶名、實例名(按照Oracle用戶環境變量填寫)
(6)選擇瀏覽策略和保留策略,以及遠程訪問標識*@*
(7)選擇添加到的組,默認已經勾選了default組,記得要去掉勾選。此處是要備份時才需要,我們現在只是為了恢復數據庫而創建客戶端,並不是要添加進組中進行備份,所以后面創建完客戶端后需要從組中刪除此客戶端
(8)選擇創建的SAN存儲節點
(9)這樣就完成了客戶端的創建,可以恢復數據了。
三、異機恢復過程
1、通過Networker查詢存儲集,確認要恢復的日期,例如從DataDomain存儲中恢復6月14號的備份數據
2、找到上圖框處選中的這個存儲集,記下這個存儲集的名稱
3、數據庫的恢復操作必須在測試數據庫服務器(即目標機)上進行,需要使用RMAN命令進行恢復
(1)創建臨時參數文件pfile,並啟動數據庫到nomount模式(因為是RAC集群環境,必須將另一個節點數據也關閉)
[oracle@oracletesta ~]$ sqlplus / as sysdba
SQL*Plus: Release 11.2.0.4.0 Production on Tue Nov 2514:18:59 2014
Copyright (c) 1982, 2013, Oracle. All rights reserved.
SQL> shutdown immediate
ORA-01109: database not open
查看原spfile路徑
SQL>show parameter spfile;
SQL>'/u01/app/oracle/product/11.2.04/db_1/dbs/spfilePROD1.ora'
SQL>create spfile from pfile;
SQL>create pfile='/u01/app/oracle/product/11.2.04/db_1/dbs/ma.ora' from spfile;
File created.
SQL>startup nomount pfile='/u01/app/oracle/product/11.2.04/db_1/dbs/ma.ora';
ORACLE instance started.
Total System Global Area 1603411968 bytes
Fixed Size 2253664 bytes
Variable Size 1006636192 bytes
Database Buffers 587202560 bytes
Redo Buffers 7319552 bytes
(2)查出源數據庫dm01db01的DBID,(存儲集名稱中間NMDA_c-xxxxxxxxx9位數字就是DBid)然后將目標數據庫的DBID設置和源數據庫的DBID一樣
[oracle@oracletesta ~]$ rman target /
Recovery Manager:Release 11.2.0.4.0 - Production on Wed Nov 19 14:49:36 2014
Copyright (c)1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected totarget database: MA (not mounted)
RMAN> set dbid=298958524;
executing command: SET DBID
(3)使用RMAN腳本恢復spfile
RMAN> RUN {
2> ALLOCATE CHANNEL CH1 TYPE 'SBT_TAPE';
3> send 'NSR_ENV=(NSR_SERVER=bakserver, NSR_CLIENT=dm01db01.chinacoal.com)';
4> restore spfile to '/u01/app/oracle/product/11.2.04/db_1/dbs/spfilePROD1.ora' from '/NMDA_c-298958524-20190614-00/';
5> }
執行RMAN腳本后輸出如下,可以看到spfile文件已成功恢復:
allocated channel: s1
channel CH1: SID=63 device type=SBT_TAPE
channel CH1: NMDA Oracle v8.2.2
sent command to channel: CH1
Starting restore
channel CH1: restoring spfile from AUTOBACKUP /NMDA_c-298958524-20190614-00/
channel CH1: SPFILE restore from AUTOBACKUPcomplete
退出rman,使用剛剛恢復的參數文件,啟動到nomount模式
[oracle@oracletesta ~]$ sqlplus / as sysdba
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount
(4)使用RMAN腳本恢復controlfile
RMAN> RUN {
2> ALLOCATE CHANNEL CH1 TYPE 'SBT_TAPE';
3> send 'NSR_ENV=(NSR_SERVER=bakserver, NSR_CLIENT=dm01db01)';
4> restore controlfile from '/NMDA_c-298958524-20190614-00/';
5> }
執行RMAN腳本后輸出如下,可以看到控制文件已成功恢復:
allocated channel: CH1
channel CH1: SID=63 device type=SBT_TAPE
channel CH1: NMDA Oracle v8.2.2
sent command to channel: CH1
Starting restore at 27-NOV-14
channel CH1: restoring control file
channel CH1: restore complete, elapsed time:00:00:07
output filename=/database/dbdata/ma/control01.ctl
output filename=/database/system/fast_recovery_area/ma/control02.ctl
(5)mount數據庫
RMAN>alter database mount;
sql statement: alter database mount
(6)通過RMAN腳本還原數據文件,不需要指定時間點,RMAN會根據控制文件的記錄去找
執行RMAN腳本后輸出如下,可以看到數據文件已經成功restore,並開始recover
執行RMAN腳本后這時會提示報錯找不到一個序列號為xxxx的歸檔,這是因為Oracle不會自動截斷日志,會不斷要求找下一個歸檔日志,因此需要在RMAN腳本中指定截斷
(8)在recover腳本中添加until sequence 96772,再次使用RMAN腳本recover數據庫
這次就recover成功了
(9)打開數據庫,並resetlogs,這個報錯是,數據庫是以完整方式恢復,不需要resetlogs
RMAN> exit
RecoveryManager complete.
[oracle@oracletesta dbs]$ sqlplus / as sysdba
SQL> alter database openresetlogs;
ERROR at line 1:
ORA-01139: RESETLOGS option only valid after an incomplete database recovery
SQL> alter database open;
Database altered.
(10)啟動監聽
[oracle@oracletesta dbs]$ lsnrctl
LSNRCTL for Linux: Version 11.2.0.4.0 - Production on 14-JUN-2019 18:37:17
Copyright (c) 1991, 2013, Oracle. All rights reserved.
Welcome to LSNRCTL, type "help" for information.
LSNRCTL> start
(11)至此,數據庫已完成異機恢復,剩余的工作便是測試數據是否完整、正常,更改應用系統的數據庫連接地址進行驗證等。