暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

ORACLE数据库ORA600问题

IT那活儿 2023-05-23
576
点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!



问题背景



某天晚上收到后台日志ORA-00600告警
查看数据库状态都正常:
由于是晚上,且业务侧没反馈异常,转为持续关注后续告警,待上班后再深入分析。
后业务侧反馈有个表数据插不进去,分析incident日志,筛选Current SQL可以看到正是执行insert操作的表:




问题处理



发现问题后同事立马采取换表操作,2节点换表后仍报错,将业务连接调整到1节点后,语句正常入数。

之后根据当前情况提了SR,上传alert日志和600错误的相关trace,oracle工程师分析日志后定论为bug 29967980,通过flush shared_pool 和buffer pool 可以修复这个问题,如下:
alter system flush shared_pool;
alter system flush buffer_cache;

复制
该方法只能临时解决问题,为了从根本上解决,我们申请了bug29967980补丁并在停机窗口对主备库进行补丁更打。
1. 备库更打补丁
1.1 补丁冲突验证
su - oracle
cd /u01/software/patch/29967980
opatch prereq CheckConflictAgainstOHWithDetail -ph ./

复制
1.2 等业务通知,随后进行补丁更打
1)停库
su - oracle
srvctl stop listener -l listener
ps -ef |grep oracle|grep -v grep |grep LOCAL=NO|awk '{print $2}' |xargs kill -9

复制
#停库:
srvctl stop database -db dbuniquename
复制
2)应用补丁
cd /u01/software/patch/29967980
opatch apply -local

复制
3)验证
opatch lspatches
复制
4)启库
srvctl start database -db dbuniquename
复制
2. 主备库切换并打补丁
2.1 检查当前的dg状态
1)主库
--验证备用数据库中没有重做传输错误或重做间隙,STATUS列VALID和值GAP_STATUS列NOGAP。
SELECT STATUS, GAP_STATUS FROM V$ARCHIVE_DEST_STATUS WHERE 
DEST_ID = 2;

复制
2)备库
set linesize 400
SELECT  INST_ID,PROCESS, STATUS,SEQUENCE#,BLOCK#,BLOCKS,
DELAY_MINS FROM GV$MANAGED_STANDBY where process in 
('RFS','MRP0') and SEQUENCE# <>0;

复制
--确认备库是否实时应用。
SELECT RECOVERY_MODE FROM V$ARCHIVE_DEST_STATUS WHERE DEST_ID=2;
复制
2.2 停主备库监听,清理会话链接
su - oracle
srvctl stop listener -l listener
ps -ef |grep oracle|grep -v grep |grep LOCAL=NO|awk '{print $2}' |xargs kill -9

sqlplus / as sysdba
alter system checkpoint;
alter system checkpoint;
alter system checkpoint;

复制
2.3 切换域名
  • 切换业务网域名;
  • 切换数据网域名;
  • 检查域名切换结果。
2.4 主库切换备库
1)切换验证
su - oracle
sqlplus / as sysdba
SQL> ALTER DATABASE SWITCHOVER TO stbdbuniquename VERIFY;

复制
--没有报错为正常,如果临时空间大小不一样,可以忽略告警,切换后进行处理。
2)正式主备切换
su - oracle
sqlplus / as sysdba
ALTER DATABASE SWITCHOVER TO stbdbuniquename;

复制
--切换完库会变mount状态。
2.5 启停数据库
1)原备库现主库停启库
srvctl stop database -d stbdbuniquename
srvctl start database -d stbdbuniquename

复制
--检查数据库状态:
set line 200
select DB_UNIQUE_NAME,DATABASE_ROLE,OPEN_MODE,SWITCHOVER_STATUS
from v$database;

复制
2)原主库现备库停启库    
--暂时不启动,直接打补丁,参考第一步备库打补丁:
srvctl start database -db dbuniquename
复制
--打开数据库open:
ALTER DATABASE recover managed standby database using current logfile disconnect;
复制
- 检查数据库状态:
set line 200
select DB_UNIQUE_NAME,DATABASE_ROLE,OPEN_MODE,SWITCHOVER_STATUS from v$database;

复制
- 检查进程:
set linesize 400
SELECT  INST_ID,PROCESS, STATUS,SEQUENCE#,BLOCK#,BLOCKS,
DELAY_MINS FROM GV$MANAGED_STANDBY where process in 
('RFS','MRP0') and SEQUENCE# <>0;

复制
- 检查apply lag:
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
select name,value,TIME_COMPUTED,DATUM_TIME from 
v$dataguard_stats where name in ('apply lag','apply finish
time'
);

复制
2.6 拉起切换后主备库业务监听【grid】
srvctl status listener -l LISTENER
复制


END



本文作者:事业二部(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论