使用 Convert Database 命令進(jìn)行 RMAN 跨平臺(tái)遷移(12C至19C)
概述
本場(chǎng)景將使用RMAN的convert database命令,一步步講解數(shù)據(jù)庫(kù)從Windows OS(Source)遷移到Linux OS(Target)的機(jī)制,window平臺(tái)的oracle數(shù)據(jù)庫(kù)版本由12C升級(jí)到linux的19C
以下是執(zhí)行遷移過程的以下步驟。
過程
1、要將數(shù)據(jù)庫(kù)從一個(gè)平臺(tái)轉(zhuǎn)換到另一個(gè)平臺(tái),兩個(gè)數(shù)據(jù)庫(kù)的字節(jié)序格式應(yīng)該相同。因此,作為第一步,請(qǐng)檢查兩個(gè)平臺(tái)的 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)換整個(gè)數(shù)據(jù)庫(kù)。
2、數(shù)據(jù)庫(kù)置于掛載模式并使用只讀選項(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ù)庫(kù)是否可以傳輸?shù)侥繕?biāo)平臺(tái),使用 dbms_tdb.check_external 函數(shù)檢查外部對(duì)象、目錄和 BFILE 的存在。將目標(biāo)平臺(tái)的名稱作為參數(shù)傳遞給第一個(gè)函數(shù)。函數(shù)的返回類型是boolean,所以聲明一個(gè)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ù)庫(kù)已準(zhǔn)備好傳輸?shù)侥繕?biāo)平臺(tái)。
現(xiàn)在調(diào)用第二個(gè)函數(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命令 將整個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)換為L(zhǎng)inux平臺(tái)
- 創(chuàng)建pfile文件
- create pfile from spfile;
運(yùn)行convert database命令 將整個(gè)數(shù)據(jù)庫(kù)轉(zhuǎn)換為目標(biāo)Linux平臺(tái)。
- 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ù)庫(kù)命令時(shí),RMAN 不會(huì)將重做日志文件、控制文件、密碼文件和臨時(shí)表空間轉(zhuǎn)換和傳輸?shù)侥繕?biāo)平臺(tái)。RMAN 將所有數(shù)據(jù)文件轉(zhuǎn)換為目標(biāo)平臺(tái)類型。
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ù)庫(kù)的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
- 移除STARTUP UPGRADE之后所有的行,具體如下圖所示

9、運(yùn)行 transport.sql --目標(biāo)主機(jī)
設(shè)置ORACLE_SID to orcl ,同時(shí)在sqlplus運(yùn)行如下腳本
- SQL> @/tmp/TRANSPORT.SQL
10、由12C升級(jí)到19C--目標(biāo)主機(jī)
- cd $ORACLE_HOME/rdbms/admin
- $ORACLE_HOME/perl/bin/perl catctl.pl catupgrd.sql
這個(gè)過程大概需要40-50分鐘左右的時(shí)間。

11、生成spfile
- create SPFILE from PFILE;
12、重新編譯無效的對(duì)象
- SQL> @?/rdbms/admin/utlrp.sql
等腳本執(zhí)行完成時(shí)你的數(shù)據(jù)庫(kù)將成功由windows平臺(tái)遷移到linux平臺(tái),并成功由12C升級(jí)到19C!