schedule job 新增删除操作简单研究

来源:这里教程网 时间:2026-03-03 21:51:29 作者:

通过logminer挖掘,对job在创建和删除过程中后台实际的变更做简单的探究。 1.模拟操作创建表create table test_t1(id int, create_date date);

创建存储过程
create or replace procedure test_p1
is
begin
insert into test_t1 values(1,sysdate);
commit;
end test_p1;

/

创建job
begin
dbms_scheduler.create_job (
job_name => 'test_job1',
job_type => 'STORED_PROCEDURE',
job_action => 'TEST_P1',
start_date => sysdate,
repeat_interval => 'FREQ=MINUTELY;INTERVAL=1',
enabled => true
);
end;

/

禁用job  
BEGIN
DBMS_SCHEDULER.DISABLE('TEST_JOB1');
END;
/

 

启用job
BEGIN
DBMS_SCHEDULER.enABLE('TEST_JOB1');
END;
/

停止job

exec dbms_scheduler.stop_job('TEST_JOB1');

删除job

exec dbms_scheduler.drop_job('TEST_JOB1');

2.logminer挖掘数据

添加归档
execute dbms_logmnr.add_logfile(logfilename=>'/soft/app/product/11.2.0/db_1/dbs/arch1_103_1146663827.dbf',options=>dbms_logmnr.new);
execute dbms_logmnr.add_logfile(logfilename=>'/soft/app/product/11.2.0/db_1/dbs/arch1_104_1146663827.dbf',options=>dbms_logmnr.addfile);   
execute dbms_logmnr.add_logfile(logfilename=>'/soft/app/product/11.2.0/db_1/dbs/arch1_105_1146663827.dbf',options=>dbms_logmnr.addfile);
挖掘分析 execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
3.查看分析结果:
可以先看下各操作类型大致结果

select OPERATION,count(*) from v$logmnr_contents group by OPERATION; 对于创建和删除,我们理解为是DDL操作,所以先查看DDL操作涉及的数据SQL> select SEG_OWNER,SEG_NAME,TABLE_NAME,USERNAME,OPERATION,SQL_REDO from v$logmnr_contents where OPERATION ='DDL'; 但是,发现只有创建用户,表,以及存储过程的ddl操作。既然对job做了删除操作,那么肯定涉及到一些基表的delete操作,进一步排查delete操作类型的分析结果(这次模拟,我们用的是zmy用户,如果环境有很多其他业务操作,那么筛选条件多一个用户可以提高筛选率,或者是知道job名字的前提下,通过JOB的名字做筛选,这里因为我用的是测试环境,且确认期间没有其他操作,所以没有添加多个条件)

select SEG_OWNER,SEG_NAME,TABLE_NAME,USERNAME,OPERATION,SQL_REDO from v$logmnr_contents where sql_redo like '%TEST_JOB1%';
查到32条记录,其中第一条是insert,最后一条是delete

查询确认 type#=66所对应的对象,就是job 查询确认owner为103号对应的就是zmy用户,和我的操作都能匹配上 可以看到,在创建和删除job的时候,会去变更基表 OBJ$。

后续如果想从logminer挖掘结果中查找是否有job增删的操作可以直接通过下面两个sql定位
select SEG_OWNER,SEG_NAME,TABLE_NAME,USERNAME,OPERATION,SQL_REDO from v$logmnr_contents where SEG_NAME='OBJ$' and TABLE_NAME='OBJ$' and OPERATION ='INSERT' and sql_redo like '%66%';
select SEG_OWNER,SEG_NAME,TABLE_NAME,USERNAME,OPERATION,SQL_REDO from v$logmnr_contents where SEG_NAME='OBJ$' and TABLE_NAME='OBJ$' and OPERATION ='DELETE' and sql_redo like '%66%';

相关推荐