【问题标题】:Oracle's dbms_metadata.get_ddl for object_type JOBOracle 的 dbms_metadata.get_ddl for object_type JOB
【发布时间】:2011-03-15 04:47:18
【问题描述】:

我想为我的大多数数据库对象创建 ddl 脚本。 dbms_metadata.get_ddl 适用于大多数对象类型。例如以下为视图创建 ddl:

select dbms_metadata.get_ddl ( 'VIEW', 'SAMPLE_VIEW') from dual

另一方面,它不适用于 object_type 'JOB'。以下:

select dbms_metadata.get_ddl( 'JOB', 'SAMPLE_JOB' ) from dual

给出以下错误:

ORA-31604: invalid NAME parameter "NAME" for object type JOB in function SET_FILTER
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 116
ORA-06512: at "SYS.DBMS_METADATA_INT", line 4705
ORA-06512: at "SYS.DBMS_METADATA_INT", line 8582
ORA-06512: at "SYS.DBMS_METADATA", line 2882
ORA-06512: at "SYS.DBMS_METADATA", line 2748
ORA-06512: at "SYS.DBMS_METADATA", line 4333
ORA-06512: at line 1

如果我列出我的工作使用

select * from user_objects where object_type='JOB'

它显示 SAMPLE_JOB(就像它显示 SAMPLE_VIEW 如果过滤了 object_type='VIEW')。

为什么它适用于 VIEW(以及 TABLE、INDEX、TRIGGER,...)而不适用于 JOB?

我使用的是 Oracle 10g。

【问题讨论】:

    标签: oracle oracle10g jobs ora-06512 dbms-metadata


    【解决方案1】:

    即使我尝试了以上所有方法以在 Oracle 10g 版本中获取 DDL,但没有成功。

    这是我想得到的工作细节:

    set pages 200 lines 200
    col owner format a20
    col job_name format a25
    col JOB_ACTION format a75
    col COMMENTS format a60  
    
    select owner, job_name, next_run_date, state, enabled from dba_scheduler_jobs where job_name like '%AUDIT%'; 
    -- get the detail of scheduled jobs.
    
    select OWNER,JOB_NAME, JOB_ACTION, COMMENTS FROM DBA_SCHEDULER_JOBS where JOB_NAME='PURGE_AUDIT_LOG';
    -- get the limited detail from the selected column.
        
    select * FROM DBA_SCHEDULER_JOBS where JOB_NAME='PURGE_AUDIT_LOG';
    -- to get the complete detail of a specific job along with code and other details.
    

    【讨论】:

      【解决方案2】:

      替代方案,使用 DDL 从数据库中获取所有作业:

      select owner, job_name, dbms_metadata.get_ddl('PROCOBJ', job_name, owner) as ddl_output from ALL_SCHEDULER_JOBS
      

      【讨论】:

        【解决方案3】:
        select dbms_metadata.get_ddl('PROCOBJ',['JOB'|'PROGRAM'|'SCHEDULE'],'OWNER') from dual;
        

        PROCOBJ 可以是 JOB、PROGRAM 和 SCHEDULE。

        【讨论】:

          【解决方案4】:
          select dbms_metadata.get_ddl('PROCOBJ', 'yourJobNameGoesHere') from dual;
          

          PROCOBJ 是过程对象。

          【讨论】:

          • 附加说明 - Oracle 应该在 11.2 中修复这个问题,所以它可以在没有这个魔法的情况下工作 - 尚未检查。
          • @dpbradley - 他们没有,至少从 11.2.0.1.0 (Linux x86-64) 开始没有。
          猜你喜欢
          • 1970-01-01
          • 2010-12-03
          • 1970-01-01
          • 2014-02-01
          • 2022-12-10
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多