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

以下是執(zhí)行遷移過程的以下步驟。
過程
1、要將數(shù)據(jù)庫從一個平臺轉(zhuǎn)換到另一個平臺,兩個數(shù)據(jù)庫的字節(jié)序格式應(yīng)該相同。因此,作為第一步,請檢查兩個平臺的 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來轉(zhuǎn)換整個數(shù)據(jù)庫。
2、數(shù)據(jù)庫置于掛載模式并使用只讀選項(xiàng)打開它。
- SQL>shutdown immediate
- SQL>startup mount
- SQL>alter database open read only;
- Database altered.
- SQL>
3、使用 dbms_tdb.check_db 函數(shù)檢查數(shù)據(jù)庫是否可以傳輸?shù)侥繕?biāo)平臺,使用 dbms_tdb.check_external 函數(shù)檢查外部對象、目錄和 BFILE 的存在。將目標(biāo)平臺的名稱作為參數(shù)傳遞給第一個函數(shù)。函數(shù)的返回類型是boolean,所以聲明一個boolean類型的變量,調(diào)用函數(shù)如下:
- set serveroutput on
- declare
- v_return boolean;
- begin
- v_return:=dbms_tdb.check_db('Linux x86 64-bit');
- end;
- /
如果沒有返回任何內(nèi)容,則表示數(shù)據(jù)庫已準(zhǔn)備好傳輸?shù)侥繕?biāo)平臺。
現(xiàn)在調(diào)用第二個函數(shù) dbms_tdb.check_external:
- declare
- v_return boolean;
- begin
- v_return:=dbms_tdb.check_external;
- end;
- /

4、創(chuàng)建pfile文件并運(yùn)行convert database命令 將整個數(shù)據(jù)庫轉(zhuǎn)換為Linux平臺。
創(chuàng)建pfile文件
- create pfile from spfile;
運(yùn)行convert database命令 將整個數(shù)據(jù)庫轉(zhuǎn)換為目標(biāo)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í)行轉(zhuǎn)換數(shù)據(jù)庫命令時,RMAN 不會將重做日志文件、控制文件、密碼文件和臨時表空間轉(zhuǎn)換和傳輸?shù)侥繕?biāo)平臺。RMAN 將所有數(shù)據(jù)文件轉(zhuǎn)換為目標(biāo)平臺類型。
5、目標(biāo)主機(jī)創(chuàng)建相關(guān)目錄
- 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相關(guān)文件到目標(biāo)主機(jī)
把所有數(shù)據(jù)文件、位于 $ORACLE_HOME/dbs 目錄中的參數(shù)文件和 創(chuàng)建數(shù)據(jù)庫的transport.sql 復(fù)制到目標(biāo)主機(jī),具體如下:
- 轉(zhuǎn)換生成的所有數(shù)據(jù)文件
- 生成的Pfile文件
- TRANSPORT.SQL
7、目標(biāo)主機(jī)編輯pfile文件,具體如下:
- adump location
- control_files locations

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

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