当前位置: 首页 > news >正文

清理DBA_DATAPUMP_JOBS中的孤立数据泵作业

今天在重构数据库时(将表空间中的表、索引转移到其它表空间)时,发现有两个奇怪的对象SYS_EXPORT_FULL_01、SYS_EXPORT_FULL_02搜索了一下,发现这个可能是EXPDP导出异常时遗留下的对象,但是搜到的资料不多,不能确认其具体用途以及该表是否删除。后来同事在metalink搜索到How To Cleanup Orphaned DataPump Jobs In DBA_DATAPUMP_JOBS ? (文档 ID 336014.1)这篇文章。了解到这些表的相关详细信息。

如下所示,SYS_EXPORT_FULL_01、SYS_EXPORT_FULL_02是一个完整的数据库导出作业,状态是NOT RUNNING,意味着作业是暂时的停止,实际上作业失败了也是NOT RUNNING状态。


   

   

   

   

   

   

   

   

   

   

   

   

   

  


   

   

   

   

   

   

  

这表示以前(可能是很久以前)停止的作业,当然这些作业不可能重新启动,完全可以删除这些master表.

DROP TABLE ADMIN.SYS_EXPORT_FULL_01;

DROP TABLE ADMIN.SYS_EXPORT_FULL_02;

 

How To Cleanup Orphaned DataPump Jobs In DBA_DATAPUMP_JOBS ? (文档 ID 336014.1) 中的详细内容介绍如下所示:

 

The jobs used in this example:
- Export job SCOTT.EXPDP_20051121 is a schema level export that is running
- Export job SCOTT.SYS_EXPORT_TABLE_01 is an orphaned table level export job
- Export job SCOTT.SYS_EXPORT_TABLE_02 is a table level export job that was stopped
- Export job SYSTEM.SYS_EXPORT_FULL_01 is a full database export job that is temporary stopped

Step 1. Determine in SQL*Plus which Data Pump jobs exist in the database:

%sqlplus /nolog
CONNECT / as sysdba
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
COL owner.object for a50
-- locate Data Pump jobs:
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
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

Step 2. Ensure that the listed jobs in dba_datapump_jobs are not export/import Data Pump jobs that are active: status should be 'NOT RUNNING'.
Step 3. Check with the job owner that the job with status 'NOT RUNNING' in dba_datapump_jobs is not an export/import Data Pump job that has been temporary stopped, but is actually a job that failed. (E.g. the full database export job by SYSTEM is not a job that failed, but was deliberately paused with STOP_JOB).

Step 4. Determine in SQL*Plus the related master tables:

-- locate Data Pump master tables:
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

Step 5. For jobs that were stopped in the past and won't be restarted anymore, delete the master table. E.g.:

DROP TABLE scott.sys_export_table_02;
-- For systems with recycle bin additionally run:
purge dba_recyclebin;

NOTE:
In case the table name is mixed case, you can get errors on the drop, e.g.:

SQL> drop table SYSTEM.impdp_schema_STGMDM_10202014_0;
drop table SYSTEM.impdp_schema_STGMDM_10202014_0
                *
ERROR at line 1:
ORA-00942: table or view does not exist

Because the table has a mixed case, try using these statements with double quotes around the table name, for instance:

drop table SYSTEM."impdp_SCHEMA_STGMDM_04102015_1";
drop table SYSTEM."impdp_schema_STGMDM_10202014_0";

Step 6. Re-run the query on dba_datapump_jobs and dba_objects (step 1 and 4). If there are still jobs listed in dba_datapump_jobs, and these jobs do not have a master table anymore, cleanup the job while connected as the job owner. E.g.:

CONNECT scott/tiger
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;
/

Note that after the call to the STOP_JOB procedure, it may take some time for the job to be removed. Query the view user_datapump_jobs to check whether the job has been removed:

CONNECT scott/tiger
SELECT * FROM user_datapump_jobs;

Step 7. Confirm that the job has been removed:

CONNECT / as sysdba
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 
COL owner.object for a50
-- locate Data Pump jobs: 
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
-- locate Data Pump master tables:
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

Remarks:
1. Orphaned Data Pump jobs do not have an impact on new Data Pump jobs. The view dba_datapump_jobs is a view, based on gv$datapump_job, obj$, com$, and user$. The view shows the Data Pump jobs that are still running, or jobs for which the master table was kept in the database, or in case of an abnormal end of the Data Pump job (the orphaned job). If a new Data Pump job is started, a new entry will be created, which has no relation to the old Data Pump jobs.

2. When starting the new Data Pump job and using a system generated name, we check the names of existing Data Pump jobs in the dba_datapump_job in order to obtain a unique new system generated jobname. Naturally, there needs to be enough free space for the new master table to be created in the schema that started the new Data Pump job.

3. A Data Pump job is not the same as a job that is defined with DBMS_JOBS. Jobs created with DBMS_JOBS use there own processes. Data Pump jobs use a master process and worker process(es). In case a Data Pump still is temporary stopped (STOP_JOB while in interactive command mode), the Data Pump job still exists in the database (status: NOT RUNNING), while the master and worker process(es) are stopped and do not exist anymore. The client can attach to the job at a later time, and continue the job execution (START_JOB).

4. The possibility of corruption when the master table of an active Data Pump job is deleted, depends on the Data Pump job.
4.a. If the job is an export job, corruption is unlikely as the drop of the master table will only cause the Data Pump master and worker processes to abort. This situation is similar to aborting an export of the original export client.
4.b. If the job is an import job then the situation is different. When dropping the master table, the Data Pump worker and master processes will abort. This will probably lead to an incomplete import: e.g. not all table data was imported, and/or table was imported incomplete, and indexes, views, etc. are missing. This situation is similar to aborting an import of the original import client.

The drop of the master table itself, does not lead to any data dictionary corruption. If you keep the master table after the job completes (using the undocumented parameter: KEEP_MASTER=Y), then a drop of the master table afterwards, will not cause any corruption.

5. Instead of the status 'NOT RUNNING' the status of a failed job could also be 'DEFINING'. When trying to attach to such a job, this would fail with:

$ expdp system/manager attach=system.sys_export_schema_01
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

The steps to cleanup these failed/orphaned jobs are the same as mentioned above.

相关文章:

  • sphinx/coreseek 精确搜索记录
  • 创建一个最简单的Linux随机启动服务
  • c++随机数
  • 交换机使用之级联和堆叠配置---学习中
  • (LNMP) How To Install Linux, nginx, MySQL, PHP
  • 集成支付宝SDK时错误的解决办法
  • vim配置
  • 常见负载均衡器禁(启)用成员汇总[原创] - 运维进行时 - 互联网运维技术架构
  • 联想E431笔记本wifi驱动安装
  • LINUX说细启动顺序解述
  • ibatis中使用like模糊查询
  • Scrum三头猪
  • mysql之视图
  • 高效工作的信息搜集及管理术
  • ExtJS4 动态生成grid出口excel(纯粹的接待)
  • 【跃迁之路】【519天】程序员高效学习方法论探索系列(实验阶段276-2018.07.09)...
  • markdown编辑器简评
  • 阿里云前端周刊 - 第 26 期
  • 多线程事务回滚
  • 极限编程 (Extreme Programming) - 发布计划 (Release Planning)
  • 检测对象或数组
  • 聊聊redis的数据结构的应用
  • 名企6年Java程序员的工作总结,写给在迷茫中的你!
  • 线性表及其算法(java实现)
  • d²y/dx²; 偏导数问题 请问f1 f2是什么意思
  • ​3ds Max插件CG MAGIC图形板块为您提升线条效率!
  • #我与Java虚拟机的故事#连载05:Java虚拟机的修炼之道
  • $GOPATH/go.mod exists but should not goland
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2)Java 简介
  • (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (31)对象的克隆
  • (C++)八皇后问题
  • (C语言)strcpy与strcpy详解,与模拟实现
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)springboot社区居家养老互助服务管理平台 毕业设计 062027
  • (亲测有效)解决windows11无法使用1500000波特率的问题
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)LINQ之路
  • .bat批处理(十):从路径字符串中截取盘符、文件名、后缀名等信息
  • .NET MVC第三章、三种传值方式
  • .net on S60 ---- Net60 1.1发布 支持VS2008以及新的特性
  • .Net Remoting常用部署结构
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .Net7 环境安装配置
  • .net反编译工具
  • .net反混淆脱壳工具de4dot的使用
  • .NET开发者必备的11款免费工具
  • .net企业级架构实战之7——Spring.net整合Asp.net mvc
  • .NET企业级应用架构设计系列之应用服务器
  • .net专家(张羿专栏)
  • //解决validator验证插件多个name相同只验证第一的问题