Oracle归档日志爆满问题的处理方法
最近客户单位的oracle数据库出了问题,经常出现无法连接,报错提示 ORA-00257: archiver error, Connect internal only, until freed.,手动清除归档日志后可以恢复访问,但是过不了几天依旧会爆满,每日生成的归档日志很大。经过详细排查发现 sysaux 表空间使用率达到 99.9%,清理该表空间后日志恢复正常!
一、先清理归档日志使得数据库能够正常连接
[root@rac1 ~]# su - grid grid@+ASM1:/home/grid$ asmcmd lsdg State Type Rebal Sector Block AU Total_MB Free_MB Req_mir_free_MB Usable_file_MB Offline_disks Voting_files Name MOUNTED EXTERN N 512 4096 1048576 409600 127 0 127 0 N ARCH/ MOUNTED EXTERN N 512 4096 1048576 1662976 997139 0 997139 0 N DATA/ MOUNTED NORMAL N 512 4096 1048576 30720 29794 10240 9777 0 Y OCRDG/
上述结果可以看到表空间仅仅剩余 127
MB 可用。需要立刻释放空间。
使用rman工具 执行 删除2天前的归档日志
delete archivelog until time "sysdate-2";
[root@rac1 ~]# su - oracle Password: oracle@orcl1:/home/oracle$rman target / Recovery Manager: Release 11.2.0.4.0 Production on Mon Oct 14 13:12:18 2024 Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved. connected to target database: ORCL (DBID=1556520972) RMAN> delete archivelog until time "sysdate-2";
二、排查问题
查看归档日志每天生成情况
发现每天都生成70~80G的日志数据,正常应该2-8G;
RMAN> exit Recovery Manager complete. oracle@orcl1:/home/oracle$sqlplus / as sysdba SQL*Plus: Release 11.2.0.4.0 Production on Mon Oct 14 13:12:32 2024 Copyright (c) 1982, 2013, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> SQL> SELECT TRUNC(FIRST_TIME) "TIME",SUM(BLOCK_SIZE * BLOCKS) / 1024 / 1024 / 1024 "SIZE(GB)"FROM V$ARCHIVED_LOG GROUP BY TRUNC(FIRST_TIME) order by TRUNC(FIRST_T); TIME SIZE(GB) ------------ ---------- 03-OCT-24 75.8037338 04-OCT-24 65.9294729 05-OCT-24 65.2526731 06-OCT-24 71.6385746 07-OCT-24 212.996218 08-OCT-24 138.052895 09-OCT-24 84.8484373 10-OCT-24 262.300638 11-OCT-24 74.3476553 12-OCT-24 70.9598064 10 rows selected.
查看数据库表空间使用情况
发现 SYSAUX 表空间使用率达到 99.84%
SQL> SELECT F.TABLESPACE_NAME TABLESPACE_NAME,ROUND(((D.SUMBYTES + D.EXTEND_BYTES) / 1024 / 1024 / 1024), 2) TOTAL_G, ROUND((F.SUMBYTES + D.EXTEND_BYTES) / 1024 / 1024 / 1024, 2) FREE_G, ROUND((D.SUMBYTES - F.SUMBYTES) / 1024 / 1024 / 1024, 2) USED_G, ROUND((D.SUMBYTES - F.SUMBYTES) * 100 / (D.SUMBYTES + D.EXTEND_BYTES), 2) USED_PERCENT FROM (SELECT TABLESPACE_NAME, SUM(BYTES) SUMBYTES FROM DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT TABLESPACE_NAME, SUM(AA.BYTES) SUMBYTES, SUM(AA.EXTEND_BYTES) EXTEND_BYTES FROM (SELECT NVL(CASE WHEN AUTOEXTENSIBLE = 'YES' THEN (CASE WHEN (MAXBYTES - BYTES) >= 0 THEN (MAXBYTES - BYTES) END) END, 0) EXTEND_BYTES, TABLESPACE_NAME, BYTES FROM DBA_DATA_FILES) AA GROUP BY TABLESPACE_NAME) D WHERE F.TABLESPACE_NAME = D.TABLESPACE_NAME ORDER BY USED_PERCENT DESC; TABLESPACE_NAME TOTAL_G FREE_G USED_G USED_PERCENT ------------------------------ ---------- ---------- ---------- ------------ USERS 759.75 57.51 702.24 92.43 SYSAUX 62 .10 61.90 99.84 SYSTEM 32 31.01 .99 3.09 UNDOTBS2 32 31.64 .36 1.12 UNDOTBS1 32 31.94 .06 .18
查找归sysaux空间占用大于200mb的对象并生成删除sql
查出的对象属于 sys用户 请使用此账户执行如下sql语句的 'OPSQL’字段语句完成清理工作。
SQL> select distinct 'truncate table ' || segment_name || ';' as OPSQL, s.bytes / 1024 / 1024 MB from dba_segments s where s.segment_name like 'WRH$%' and segment_type in ('TABLE PARTITION', 'TABLE') and s.bytes / 1024 / 1024 > 200 order by s.bytes / 1024 / 1024 desc; OPSQL -------------------------------------------------------------------------------- MB ---------- truncate table WRH$_ACTIVE_SESSION_HISTORY; 12436 truncate table WRH$_EVENT_HISTOGRAM; 1984 truncate table WRH$_LATCH_MISSES_SUMMARY; 1763 OPSQL -------------------------------------------------------------------------------- MB ---------- truncate table WRH$_SYSSTAT; 1600 truncate table WRH$_SEG_STAT; 1280 truncate table WRH$_PARAMETER; 1152 OPSQL -------------------------------------------------------------------------------- MB ---------- truncate table WRH$_SYSTEM_EVENT; 978 truncate table WRH$_SQL_PLAN; 864 truncate table WRH$_DLM_MISC; 456 OPSQL -------------------------------------------------------------------------------- MB ---------- truncate table WRH$_MVPARAMETER; 400 truncate table WRH$_SERVICE_STAT; 312 truncate table WRH$_ROWCACHE_SUMMARY; 280 OPSQL -------------------------------------------------------------------------------- MB ---------- truncate table WRH$_SERVICE_WAIT_CLASS; 144 truncate table WRH$_SYSMETRIC_HISTORY; 144 truncate table WRH$_DB_CACHE_ADVICE; 120 OPSQL -------------------------------------------------------------------------------- MB ---------- truncate table WRH$_SQLTEXT; 104 16 rows selected. SQL>
三、处理问题
挑选较大的进行清理。如下
SQL> truncate table WRH$_ACTIVE_SESSION_HISTORY; Table has bing truncated. SQL> truncate table WRH$_EVENT_HISTOGRAM; Table has bing truncated. SQL>
四、清理后效果
清理后可能导致客户端掉线情况,重新登录客户端即可。查看表空间使用情况 如下 SYSAUX
表空间使用率为 50%
多。
隔两天后观察归档日志生成情况如下,已经不在暴增,客户表示非常满意!
以上就是Oracle归档日志爆满问题的处理方法的详细内容,更多关于Oracle归档日志爆满的资料请关注其它相关文章!
返回列表