Oracle dg 不能同步原因分析(ORA-1092 : opitsk aborting process)
用户的两节点 Oracle(11g) 集群,配置 Dataguard,近期发现 dg 数据库多次停库,数据也无法同步。
一、问题描述
近期多次发现 dg 数据库停库,启动数据库之后执行以下命令 dg 数据库恢复正常:
alter database recover managed standby database using current logfile disconnect;
过了一段时间之后又出现同样的问题!9 月 20 日、9 月 24 日、10 月 4 日连续出现。
二、原因分析
因为 dg 不同步是由于 dg 数据库停库造成的,把 alert 日志文件导出,发现日志文件中有如下错误:
System State dumped to trace file /oracle/app/oracle/diag/rdbms/hisdbdg/hisdb/trace/hisdb_diag_9060_20220921220106.trc
Wed Sep 21 22:01:06 2022
ORA-1092 : opitsk aborting process
Dumping diagnostic data in directory=[cdmp_20220921220106], requested by (instance=1, osid=9050 (PMON)), summary=[abnormal instance termination].
Instance terminated by PMON, pid = 9050
.........
PMON (ospid: 7044): terminating the instance due to error 471
Fri Sep 23 16:10:20 2022
opiodr aborting process unknown ospid (27498) as a result of ORA-1092
Fri Sep 23 16:10:20 2022
opiodr aborting process unknown ospid (27500) as a result of ORA-1092
Fri Sep 23 16:10:20 2022
System state dump requested by (instance=1, osid=7044 (PMON)), summary=[abnormal instance termination].
...........
ORA-1092 : opitsk aborting process
Dumping diagnostic data in directory=[cdmp_20221004230056], requested by (instance=1, osid=8162 (PMON)), summary=[abnormal instance termination].
Instance terminated by PMON, pid = 8162
Thu Oct 06 14:07:23 2022
Starting ORACLE instance (normal)
通过百度查询错误码(ORA-1092),有文章提出:Linux 有个特性叫 OOM killer(Out Of Memory killer),在系统内存耗尽的情况下会选择性的杀掉一些进程以释放内存。可能把 Oracle 进程杀掉了,导致 Oracle 停库。
执行如下命令,查看操作系统日志:
egrep -i -r 'Out of memory' /var/log
发现如下信息:
然后查看主机内存的使用情况,发现服务器总内存为 16 GB,内存已经使用超过 15 GB,只有几百兆空闲内存。基本可以确定 Oracle 停库的原因是服务器内存不足造成的。
三、解决办法
增加服务器内存为 32 GB。系统增加内存以后,从 10 月 4 日运行至今(10 月 16 日)已经 12 天,没有再出现停库的问题。