通过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/
,如需转载,请注明出处,否则将追究法律责任。