Oracle的object_type JOB的dbms_metadata.get_ddl

时间:2010-07-13 08:19:10

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

我想为大多数数据库对象创建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。

4 个答案:

答案 0 :(得分:11)

select dbms_metadata.get_ddl('PROCOBJ', 'yourJobNameGoesHere') from dual;

PROCOBJ是程序性对象。

答案 1 :(得分:1)

select dbms_metadata.get_ddl('PROCOBJ',['JOB'|'PROGRAM'|'SCHEDULE'],'OWNER') from dual;

PROCOBJ可以是JOB,PROGRAM和SCHEDULE。

答案 2 :(得分:1)

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

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

答案 3 :(得分:0)

即使我尝试了以上所有方法来获取 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.