最近公司的系统出现一个莫名其妙的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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/26127/viewspace-545556/