可傳輸表空間現在可以跨平台移植
從而使得數據發布更快更容易
此外
外部表下載使得通過轉換進行數據轉移的任務更簡單更快
您如何將數據從一個數據庫轉移到另一個數據庫?在現有的幾種方法中
有一種方法尤為出色
可傳輸表空間
在這種方法中
您使用一組自包含
只讀的表空間
只導出元數據
在操作系統層將這些表空間的數據文件拷貝至目標平台
並將元數據導入數據字典 — 這個過程稱為插入
操作系統文件拷貝一般比其它傳統的數據轉移方法(如導出/導入或 SQL*Loader)要快得多
然而
在 Oracle
i 數據庫和更低版本中
可傳輸表空間僅限於在目標數據庫和源數據庫都運行在同一操作系統平台上的少數情況下才有用 — 例如
您不能在 Solaris 和 HP
UX 平台之間傳輸表空間
在 Oracle 數據庫
g 中
這個局限消失了
只要操作系統字節順序相同
您就可以在平台之間傳輸表空間
本文將不就字節順序展開長篇的討論
但這裡只要提幾句話就足夠了
一些操作系統(包括 Windows)在低位內存地址中用最低有效字節存儲多字節二進制數據
因此這種系統被稱為低地址低字節序
相反
其它的操作系統(包括 Solaris)將最高有效字節存儲在低位內存地址中
因此這種系統被稱為低地址高字節序
當一個低地址高字節序的系統試圖從一個低地址低字節序的系統中讀取數據時
需要一個轉換過程 — 否則
字節順序將導致不能正確解釋讀取的數據
(有關字節順序的詳細說明
請閱讀嵌入式系統編程的
年
月刊中的一篇極好的文章
字節順序介紹
)不過
當在相同字節順序的平台之間傳輸表空間時
不需要任何轉換
您怎麼知道哪一種操作系統采用哪一種字節順序?不需猜測或搜索互聯網
相反只需簡單地執行以下查詢
SQL> select * from v$transportable_platform order by platform_id;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
Solaris[tm] OE (
bit) Big
Solaris[tm] OE (
bit) Big
HP
UX (
bit) Big
HP
UX IA (
bit) Big
HP Tru
UNIX Little
AIX
Based Systems (
bit) Big
Microsoft Windows IA (
bit) Little
Microsoft Windows IA (
bit) Little
IBM zSeries Based Linux Big
Linux IA (
bit) Little
Linux IA (
bit) Little
Microsoft Windows
bit for AMD Little
Linux
bit for AMD Little
HP Open VMS Little
Apple Mac OS Big
假設您想從一台在 Intel 體系結構上運行 Linux 操作系統的主機 SRC
中將一個表空間 USERS 傳輸到運行 Microsoft Windows 操作系統的計算機 TGT
上
源平台和目標平台都是低地址低字節序的
表空間 USERS 的數據文件是 users_
dbf
您將按照類似以下的方法來進行操作
使表空間為只讀
alter tablespace users read only;
導出表空間
在操作系統提示符下執行
exp tablespaces=users transport_tablespace=y file=exp_ts_users
dmp
exp_ts_users
dmp 文件只包含元數據(不是表空間 USERS 的內容)因此它將非常小
將文件 exp_ts_users
dmp 和 users_
dbf 拷貝至主機 TGT
如果您使用 FTP
那麼您將需要指定二進制選項
將表空間插入到數據庫中
在操作系統命令提示符下執行下面的語句
imp tablespaces=users transport_tablespace=y file=exp_ts_users
dmp datafiles=
users_
dbf
在第
步之後
目標數據庫將有一個名稱為 USERS 的表空間
並將提供該表空間的內容
請記住
系統 SRC
和 TGT
分別是 Linux 和 Windows
到 Oracle
i 為止
運行在 TGT
上的數據庫不能識別第
步中的數據文件 users_
dbf
從而使得整個過程無用
您將必須求助其它一些方法(如常規的導出和導入
創建純文本文件並通過 SQL*Loader 加載
或直接在不同的數據庫間連接加載插入)
在
g 中
不再需要這些替代方法
因為目標數據庫能夠識別來自另一個平台的數據文件
在我們的示例中
源主機和目標主機運行的操作系統的字節順序是相同的(低地址低字節序)
因此不需要任何轉換
這個功能在數據倉庫中特別有用
其中更小的面向對象的數據集市常常在刷新之後從倉庫中進行填充
利用
g
這些數據集市現在能夠放在更小
更廉價的計算機(如運行 Linux 的 Intel boxes)中
而將數據倉庫服務器放在更大的企業級計算機中
從本質上講
利用可傳輸表空間
您現在可以更好地利用各種硬件和操作系統的組合
跨不同字節順序的平台 如果平台是不同字節順序的
那麼您將如何實現可傳輸性?正如我之前說明的
目標計算機的字節順序如果與源計算機的字節順序不同
那麼將不能正確地讀取數據文件
因而不可能簡單地拷貝數據文件
但別灰心
在 Oracle
g RMAN 實用程序中提供了幫助
它支持將數據文件從一種字節順序向另一種字節順序轉換
在上面的例子中
如果主機 SRC
運行在 Linux 上(低地址低字節序)
而目標主機 TGT
運行在 HP
UX 上(低地址高字節序)
那麼您需要在第
步和第
步之間引入另一個步驟
以進行轉換
利用 RMAN
您將在源計算機 SRC
上把數據文件從 Linux 轉換成 HP
UX 格式(假定您已經使表空間變為只讀)
RMAN> convert tablespace users
> to platform
HP
UX (
bit)
> format=
/home/oracle/rman_bkups/%N_%f
;
Starting backup at
MAR
using channel ORA_DISK_
channel ORA_DISK_
:starting datafile conversion
input datafile fno=
name=/usr/oradata/dw/starz
/users
dbf
converted datafile=/home/oracle/rman_bkups/USERS_
channel ORA_DISK_
:datafile conversion complete
elapsed time:
:
:
Finished backup at
MAR
這個步驟在目錄 /home/oracle/rman_bkups 中創建了一個標准 RMAN 文件格式 <tablespace_name>_<absolute_datafile_no> 的文件
注意我們沒有觸及表空間 USERS 的數據文件
而是為 HP
UX 創建了一個新文件
現在可以將這個文件拷貝至目標系統
剩下的步驟很簡單
這個 RMAN 轉換命令非常強大
按照上面給定的形式
它可以按順序創建數據文件
對於包含多個數據文件的表空間
您可以命令同時轉換並運行多個數據文件
要實現這一目的
您將需要在上述命令中添加一個子句
parallelism =
該子句創建四個 RMAN 通道
每一個通道處理一個數據文件
不過
一種更有用的方法是用一個步驟轉換大量的表空間
在這種情況下並行轉換將真正帶來很大的幫助
下面我們將兩個表空間 USERS 和 MAINTS 轉換至 HP
UX
RMAN> convert tablespace users
maints
> to platform
HP
UX (
bit)
> format=
/home/oracle/rman_bkups/%N_%f
> parallelism =
;
Starting backup at
MAR
using target database controlfile instead of recovery catalog
allocated channel:ORA_DISK_
channel ORA_DISK_
:sid=
devtype=DISK
allocated channel:ORA_DISK_
channel ORA_DISK_
:sid=
devtype=DISK
allocated channel:ORA_DISK_
channel ORA_DISK_
:sid=
devtype=DISK
allocated channel:ORA_DISK_
channel ORA_DISK_
:sid=
devtype=DISK
allocated channel:ORA_DISK_
channel ORA_DISK_
:sid=
devtype=DISK
channel ORA_DISK_
:starting datafile conversion
input datafile fno=
name=/usr/oradata/dw
/dw
/users
dbf
channel ORA_DISK_
:starting datafile conversion
input datafile fno=
name=/usr/oradata/dw
/dw
/users
dbf
channel ORA_DISK_
:starting datafile conversion
input datafile fno=
name=/usr/oradata/dw
/dw
/maints
dbf
channel ORA_DISK_
:starting datafile conversion
input datafile fno=
name=/usr/oradata/dw
/dw
/maints
dbf
converted datafile=/home/oracle/rman_bkups/USERS_
channel ORA_DISK_
:datafile conversion complete
elapsed time:
:
:
converted datafile=/home/oracle/rman_bkups/USERS_
channel ORA_DISK_
:datafile conversion complete
elapsed time:
:
:
converted datafile=/home/oracle/rman_bkups/MAINTS_
channel ORA_DISK_
:datafile conversion complete
elapsed time:
:
:
converted datafile=/home/oracle/rman_bkups/MAINTS_
channel ORA_DISK_
:datafile conversion complete
elapsed time:
:
:
Finished backup at
MAR
在上述例子中
轉換後的文件名難於辨認並很難與原始文件關聯(例如
文件 users
dbf 變為 USERS_
)
相反
您還可以使用其它格式來為數據文件命名
這個過程
From:http://tw.wingwit.com/Article/program/Oracle/201311/17393.html