Oracle10g 中的資料遷移的方法
Oracle10g 中的資料遷移的方法
1. 匯入匯出(exp/imp)
2. 可傳輸表空間
3. 資料庫泵(Data pump-expdp/impdp)
4. 外部表
5. 可傳輸資料庫
這裡主要是講述傳輸表空間遷移資料庫。
可傳輸表空間在10g中可以跨平臺移植,從而使得資料釋出更快更輕易。此外,外部表下載使得透過轉換進行資料轉移的任務更簡單更快。
您如何將資料從一個資料庫轉移到另一個資料庫?在現有的幾種方法中,有一種方法尤為出色:可傳輸表空間。在這種方法中,您使用一組自包含、只讀的表空間,只匯出後設資料,在作業系統層將這些表空間的資料檔案複製至目標平臺,並將後設資料匯入資料字典 — 這個過程稱為插入。
作業系統檔案複製一般比其它傳統的資料轉移方法(如匯出/匯入或 SQL*Loader)要快得多。然而,在 Oracle9i 資料庫和更低版本中,可傳輸表空間僅限於在目標資料庫和源資料庫都執行在同一作業系統平臺上的少數情況下才有用 — 例如,您不能在 Solaris 和 HP-UX 平臺之間傳輸表空間。
在 Oracle 資料庫 10g 中,這個侷限消失了:只要作業系統位元組順序相同,您就可以在平臺之間傳輸表空間。本文將不就位元組順序展開長篇的討論,但這裡只要提幾句話就足夠了:一些作業系統(包括 Windows)在低位記憶體地址中用最低有效位元組儲存多位元組二進位制資料;因此這種系統被稱為低地址低位元組序。相反,其它的作業系統(包括 Solaris)將最高有效位元組儲存在低位記憶體地址中,因此這種系統被稱為低地址高位元組序。當一個低地址高位元組序的系統試圖從一個低地址低位元組序的系統中讀取資料時,需要一個轉換過程 — 否則,位元組順序將導致不能正確解釋讀取的資料。(有關位元組順序的具體說明,請閱讀嵌入式系統程式設計的 2002 年 1 月刊中的一篇極好的文章“位元組順序介紹”。)不過,當在相同位元組順序的平臺之間傳輸表空間時,不需要任何轉換。
您怎麼知道哪一種作業系統採用哪一種位元組順序?不需猜測或搜尋網際網路,相反只需簡單地執行以下查詢:
SQL> select * from v$transportable_platform. order by platform_id;
PLATFORM_ID PLATFORM_NAME ENDIAN_FORMAT
----------- ----------------------------------- --------------
1 Solaris[tm] OE (32-bit) Big
2 Solaris[tm] OE (64-bit) Big
3 HP-UX (64-bit) Big
4 HP-UX IA (64-bit) Big
5 HP Tru64 UNIX Little
6 AIX-Based Systems (64-bit) Big
7 Microsoft Windows IA (32-bit) Little
8 Microsoft Windows IA (64-bit) Little
9 IBM zSeries Based Linux Big
10 Linux IA (32-bit) Little
11 Linux IA (64-bit) Little
12 Microsoft Windows 64-bit for AMD Little
13 Linux 64-bit for AMD Little
軟體開發網
15 HP Open VMS Little
16 Apple Mac OS Big
假設您想從一臺在 Intel 體系結構上執行 Linux 作業系統的主機 SRC1 中將一個表空間 USERS 傳輸到執行 Microsoft Windows 作業系統的計算機 TGT1 上。源平臺和目標平臺都是低地址低位元組序的。表空間 USERS 的資料檔案是 users_01.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_01.dbf 複製至主機 TGT1。假如您使用 FTP,那麼您將需要指定二進位制選項。
將表空間插入到資料庫中。在作業系統命令提示符下執行下面的語句:
imp tablespaces=users transport_tablespace=y file=exp_ts_users.dmp datafiles='users_01.dbf'
在第 4 步之後,目標資料庫將有一個名稱為 USERS 的表空間,並將提供該表空間的內容。
請記住,系統 SRC1 和 TGT1 分別是 Linux 和 Windows。到 Oracle9i 為止,執行在 TGT1 上的資料庫不能識別第 4 步中的資料檔案 users_01.dbf,從而使得整個過程無用。您將必須求助其它一些方法(如常規的匯出和匯入、建立純文字檔案並透過 SQL*Loader 載入,或直接在不同的資料庫間連線載入插入)。
在 10g 中,不再需要這些替代方法,因為目標資料庫能夠識別來自另一個平臺的資料檔案。在我們的示例中,源主機和目標主機執行的作業系統的位元組順序是相同的(低地址低位元組序),因此不需要任何轉換。
這個功能在資料倉儲中非凡有用,其中更小的物件導向的資料集市經常在重新整理之後從倉庫中進行填充。利用 10g,這些資料集市現在能夠放在更小、更廉價的計算機(如執行 Linux 的 Intel boxes)中,而將資料倉儲伺服器放在更大的企業級計算機中。從本質上講,利用可傳輸表空間,您現在可以更好地利用各種硬體和作業系統的組合。
跨不同位元組順序的平臺
假如平臺是不同位元組順序的,那麼您將如何實現可傳輸性?正如我之前說明的,目標計算機的位元組順序假如與源計算機的位元組順序不同,那麼將不能正確地讀取資料檔案,因而不可能簡單地複製資料檔案。但別灰心,在 Oracle 10g RMAN 實用程式中提供了幫助,它支援將資料檔案從一種位元組順序向另一種位元組順序轉換。
在上面的例子中,假如主機 SRC1 執行在 Linux 上(低地址低位元組序),而目標主機 TGT1 執行在 HP-UX 上(低地址高位元組序),那麼您需要在第 3 步和第 4 步之間引入另一個步驟,以進行轉換。利用 RMAN,您將在源計算機 SRC1 上把資料檔案從 Linux 轉換成 HP-UX 格式(假定您已經使表空間變為只讀):
RMAN> convert tablespace users
2> to platform. 'HP-UX (64-bit)'
3> format='/home/oracle/rman_bkups/%N_%f';
Starting backup at 14-MAR-04
using channel ORA_DISK_1
channel ORA_DISK_1:starting datafile conversion
input datafile fno=00004 name=/usr/oradata/dw/starz10/users01.dbf
converted datafile=/home/oracle/rman_bkups/USERS_4
channel ORA_DISK_1:datafile conversion complete, elapsed time: 00:00:07
Finished backup at 14-MAR-04
這個步驟在目錄 /home/oracle/rman_bkups 中建立了一個標準 RMAN 檔案格式
這個 RMAN 轉換命令非常強大。按照上面給定的形式,它可以按順序建立資料檔案。對於包含多個資料檔案的表空間,您可以命令同時轉換並執行多個資料檔案。要實現這一目的,您將需要在上述命令中新增一個子句:
parallelism = 4
該子句建立四個 RMAN 通道,每一個通道處理一個資料檔案。不過,一種更有用的方法是用一個步驟轉換大量的表空間,在這種情況下並行轉換將真正帶來很大的幫助。下面我們將兩個表空間 USERS 和 MAINTS 轉換至 HP-UX:
RMAN> convert tablespace users, maints
2> to platform. 'HP-UX (64-bit)'
3> format='/home/oracle/rman_bkups/%N_%f'
4> parallelism = 5;
Starting backup at 14-MAR-04
using target database controlfile instead of recovery catalog
allocated channel:ORA_DISK_1
channel ORA_DISK_1:sid=244 devtype=DISK
allocated channel:ORA_DISK_2
channel ORA_DISK_2:sid=243 devtype=DISK
allocated channel:ORA_DISK_3
channel ORA_DISK_3:sid=245 devtype=DISK
allocated channel:ORA_DISK_4
channel ORA_DISK_4:sid=272 devtype=DISK
allocated channel:ORA_DISK_5
channel ORA_DISK_5:sid=253 devtype=DISK
channel ORA_DISK_1:starting datafile conversion
input datafile fno=00004 name=/usr/oradata/dw10/dw10/users01.dbf
channel ORA_DISK_2:starting datafile conversion
input datafile fno=00005 name=/usr/oradata/dw10/dw10/users02.dbf
channel ORA_DISK_3:starting datafile conversion
input datafile fno=00006 name=/usr/oradata/dw10/dw10/maints01.dbf
channel ORA_DISK_4:starting datafile conversion
input datafile fno=00007 name=/usr/oradata/dw10/dw10/maints02.dbf
converted datafile=/home/oracle/rman_bkups/USERS_4
channel ORA_DISK_1:datafile conversion complete, elapsed time: 00:00:03
converted datafile=/home/oracle/rman_bkups/USERS_5
channel ORA_DISK_2:datafile conversion complete, elapsed time: 00:00:00
converted datafile=/home/oracle/rman_bkups/MAINTS_6
channel ORA_DISK_3:datafile conversion complete, elapsed time: 00:00:01
converted datafile=/home/oracle/rman_bkups/MAINTS_7
channel ORA_DISK_4:datafile conversion complete, elapsed time: 00:00:01
Finished backup at 14-MAR-04
在上述例子中,轉換後的檔名難於辨認並很難與原始檔案關聯(例如,檔案 users01.dbf 變為 USERS_4)。 相反,您還可以使用其它格式來為資料檔案命名。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/35489/viewspace-666112/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 伺服器資料遷移的方法-硬體不同如何遷移資料伺服器
- Oracle10g 資料遷移方案(zt)Oracle
- Mysql資料遷移方法MySql
- 資料的遷移
- 資料庫中跨平臺遷移方法介紹資料庫
- 用prebuild mv 方法遷移資料Rebuild
- FreeBSD 資料遷移方法(轉)
- 遷移資料到Oracle的方法思考Oracle
- 資料遷移中需要考慮的問題
- 遷移已存在的資料庫到ASM中資料庫ASM
- ThinkPHP5.1 中的資料庫遷移和資料填充PHP資料庫
- 資料遷移中的資料庫檢查和建議資料庫
- 關於資料遷移的方法、步驟和心得
- Oracle資料庫升級或資料遷移的方法探討Oracle資料庫
- 資料檔案的遷移
- 資料遷移中的幾個問題總結
- 遷移資料.
- Hbase實用技巧:全量+增量資料的遷移方法
- 【遷移】使用rman遷移資料庫資料庫
- 資料庫檔案的遷移資料庫
- 不同的default tablespace資料遷移
- ABP8.1的資料遷移
- Oracle資料庫(DataGuard)遷移方案(中)Oracle資料庫
- EF 中多個資料庫遷移資料庫
- 1.1資料庫物件結構遷移方法資料庫物件
- mysql 備份與遷移 資料同步方法MySql
- 【資料遷移】使用傳輸表空間遷移資料
- Kafka資料遷移Kafka
- 資料庫遷移資料庫
- redis資料遷移Redis
- 轉資料遷移
- ORACLE 資料遷移Oracle
- DXWB 資料遷移
- Harbor資料遷移
- 線上資料遷移,數字化時代的必修課 —— 京東雲資料遷移實踐
- 資料遷移指令碼的快速生成指令碼
- 資料庫的冷備份遷移資料庫
- 資料庫的升級及遷移資料庫