關於DataPump工具引發OGG中斷原因
關於DataPump工具引發OGG中斷原因
一、問題描述
根據業務需求,備份某表中一行資料,在執行完該備份命令後,造成OGG中斷,造成中斷語句如下:
ORA-06564: object DIR_DP does not exist SQL CREATE TABLE XXX."ET$017DB8C30001" ( "ID", ..........--此處省略其他列資訊 "ROLE" ) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY DMP_TEST ACCESS PARAMETERS (DEBUG =0 DATAPUMP INTERNAL TABLE "FIRSOUL"."TEST" JOB ( "FIRSOUL","FIRSOUL_TEST12301",1) WORKERID 1 PARALLEL 1 VERSION COMPATIBLE ENCRYPTPASSWORDISNULL ) LOCATION ('bogus.dat') ) PARALLEL 1 REJECT LIMIT UNLIMITED AS SELECT "ID", ...... "ROLE" FROM RELATIONAL("FIRSOUL"."TEST" ) KU$ where id=20141230; |
從以上資訊可以看出,在執行expdp時,Oracle資料庫以建立外部表的方式匯出資料,在建立外部表時,會指定一個目錄(DIRECTORY),由於OGG目標端沒有該目錄造成此語句執行失敗。此前一直使用expdp工具做相關備份、匯出資料,並未發現此問題,問題出現後,在測試系統上分析引發該問題原因。
二、 問題分析過程
匯出語句如下:
---全表匯出語句
expdp
firsoul/firsoul DIRECTORY=dmp_test tables=test DUMPFILE=firsoul_table04.dmp
logfile=exp_firsoul_table03.log |
此次匯出,先執行一次全表匯出,而後執行的匯出表中一行資料,資料庫中建立外部表語句是在執行第二條語句後出現的。
檢視相關資料,得知,DataPump可以透過直接路徑和外部表路徑這兩種方法匯出資料。
1)直接路徑方式避開了資料庫快取記憶體,當使用直接路徑模式抽取資料時,DataPump從磁碟直接讀取資料檔案,抽取和格式化檔案內容,最後將內容寫出的轉儲檔案。該種方式和SGA互動等待少,其匯入匯出速度直接取決於資料庫所在磁碟速度和cpu,因此,直接路徑極為快速。
2)外部表路徑模式將使用到資料庫的告訴快取buffer
cache,透過外部表路徑方式匯出資料時,DataPump使用普通的SELECT操作將資料塊從資料檔案中讀入BUFFER CACHE,為了寫出轉儲檔案,資料會在儲存中備格式化。透過外部表路徑匯入時,DataPump根據轉儲檔案的內容構造標準的插入語句,並且透過將資料塊從資料檔案讀至快取來執行這些語句,插入操作按照標準的樣式在快取中完成,如同普通DML操作一樣,外部表路徑也會同時產生撤銷和重做。
DataPump工具會根據物件的複雜性自動選擇使用直接路徑還是外部表路徑方式,對於複雜的物件,為了分解複雜性而必須同SGA進行互動,此情況下DataPump只能採用外部表模式。我們可以透過access_method引數來控制其行為。例如一下語句
[oracle@firsoul backup]$ expdp firsoul/firsoul DIRECTORY=dmp_test tables=t_pic_edit query=t_pic_edit:"where id=20141230" DUMPFILE=firsoul_table07.dmp logfile=exp_firsoul_table07.log access_method=direct_path
Export: Release 11.2.0.3.0 - Production on Wed Dec 31 11:10:10 2014
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 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options ORA-39001: invalid argument value ORA-39033: Data cannot be filtered under the direct path access method. |
如以上資訊得知,我們無法使用直接路徑匯出資料,也就是當expdp匯出語句中存在引數query時,無法使用直接路徑方式,即使我們透過access_method引數指定,DataPump也會報錯。
注意事項:在做DataPump相關操作時,建議新增access_method引數,尤其在配有OGG、DG等災備工具的系統上,以免出現建立外部表語句造成OGG、DG等災備工具中斷。
三、關於Datapump選擇匯出方式參考(參考文章:%e5%85%b3%e4%ba%8edatapump%e7%9a%84external_table%e6%a8%a1%e5%bc%8f.html)
若滿足右列條件EXPDP將採用direct_path即直接路徑模式 |
表結構允許使用直接路徑模式,舉例而言: 表上沒有啟用針對SELECT操作的fine-grained access control 非佇列表(queue table) 表上沒有BFILE和opaque型別的列,或包含有opaque列的物件型別 表上沒有加密列 表上沒有被廢棄的舊型別列
若表上存在LONG或LONG RAW型別列,則此列只能是最後一列 需要匯出的表或分割槽相對較少(多達250M),亦或者表或分割槽其實很大,但匯出任務無法工作在並行模式(未指定parallel引數,或parallel引數設定為1) |
若滿足右列條件EXPDP將採用external_table即外部表模式 |
資料結構不滿足在直接路徑模式下抽取的條件,舉例而言: 表上啟用了針對SELECT操作的精細粒度控制 佇列表 表上包含了BFILE或opaque型別列,或者包含有opaque列的物件型別 表上存在加密列 表上存在被廢棄的舊型別列 表上存在LONG或LONG RAW型別列,且不是最後列 資料結構滿足使用直接路徑模式的條件,但執行匯出任務時相關表上指定了QUERY, SAMPLE, or REMAP_DATA等引數 資料結構滿足使用直接路徑模式的條件,但相關的表或分割槽相對較大(大於250M),此時並行SQL可以用來加速資料抽取 |
若滿足右列條件IMPDP將採用direct_path即直接路徑模式 |
資料結構滿足使用直接路徑模式的條件,舉例而言: 當匯入某單一表分割槽時該分割槽表上沒有建立全域性索引,這一點也包括分割槽的物件表 沒有基於LOB列建立的域索引(domain index) 非cluster表 表上沒有BFILE列或opaque型別列 表上沒有嵌入了opaque型別的VARRAY列 表上沒有加密列 沒有啟用補全日誌(Supplemental logging)且表上沒有LOB型別列 若匯入表已預先建立了表建構,則需滿足以下條件: 表上沒有啟用的觸發器 並且 若是分割槽表則應有索引 並且 表上上沒有啟用針對INSERT操作的精細粒度控制 並且 表上除去check型別約束不存在其他型別約束 並且 表上沒有unique的索引 執行匯入任務時沒有為相關表指定QUERY, REMAP_DATA等引數 需要匯入的表或分割槽相對較小(少於250M),或者表或分割槽其實很大,但無法以並行模式匯入(未指定parallel引數或指定其為1) |
若滿足右列條件IMPDP將採用external_table即外部表路徑 |
當資料結構不滿足在直接路徑模式下匯入的條件,舉例而言: 當匯入某單一表分割槽時該分割槽表上建有全域性索引,這一點也包括分割槽的物件表 表上有基於LOB列建立的域索引(domain index) cluster表 表上有BFILE列或opaque型別列 表上有嵌入了opaque型別的VARRAY列 表上有加密列 啟用了補全日誌且表上有至少一個LOB列 若匯入表已預先建立了表建構,且滿足以下條件: 表上有啟用的觸發器 或者 是分割槽表且沒有任何索引 或者 表上啟用了針對INSERT操作的精細粒度控制 或者 表上除去check型別約束還還有其他型別約束 或者 表上有unique的索引 執行匯入任務時有為相關表指定QUERY, REMAP_DATA等引數 資料結構滿足使用直接路徑模式的條件,但相關的表或分割槽相對較大(大於250M),此時並行SQL可以用來加速資料匯入 |
四、問題總結:
在執行第二條語句(匯出表中某一行)時,由於語句複雜性(引數query),需要檢索表中資料,進而必須與SGA進行互動,DataPump工具就會選擇透過外部表方式匯出資料,在匯出時出現建立外部表語句,而造成OGG中斷。如上述注意事項,在使用DataPump工具時,建議新增access_method引數(預設選擇直接路徑匯出方式),當DataPump工具強行選擇使用外部表方式匯出時,DataPump語句會報錯,以免造成OGG、DG等災備工具中斷及其他問題。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29487349/viewspace-1389858/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- OGG-01031 由於網路中斷導致datapump程式ABENDED的恢復方法
- 關於OGG單表同步
- 執行緒中斷以及執行緒中斷引發的那些問題執行緒
- 由OGG引發的資料庫故障資料庫
- Oracle JOB異常中斷原因分析Oracle
- ogg引數解析
- OGG-01031和OGG-01232 與目標主機連線中斷造成程式中斷
- 關於開發工具的選擇
- 請教bang 關於開發工具
- 【AMM】關於ASM中AMM引數說明ASM
- 工具類,關於手工讀取 properties檔案引數
- 如何診斷伺服器關閉的原因伺服器
- OGG 中replicat 和extract 關係圖
- 關於“No space left on device的原因”dev
- 一段關於JS中this應用奇葩程式碼引發的思考JS
- 關於phpStudy中的phpmyadmin打不開的原因PHP
- OGG引數詳解
- 關於python中format佔位符中的 {!} 引數PythonORM
- Oracle GoldenGate(OGG)診斷OracleGo
- js中關於單引號和雙引號的一點用法JS
- asp.net中關於雙引號和單引號的用法ASP.NET
- 【原】關於員工離職引發的思考
- 關於js的判斷JS
- OGG -FILTER 引數過濾Filter
- OGG:ALLOWNOOPUPDATES,NOALLOWNOOPUPDATES 引數概念OOP
- 關於 groutine 喚醒中 skipframes 引數不理解
- 分享關於js解析URL中的引數的方法JS
- Shell 中 $ 關於指令碼引數的幾種用法指令碼
- 《快速排序》引發關於演算法的討論排序演算法
- 關於 PHP artisan config:cache 引發的 bugPHP
- Go小工具系列——判斷元素是否存在於陣列中Go陣列
- 關於$ is not defined的原因和解決辦法
- 關於電梯阻塞原因的小思考
- 關於gdb斷點的真相斷點
- OGG-01668: PROCESS ABENDING:新增DataPump程式時的一個錯誤
- goldengate OGG引數規範Go
- OGG 行過濾filter 引數Filter
- 關於 Express API app.use 中的 path 引數用法ExpressAPIAPP