使用Convert Database 命令進行 RMAN 跨平臺遷移(同版本)
概述
oracle 從 10gR2 開始,Oracle 引入了 RMAN 的下一個神奇特性,它能夠將數(shù)據(jù)庫從一個平臺轉換到相同字節(jié)序格式的不同平臺。此功能稱為跨平臺數(shù)據(jù)庫遷移?,F(xiàn)在這很容易,只需執(zhí)行一些基本步驟即可將整個數(shù)據(jù)庫從一個平臺轉換到另一個平臺。下面的場景將使用RMAN的convert database命令,一步步講解數(shù)據(jù)庫從Windows OS(Source)遷移到Linux OS(Target)的機制。

以下是執(zhí)行遷移過程的以下步驟。
過程
1、要將數(shù)據(jù)庫從一個平臺轉換到另一個平臺,兩個數(shù)據(jù)庫的字節(jié)序格式應該相同。因此,作為第一步,請檢查兩個平臺的 v$transportable_platform 視圖
- col platform_name for a35
- set pagesize 1000
- select * from v$transportable_platform order by 2;

從輸出中可以看出,Windows 和 Linux 操作系統(tǒng)都是Little格式。所以在這種情況下,可以很容易地使用RMAN來轉換整個數(shù)據(jù)庫。
2、數(shù)據(jù)庫置于掛載模式并使用只讀選項打開它。
- SQL>shutdown immediate
- SQL>startup mount
- SQL>alter database open read only;
- Database altered.
- SQL>
3、使用 dbms_tdb.check_db 函數(shù)檢查數(shù)據(jù)庫是否可以傳輸?shù)侥繕似脚_,使用 dbms_tdb.check_external 函數(shù)檢查外部對象、目錄和 BFILE 的存在。將目標平臺的名稱作為參數(shù)傳遞給第一個函數(shù)。函數(shù)的返回類型是boolean,所以聲明一個boolean類型的變量,調用函數(shù)如下:
- set serveroutput on
- declare
- v_return boolean;
- begin
- v_return:=dbms_tdb.check_db('Linux x86 64-bit');
- end;
- /
如果沒有返回任何內容,則表示數(shù)據(jù)庫已準備好傳輸?shù)侥繕似脚_。
現(xiàn)在調用第二個函數(shù) dbms_tdb.check_external:
- declare
- v_return boolean;
- begin
- v_return:=dbms_tdb.check_external;
- end;
- /

4、創(chuàng)建pfile文件并運行convert database命令 將整個數(shù)據(jù)庫轉換為Linux平臺。
創(chuàng)建pfile文件
- create pfile from spfile;
運行convert database命令 將整個數(shù)據(jù)庫轉換為目標Linux平臺。rman target /
convert database new database 'orcl'
transport script 'c:\Clone\transport.sql'
db_file_name_convert 'C:\app\piyus\oradata\orcl'
'c:\Clone' to platform 'Linux x86 64-bit';

在執(zhí)行轉換數(shù)據(jù)庫命令時,RMAN 不會將重做日志文件、控制文件、密碼文件和臨時表空間轉換和傳輸?shù)侥繕似脚_。RMAN 將所有數(shù)據(jù)文件轉換為目標平臺類型。
5、目標主機創(chuàng)建相關目錄
- cd $ORACLE_BASE
- mkdir -p admin/orcl/adump admin/orcl/bdump
- mkdir -p admin/orcl/cdump admin/orcl/udump
- mkdir -p oradata/orcl/
- mkdir -p fast_recovery_area/orcl
6、copy相關文件到目標主機
把所有數(shù)據(jù)文件、位于 $ORACLE_HOME/dbs 目錄中的參數(shù)文件和 創(chuàng)建數(shù)據(jù)庫的transport.sql 復制到目標主機,具體如下:
- 轉換生成的所有數(shù)據(jù)文件
- 生成的Pfile文件
- TRANSPORT.SQL
7、目標主機編輯pfile文件,具體如下:
- adump location
- control_files locations

8、編輯 transportscript.sqlfile
- change the locations of pdfile,
- redolog files
- data files
- tempfile

9、運行 transport.sql
現(xiàn)在再次檢查上面所做的所有更改,導出 ORACLE_SID 環(huán)境變量并從 SQL*Plus 運行 transport.sql 命令:
- SQL> @/tmp/TRANSPORT.SQ
通過運行這個 sql 文件,Oracle 執(zhí)行以下步驟:
- 從提供的pfile(由 RMAN 生成)創(chuàng)建spfile
- 創(chuàng)建控制文件并使用resetlogs選項打開數(shù)據(jù)庫
- 創(chuàng)建臨時表空間
- 關閉數(shù)據(jù)庫,使用升級模式啟動它并運行utlirp.sql。此腳本以目標數(shù)據(jù)庫平臺所需的格式重新編譯所有 PL/SQL 對象。
- 運行 utlrp.sql文件,該文件重新編譯所有狀態(tài)無效的PL/SQL 對象 。
完成上述所有步驟后,即可成功使用數(shù)據(jù)庫。