Oracle10g 中的資料遷移的方法

tolywang發表於2010-06-24

 


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 檔案格式 _ 的檔案。注重我們沒有觸及表空間 USERS 的資料檔案;而是為 HP-UX 建立了一個新檔案。現在可以將這個檔案複製至目標系統,剩下的步驟很簡單。
  
  這個 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/,如需轉載,請註明出處,否則將追究法律責任。

相關文章