2011年8月9日 星期二

第二十回 RMAN Restore 及 BRRESTORE 筆記

最近記性愈來愈差,做過的事,大約過一個月就不記得了,昨天分別用 RMAN 及 BRRESTORE 還原 SAP 的資料庫,趕緊筆記一下。

我這台 AIX 5.3 上面安裝SAP Netweaver 使用的備份是 EMC Networker 這套備份軟體,安裝了 LGTO 的 Agent 及 SAP Module.

# lslpp -l|grep LG
LGTOnmsap.rte 3.5.0.0 COMMITTED EMC NetWorker Module for SAP
LGTOnw.clnt.rte 7.4.1.0 COMMITTED NetWorker Client

如果要做異機還原時,需要在異機安裝上述的 Package ,如果作業系統是用 mksysb Backup/Restore ,就不需再安裝,如果是全新安裝的 Oracle ,就必需安裝,我測試過,可以在只有安裝 Oracle Database 的環境下,將 SAP 的備份還原。

另外 SAP 環境是否能使用 RMAN 還原,備份的方法是關鍵,如果是在 TSM 之下,小弟之前設定的案例都是使用 dd ,這是一種 hot backup 的方式,此時就只能用 brrestore 來還原,只能說透過 RMAN 呼叫時,在還原時又增加了一些靈活度。

務必記得安裝過 Oracle Agent 後, Link Library 是絕對必須的,10G 後做這個動作好像不需重啟資料庫,不過反正這是異機測試機,我還是重啟了。

在下列 Folder 必須存在這個 Link
# pwd
$ORACLE_HOME/lib

#ls -al libobk.a
lrwxrwxrwx 1 oracle dba 22 Feb 17 2009 libobk.a -> /usr/lib/libnworasap.a

另外要異機還原,必須要將 Netwoker 上的 Client 允許其他機器 Restore Backup Set 的權限開啟,另為要被 Restore 的 Node 必須記得在 Networker 上建立 Client 註冊的資訊。

如果順利的話,這時就能使用 RMAN 來還原了

如果 spfile 及 pfile 沒帶過來,可以先使用 startup mount force ,強制啟動資料庫,然後去原資料庫查詢 DBID ,之後還原 Control File ,這邊我是用原機下 Alter database backup 產生的,因為我懶得等磁帶找來找去的。

因為你必須事先查出 controlfile piece 在哪,如果 catalog 還在,當然找的到,如果一個都沒有,頭就比較大了。知道 Backup piece 名字時 Restore Control File 的指令如下。

run{
allocate channel c1 type 'sbt_tape' parms 'ENV=(NSR_SERVER=XXXbkpnn , NSR_CLIENT=xxxsapp3)';
restore controlfile to '/tmp/controlfile.bak' from 'P03_begnclcm.11862_1';release channel c1;
}

Control File 還原後,即可啟動資料庫至 Mount,不過還是先將原機的 SPFILE 備份過來後改為 INIT File ,修改一下相關的 PATH ,再重新啟動資料庫。開始 Restore Datafile

因為這是一個 Netweaver 的平台,所以 Datafile 的 Layout 和正統 R/3 不同,而我因為是做 SAP 單純還原至 Oracle ,所以有些 Folder Name 被我變更了,所公必須下 set newname 變更。

run{
allocate channel c1 type 'sbt_tape' parms 'ENV=(NSR_SERVER=XXXbkpnn , NSR_CLIENT=xxxsapp3)';
set newname for DATAFILE 1 to '/oradata1/P03/system_1/system.data1' ;
set newname for DATAFILE 2 to '/oradata1/P03/undo_1/undo.data1';
set newname for DATAFILE 3 to '/oradata1/P03/sysaux_1/sysaux.data1';
set newname for DATAFILE 4 to '/oradata1/P03/saux_1/saux.data1';
set newname for DATAFILE 5 to '/oradata1/P03/sr3db_1/sr3db.data1';
set newname for DATAFILE 6 to '/oradata1/P03/sr3db_2/sr3db.data2';
set newname for DATAFILE 7 to '/oradata1/P03/sr3db_3/sr3db.data3';
restore database;
release channel c1;
}

接下來我去 SAP Backup Log 查了需要的 Archive Log Range 為 4199 至 4246,依下列指令還原 Archive Log

run{
allocate channel c1 type 'sbt_tape' parms 'ENV=(NSR_SERVER=XXXbkpnn , NSR_CLIENT=xxxsapp3)';
RESTORE ARCHIVELOG FROM SEQ 4199 UNTIL SEQ 4246;
release channel c1;
}

到此為止,應該可以啟動資料庫了吧,結果上面兩個還原沒一個成功

理論上是 OK 的,但在 Networker 這個產品之下,我們的 Resource 不足,只有兩個 Driver ,同時運行了 D2D2T ,而 Netwoker 在做 Data Staging 時,Source 和 Target 兩份資料都會鎖住不讓你存取,所以我下了兩個 RMAN 的指令,經過漫常的等待,完全沒有回應,直到 Data Staging 做完後,終於開始從磁帶讀到資料了。

但是,有部份資料需要換帶,結果 Driver 在換帶過程又被別人搶去用了,以我所知,NBU 可以在 JOB 上設定 Priority ,TSM 的 Restore JOB Priority 是最高的,所以不太會有這類狀況發生。

我花了一天的時間,倒不回這個 Netweaver 30G 的資料,後來心想,才 30G ,幹麼不直接備份下來到 Networker 後,趁他未做 Data Staging 時趕緊 Restore ,不就直接還原了嗎?

結果我重做了一次備份,不到半小時,就將資料庫 Clone 一份出來了,真不知浪費一天時間在幹麼?

另一個小插曲,熟 Oracle 的人可能會問:「為何不用 alter database begin backup ,然後用 Hot Copy 就好了?」

因為這一個 Database 是 SAP ,當初 SAP 初始安裝會設定一個參數 filesystemio_options ,請看 這邊有解釋,而我並未去調整為asynch ( Oracle Default) 所以在此條件下, Hot Backup 是不允許的,只能經由 RMAN 操作這個資料庫。

最後調整完成後,我也覺得很煩,還是乾脆將原機 OS 備份下來後,還原至另一台,改用 brrestore 來做。

假設相關參數檔都在的狀況下,只需 Restore Control file , Data File 及 Archive Log File ,所以只需下三個指令

brrestore -m 0 <-- 還原 Control File ,他會依照 Init File 內定義的 Control File 位置進行複蓋的動作。

上述指令完成後,啟動資料庫至 Mount ,才能繼續下列動作。

brrestore -m full <-- 還原 Datafile ,此指令會直接還原最後一份備份成功的資料
brrestore -b bcnmhluz.aft -m full <-- 假設你知道要還原的 Backup Log 的 File Name ,可以使用 -b 參數指定, brrestore 會找出這份 Backup Set ,並還原回來。


brrestore -a 4199-4246 還原 archive log 中 sequence 為 4199 ~ 4246 的 Log File

如果相關參數檔都不在的話,就比較麻煩,還是使用原來 RMAN 的方式來做比較方便,由 Oracle 幫你找,不過前題是你倒的出 Control File ,能抓到最後一份 Catalog 。

brrestore 的方法至少要有 SAP 存在於 oracle 目錄下的 sapbackup 及 saparch 這兩個 folder 的相關檔案資訊(summary log 及 backup log) ,還有 Oracle HOME 目錄中 dbs 下的 init[Instance Name].sap 及init[Instance Name].utl 這些檔案才能無誤的運作,當然這些東西是可以用 brrestore 倒出來的,不過等我下次有機會做後再上來補完。這些動作之前也常作,不過不是很清楚了。

SAP help 裏的作法是如此的,有機會再來做一次,因為白天我們的 Networker 都在做 Staging ,又沒機會試了。

我只記得 sapdba 實在是比現在的 brtools 好用多了,不知 SAP 在想什麼。

2012/0622 實際操作了一次 Windows 下的 Brrestore ,狀態跟 UNIX 下的不太一樣,好像在過程中的 Log 是不會作動的。可能要 Restore 完成才會有 Log ,不過也可能跟使用的  Backup API 有關,等 Restore 完成再來確認。