記錄一次Oracle 11.2.0.4 RAC異地恢復到單例項
此次記錄一下Oracle RAC叢集備份異地單例項恢復操作。主要記錄關鍵操作,由於保密原因不貼上詳細操作流程。
一、環境:
原庫:
作業系統:Redhat 6.5
資料庫:Oracle 11.2.0.4 RAC (雙節點)
工具:rman
IP地址:192.168.10.10(節點1)
異地恢復庫:
作業系統:Centos 6.5
資料庫:Oracle 11.2.0.4 (單例項)
工具:rman
IP地址:192.168.10.123
二、操作
1.原庫兩個節點全部停止應用服務,停掉監聽,防止再有連線進來進行操作。然後在一個節點(192.168.10.10)使用 rman工具進行整庫備份,在執行備份前手動歸檔一次,主要備份資料庫、歸檔檔案、控制檔案。至於spfile引數檔案可以不用備份,因為RAC環境的引數檔案到單例項上還是需要修改很多地方的,可以在原庫使用命令 create pfile=’/home/oracle/orclint.ora’ from spfile 生成pfile檔案。
2.將備份後的資料庫、歸檔、控制檔案以及生成的pfile檔案使用scp遠端複製到192.168.10.123(異地庫),放在了/data/rmanbackup目錄下
3.192.168.10.123(異地庫)已經安裝了Oracle 11.2.0.4軟體,並未建庫。設定環境變數,尤其是ORACLE_SID與192.168.10.10(原庫)叢集環境一致,便於恢復操作。
4.根據傳過來的pfile檔案裡的內容進行修改,我大致列一下修改後的引數檔案:
*.audit_file_dest='/u01/app/oracle/admin/hkrt/adump' *.audit_trail='db' *.compatible='11.2.0.4.0' *.control_files='/u01/app/oracle/oradata/hkrt/control01.dbf','/u01/app/oracle/oradata/hkrt/control02.dbf' *.db_block_size=8192 *.db_domain='' *.db_name='ORCL' *.diagnostic_dest='/u01/app/oracle' *.dispatchers='(PROTOCOL=TCP) (SERVICE=hkrtXDB)' *.log_archive_dest_1='LOCATION=/u01/arch' *.log_archive_format='%t_%s_%r.dbf' *.memory_target=5034213376 *.open_cursors=300 *.processes=400
5.引數檔案修改完後剩下的操作基本都在異地庫了,sqlplus進入空例項,然後根據修改後的pfile進行啟動到nomount狀態(注意:引數檔案中的記憶體配置、程式數配置要符合異地庫記憶體,不然記憶體溢位,啟動失敗)。
參考命令:
startup nomount from pfile=’/data/rmanbackup/orclinit.ora’;
(由於是測試,所有並沒有備份密碼檔案,可以在資料庫恢復後重置使用者密碼)
6.講資料庫啟動到nomount狀態,登陸rman (rman target /),就可以看到資料庫狀態為nomount狀態。然後進行控制檔案的恢復,參考命令:
restore controlfile from ‘/data/rmanbackup//ctl_ORCL_20150830_6552_1’;
執行完控制檔案還原操作後,控制檔案會恢復到引數檔案中指定的目錄下
7.控制檔案恢復後就可以啟動到mount狀態了,
RMAN> alter database mount;
啟動到mount狀態先彆著急恢復資料庫,需要先將備份集註冊到rman中
RMAN> catalog start with ‘/data/rmanbackup’;
(路徑就是你存放所有備份的目錄)
註冊完成後,先交叉校驗備份集:
RMAN> crosscheck backupset;
刪除過期的備份,因為你備份是異地備份,所以在RAC中記錄的備份全部過期,進行清除
RMAN> delete expired backup;
8.現在開始恢復資料庫檔案,因為RAC資料庫資料檔案、日誌檔案等儲存路徑時在ASM磁碟中,路徑基本是以 ‘+DATA’ 開頭,在執行restore database 命令前需要進行檔案路徑轉換。
先在原庫上生成關於資料檔案路徑轉換的指令碼,便於恢復操作,指令碼如下(在原庫查詢得出指令碼):
select 'set newname for datafile ' || a.FILE# || ' to "' || a.NAME || '";' from v$datafile a union all select 'set newname for tempfile ' || a.FILE# || ' to "' || a.NAME || '";' from v$tempfile a;
得到結果為:
SETNEWNAMEFORDATAFILE'||A.FILE#||'TO"'||A.NAME||'";'--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------set newname for datafile 1 to "+DATA/jmrac/datafile/system.268.877470209";set newname for datafile 2 to "+DATA/jmrac/datafile/sysaux.269.877470211";set newname for datafile 3 to "+DATA/jmrac/datafile/undotbs1.270.877470213";set newname for datafile 4 to "+DATA/jmrac/datafile/users.271.877470213";set newname for datafile 5 to "+DATA/jmrac/datafile/example.279.877470401";set newname for datafile 6 to "+DATA/jmrac/datafile/undotbs2.280.877470779";set newname for tempfile 1 to "+DATA/jmrac/tempfile/temp.278.877470381";。。。。。。。。
會將所有涉及到的資料檔案全部顯示,我這裡就簡單寫個大概,得到以上指令碼後進行簡單的編輯:
run{allocate channel ch1 device type disk;set newname for datafile 1 to "+DATA/jmrac/datafile/system.268.877470209";set newname for datafile 2 to "+DATA/jmrac/datafile/sysaux.269.877470211";set newname for datafile 3 to "+DATA/jmrac/datafile/undotbs1.270.877470213";set newname for datafile 4 to "+DATA/jmrac/datafile/users.271.877470213";set newname for datafile 5 to "+DATA/jmrac/datafile/example.279.877470401";set newname for datafile 6 to "+DATA/jmrac/datafile/undotbs2.280.877470779";set newname for tempfile 1 to "+DATA/jmrac/tempfile/temp.278.877470381";。。。。。。。。 restore database;switch datafile all;switch tempfile all;}
然後就可以在rman中執行以上修改好的 run 塊(指令碼)進行資料庫恢復。此處我並沒有生成關於redo日誌的轉換語句,因為我在講redo日誌轉換放到 run指令碼塊中執行總會提示 +DATA開頭的路徑不存在,所以就省略了redo,但是我發現資料庫恢復並未受影響,而且在恢復後redo日誌路徑已經轉換了。
9.在執行以上 run 指令碼命令後,會提示報錯:
RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of restore command at 03/25/2015 09:56:55RMAN-06026: some targets not found - aborting restore RMAN-06023: no backup or copy of datafile 4 found to restore RMAN-06023: no backup or copy of datafile 3 found to restore RMAN-06023: no backup or copy of datafile 2 found to restore RMAN-06023: no backup or copy of datafile 1 found to restore
其實所有的備份都在,就是報這個錯,然後檢視資料,需要進行一下操作:
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
1 1 JBDB 1285701182 PARENT 1 15-AUG-09
2 2 JBDB 1285701182 PARENT 945184 12-JUL-13
然後又在原庫上做同樣的查詢:
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
1 1 JBDB 1285701182 PARENT 1 15-AUG-09
2 2 JBDB 1285701182 PARENT 945184 12-JUL-13
然後在異地庫重置 incarnation 為2:
RMAN> reset database to incarnation 2;
執行後再次執行 run 指令碼塊:
RMAN> run{ allocate channel ch1 device type disk; set newname for datafile 1 to "+DATA/jmrac/datafile/system.268.877470209"; set newname for datafile 2 to "+DATA/jmrac/datafile/sysaux.269.877470211"; set newname for datafile 3 to "+DATA/jmrac/datafile/undotbs1.270.877470213"; set newname for datafile 4 to "+DATA/jmrac/datafile/users.271.877470213"; set newname for datafile 5 to "+DATA/jmrac/datafile/example.279.877470401"; set newname for datafile 6 to "+DATA/jmrac/datafile/undotbs2.280.877470779"; set newname for tempfile 1 to "+DATA/jmrac/tempfile/temp.278.877470381"; 。。。。。。。。 restore database;switch datafile all;switch tempfile all;}
執行正常進行,恢復沒有出現問題。
10.資料庫檔案恢復後,執行recover database會報錯,提示缺少歸檔檔案:
RMAN> recover database; Starting recover at using channel ORA_DISK_1 starting media recovery RMAN-00571: ===========================================================RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============RMAN-00571: ===========================================================RMAN-03002: failure of recover command at RMAN-06053: unable to perform media recovery because of missing log RMAN-06025: no backup of archived log for thread 1 with sequence 71125 and starting SCN of 16888076231found to restore
兩種方式:
一是在原庫找到歸檔檔案然後傳到異地庫伺服器,註冊歸檔資訊,然後再次recover恢復資料庫,前提是歸檔檔案能找到。
註冊歸檔資訊(歸檔檔案為 arch_71125_xxxx):
RMAN> catalog archivelog ‘/data/rmanbackup/arch_71125_xxxx’;
RMAN> recover database;
(恢復時提示找不到一個unknow的歸檔,不影響恢復)
二是按照提示的scn進行不完全恢復:
RAMN> run{
set until scn 16888076231;
recover database;
}
因為我歸檔檔案並未找到,所以是第二種方式。
11.恢復完成後登陸資料庫然後開啟資料庫(resetlogs方式):
SQL> alter database open resetlogs;
Database altered.
至此恢復完成。生產環境在恢復成功後一定要重新進行備份。
以上是大概的操作過程,僅供參考,在生產環境執行時一定要慎之又慎,做好資料備份,如果有不同情況,也歡迎評論交流,共同學習。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30484956/viewspace-2688280/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- rac恢復到單例項單例
- ORACLE 11.2.0.4 RAC RMAN異機恢復之ORA-15001Oracle
- Networker恢復oracle rac到單機Oracle
- 從nub備份恢復(同平臺)恢復RAC至單例項單例
- RAC恢復到單機
- Oracle 11g RAC到單例項OGG同步Oracle單例
- oracle rac 11.2.0.3 升級到11.2.0.4Oracle
- oracle資料庫跨平臺(AIX)從RAC恢復至(linux)下的單例項Oracle資料庫AILinux單例
- 將RAC備份集恢復為單例項資料庫單例資料庫
- DG:11.2.0.4 RAC線上duplicate恢復DG
- Oracle Linux 6.7中 Oracle 11.2.0.4 RAC叢集CRS異常處理OracleLinux
- oracle 異機恢復Oracle
- ORACLE 11.2.0.4 rac for linux 鏈路宕導致的單節點異常當機OracleLinux
- ORACLE事務和例項恢復過程梳理Oracle
- oracle 11.2.0.4 rac節點異常當機之ORA-07445Oracle
- 透過搭建恢復目錄實現RMAN異地備份和恢復
- 使用DBUA升級 Oracle 11.2.0.4到Oracle 19C的問題記錄Oracle
- RAC+DG(asm單例項)ASM單例
- 通過rman為客戶實現linux下oracle11.2.0.4到windows下oracle同版本資料庫的異機恢復。LinuxOracleWindows資料庫
- 一次難忘的協助解決Oracle RAC恢復過程Oracle
- Oracle:Oracle RAC 11.2.0.4 升級為 19cOracle
- oracle rac 單個例項不能生成awr報告的問題Oracle
- ORA-29702複製RAC Oracle軟體啟動單例項Oracle單例
- Solaris下Oracle RAC 11.2.0.4 安裝方法Oracle
- ORACLE 資料庫11.2.0.4 單例項伺服器IO等待高問題分析Oracle資料庫單例伺服器
- 記一次刪庫到資料恢復資料恢復
- Oracle 例項和RAC叢集下資料庫日誌目錄合集Oracle資料庫
- 兩篇oracle異機恢復文章Oracle
- 【資料庫資料恢復】Oracle ASM例項無法掛載的資料恢復案例資料庫資料恢復OracleASM
- RAC+單例項DG的切換單例
- 記一次Oracle RAC for aix 儲存雙控鎖盤導致ASM控制檔案損壞恢復OracleAIASM
- Oracle 資料庫巡檢指令碼 單例項 RAC 輸出HTML格式Oracle資料庫指令碼單例HTML
- 記一次oracle 19c RAC叢集重啟單節點DB啟動異常(二)Oracle
- Oracle搭建rac到單庫的adgOracle
- oracle 11.2.0.4 rac叢集等待事件enq: TM - contentionOracle事件ENQ
- Oracle asm磁碟損壞異常恢復OracleASM
- 記一次從刪庫到恢復的經歷
- RAC安裝目錄許可權快速恢復