ITPub博客

首页 > 数据库 > Oracle > schedule job 新增删除操作简单研究

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

原创 Oracle 作者:梦夕林1992 时间:2025-04-10 16:39:06 0 删除 编辑

通过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%';



来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/29956245/viewspace-3079833/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2014-10-13

  • 博文量
    90
  • 访问量
    85386