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


http://blog.itpub.net/30126024/viewspace-2122858/

結論:

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM