Oracle的傳輸資料表空間是指,可以將一個資料庫上的一個或多個資料表空間的全部資料檔案拷貝到另一個資料庫伺服器上,通過匯入的方式將資料表空間載入當目標資料庫。
使用這種方法的最大好處是速度快,所需要的時間和拷貝資料檔案差不多,比執行EXP/IMP的匯入匯出要快得多。
傳輸資料表空間的限制條件:
源和目標資料庫必須使用相同的字元集和國家字元集(分別對應nls_database_parameters視圖的NLS_CHARACTERSET與NLS_NCHAR_CHARACTERSET值)
如果要傳輸到其它os平台,compatible必須要設定為10.0以上。
Oracle提供了過程dbms_tts.transport_set_check來檢查一個資料表空間集合是否是自包含的。這個過程有三個參數,第一個是資料表空間名字的列表,用逗號分隔,第二個參數指出是否檢查完整性條件約束,第三個參數指出檢查集合內參考集合外的同時是否反過來檢查集合外是否參考了集合內的對象。
執行完過程後,查詢檢視transport_set_violations查看檢查結果 ,如果為空白,說明是自包含的,可以進行傳輸資料表空間。
實驗:
--源端建立測試資料表空間與測試使用者
SQL> create tablespace t_tbs datafile 'G:\oracle\product\10.2.0\oradata\orcl\t_tbs01.dbf'
2 size 10M;
資料表空間已建立。
SQL> create user test identified by test;
使用者已建立。
SQL> grant connect,resource to test;
授權成功。
SQL> conn test/test@orcl
已串連。
SQL> create table t_t (id int) tablespace t_tbs;
表已建立。
SQL> insert into t_t select level from dual connect by level<100;
已建立99行。
SQL> commit;
提交完成。
--1.源端檢查自包含
SQL> show user
USER 為 "SYS"
SQL> execute dbms_tts.transport_set_check('t_tbs',true);
PL/SQL 過程已成功完成。
SQL> select * from transport_set_violations;
未選定行
--2.源端在匯出之前置資料表空間為唯讀
SQL> alter tablespace t_tbs read only;
資料表空間已更改。
--3.執行匯出 ,需sysdba
SQL> ho exp 'sys/oracle@orcl as sysdba' transport_tablespace=y tablespaces=t_tbs file=d:t_tbs.dmp
Export: Release 10.2.0.1.0 - Production on 星期四 8月 30 22:16:12 2012
Copyright (c) 1982, 2005, Oracle. All rights reserved.
串連到: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
已匯出 ZHS16GBK 字元集和 AL16UTF16 NCHAR 字元集
注: 將不匯出表資料 (行)
即將匯出可傳輸的資料表空間中繼資料...
對於資料表空間 T_TBS...
. 正在匯出簇定義
. 正在匯出表定義
. . 正在匯出表 T_T
. 正在匯出參考完整性約束條件
. 正在匯出觸發器
. 結束匯出可傳輸的資料表空間中繼資料
成功終止匯出, 沒有出現警告。