Oracle8i 中引入的可傳輸資料表空間為實現更快的跨資料庫資料轉送提供了迫切需要的支援。使用此特性,您可以只匯出資料表空間的中繼資料、傳輸資料檔案並將轉儲檔案匯出到目標資料庫主機以及匯入中繼資料以將資料表空間“插入”到目標資料庫中。該資料表空間中的資料在目標資料庫中隨即可用。該方法解決了資料倉儲中曾一度存在的一個很棘手的問題:快速、高效地跨資料庫移動資料。
但在 OLTP 資料庫中,該條件通常是不可能存在的,因此傳輸資料表空間也是不可能的。如果 OLTP 資料庫是資料倉儲的資料來源,則您可能始終無法使用可傳輸資料表空間載入它。
在 Oracle 資料庫 10g 第 2 版中,可以傳輸資料表空間並從另一個資料來源(即備份)中插入它。例如,如果要傳輸資料表空間 ACCDATA,則可以發出 RMAN 命令
RMAN> transport tablespace accdata
2> TABLESPACE DESTINATION = '/home/oracle'
3> auxiliary destination = '/home/oracle';
該命令在位置 /home/oracle 中建立一個輔助執行個體,並從其中的備份恢複檔案。此輔助執行個體的名稱是隨機產生的。建立執行個體後,該過程將基於目錄建立一個目錄對象,並恢複資料表空間 ACCDATA(我們正在傳輸的資料表空間)的檔案 - 所有操作均自動完成,您不必發出任何命令!
目錄 /home/oracle 將包含資料表空間 ACCDATA 的所有資料檔案、資料表空間中繼資料的轉儲檔案以及指令碼 impscrpt.sql(最重要的)。該指令碼包含將此資料表空間插入目標資料表空間所必需的所有命令。該資料表空間並非由 impdp 命令進行傳輸,而是通過對 dbms_streams_tablespace_adm.attach_tablespaces 程式包的調用進行傳輸。可以在該指令碼中找到所有必要的命令。
您可能會問,如果出現錯誤該怎麼辦?這種情況下,可以輕鬆地進行診斷。首先,該輔助執行個體在 $ORACLE_HOME/rdbms/log 中建立警報記錄檔,以便您可以檢查該日誌以查明潛在的問題。其次,在提供 RMAN 命令時,您可以通過發出 RMAN 命令(該命令將所有輸出置於檔案 tts.log 中)將命令和輸出重新導向到記錄檔
rman target=/ log=tts.log
然後,您便可以檢查該檔案來查明故障的確切原因。
最後,將把這些檔案恢複到 /home/oracle 的 TSPITR_<SourceSID>_<AuxSID> 目錄中。例如,如果主要資料庫的 SID 為 ACCT,RMAN 建立的輔助執行個體的 SID 為 KYED,則目錄名為 TSPITR_ACCT_KYED。該目錄還包含兩個其他子目錄:datafile(用於資料檔案)和 onlinelog(用於重做日誌)。在完成新資料表空間的建立之前,可以查看該目錄以瞭解恢複了哪些檔案。(這些檔案在該過程結束時會被刪除。)
長期以來,DBA 一直期待著能夠通過 RMAN 備份建立一個可傳輸的資料表空間。但請注意,您是從備份(而不是從聯機資料表空間)中插入傳輸的資料表空間。因此,它將不是最新的。