You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Oracle数据库导出时如何过滤指定作业,区分DBMS_JOB与DBMS_SCHEDULER作业

Oracle 10g两类作业区分及导出跳过方案

两类作业的区分方法

两类作业的元数据完全独立,本身天然隔离,不需要额外做特殊识别:

  • DBMS_JOB创建的旧作业:元数据存储在ALL_JOBS/DBA_JOBS视图中,对象类型为JOB,所有旧作业的ID都是纯数字序列值
  • DBMS_SCHEDULER创建的新作业:元数据存储在ALL_SCHEDULER_JOBS/DBA_SCHEDULER_JOBS视图中,对象类型为SCHEDULER JOB,支持自定义命名,作业标识为字符串格式

导出前可以直接通过两个视图批量核对两类作业清单:

-- 查询所有DBMS_JOB旧作业
SELECT job, what FROM dba_jobs;
-- 查询所有DBMS_SCHEDULER新作业
SELECT owner, job_name FROM dba_scheduler_jobs;

跳过指定作业的导出方案

方案1:使用expdp数据泵导出(推荐,10g原生支持)

数据泵支持通过EXCLUDE参数直接指定排除的作业类型或特定作业:

  • 跳过所有DBMS_JOB旧作业:添加参数 EXCLUDE=JOB
  • 跳过所有DBMS_SCHEDULER新作业:添加参数 EXCLUDE=PROCOBJ
  • 跳过指定的单个作业示例:
# 跳过ID为123的DBMS_JOB旧作业
expdp 用户名/密码 DIRECTORY=导出目录 DUMPFILE=全量导出.dmp FULL=Y EXCLUDE=JOB:"=123"

# 跳过户SCOTT名下名为TEST_JOB的DBMS_SCHEDULER新作业
expdp 用户名/密码 DIRECTORY=导出目录 DUMPFILE=全量导出.dmp FULL=Y EXCLUDE=PROCOBJ:"IN (SELECT object_name FROM dba_objects WHERE object_type='PROCOBJ' AND owner='SCOTT' AND object_name='TEST_JOB')"

注意:Windows环境下执行命令时,参数内的双引号需要添加转义符,或者直接把参数写入parfile参数文件中避免转义冲突。

方案2:使用传统exp/imp导出

传统导出工具不支持直接排除作业,可以先全量导出,导入到测试实例之后再手动删除不需要的作业:

-- 删除ID为123的DBMS_JOB旧作业
EXEC dbms_job.remove(123);
COMMIT;

-- 删除SCOTT.TEST_JOB的DBMS_SCHEDULER新作业
EXEC dbms_scheduler.drop_job('SCOTT.TEST_JOB');

内容的提问来源于stack exchange,提问作者Mark

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 03:54:04