Rman_異地、跨平臺、跨版本的恢復總結及案例

star2588發表於2018-05-10

結論:

1. Rman可以跨平臺,網上有資料基於ID 413586.1metalink上有),但是還是少用rman來進行跨平臺操作。

2. Rman可以跨版本,但是一般只能從低到高,且要執行catupgrd.sql。不能從高到低,唯一成功的是低版本升級到高版本後備份可以恢復到同樣的低版本

 

 

跨平臺的例項:

Solaris上的9iDB通過rman備份後恢復到RHEL5.4上的11.2.0.1

 

跨版本的例項:

RMAN_11.2.0.1異機恢復到11.2.0.4

RMAN_11.2.0.1升級到11.2.0.4DB異機恢復到11.2.0.1版本的DB

RMAN_11.2.0.1升級到11.2.0.4DB異機恢復到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名稱,並在目標庫建立源庫datafileonline redo log對應的目錄

 

1.  A庫執行backup database format ‘/backup/rman/full_%U.bak’;

    A/backup/rman會出現兩個以full命名的檔案,一個是資料庫備份,一個引數檔案和控制的備份

2.  A庫再執行alter system archive log currentalter 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_profileORACLE_SID=源庫的sid,並source應用一下

5.  B庫執行echo $ORACLE_SID,等於Asid的情況下再執行

rman target /

rman>startup nomount

rman>restore spfile to pfile '$ORACLE_HOME目錄/dbs/initASID.ora' from'/backup/rman/full_09l9esg4_1_1';

6.  修改剛剛還原出來的pfile,並根據pfile檔案建立諸如dumparchivelogdatafileonline redo log等路徑,如B庫建立了和A庫一樣的控制檔案路徑、資料檔案路徑、日誌檔案路徑

7.  Bshutdown abortstartup nomount

8.  Brman 恢復操作

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.  Bopen 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_profileORACLE_SID=A庫的sidsource .bash_profile

4.  B庫關閉DB並確認spfile已經刪除(順便刪除所有datafileredofilearchivelog

5.  B庫執行echo $ORACLE_SID,等於Asid的情況下再執行

rman target /

rman>startup nomount

rman>restore spfile to pfile '$ORACLE_HOME目錄/dbs/initASID.ora' from'/backup/rman/data_09l9esg4_1_1';

6.  修改剛剛還原出來的pfile,controldumparchivelog等路徑

7.  Bshutdown abortstartup nomount

8.  Brman 恢復操作

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其中是包含datafileundofile

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_NAMEDB521102,版本為直接安裝的11.2.0.1

目標DB資訊:DB_NAMEDB11204,版本為直接安裝的11.2.0.4,非11.2.0.1升級的版本

目標DB資訊:DB_NAMEDB11204,版本為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_nameDB521102,並在目標庫建立源庫datafileonline redo log對應的目錄

4.  修改目標庫的.bash_profileORACLE_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_NAMEDB11204,版本為直接安裝的11.2.0.4

目標DB資訊:DB_NAMEORCL,版本為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_nameDB11204,並在目標庫建立源庫datafileonline redo log對應的目錄

4.  修改目標庫的.bash_profileORACLE_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 abortstartup nomount pfile的過程中則報錯ORA-00401: the value for parameter compatible is not supported by this releasepfile中的由*.compatible改成啥都沒用)

 

 

 

 

 

 


 

 

RMAN_11.2.0.1升級到11.2.0.4DB異機恢復到11.2.0.1版本的DB

DB資訊:DB_NAMEORCL,由11.2.0.1升級到了11.2.0.4

目標DB資訊:DB_NAMETESTDB,版本為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_nameORCL,並在目標庫建立源庫datafileonline redo log對應的目錄

4.  修改目標庫的.bash_profileORACLE_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_NAMEDB521102,版本為直接安裝的11.2.0.1

目標DB資訊:DB_NAMEDB12c,版本為直接安裝的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_NAMEDB521102,版本為直接安裝的11.2.0.1,再升級到11.2.0.4

目標DB資訊:DB_NAMEDB12c,版本為直接安裝的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_nameDB521102,並在目標庫建立源庫datafileonline 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_profileORACLE_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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章