问题描述
CRM系统出现异常无法访问,系统反馈如下告警错误:
java.sql.SQLException: ORA-00257: archiver error. Connect internal only, until freed.
问题分析
数据库归档日志空间400GB突然被写满,归档日志存放在ASM DataGroup磁盘组。
由于业务已经停滞必须要立刻恢复,归档日志突发增长只能稍后分析。现阶段必须要扩容满足继续保存日志。
问题解决
- 存储增加磁盘sdm
- ASM标签制作识别
- 设置asm_diskstring参数
- 针对ASM磁盘组扩容
补充信息
- 查询归档产生时间与数量
select logtime,
count(*),
round(sum(blocks * block_size) / 1024 / 1024) mbsize
from (select trunc(first_time, 'dd') as logtime, a.BLOCKS, a.BLOCK_SIZE
from gv$archived_log a
where a.DEST_ID = 1
and a.FIRST_TIME > trunc(sysdate - 7))
group by logtime
order by logtime desc;
- Logminer日志分析
PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Author:Eric.zhong([email protected]) |
PROMPT | Date:20160703 |
PROMPT | Desc:Easy to analyze oracle log. |
PROMPT +------------------------------------------------------------------------+
set lines 256
set pages 2000
col member format a50
col name format a50
col username for a10
col seg_owner for a10
col sql_redo for a70
col sql_undo for a70
col seg_name for a50
alter session set nls_date_format = "yyyy-mm-dd HH24:MI:SS";
PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Select Analyze LogFile |
PROMPT +------------------------------------------------------------------------+
select a.group#,a.sequence#,a.members,a.archived,a.status,b.member from v$log a,v$logfile b where a.group#=b.group#;
select name,completion_time from v$archived_log where deleted='NO' and dest_id='1';
execute dbms_logmnr.add_logfile(logfilename=>'&REDOLOG' ,options=>dbms_logmnr.new);
execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog + dbms_logmnr.PRINT_PRETTY_SQL);
PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | Display Time Interval at Analyze LogFile |
PROMPT +------------------------------------------------------------------------+
SELECT FILENAME AS name, LOW_TIME, HIGH_TIME FROM V$LOGMNR_LOGS;
select seg_owner,operation,count(*) from v$logmnr_contents group by seg_owner,operation order by seg_owner;
SELECT * FROM (
SELECT SEG_OWNER, SEG_NAME, OPERATION, COUNT(*) AS Hits
FROM V$LOGMNR_CONTENTS WHERE SEG_NAME NOT LIKE '%$'
GROUP BY SEG_OWNER, SEG_NAME, OPERATION
ORDER BY Hits DESC) TMP
WHERE ROWNUM < 21;
PROMPT Display Operation SQLTEXT
PROMPT select username,seg_owner,scn,to_char(timestamp,'yyyy-mm-dd hh24:mi:mm') time,sql_redo from v$logmnr_contents where seg_owner='SEGOWNER' and operation='OPER';
PROMPT
PROMPT +------------------------------------------------------------------------+
PROMPT | End Command : execute dbms_logmnr.end_logmnr(); |
PROMPT +------------------------------------------------------------------------+