记一次Oracle归档暴涨导致的宕机

首先是数据库宕机!
然后上服务器上一看磁盘空间被占满,立即清除归档日志。重启正常使用!
后续是发现DG备库数据严重延迟,跑到备库上看,很多日志都还没应用
用oracle 的 logmini 查看了归档日志
SQL> select count(1),substr(sql_redo,1,30) from v$logmnr_contents group by substr(sql_redo,1,30) order by count(1) desc;
 
 
  COUNT(1) SUBSTR(SQL_REDO,1,30)
---------- ------------------------------------------------------------
     93825 update "HPT"."T_CART" set "STA
        15 commit;
        15 set transaction read write;
         1 update "SYS"."JOB$" set "LAST_
         1 update "SYS"."JOB$" set "THIS_
         1 
         1 insert into "SYSMAN"."MGMT_SYS
 
应用频繁 update t_cart这张表!
是应用程序的代码逻辑问题,导致一直更新购物车表...产生了大量的dml,让数据库频繁进行归档日志切换。导致拓机 
改下SQL 就消停了

手工方式运行 oracle的 LogMiner

--先注册这两个SQL
Oracle_home/rdbms/admin/dbmslm.sql
Oracle_home/rdbms/admin/dbmslmd.sql

--加载要分析的日志
exec sys.dbms_logmnr.add_logfile(LogFileName => '/oracle/flash_recovery_area/orcl/archivelog/ARC0000115753_0829578749.0001',Options => dbms_logmnr.new);

exec sys.dbms_logmnr.start_logmnr(options=>sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG);

--分析结果的查询SQL
select seg_owner,count(*) from v$logmnr_contents group by seg_owner;

select count(1),substr(sql_redo,1,30) from v$logmnr_contents group by substr(sql_redo,1,30) order by count(1) desc;

--日志补全,不然redoSql出现 Unsupported SQLREDO
SELECT supplemental_log_data_min FROM v$database;
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;

 


猜你喜欢

转载自zjfhw.iteye.com/blog/2197796