问题概述
4节点 ORACLE RAC 11G集群的节点4上的 xxgsh 服务在上午9点半左右和下午14点左右无法正常提供服务,通过重建服务和重启数据库实例解决。
经过查看集群日志、osw信息发现数据库负载正常,集群日志正常,数据库日志存在大量导数的操作,并且自动产生了大量 alter system
设置服务名的命令。通过仔细查看相关 alter system
设置服务名的命令发现,在设置服务名的时候没有xxgsh 的服务名。
Tue Sep 24 10:24:33 2021
DW00 started with pid=226, OS id=14760, wid=, job SYSTEM.SYS_EXPORT_SCHEMA_14
Tue Sep 24 10:26:58 2021
ALTER SYSTEM SET service_names='SYS$SYS.KUPC$S_4_20210924102429.XXG01','SYS$SYS.KUPC$C_4_20210924102429.XXG01','gps','xxgsc','xxgnk' SCOPE=MEMORY SID='xxgrac4';
ALTER SYSTEM SET service_names='SYS$SYS.KUPC$S_4_20210924102429.XXG01','SYS$SYS.KUPC$C_4_20210924102429.XXG01','gps','xxgsc','xxgnk','xxgsh' SCOPE=MEMORY SID='xxgrac4';
Tue Sep 24 10:28:52 2021
ALTER SYSTEM SET service_names='SYS$SYS.KUPC$S_4_20210924102429.XXG01','SYS$SYS.KUPC$C_4_20210924102429.XXG01','gps','xxgsc','xxgnk' SCOPE=MEMORY SID='xxgrac4';
Tue Sep 24 10:28:58 2021
ALTER SYSTEM SET service_names='SYS$SYS.KUPC$S_4_20210924102429.XXG01','gps','xxgsc','xxgnk' SCOPE=MEMORY SID='xxgrac4';
ALTER SYSTEM SET service_names='xxgps','xxxxgnk' SCOPE=MEMORY SID='xxgrac4';
正常情况应该是包含 xxgsh 服务名的。
./alert_xxgrac4.log:ALTER SYSTEM SET service_names='SYS$SYS.KUPC$S_4_20210924102902.XXG01','gps','xxgzh','xxgsc','xxgnk' SCOPE=MEMORY SID='xxgrac4';
./alert_xxgrac4.log:ALTER SYSTEM SET service_names='xxgps','xxgzh','xxgsc','xxgnk' SCOPE=MEMORY SID='xxgrac4';
可以看到进行 alter system
修改服务名都是在 进行expdp(DW00 started with pid=226, OS id=14760, wid=, job SYSTEM.SYS_EXPORT_SCHEMA_14) 操作之后。经过查看 mos,发现是 oracle 的bug。经过跟客户确认,那个时间点确实在有进行导数的操作。
问题原因
在RAC 环境,每次通过数据泵进行操作会产生一个服务名,这可以通过alert日志可以看到:
ALTER SYSTEM SET service_names='SYS$SYS.KUPC$S_4_20210924102429.XXG01','SYS$SYS.KUPC$C_4_20210924102429.XXG01','gps','xxgsc','xxgnk' SCOPE=MEMORY SID='xxgrac4';
但是服务名有 65535个限制,当服务名超过55535 个之后再注册服务名会出现丢失的情况。
解决方案
目前数据库的版本是11.2.0.4.171017. 在受影响的版本之内。
解决方案是 重启实例,或者打补丁 22036236