首先說導出。當然,導出在一般情況下,是很順利的,也很簡單。具體的操作過程,大家可以檢視我部落格中是這篇文章Oracle-備份與恢複_資料泵 expdp/impdp。略有不同的是,此次導出,采用了并行。
關于并行參數
PARALLEL
,可參看我的部落格中,轉載的另一篇文章Oracle-expdp/impdp 中的并行度PARALLEL參數。其中,說明了此參數的用法及相關注意事項。
導出參考腳本如下:
expdp \'/as sysdba\' directory=DUMP schemas=schemas_name compression=all cluster=N PARALLEL=4 filesize=8g dumpfile=schemas_name20221027_%U.dmp logfile=schemas_name20221027.log
導入參考腳本如下:
##導入腳本
impdp \'/as sysdba\' directory=DUMP schemas=schemas_name cluster=no PARALLEL=4 transform=OID:N dumpfile=schemas_name20221027_%U.dmp logfile=schemas_name20221027_impdp.log
導入的過程中,遇到了如下錯誤提示:
MINVALUE:指定序列的最小值。最多28位數字。MINVALUE <=START WITH,MINVALUE < MAXVALUE。 此處不符,則報:ORA-04006: START WITH cannot be less than MINVALUE。不指定此參數時,預設是1.
那麼,這裡可以修改成 MINVALUE -1999 或 START WITH 1,都可以解決此問題。
ORA-39083: Object type SEQUENCE failed to create with error:
ORA-04006: START WITH cannot be less than MINVALUE
Failing sql is:
CREATE SEQUENCE "SCHEMAS_NAME"."XXX_XXX_XXX_XXX_XXX" MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH -1999 CACHE 10000 NOORDER NOCYCLE
從别處上傳的DMP檔案不完整導緻,重新上傳完整檔案即可
ORA-31693: Table data object "SCHEMAS_NAME"."T_XX_XXX_XXXX" failed to load/unload and is being skipped due to error:
ORA-31645: unable to read from dump file "/oracle/dumptmp/SCHEMAS_NAME20221027_02.dmp"
ORA-31622: premature end of file at block 1869505
建立時出現編譯警告,也是由于存儲過程、方法等有中文導緻:重新編譯失效對象。
ORA-39082: Object type ALTER_PROCEDURE:"SCHEMAS_NAME"."XXX_XXX_XXX" created with compilation warnings
ORA-39082: Object type ALTER_FUNCTION:"SCHEMAS_NAME"."XXX_XXX_XXX" created with compilation warnings
ORA-39082: Object type PACKAGE_BODY:"SCHEMAS_NAME"."XXX_XXX_XXX" created with compilation warnings
##我是這樣處理
SQL> exec dbms_utility.compile_schema('SCHEMAS_NAME');
PL/SQL procedure successfully completed.
oracle使用者下的環境變量參數 NLS_LANG 配置錯誤導緻。如果基本參數 nls_language是 AMERICAN,那麼 NLS_LANG=AMERICAN_AMERICA.ZHS16GBK 即可。
UDI-12705: operation generated ORACLE error 12705
ORA-12705: Cannot access NLS data files or invalid environment specified
對于create type失敗,可在導入指令中末尾加上 transform=OID:N
當我們使用expdp/impdp工具進行同資料庫執行個體(Instance)不同Schema之間資料拷貝時,如果schema中有type類型,就會出現這個錯誤。
如果TRANSFORM參數設定成OID=N,表示在imp的時候,新建立的表或這個類型會賦予新的OID,而不是dmp檔案中包含的OID的值。但是這個參數的預設值是OID=Y,是以在進行Imp的時候,新建立的表或者type會賦予同樣的OID,如果是位于同一個資料庫上的不同schema,那就會造成OID沖突的問題,是以解決這個問題也很簡單,隻需要在impdp的時候,顯示設定transform 參數為OID=N,即 transform=OID:N 就可以了。
ora-39083:object type TYPE failed to create with error:
ora-02304:invalid object identifier literal
failing sql is:
"CREATE TYPE "T_TYP" TIMESTAMP '2012-03-07:10:47:03' OID '8E294AB7CC28493A94"
"FF82791A376379' as object (id number);"