Oracle 10g R2支援手工跨平台移動資料庫,即使這些平台具有不同的尾數格式(endian format)。 尾數格式與位元組排序有關,它有兩種不同的格式,即大尾數和小尾數。 如果在不同尾數位元組格式的平台之間移動資料庫,就需要手工操作,並且使用RMAN的convert datafile 或者 convert tablespace命令來將傳送的資料檔案轉換為正確的尾數格式。
一、可跨平台傳送的資料表空間
Oracle 支援幾乎(不是所有)Oracle 資料庫家族的所有平台之間的資料表空間移動。該功能具有如下的一些優點:
(1) 在不同的內容提供者之間有效地發布資料
(2) 在不同資料倉儲,資料集和OLTP 系統之間輕鬆地轉移資料。
(3) 輕鬆地跨平台遷移資料庫
為了能夠在平台之間移動資料表空間,必須將compatible 設定為10.0.0 或更高的值。 設定該參數後,在下一次啟動操作時,資料表空間資料檔案將被設定為支援跨平台操作。 注意的是: 只有在設定為可讀寫或聯機時,唯讀檔案和離線資料檔案才可支援跨平台操作。
二、位元組排序和資料檔案轉換
1、資料檔案排序
Oracle 平台一般使用兩種不同的位元組排序方法(稱為:尾數格式)。 如果多個平台使用相同的位元組排序方案,則可以採用以前的常用方法傳送資料表空間,而不會產生任何問題。
如果位元組排序方案不同,則需要在RMAN中使用convert 命令來將資料表空間轉換為目標平台上所需的格式。 可以通過串連動態視圖v$database和新的v$transportable_platform 視圖來確定尾數格式:
SQL> select endian_format from v$transportable_platform tp, v$database d where tp.platform_name=d.platform_name;
ENDIAN_FORMAT
--------------
Little
該樣本中,當前系統使用的是小尾數格式。 因此,如果在兩個系統上的查詢返回相同的結果,則表示有相容的資料檔案格式;如果返回不同的結果,則需要使用RMAN和compatible 參數來傳送資料表空間。
2、使用RMAN 轉換資料表空間尾數格式
如果需要轉換另一個平台的資料表空間,則可以使用RMAN。
(1)轉換資料表空間:
先將資料表空間轉換為唯讀模式:
SQL> alter tablespace BL read only;
資料表空間已更改。
RMAN> convert tablespace BL to platform='AIX-Based Systems (64-bit)'
db_file_name_convert='D:/APP/ADMINISTRATOR/ORADATA/BL','F:/bl';
啟動 conversion at source 於 08-7月 -10
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 啟動資料檔案轉換
輸入資料檔案: 檔案號=00005 名稱=D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF
已轉換的資料檔案 = F:/BL/BL01.DBF
通道 ORA_DISK_1: 資料檔案轉換完畢, 經過時間: 00:00:07
完成 conversion at source 於 08-7月 -10
啟動 Control File and SPFILE Autobackup 於 08-7月 -10
段 handle=D:/APP/ADMINISTRATOR/FLASH_RECOVERY_AREA/BL/AUTOBACKUP/2010_07_08/O1_M
F_S_723857700_63CW16C1_.BKP comment=NONE
完成 Control File and SPFILE Autobackup 於 08-7月 -10
說明,在這個實驗中,我們發現它備份了控制檔案和spfile檔案,這也說明了以前的一個觀點,當資料檔案發生變化時,在開啟自動備份的前提下,會自動備份這2個檔案。
(2) 轉換資料檔案
RMAN> convert datafile 'D:/APP/ADMINISTRATOR/ORADATA/BL/BL01.DBF' from platform
'AIX-Based Systems (64-bit)' db_file_name_convert 'D:/APP/ADMINISTRATOR/ORADATA/
BL','F:/bl';
有關 CONVERT DATAFILE or TABLESPACE,參考聯機文檔
http://www.di.unipi.it/~ghelli/didattica/bdldoc/B19306_01/backup.102/b14191/dbxptrn001.htm
使用平台名來自v$transportable_platform視圖的platform_name列。 Oracle 對於放入正確的名稱有嚴格的要求。
一旦完成了轉換,就可以用下面的方式完成移動,使用可傳送資料表空間手工移動資料檔案或資料表空間。 注意的是,如果尾數格式不同,RMAN 就不能完成操作。尾數相同的可以按下面方法操作。
SQL> select * from v$transportable_platform;
PLATFORM_ID PLATFORM_NAME
----------- ----------------------------------------
1 Solaris[tm] OE (32-bit)
2 Solaris[tm] OE (64-bit)
7 Microsoft Windows IA (32-bit)
10 Linux IA (32-bit)
6 AIX-Based Systems (64-bit)
3 HP-UX (64-bit)
三、跨平台移動資料庫
Oracle 10g 提供了全新的功能處理在尾數格式相同的平台之間移動資料庫。Convert database命令結合DBMS_TDP程式包可以減少在平台之間移動資料庫的整體工作量。 該過程包括如下步驟:
1、 以唯讀方式開啟資料庫
Start mount;
Alter database open read only;
2、使用dbms_tdp.check_db 過程來檢查資料庫狀態。
Set serveroutput on
Declare
Db_ready boolean;
Begin
Db_ready := dbms_tdb.check_db
('Microsoft Windows IA (32-bit)',dbms_tdb.skip_readonly);
End;
/
3、 使用dbms_tdb.check_external 過程來標識外部對象:
Set serveroutput on
Declare
External boolean;
Begin
External := dbms_tdb.check_external;
End;
/
4、當資料庫主備好傳送時,就可以使用RMAN 的convert database命令。 RMAN 建立資料庫移動所需要的指令碼,但不實際執行移動,而是建立移動所需要的檔案。
Convert database new database 'copy' transport scripts 'c:/oracle/copyscripts' to platform 'Microsoft Windows IA (32-bit)';
一旦完成該命令,只需遵循RMAN 提供的指令就可以在目標資料庫上完成轉換。