ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 【与时俱进】oracle10g上logminer的使用

【与时俱进】oracle10g上logminer的使用

原创 Linux操作系统 作者:萧筱筱 时间:2009-02-08 10:12:45 0 删除 编辑

最近公司的系统出现一个莫名其妙的bug,用户的账户余额总是会莫名其妙的被清空。钱哪。。。这个绝对是会引起莫大争议的bug,不得不逼着研发QA必须限期解决。

但是一班人对着这个不是定期出现的问题不知所措,甚至连余额啥时候被清空的都毫无头绪。思来想去,我又重新祭出logminer这柄利剑,试图一举成功。

老样子,在google上翻出我的陈年旧文,原本打算直接copy以前的脚本来使用的。结果令我目瞪口呆

SQL> show parameter utl;

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
create_stored_outlines               string
utl_file_dir                         string      /oracle/admin/yninfo/logs

SQL>begin
2        sys.dbms_logmnr_d.build(dictionary_filename=>'dictionary.ora',dictionary_location =>'/oracle/admin/yninfo/log');
3 end;

  4  /
LogMnr Dictionary Procedure started
Specified name is '/oracle/admin/yninfo/logdictionary.ora'
ERROR -1336  ORA-01336: specified dictionary file cannot be opened
ORA-29280: invalid directory path
begin
*
ERROR at line 1:
ORA-01336: specified dictionary file cannot be opened
ORA-29280: invalid directory path
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3669
ORA-06512: at "SYS.DBMS_LOGMNR_INTERNAL", line 3747
ORA-06512: at "SYS.DBMS_LOGMNR_D", line 12
ORA-06512: at line 2

再三的check路径,spfile的配置文件,甚至重启数据库,依然故我的报如上错误。

无奈之中,只好继续在google的海洋中学习,很快的,发现10g其实不需要生成dictionary文件了。只要直接把日志文件加载,然后分析即可。

于是与时俱进一把,重新更新一下批量分析日志文件的脚本,这次改成sql啦。呵呵

####################

--alter database add supplemental log data(primary key,unique index)columns;
--alter database force logging;
define first=385;
define last=386;
define wner=YNVAS
define segname=ACCOUNT

declare
i number(10);
begin
        for i in &&first .. &&last loop
                dbms_output.put_line('Begin to analyze the archlog of '||i);
                sys.dbms_logmnr.add_logfile (logfilename =>'/archlog/1_'||i||'_675611597.dbf', ptions=>sys.dbms_logmnr.NEW);
                SYS.DBMS_LOGMNR.START_LOGMNR(OPTIONS => SYS.DBMS_LOGMNR.DICT_FROM_ONLINE_CATALOG);
                execute immediate 'drop table ynvas.log_'||i;
                execute immediate 'create table ynvas.log_'||i||' as select * FROM v$logmnr_contents WHERE seg_owner = ''&&owner'' and SEG_NAME = ''&&segname''';
                sys.dbms_logmnr.end_logmnr;
        end loop;
end;
/

################################

在分析的时候,发现10g里面,竟然会捕捉不到DML的sql了,只有DDL的sql,晕死。谁偷走了我的余额??还是毫无头绪。。。

于是继续google,原来需要预先执行以下2句,来强制记录日志并且增强捕捉。

--alter database add supplemental log data(primary key,unique index)columns;
--alter database force logging;

但是偷走余额的动作是在我执行这2句sql之前,所以我还是不知道余额被谁偷走了,只好继续回归测试所有功能,并且在每做一个动作的时候,去瞄一眼账户余额的情况。。。哎

无论如何,过程还是值得记录的,O(∩_∩)O



Link URL: http://echo.sharera.com/blog/BlogTopic/67904.htm

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

上一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2009-02-08

  • 博文量
    47
  • 访问量
    27491