使用 Convert Database 命令進行 RMAN 跨平臺遷移(12C至19C)
概述
本場景將使用RMAN的convert database命令,一步步講解數據庫從Windows OS(Source)遷移到Linux OS(Target)的機制,window平臺的oracle數據庫版本由12C升級到linux的19C
以下是執行遷移過程的以下步驟。
過程
1、要將數據庫從一個平臺轉換到另一個平臺,兩個數據庫的字節序格式應該相同。因此,作為第一步,請檢查兩個平臺的 v$transportable_platform 視圖
- col platform_name for a35
- set pagesize 1000
- select * from v$transportable_platform order by 2;
從輸出中可以看出,Windows 和 Linux 操作系統都是Little格式。所以在這種情況下,可以很容易地使用RMAN來轉換整個數據庫。
2、數據庫置于掛載模式并使用只讀選項打開它。
- SQL>shutdown immediate
- SQL>startup mount
- SQL>alter database open read only;
- Database altered.
- SQL>
3、使用 dbms_tdb.check_db 函數檢查數據庫是否可以傳輸到目標平臺,使用 dbms_tdb.check_external 函數檢查外部對象、目錄和 BFILE 的存在。將目標平臺的名稱作為參數傳遞給第一個函數。函數的返回類型是boolean,所以聲明一個boolean類型的變量,調用函數如下:
- set serveroutput on
- declare
- v_return boolean;
- begin
- v_return:=dbms_tdb.check_db('Linux x86 64-bit');
- end;
- /
如果沒有返回任何內容,則表示數據庫已準備好傳輸到目標平臺。
現在調用第二個函數 dbms_tdb.check_external:
- declare
- v_return boolean;
- begin
- v_return:=dbms_tdb.check_external;
- end;
- /

4、創建pfile文件并運行convert database命令 將整個數據庫轉換為Linux平臺
- 創建pfile文件
- create pfile from spfile;
運行convert database命令 將整個數據庫轉換為目標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';
在執行轉換數據庫命令時,RMAN 不會將重做日志文件、控制文件、密碼文件和臨時表空間轉換和傳輸到目標平臺。RMAN 將所有數據文件轉換為目標平臺類型。
5、目標主機創建相關目錄
- 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相關文件到目標主機
把所有數據文件、位于 $ORACLE_HOME/dbs 目錄中的參數文件和 創建數據庫的transport.sql 復制到目標主機,具體如下:
- 轉換生成的所有數據文件
- 生成的Pfile文件
- TRANSPORT.SQL
7、目標主機編輯pfile文件,具體如下:
- adump location
- control_files locations
8、編輯 transportscript.sqlfile
- change the locations of pdfile,
- redolog files
- data files
- tempfile
- 移除STARTUP UPGRADE之后所有的行,具體如下圖所示

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

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