導出與導入后對象采用不同表空間的實現方法
如果是整個表空間的 導出導入,則可直接采用可傳輸的表空間特性,具體步驟如下:
1.先檢測要導出的表空間:即檢查該表空間的所有對象是否都在這個表空間中,如果有部分對象在別的表空間,則無法導出該表空間。
采用sys.dbms_tts.transport_set_check過程進行檢測
執行好后,查看表transport_set_violations是否有記錄,若有則表明有對象存在於別的表空間中
select * from sys.transport_set_violations;
總結:如果該表有記錄,則必須對該表指出的這些對象重新置於本表空間中,否則會提示ora-29341:可傳送集不是自包含的。
檢測成功后,在執行第二步
2.將表空間置於只讀狀態
執行后提示輸入用戶,此時輸入:sys/change_on_install@fd as sysdba
注:1)執行可傳輸的表空間導出,必須采用sys用戶,否則提示:
EXP-00000: 導出終止失敗
2)sys/change_on_install@fd as sysdba 該用戶名密碼不能直接在exp導出語句中寫,如果寫成
則提示 LRM-00112: 參數 'userid' 不允許有多個值
4.拷貝dmp文件到需要導入的機器,如放在d盤下
5.執行導入
imp file=d:\dd.dmp transport_tablespace=y datafiles=/home/oradba/ff.dbf
同樣會提示輸入用戶名,與導出的一樣,采用sys用戶
但如果只是想導出表空間某幾個表,而表空間又不一樣,則執行步驟如下
1.導出
exp username/password@sid file=d:\xx.dmp tables=(table1,table2)
2.拷貝dmp文件到目的機器
3.在准備導入的庫上先創建好要導入的表
可以采用將源庫上的創建表腳本導出后修改下表空間先創建好
4.執行導入,導入時將錯誤忽略 ignore=y