怎么分析 oracle 归档日志

 我来答
龙氏风采
2016-12-30 · 知道合伙人互联网行家
龙氏风采
知道合伙人互联网行家
采纳数:5849 获赞数:12817
从事互联网运营推广,5年以上互联网运营推广经验,丰富的实战经

向TA提问 私信TA
展开全部
  环境:
  AIX6.1
  Oracle 11g RAC
  故障:
  数据库频繁出现归档日志空间不够,导致数据库无法登陆的故障。一查发现原因是归档日志切换频繁,操作系统空间不够。
  确定原因:
  [aix01@oracle]/oracle>df -g
  Filesystem GB blocks Free %Used Iused %Iused Mounted on
  /dev/hd4 0.50 0.28 44% 13674 17% /
  /dev/hd2 3.00 0.67 78% 49208 23% /usr
  /dev/hd9var 1.00 0.37 63% 9285 10% /var
  /dev/hd3 2.00 1.03 49% 2407 1% /tmp
  /dev/fwdump 1.00 0.99 2% 30 1% /var/adm/ras/platform
  /dev/hd1 0.25 0.18 28% 465 2% /home
  /dev/hd11admin 0.25 0.25 1% 5 1% /admin
  /proc - - - - - /proc
  /dev/hd10opt 0.50 0.28 44% 10241 14% /opt
  /dev/livedump 0.25 0.25 1% 12 1% /var/adm/ras/livedump
  /dev/oraclelv 30.00 11.29 63% 161681 6% /oracle
  /dev/installlv 15.00 3.38 78% 6478 1% /install
  /dev/crslv 10.00 3.35 67% 7807 1% /crs
  /dev/wmsapplv 30.00 17.49 42% 15537 1% /wmprod
  /dev/archivelv 29.25 29.25 1% 4 1% /arch1
  /dev/backuplv 400.00 107.13 74% 306 1% /sysbackup
  aix02:arch2 30.25 0.64 99% 3 1% /arch2
  可以看到,/arch2里文件系统空间已经达到99%,/arch2是用来存放归档日志的文件系统,进而导致数据库出错。
  提出问题:
  这下问题来了,/arch2的空间是30G,每天备份脚本都会自动rman备份归档日志,并自动清除归档日志文件,按照正常情况下,数据库不可能一天产生这么大的归档日志量。
  如何查询归档日志都是由什么应用产生的,这就是logminer的用途。
  使用方法:
  -- 1.指定要分析的日志文件
  exec sys.dbms_logmnr.add_logfile(logfilename => '/arch2/2_825_733092736.dbf',options => dbms_logmnr.new);
  -- 2.使用本地的在线数据字典分析归档日志
  exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
  -- 3.查询分析出来的归档日志内容,例如统计最大修改量的Schema
  select seg_owner,count(*) from v$logmnr_contents group by seg_owner;
  -- 4.增加别的日志文件
  exec sys.dbms_logmnr.add_logfile(logfilename=>'/arch2/2_825_733092736.dbf');
  -- 5.结束分析归档日志
  exec sys.dbms_logmnr.end_logmnr;
  下面是具体的过程:
  SQL> exec sys.dbms_logmnr.add_logfile(logfilename => '/arch2/2_825_733092736.dbf',options => dbms_logmnr.new);
  PL/SQL procedure successfully completed
  SQL> exec sys.dbms_logmnr.start_logmnr(options => sys.dbms_logmnr.dict_from_online_catalog);
  PL/SQL procedure successfully completed
  SQL> select seg_owner,count(*) from v$logmnr_contents group by seg_owner;
  SEG_OWNER COUNT(*)
  -------------------------------- ----------
  2237
  SYS 688
  TMS 60
  SPHSY 70
  SINOSYNEW 30
  SINOSY 381
  WAS 4551934
  7 rows selected
  SQL> execute dbms_logmnr.end_logmnr ;
  PL/SQL procedure successfully completed
  结论:
  从上面查询结果可以看出操作量最大的用户是WAS用户,再具体看下v$logmnr_contents可以发现基本修改的内容是一致的。
  与开发人员沟通后,最终确认是一个执行update过程存在问题,where条件未正确定位到记录,每执行一次都会导致大规模的修改数据。
tomcoding
2018-07-09
知道答主
回答量:7
采纳率:0%
帮助的人:4200
展开全部
用Logminer分析,可以得到原始的操作SQL语句,想看源代码,百度tomcoding
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式