exp/imp和expdp/imp在跨使用者邏輯遷移資料時的差異

wxjzqym發表於2012-04-19

    在日常工作中我們經常需要將源庫的一個使用者下的資料匯入到目標庫的另一個使用者下,透過exp/imp和expdp/impdp就可以很方便的實現。比如exp/imp中可以透過fromuser和touser來實現跨使用者遷移資料,而expdp/impdp中則可以透過remap_schema來實現;通常情況下每個使用者所在的預設表空間都不同,假設使用者A所在預設表空間為TBS_A,使用者B所在預設表空間為TBS_B。
    為了將A使用者的t表遷移到B使用者中,實現命令如下:
    1. exp/imp(匯入匯出前正確設定NLS_LANG環境變數,防止亂碼)
     exp system/oracle file=t.dmp tables=a.t(源庫執行)
     imp system/oracle file=t.dmp fromuser=a touser=b(目標庫執行)
     2. expdp/impdp
     expdp system/oracle directory=test dumpfile=t.dmp tables=a.t(源庫執行)
     impdp system/oracle directory=test dumpfile=t.dmp full=y remap_schema=a:b(目標庫執行)
    問題描述:這裡有個前提就是目標庫中並沒有TBS_A這個表空間,那麼在使用傳統的exp/imp匯入時匯入會執行成功,但是這時在B使用者下的T表所在的表空間為TBS_B;而如果在使用expdp/impdp匯入時則會報"ORA-00959: tablespace 'TBS_A' does not exist"的錯誤。
    解決方法:
                
1.無論是exp/imp還是expdp/impdp只要在匯入前在目標庫上建立TBS_A表空間即可。
                 2.針對於expdp/impdp使用remap_schema=TBS_A:TBS_B來解決即可。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/20801486/viewspace-721655/,如需轉載,請註明出處,否則將追究法律責任。

相關文章