熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

Oracle 10g 可傳輸表空間現在可以跨平台移植

2013-11-13 15:50:47  來源: Oracle 

  可傳輸表空間現在可以跨平台移植從而使得數據發布更快更容易此外外部表下載使得通過轉換進行數據轉移的任務更簡單更快
  
  您如何將數據從一個數據庫轉移到另一個數據庫?在現有的幾種方法中有一種方法尤為出色可傳輸表空間在這種方法中您使用一組自包含只讀的表空間只導出元數據在操作系統層將這些表空間的數據文件拷貝至目標平台並將元數據導入數據字典 — 這個過程稱為插入
  
  操作系統文件拷貝一般比其它傳統的數據轉移方法(如導出/導入或 SQL*Loader)要快得多然而在 Oraclei 數據庫和更低版本中可傳輸表空間僅限於在目標數據庫和源數據庫都運行在同一操作系統平台上的少數情況下才有用 — 例如您不能在 Solaris 和 HPUX 平台之間傳輸表空間
  
  在 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
   HPUX (bit)           Big
   HPUX IA (bit)          Big
   HP Tru UNIX            Little
   AIXBased 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_usersdmp
  exp_ts_usersdmp 文件只包含元數據(不是表空間 USERS 的內容)因此它將非常小
  
  將文件 exp_ts_usersdmp 和 users_dbf 拷貝至主機 TGT如果您使用 FTP那麼您將需要指定二進制選項
  
  將表空間插入到數據庫中在操作系統命令提示符下執行下面的語句
  imp tablespaces=users transport_tablespace=y file=exp_ts_usersdmp datafiles=users_dbf
  在第 步之後目標數據庫將有一個名稱為 USERS 的表空間並將提供該表空間的內容
  
  請記住系統 SRC 和 TGT 分別是 Linux 和 Windows到 Oraclei 為止運行在 TGT 上的數據庫不能識別第 步中的數據文件 users_dbf從而使得整個過程無用您將必須求助其它一些方法(如常規的導出和導入創建純文本文件並通過 SQL*Loader 加載或直接在不同的數據庫間連接加載插入)
  
  在 g 中不再需要這些替代方法因為目標數據庫能夠識別來自另一個平台的數據文件在我們的示例中源主機和目標主機運行的操作系統的字節順序是相同的(低地址低字節序)因此不需要任何轉換
  
  這個功能在數據倉庫中特別有用其中更小的面向對象的數據集市常常在刷新之後從倉庫中進行填充利用 g這些數據集市現在能夠放在更小更廉價的計算機(如運行 Linux 的 Intel boxes)中而將數據倉庫服務器放在更大的企業級計算機中從本質上講利用可傳輸表空間您現在可以更好地利用各種硬件和操作系統的組合
  
  跨不同字節順序的平台
  如果平台是不同字節順序的那麼您將如何實現可傳輸性?正如我之前說明的目標計算機的字節順序如果與源計算機的字節順序不同那麼將不能正確地讀取數據文件因而不可能簡單地拷貝數據文件但別灰心在 Oracle g RMAN 實用程序中提供了幫助它支持將數據文件從一種字節順序向另一種字節順序轉換
  
  在上面的例子中如果主機 SRC 運行在 Linux 上(低地址低字節序)而目標主機 TGT 運行在 HPUX 上(低地址高字節序)那麼您需要在第 步和第 步之間引入另一個步驟以進行轉換利用 RMAN您將在源計算機 SRC 上把數據文件從 Linux 轉換成 HPUX 格式(假定您已經使表空間變為只讀)
  RMAN> convert tablespace users
  > to platform HPUX (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/usersdbf
  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 的數據文件而是為 HPUX 創建了一個新文件現在可以將這個文件拷貝至目標系統剩下的步驟很簡單
  
  這個 RMAN 轉換命令非常強大按照上面給定的形式它可以按順序創建數據文件對於包含多個數據文件的表空間您可以命令同時轉換並運行多個數據文件要實現這一目的您將需要在上述命令中添加一個子句
  parallelism =
  
  該子句創建四個 RMAN 通道每一個通道處理一個數據文件不過一種更有用的方法是用一個步驟轉換大量的表空間在這種情況下並行轉換將真正帶來很大的幫助下面我們將兩個表空間 USERS 和 MAINTS 轉換至 HPUX
  RMAN> convert tablespace users maints
  > to platform HPUX (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/usersdbf
  channel ORA_DISK_:starting datafile conversion
  input datafile fno= name=/usr/oradata/dw/dw/usersdbf
  channel ORA_DISK_:starting datafile conversion
  input datafile fno= name=/usr/oradata/dw/dw/maintsdbf
  channel ORA_DISK_:starting datafile conversion
  input datafile fno= name=/usr/oradata/dw/dw/maintsdbf
  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
  
  在上述例子中轉換後的文件名難於辨認並很難與原始文件關聯(例如文件 usersdbf 變為 USERS_相反您還可以使用其它格式來為數據文件命名這個過程
From:http://tw.wingwit.com/Article/program/Oracle/201311/17393.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.