Rman_異地、跨平臺、跨版本的恢復總結及案例
結論:
1. Rman可以跨平臺,網上有資料基於ID 413586.1(metalink上有),但是還是少用rman來進行跨平臺操作。
2. Rman可以跨版本,但是一般只能從低到高,且要執行catupgrd.sql。不能從高到低,唯一成功的是低版本升級到高版本後備份可以恢復到同樣的低版本
跨平臺的例項:
Solaris上的9i的DB通過rman備份後恢復到RHEL5.4上的11.2.0.1
跨版本的例項:
RMAN_11.2.0.1異機恢復到11.2.0.4
RMAN_11.2.0.1升級到11.2.0.4的DB異機恢復到11.2.0.1版本的DB
RMAN_11.2.0.1升級到11.2.0.4的DB異機恢復到12.1.0.2
RMAN_備份在異地恢復
A的整庫備份在B還原
以下相當於到在一個只安裝了oracle軟體的B伺服器上進行的恢復,B沒有任何關於A庫的資料,也發現在整個過程中都沒有去手動建立B庫的線上日誌,因為B庫線上日誌會在alter database open resetlogs的時候自動建立,只要B伺服器的線上日誌路徑和A庫一樣即可(如果B伺服器已經安裝了oracle軟體並建立了DB,則第五、六步可以合併成一步即目標庫根據spfile建立pfile,並修改pfile中的db_name為源庫DB名稱,並在目標庫建立源庫datafile、online redo log對應的目錄)
1. A庫執行backup database format ‘/backup/rman/full_%U.bak’;
在A的/backup/rman會出現兩個以full命名的檔案,一個是資料庫備份,一個引數檔案和控制的備份
2. A庫再執行alter system archive log current或alter system switch logfile
在A的歸檔目錄下生成剛剛最新的歸檔日誌
以上兩步可接變成一步如下
Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak'
3. 把A庫/backup/rman下的兩個檔案和剛剛最新的歸檔日誌拷貝到B庫一樣的目錄
4. 修改目標庫的.bash_profile中ORACLE_SID=源庫的sid,並source應用一下
5. 在B庫執行echo $ORACLE_SID,等於A庫sid的情況下再執行
rman target /
rman>startup nomount
rman>restore spfile to pfile '$ORACLE_HOME目錄/dbs/initA的SID.ora' from'/backup/rman/full_09l9esg4_1_1';
6. 修改剛剛還原出來的pfile,並根據pfile檔案建立諸如dump、archivelog、datafile、online redo log等路徑,如B庫建立了和A庫一樣的控制檔案路徑、資料檔案路徑、日誌檔案路徑
7. B庫shutdown abort再startup nomount
8. B庫rman 恢復操作
rman>restore controlfile from'/backup/rman/full_09l9esg4_1_1';
rman>alter database mount;
rman>restore database;
rman>recover database until sequence 主庫拷貝過來的那個歸檔日誌的sequence+1
以上如果使用歸檔日誌的備份包需要在recover database之前執行如下兩句(需要catalog 最後一個歸檔日誌的備份包,為什麼需要catalog是因為它在controlfile備份包之後生成的。XX只需要from最大的那個sequence-2就可以了,不需要源庫和目標庫的archivelog目錄一致,只要目標庫有archivelog目錄就可以了,會自動restore到目標庫的archivelog目錄)
rman>catalog backuppiece '';
rman>restore archivelog from sequence XX;
9. B庫open resetlogs
Sqlplus>alter database open
resetlogs
心得:
第8步,如果沒有了A庫最新的歸檔日誌,restore database後直接recover database,會報錯說找不到歸檔日誌,所以進行整庫備份後,必須手動歸檔,並把歸檔日誌也拷貝到異地
第8步,萬一不小心在mount狀態時修改了B的歸檔路徑,導致A庫和B庫的歸檔日誌路徑不一樣,則把A庫的歸檔日誌拷貝到B庫的實際歸檔路徑,即可恢復,不要重新建立一個歸檔路徑和A庫一樣,再把歸檔日誌拷貝到這個新建的歸檔路徑,一切以B庫的archive log list中的路徑為準
20150812RMAN異地還原的操作的例子
1. 源庫A執行如下
Rman>delete noprompt archivelog until time 'sysdate-1';
Rman>backup database format '/orabackup/rman_backup/data%U.bak' plus archivelog format '/orabackup/rman_backup/arch%U.bak'
2. 把源庫的備份包拷貝至目標庫B(並非/orabackup/rman_backup/,所以後面第8步要catalog資料檔案備份包和歸檔日誌檔案備份包)
3. 在B庫的linux下執行ORACLE_SID=A庫的sid或修改.bash_profile中ORACLE_SID=A庫的sid並source .bash_profile
4. B庫關閉DB並確認spfile已經刪除(順便刪除所有datafile、redofile和archivelog)
5. 在B庫執行echo $ORACLE_SID,等於A庫sid的情況下再執行
rman target /
rman>startup nomount
rman>restore spfile to pfile '$ORACLE_HOME目錄/dbs/initA的SID.ora' from'/backup/rman/data_09l9esg4_1_1';
6. 修改剛剛還原出來的pfile,如control、dump、archivelog等路徑
7. B庫shutdown abort再startup nomount
8. B庫rman 恢復操作
rman>restore controlfile from'/backup/rman/full_09l9esg4_1_1';
rman>alter database mount;
rman> catalog backuppiece '/backup/rman/data0bqedd5a_1_1.bak';
RMAN>run{
set newname for datafile 1 to ' /datafile/system01.dbf';
set newname for datafile 2 to ' /datafile/sysaux01.dbf';
set newname for datafile 3 to ' /datafile/undotbs01.dbf';
set newname for datafile 4 to ' /datafile/users01.dbf';
set newname for tempfile 1 to '/datafile/temp01.dbf';
restore database;
switch datafile all;
switch tempfile all;
}
rman> catalog backuppiece '/backup/rman/arch0bqedd5a_1_1.bak';
rman> catalog backuppiece '/backup/rman/arch0bqedd5a_1_1.bak';
RMAN> recover database;
根據上面報錯提示再執行
RMAN> recover database until sequence 3160;
9. 退出rman進入[oracle@localhost dbs]$ sqlplus / as sydba
10.SQL> alter database open resetlogs;
如果報錯ORA-00344: unable to re-create online log '/oradata/TESTIO/redo01.log'
則select * from v$logfile;後再執行
SQL> alter database rename file '/oradata/TESTIO/redo01.log' to '/u01/app/oracle/oradata/redo01.log';
SQL> alter database rename file '/oradata/TESTIO/redo02.log' to '/u01/app/oracle/oradata/redo02.log';
SQL> alter database rename file '/oradata/TESTIO/redo03.log' to '/u01/app/oracle/oradata/redo03.log';
SQL> alter database open resetlogs;
以上需要了解的是
set newname for datafile其中是包含datafile和undofile
set newname for tempfile只包含tempfile
所以一開始需要先在源庫執行
select file_id,file_name from dba_data_files order by file_id
select file_id,file_name from dba_temp_files order by file_id
當然如果前面set newname for tempfile導致後面報錯
ALTER TABLESPACE TEMP drop TEMPFILE '/oradata/TESTIO/temp01.dbf';
ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/temp01.dbf' size 500M autoextend on next 50M maxsize 30G;
RMAN_11.2.0.1異機恢復到直接安裝11.2.0.4的版本
RMAN_11.2.0.1異機恢復到11.2.0.1升級後的11.2.0.4版本
源DB資訊:DB_NAME為DB521102,版本為直接安裝的11.2.0.1
目標DB資訊:DB_NAME為DB11204,版本為直接安裝的11.2.0.4,非11.2.0.1升級的版本
目標DB資訊:DB_NAME為DB11204,版本為11.2.0.1升級到直接安裝的11.2.0.4的版本
1. 源DB執行
Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;
2. 源庫把備份後的四個備份包scp到目標庫/u01/app/rman/目錄
3. 目標庫根據spfile建立pfile,並修改pfile中的db_name為DB521102,並在目標庫建立源庫datafile、online redo log對應的目錄
4. 修改目標庫的.bash_profile中ORACLE_SID=源庫的sid,並source應用一下
5. 目標庫按順序執行如下語句(下面第5個語句,需要catalog 最後一個歸檔日誌的備份包,為什麼需要catalog是因為它在controlfile備份包之後生成的。下面第6個語句,只需要from最大的那個sequence-2就可以了,不需要源庫和目標庫的archivelog目錄一致,只要目標庫有archivelog目錄就可以了,會自動restore到目標庫的archivelog目錄)
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
rman>alter database mount;
rman>restore database;
rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’
rman>restore archivelog from sequence XX;
rman>recover database until sequence 最大的sequence+1;
sql>alter database open resetlogs;
出現如下報錯
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
6. 解決方法,目標庫重新登陸按如下執行(執行catupgrd.sql完後例項會自動shutdown,之後直接startup的過程不再需要resetlogs了)
sql>startup upgrade;
SQL>@$ORACLE_HOME/rdbms/admin/catupgrd.sql;
sql> startup
RMAN_11.2.0.4異機恢復到11.2.0.1
源DB資訊:DB_NAME為DB11204,版本為直接安裝的11.2.0.4
目標DB資訊:DB_NAME為ORCL,版本為11.2.0.1
1. 源DB執行
Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;
2. 源庫把備份後的四個備份包scp到目標庫/u01/app/rman/目錄
3. 目標庫根據spfile建立pfile,並修改pfile中的db_name為DB11204,並在目標庫建立源庫datafile、online redo log對應的目錄
4. 修改目標庫的.bash_profile中ORACLE_SID=源庫的sid,並source應用一下
5. 目標庫按順序執行如下語句
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
直接報錯如下(把pfile中的由*.compatible='11.2.0.0.0'改成*.compatible='11.2.0.4.0'並shutdown abort再startup nomount pfile的過程中則報錯ORA-00401: the value for parameter compatible is not supported by this release,即pfile中的由*.compatible改成啥都沒用)
RMAN_11.2.0.1升級到11.2.0.4的DB異機恢復到11.2.0.1版本的DB
源DB資訊:DB_NAME為ORCL,由11.2.0.1升級到了11.2.0.4
目標DB資訊:DB_NAME為TESTDB,版本為11.2.0.1
1. 源DB執行
Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;
2. 源庫把備份後的四個備份包scp到目標庫/u01/app/rman/目錄
3. 目標庫根據spfile建立pfile,並修改pfile中的db_name為ORCL,並在目標庫建立源庫datafile、online redo log對應的目錄
4. 修改目標庫的.bash_profile中ORACLE_SID=源庫的sid,並source應用一下
5. 目標庫按順序執行如下語句(下面第5個語句,需要catalog 最後一個歸檔日誌的備份包,為什麼需要catalog是因為它在controlfile備份包之後生成的。下面第6個語句,只需要from最大的那個sequence-2就可以了,不需要源庫和目標庫的archivelog目錄一致,只要目標庫有archivelog目錄就可以了,會自動restore到目標庫的archivelog目錄)
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
rman>alter database mount;
rman>restore database;
rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’;
rman>restore archivelog from sequence XX;
rman>recover database until sequence 最大的sequence+1;
sql>alter database open resetlogs;
出現如下報錯
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-39700: database must be opened with UPGRADE option
6. 解決方法,目標庫重新登陸按如下執行(奇怪的是下面第2個語句執行過程中遇到問題,不像正常升級一樣會shutdown資料庫,而且以下第四個語句也不用再resetlogs了)
sql>startup upgrade;
SQL> @$/rdbms/admin/catupgrd.sql;
sql> shutdown immediate;
sql> startup
RMAN_11.2.0.1異機恢復到直接安裝12.1.0.2的版本
源DB資訊:DB_NAME為DB521102,版本為直接安裝的11.2.0.1
目標DB資訊:DB_NAME為DB12c,版本為直接安裝的12.1.0.2
前面restore spfile to pfile,並修改pfile中*.compatible='12.1.0.0.0'
Startup nomount
Restore controlfile
Alter database mount
Restore database
Recover database until sequence都是正常的,alter database open resetlogs開始出現問題了,不知道什麼原因,難道真是11GR2不能異機恢復到12CR1?RMAN_11.2.0.1升級到11.2.0.4的異機恢復到直接安裝12.1.0.2的版本
源DB資訊:DB_NAME為DB521102,版本為直接安裝的11.2.0.1,再升級到11.2.0.4
目標DB資訊:DB_NAME為DB12c,版本為直接安裝的12.1.0.2
1. 源DB執行
Rman>backup database format '/u01/app/rman/full%U.bak' plus archivelog format '/u01/app/rman/arch%U.bak' delete input;
2. 源庫把備份後的四個備份包scp到目標庫/u01/app/rman/目錄
3. 目標庫根據spfile建立pfile,並修改pfile中的db_name為DB521102,並在目標庫建立源庫datafile、online redo log對應的目錄
rman>restore spfile to pfile 'XX/initDB521102.ora' from'/backup/rman/full_09l9esg4_1_1';
並修改pfile中*.compatible='12.1.0.0.0'
4. 修改目標庫的.bash_profile中ORACLE_SID=源庫的sid,並source應用一下
5. 目標庫按順序執行如下語句(下面第5個語句,需要catalog 最後一個歸檔日誌的備份包,為什麼需要catalog是因為它在controlfile備份包之後生成的。下面第6個語句,只需要from最大的那個sequence-2就可以了,不需要源庫和目標庫的archivelog目錄一致,只要目標庫有archivelog目錄就可以了,會自動restore到目標庫的archivelog目錄)
sql>startup nomount pfile=’’
rman>restore controlfile from ’/u01/app/rman/fullXX.bak’
rman>alter database mount;
rman>restore database;
rman>catalog backuppiece ’/u01/app/rman/52arch04rc7tru_1_1’
rman>restore archivelog from sequence XX;
rman>recover database until sequence 最大的sequence+1;
sql>alter database open resetlogs;
出現如下報錯
alter database open resetlogs
*
ERROR at line 1:
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-00704: bootstrap process failure
ORA-00604: error occurred at recursive SQL level 2
ORA-00904: "I"."UNUSABLEBEGINNING#": invalid identifier
Process ID: 11222
Session ID: 188 Serial number: 65058
6. 解決方法,目標庫重新登陸按如下執行(執行/u01/app/oracle/product/12c/db_1/perl/bin/perl catctl.pl -n 4 catup完後例項會自動shutdown,之後直接startup的過程不再需要resetlogs了)
sql>startup upgrade;
cd /u01/app/oracle/product/12c/db_1/rdbms/admin/
/u01/app/oracle/product/12c/db_1/perl/bin/perl catctl.pl -n 4 catupgrd.sql
sql> startup
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29519108/viewspace-2133259/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RMAN備份恢復典型案例——跨平臺遷移pdb
- 移動跨平臺技術方案總結
- OBIEE10g跨平臺遷移過程及問題總結
- Rust 跨平臺與條件編譯總結 2019.1.3Rust編譯
- Flutter實現Android、iOS跨平臺經驗總結FlutterAndroidiOS
- Java跨平臺?慎用這些有平臺差異性的方法Java
- rust跨平臺Rust
- JAVA的跨平臺原理Java
- 富文字及編輯器的跨平臺方案
- 跨域總結跨域
- oracle資料庫跨平臺(AIX)從RAC恢復至(linux)下的單例項Oracle資料庫AILinux單例
- .NET Core 跨平臺
- 跨平臺編譯編譯
- Java跨平臺原理Java
- JVM跨平臺原理JVM
- WPF跨平臺方案?
- 跨平臺、跨主機共享鍵鼠方案(KVM)
- 跨平臺技術演進及Flutter未來Flutter
- onethink支援跨平臺嗎
- 跨平臺開發框架的大旗框架
- web跨域及cookie相關知識總結Web跨域Cookie
- JVM筆記 -- Java跨平臺和JVM跨語言JVM筆記Java
- 淺談跨平臺框架 Flutter 的優勢與結構框架Flutter
- 前端跨域方法總結前端跨域
- 跨域問題總結跨域
- 跨域總結(jquery,php)跨域jQueryPHP
- RMAN備份恢復典型案例——異機恢復未知DBID
- JavaScript跨域相關的總結JavaScript跨域
- 跨平臺級聯dataguard配置
- 跨平臺技術演進
- Go跨平臺交叉編譯Go編譯
- ComPDFKit: 跨平臺框架PDF SDK框架
- 跨平臺同步筆記工具筆記
- 跨平臺`ChatGpt` 客戶端ChatGPT客戶端
- python是跨平臺的語言嗎Python
- 使用 cmake 來搭建跨平臺的應用程式框架:C語言版本框架C語言
- 前端跨域問題總結前端跨域
- axios跨域學習總結iOS跨域