如何清除 DBA_DATAPUMP_JOBS 檢視中的異常資料泵作業? (文件 ID 1626201.1)
適用於:
Oracle Database - Enterprise Edition - 版本 10.1.0.2 到 12.1.0.1 [發行版 10.1 到 12.1]本文件所含資訊適用於所有平臺
目標
如何清除 DBA_DATAPUMP_JOBS 檢視中的異常資料泵作業?
解決方案
用於這個例子中的作業:
- 匯出作業 SCOTT.EXPDP_20051121 是一個正在執行的 schema 級別的匯出作業
- 匯出作業 SCOTT.SYS_EXPORT_TABLE_01 是一個表級別的異常匯出作業
- 匯出作業 SCOTT.SYS_EXPORT_TABLE_02 是一個表級別的停止匯出作業
- 匯出作業 SYSTEM.SYS_EXPORT_FULL_01 是一個被暫停的全庫匯出作業
第1步. 用 SQL*PLUS 判斷在資料庫中有哪些資料泵作業
SET lines 200
COL owner_name FORMAT a10;
COL job_name FORMAT a20
COL state FORMAT a12
COL operation LIKE state
COL job_mode LIKE state
-- 查詢資料泵作業:
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
第2步. 確保在 dba_datapump_jobs 中列出的作業不是活動的資料泵作業: 狀態應該是'NOT RUNNING'。
第3步. 同作業屬主確認檢視 dba_datapump_jobs 中狀態為'NOT RUNNING' 的作業不是被暫停,而失敗的作業。(例如,SYSTEM 使用者的全庫匯出作業不是一個失敗的作業,而是一個被故意暫停的作業)
第4步. 透過 SQL*Plus 找到相關的 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
第5步. 對於過去被終止的和根本不會再啟動的作業,刪除它的 master 表,例如,
-- 對於啟用了 recycle bin 的系統,需要額外執行:
purge dba_recyclebin;
如果表名是大小寫混合的,刪除時可能會遇到如下錯誤:
drop table SYSTEM.impdp_schema_STGMDM_10202014_0
*
ERROR at line 1:
ORA-00942: table or view does not exist
因為表名是大小寫混合,所以刪除時要用雙引號括起來,例如:
drop table SYSTEM."impdp_schema_STGMDM_10202014_0";
第6步. 重新執行第1步和第4步對 dba_datapump_jobs 和 dba_objects 的查詢。如果 dba_datapump_jobs 裡仍然有作業列出,並且這些作業根本沒有 master 表,我們就可以以作業屬主的身份清除它們。例如,
SET serveroutput on
SET lines 100
DECLARE
h1 NUMBER;
BEGIN
h1 := DBMS_DATAPUMP.ATTACH('SYS_EXPORT_TABLE_01','SCOTT');
DBMS_DATAPUMP.STOP_JOB (h1);
END;
/
注意:呼叫 STOP_JOB 過程以後,可能會花一點時間去清除作業,我們可以查詢 user_datapump_jobs 檢查作業是否已經被清除掉:
CONNECT scott/tiger
SELECT * FROM user_datapump_jobs;
第7步. 確認作業已經被清除
SET lines 200
COL owner_name FORMAT a10;
COL job_name FORMAT a20
COL state FORMAT a12
COL operation LIKE state
COL job_mode LIKE state
-- 查詢資料泵作業:
SELECT owner_name, job_name, rtrim(operation) "OPERATION", rtrim(job_mode) "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
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 85162 TABLE SYSTEM.SYS_EXPORT_FULL_01
摘要:
1. 異常資料泵作業不會影響新的資料泵作業.
dba_datapump_jobs 是基於 gv$datapump_job, obj$, com$, and user$ 的一個檢視。
這個檢視顯示仍在執行的資料泵作業,或者作業的 master 表仍然保留在資料庫中,或者不正常結束的作業(異常作業)。如果一個新的資料泵作業啟動,
會建立一條新的記錄,與舊的資料泵作業無關。
2. 當用系統自動生成的作業名啟動一個新的資料泵作業時,我們會檢查 dba_datapump_job 中現有的名稱以保持惟一性。當然,啟動這個作業的使用者下需要有足夠的空間來建立一個新的 master 表。
3. 資料泵作業與用 DBMS_JOBS 包定義的作業不同, DBMS_JOBS 建立的作業使用它自己的程式。 資料泵作業使用一個 master 程式和一些 worker 程式。如果一個資料泵作業被暫停,資料泵作業會一直存在在資料庫中(status: NOT RUNNING),這時,master 和 worker 程式會被停止,或者不再存在。客戶端之後可以再次掛載到這個作業,並且繼續作業的執行(START_JOB)。
4. 如果活動的資料泵作業相關聯的 master 表被刪除,可能會導致不一致.
4.a. 如果是一個匯出作業, 不太可能引起不一致,因為刪除 master 表只會導致資料泵的 mater 和 worker 程式中止。這種情況類似於客戶端發起的一個意外中止。
4.b.
如果這個作業是一個匯入作業,那麼情況就有所不同。刪除掉 master 表會導致資料泵的 worker 和 mater
程式中斷。這有可能會引起不完整的匯入。 例如,沒有匯入表的所有資料, 或表,索引,檢視等的匯入不完整, 這種情況類似於意外中斷匯入的客戶端。
刪除 master 表本身不會引起任何資料字典的不一致。如果您在作業完成後還保留 master 表(使用非公開的引數:KEEP_MASTER=Y),以後再刪除 master
表的操作不會造成任何不一致。
5. 除了 'NOT RUNNING'狀態以外,失敗的JOB還可能處於'DEFINING'狀態,嘗試attach到這種job上會報以下的錯誤:
Export: Release 11.2.0.4.0 - Production on Tue Jan 27 10:14:27 2015
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORA-31626: job does not exist
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 79
ORA-06512: at "SYS.KUPV$FT", line 405
ORA-31638: cannot attach to job SYS_EXPORT_SCHEMA_01 for user SYSTEM
ORA-31632: master table "SYSTEM.SYS_EXPORT_SCHEMA_01" not found, invalid, or inaccessible
ORA-00942: table or view does not exist
清理這種JOB的方法和上面提到的是一樣的。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31393455/viewspace-2129529/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【ASK_ORACLE】刪除DBA_DATAPUMP_JOBS檢視中的異常資料泵JOB的方法Oracle
- 清除dba_datapump_jobs中的孤兒資料泵job
- 如何清除 Elasticsearch 中的資料Elasticsearch
- 如何檢視作業系統的塊大小作業系統
- 作業系統 中斷異常系統呼叫作業系統
- 如何檢視資料庫中的授權資訊資料庫
- 如何檢視資料庫中的job任務資料庫
- 如何檢視作業系統(OS)的位數?作業系統
- 如何檢視python文件Python
- Linux作業系統中如何檢視當前程式的狀態?Linux作業系統
- Oracle 如何高效的檢視官方文件Oracle
- 如何檢視Linux作業系統版本?Linux作業系統
- 異構資料庫之間資料作業資料庫
- 通過作業系統的程式號檢視資料庫的session作業系統資料庫Session
- 透過作業系統的程式號檢視資料庫的session作業系統資料庫Session
- 資料泵匯出匯入資料標準文件
- 檢視資料庫中的物件資料庫物件
- 如何檢視selenium api文件API
- 資料泵匯出匯入物化檢視(ORA-39083)
- 在Linux中,如何檢視和審計系統日誌檔案以檢測異常活動?Linux
- 資料泵實現資料遷移到異地庫
- 檢視Oracle Database 10g 的資料庫支援的作業系統OracleDatabase資料庫作業系統
- 異常檢測
- 【作業系統2】作業系統啟動過程與異常/中斷,系統呼叫作業系統
- V$SQL檢視顯示結果異常的診斷SQL
- 清除 Electron 中的快取資料快取
- 檢視資料庫中各表資訊資料庫
- 同事拿錯作業系統安裝盤,導致資料庫安裝異常作業系統資料庫
- Spring系列之不同資料庫異常如何抽象的?Spring資料庫抽象
- 異常資料表Exceptions的使用Exception
- 搭建前端監控,如何採集異常資料?前端
- 檢視作業系統基本資訊作業系統
- 檢視作業系統塊大小作業系統
- 序列異常檢測
- android 檢視資料庫和shaedpreference資料框架Android資料庫框架
- ORA-56935: 現有資料泵作業正在使用其他版本的時區資料檔案
- 12c 資料泵作業啟動後相關程式和表
- DG同步異常恢復文件