expdpnf 匯出問題總結

strivechao發表於2019-07-17


中止僵死的expdp任務

--dba_datapump_jobs查詢資料泵作業


SELECT owner_name, job_name, operation, job_mode, 

state, attached_sessions 

FROM dba_datapump_jobs 

WHERE job_name NOT LIKE 'BIN$%' 

ORDER BY 1,2; 

 

OWNER_NAME JOB_NAME            OPERATION JOB_MODE  STATE       ATTACHED

---------- ------------------- --------- --------- ----------- --------

SCOTT      EXPDP_20051121      EXPORT    SCHEMA    EXECUTING          1

SCOTT      SYS_EXPORT_TABLE_01 EXPORT    TABLE     NOT RUNNING        0 

SCOTT      SYS_EXPORT_TABLE_02 EXPORT    TABLE     NOT RUNNING        0 

SYSTEM     SYS_EXPORT_FULL_01  EXPORT    FULL      NOT RUNNING        0


--查詢資料泵的master表

SELECT o.status, o.object_id, o.object_type,

       o.owner||'.'||object_name "OWNER.OBJECT"

  FROM dba_objects o, dba_datapump_jobs j

WHERE o.owner=j.owner_name AND o.object_name=j.job_name

   AND j.job_name NOT LIKE 'BIN$%' ORDER BY 4,2;

 

STATUS   OBJECT_ID OBJECT_TYPE  OWNER.OBJECT

------- ---------- ------------ -------------------------

VALID        85283 TABLE        SCOTT.EXPDP_20051121

VALID        85215 TABLE        SCOTT.SYS_EXPORT_TABLE_02

VALID        85162 TABLE        SYSTEM.SYS_EXPORT_FULL_01

--刪除master表

DROP TABLE scott.sys_export_table_02;

--對於啟用了recyclebin的系統,需要額外執行

purge dba_recyclebin;


-------------正常中止expdp作業---------------------------

--查到job_name

select * from dba_datapump_jobs;

OWNER_NAME   JOB_NAME  OPERATION  JOB_MODE   STATE                              DEGREE ATTACHED_SESSIONS DATAPUMP_SESSIONS

------------------------------------------------------------ ------------------------------ ----------

SYSTEM       SYS_EXPORT_FULL_01    EXPORT   FULL  EXECUTING                               1                 1                 3

--attach該任務

expdp system/sys attach=SYS_EXPORT_FULL_01

Export> stop_job

Export> KILL_JOB



修改正在執行匯入操作的impdp並行度,提高匯入效率

impdp uname/password attach=SYS_IMPORT_SCHEMA_01 ---回車,可以檢視該任務的詳細情況




rac expdp匯出時報錯:ORA-31693、ORA-31617、ORA-19505、ORA-27037

ac expdp匯出時報錯:
ORA-31693: Table data object "scott"."dept" failed to load/unload and is being skipped due to error:
ORA-31617: unable to open dump file "/home/oraclerac/dump_dir/oravs_expdp_05.dmp" for write
ORA-19505: failed to identify file "/home/oraclerac/dump_dir/oravs_expdp_05.dmp"
ORA-27037: unable to obtain file status
錯誤原因:
在RAC環境下如果PARALLEL引數設定大於1,程式會在RAC的各個節點上進行匯出。如果匯出目錄不共享的話就會報錯
解決方法:
1、設定為共享的directory;
2、匯出語句新增cluster=n選項,指定只在本地匯出;


 

expdp/impdp資料泵分割槽表匯入太慢了

分割槽表資料泵匯入太慢,達不到客戶的遷移要求

匯出語句如下:(10G單節點)

userid='/ as sysdba'

directory=milk_dir

dumpfile=mon_%U.dmp

logfile=0828.log

schemas=mon

parallel=8


匯入語句(11G的rac):

userid='/ as sysdba'

directory=milk_dir

dumpfile=mon_%U.dmp

logfile=0828.log

parallel=8

CLUSTER=N


整個過程匯出花費了3個小時不到,匯入花費了近10個小時。這個過程實在是太慢,,,,, 在整個匯入過程中,透過實時重新整理日誌,發現一到分割槽表的分割槽就賊慢,就算是一個分割槽只有22條資料。也要2分鐘重新整理一次,相當於兩分鐘匯入了160條資料,這速度,,,,,,,,,,,不行,,,,不行,,,,,

從新最佳化匯入的parfile:

userid='/ as sysdba'

directory=milk_dir

dumpfile=mon_%U.dmp

logfile=0828.log

parallel=8

ACCESS_METHOD=DIRECT_PATH

CLUSTER=N

 

匯入速度直接從花費10小時降為兩小時,符合遷移的效率

 ACCESS_METHOD=DIRECT_PATH

 官方的解釋:

 use ACCESS_METHOD=DIRECT_PATH to import the data, as this access method does not check the table metadata before import


ORA-01555解決匯出含clob欄位表報錯快照過舊問題

匯出含clob欄位的表資料,報快照過舊,無法匯出
該問題是因為含clob欄位表資料過大導致,需要修改資料庫閃回引數解決
檢視undo表空間大小是否足夠,undo_retention引數是否設定太小,一般跟undo空間無關,只需修改引數即可
目前解決辦法有兩個,加大retention或者使用pctversion
另外,對於使用MSSM表空間的表,只有pctverion可用,lob retention不可用

1、加大retention
檢視undo引數
SQL> show parameter undo
--修改undo閃回引數
alter system set undo_retention=7200 scope=both;


透過查詢oracle官網,oracle的lob大欄位有自己的retention引數,如果只調整undo_retention,而沒有同步到lob大欄位,該引數還是預設的900s,確認查詢結果如下:
select table_name,column_name,pctversion,retention from dba_lobs where table_name='T_PATIENT_DOC_COLB';
select table_name,column_name,pctversion,retention from dba_lobs where table_name='T_PATIENTS_DOC_CA';
select table_name,column_name,pctversion,retention from dba_lobs where table_name='T_CARE_DOC';

修改表含有lob大欄位的retention設定
ALTER TABLE T_PATIENT_DOC_COLB MODIFY LOB(CONTENT)(retention);
ALTER TABLE T_PATIENTS_DOC_CA MODIFY LOB(SIGN)(retention);
ALTER TABLE T_PATIENTS_DOC_CA MODIFY LOB(TIMESTAMP)(retention);
ALTER TABLE T_CARE_DOC MODIFY LOB(CARE_DOC)(retention);

2、使用pctversion
從結果中可以看到, 當顯示指定pctversion的時候,retention引數會失效
SQL> alter table T_PATIENTS_DOC_CA modify lob(SIGN) (pctversion 10);
SQL> select column_name, pctversion, retention from user_lobs where table_name = 'T_PATIENTS_DOC_CA';
COLUMN_NAME          PCTVERSION  RETENTION
------------------------------   ---------   ----------
SIGN                           10
TIMESTAMP                               7200



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

相關文章