ORA-39002和ORA-39166報錯處理和探究

賀子_DBA時代發表於2016-10-11
    需要把生產環境的某張表,使用expdp匯出,然後使用impdp倒進本地測試環境的另一個使用者下,在匯入的時候報錯ORA-39166:
下面具體操作過程:
     首先在源端expdp出來,這裡我們按著時間條件匯出來的,並且由於我的測試環境是11.2.0.1.0,但是源端11.2.0.4.0,目標端版本底,所以需要使用引數version。
[oracle@oracle3 ~]$ expdp liuwenhe/liuwenhe directory=DATA_MIG_DIR tables=INFOSERVICE.t_publish_info dumpfile=t_publish_info09.dmp   query=\"where publish_date\>\=to_date\(\'2016-09-01\',\'yyyy-mm-dd\'\) and publish_date\<\to_date\(\'2016-10-01\',\'yyyy-mm-dd\'\) \" version=11.2.0.1.0  
然後通過sftp傳到跳板機
[liuwenhe@S220 ~]$ sftp root@192.168.0.214
Connecting to 192.168.0.214...
Address 192.168.0.214 maps to localhost, but this does not map back to the address - POSSIBLE BREAK-IN ATTEMPT!
root@192.168.0.214's password:
sftp>
sftp> cd /home/oracle/dp_dir
sftp> ls
mig_parallel_53.dmp          nohup.out                   
t_publish_info09.dmp         t_publish_zbxx09.dmp.gz      t_publish_zbxx_2015.dmp.gz   tpz_20142015_01.dmp.gz       tpz_20142015_02.dmp          user_regist_ls_fail.dmp      x                           
sftp> get  t_publish_zbxx09.dmp
之後通過securefx 傳到本地。
執行匯入操作,發現報錯,具體如下,
C:\Users\manet>impdp liuwenhe/liuwenhe@140 directory=backup dumpfile=t_publish_info09.dmp   remap_schema=infoservice:liuwenhe  remap_tablespace=infoservice:LIU_TBS  tables=INFOSERVICE.t_publish_info;

Import: Release 11.2.0.1.0 - Production on 星期一 10月 10 16:11:50 2016

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

連線到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-39002: 操作無效
ORA-39166: 找不到物件 INFOSERVICE.T_PUBLISH_INFO;。
看到這個報錯,我仔細檢查了directory的許可權,以及dump檔案和liuwenhe使用者的許可權存在否,都沒問題,之後懷疑是網路傳輸導致丟包,於是重新down了一份,傳輸到本地,執行。依舊報同樣的錯。在mos上查詢之後,有提示說:
如果impdp使用remap_schema,匯入dmp的所有資料時則不需要指定tables引數。
然而這裡我確實是想把所有的資料都導進去,是不是不用tables這個引數啊,於是我修改impdp匯入語句,
C:\Users\manet>impdp liuwenhe/liuwenhe@140 directory=backup dumpfile=t_publish_info09.dmp   remap_schema=infoservice:liuwenhe  remap_tablespace=infoservice:LIU_TBS
真的成功了。。。。
下面是網上的一篇文章。
需求:把生產上以某些字母開頭的表匯入到測試環境的其它使用者中。
實現方法:
1.在生產環境使用expdp的模糊匯出功能,先匯出這些表。
2.在測試使用impdp的remap_schema功能將這些表匯入到測試環境的其它使用者。
實現過程:
1.expdp匯出表         
$ expdp scott/tiger   DIRECTORY=DPUMPDIR DUMPFILE=scott220.DMP tables=prod% JOB_NAME=MYJOB3 LOGFILE=scottEXP.LOG
2.impdp匯入表
$ impdp username/password  directory=DPUMPDIR dumpfile=scott220.DMP tables=prod_201203_26  remap_schema=scott:liangweilogfile=impdp.log
Import: Release 11.2.0.3.0 - Production on Mon Nov 12 11:32:47 2012
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
With the Partitioning, Data Mining and Real Application Testing options
ORA-39002: invalid operation
ORA-39166: Object liangwei.prod_201203_26 was not found.
匯入過程中,只匯入指定表出現ORA-39002,ORA-39166錯誤。

如果impdp使用remap_schema,且指定要匯入的表時,要指定表的schema (也就是需要使用tables這個引數)。
$ impdp username/password directory=DPUMPDIR dumpfile=scott220.DMP tables=scott.prod_201203_26  remap_schema=scott:liangwei logfile=impdp.log


如果impdp使用remap_schema,匯入dmp的所有資料時則不需要指定tables引數。
$ impdp username/password directory=DPUMPDIR dumpfile=scott220.DMP   remap_schema=scott:liangwei logfile=impdp.log

    總結:m如果你從源端down下來了好多個表或者down下來了某個使用者(包含多個表),此時你只想impdp其中的一部分表,並且需要匯入進另一個使用者,也就是需要使用remap_schema引數,這個時候你需要使用tables引數指定你需要匯入的表,如果你要匯入dump檔案的所有的資料,這個時候你不能使用tables引數,否則報錯ORA-39166;

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

相關文章