exp 可傳輸表空

2021-06-08 11:32:50 字數 2171 閱讀 2872

exp --help幫助中可以看見這樣的乙個引數

transport_tablespace 匯出可傳輸表空間元資料

通過這個選項對一組自包含,唯讀的表空間只匯出元資料,然後在作業系統層將這些表空間的書記檔案拷貝到目標平台,並將元資料匯入資料字典 這個過程稱為插入 plugging 即完成了遷移

對於傳輸表空間有乙個重要的概念:自包含 (self-contained)

在表空間的傳輸中,要求表空間集為自包含

自包含: 表示用於傳輸的內部表空間集沒有引用指向外部的表空間集

自包含又分為兩種:一種自包含表空間集 第二為:完全(嚴格)自包含表空間集

常見的一下情況是違反自包含原則的

1,索引在內部表空間集,而表在外部表空間集(相反的,如果表在內部表空間集,而索引在外部表空間集,則不違反自包含原則)

2,分割槽表一部分區在內部表空間集,一部份在外部表空間集(對於分割槽表,要麼全部包含在內部表空間集中,要麼全不包含)

3,如果在傳輸表空間同事傳輸約束,則對於用完整性約束,約束指向的表在外部表空間集,則違反自包含約束,如果不傳輸約束,則與約束指向無關。

4,表在內部表空間集,而lob列在外部表空間集,則違反自包含約束。

通常可以通過系統包dbms_tts來檢查表空間是否自包含,驗證可以兩種方式執行;非嚴格方式和嚴格方式。

eg:做乙個簡單是實驗來證實:

假如test 表空間存在乙個表test ,其上存在索引儲存在users表空間;

sql>create table test as select rownum id,username from dba_users;

sql>create index ind_id on test(id) tablespace users;

用 sys使用者執行非嚴格自包含檢查(full_check=false)

sql>connect /as sysdba

sql>exec dbms_tts.transport_set_check('test',true);

sql>select * from transport_set_violations;

執行嚴格自包含檢查(full_check=true)

sql>exec dbms_tts.transport_set_check('test',true,true);

sql>select * from transport_set_violations;

對於test表空間來說非嚴格自包含檢查成功通過,執行嚴格自包含檢查無法通過。

我們反過來對users表空間進行非嚴格自包含檢查測試

sql>exec dbms_tts.transport_set_check('users',true);

sql>select * from transport_set_violations;

非嚴格自包含檢查都無法通過

那麼我們來同時對多個表空間進行傳輸問題是不是能得到解決呢?測試下

sql>exec dbms_tts.transport_set_check('test,users',true,true);

sql>select * from transport_set_violations;

嚴格自包含檢查也可以成功通過

表空間自包含檢查完後進行表空間傳輸就方便了

(1)首先將表空間設定成唯讀表空間

sql>alter tablespace users read only;

(2)匯出表空間

exp username/password tablesapces=users tranport_tablespace=y file=exp_users.dmp

此時匯出的元資料,比較小

(3)轉移需要資料,元資料exp_users.dmp,資料檔案user01.dbf傳輸到目標主機,如果通過ftp傳輸需要注意用bin二進位制傳輸。

(4)在目標資料庫中將表空間插入到資料庫中

imp username/password tablesapces=users tranport_tablespace=y file=exp_users.dmp datafiles='user01.dbf'

如果表空間包含多個資料檔案該怎麼辦呢?下面是解決辦法:

imp transport_tablespace=y datafiles=('資料檔案1全路徑','資料檔案2全路徑',...) tablespaces=目標表空間名稱 file=dmp檔案全路徑.dmp

exp空表處理

exp aa aa orcl file d 匯出空表資料 1.select alter table table name allocate extent from user tables where segment created no 查出空表 然後往空表裡面插入資料,匯出後在刪除 2.配置環境 ...

給空表 分配表空間,使得exp 命令能匯出空表

select alter table table name allocate extent from user tables where num rows 0 設定deferred segment creation 引數為false後,無論是空表還是非空表,都分配segment。在sqlplus中,...

oracle 11g 匯出空表 exp 匯出

oracle 11g 匯出空表 exp 匯出 在沒有dba許可權的條件下,用exp 匯出是乙個不錯的選擇,但是在遇到空表的情況下 11g預設不匯出空表,則可以進行如下操作 對已存在的表 執行如下 要經過統計分析後 num rows 0 才準確 分析表例子 analyze table test1 co...