#常见问题
如果在高可用环境的主备运行过程中出现问题,可以通过查看V$REPLICATION_EVENT、V$DIAG_INCIDENT视图,以及run log来定位原因。
# 主库业务卡住
可能原因为:
归档磁盘满,无法切换日志。此时可执行SQL命令清理无用的归档文件,或设置归档自动清理参数。
最大保护模式下备库发生异常,事务redo无法同步到备库。此时可启动或修复备库,并等待备库同步redo。
最大保护模式下备库发生异常,主库同步写审计日志的事务redo无法同步到备库或主库异步写审计日志的缓存区满导致卡住,此时可关闭审计,修复数据库后再重新开启审计。
# 主库执行业务报read only错误,v$database的status变为ABNORMAL
可能原因为:
归档磁盘空间不足,导致归档失败。此时可执行SQL命令清理无用的归档文件,或设置归档自动清理参数,然后执行alter database convert to normal。
最大保护模式下备库发生异常,事务redo无法同步到备库。此时可启动或修复备库,确保备库状态正常,然后执行alter database convert to normal。
# 备库redo回放慢
可能原因为:
- 主库并发高,备库没有设置并行回放参数。此时可设置备库并行回放参数,并重启备库。
# 备库NEED REPAIR
该项错误可从run log中查找更详细报错信息。
可能原因为:
主备二进制版本不匹配,需要更换版本。
主备database_id不一致,通常是因为主库重新建过库但备库没有重新build,导致数据库不匹配。
主库清理了归档文件,但备库还没接收到该部分日志出现无法修复的gap,需要重新build备库。
主备日志不匹配,可能是因为发生过Failover且新主库存在部分日志丢失,需要重新build备库。
旧主库降为备库后发生脑裂,需要重新build旧主库。
MN组内多数派备库(n/2,n为节点数量)的数据文件被清理,需要将主MN的模式切换成最大可用模式,build损坏的备库,再将主MN切回最大保护模式。
YashanDB提供对出现NEED REPAIR状态时的修复手段,具体操作请查阅备库异常修复。
# 主库shutdown卡住
可能原因为:
shutdown模式为normal,并且有未退出的客户端连接。normal模式会等待客户端连接正常退出,需要用户手动退出客户端连接。
shutdown模式不是abort,并且主库业务卡住了,业务线程无法结束,可参考主库业务卡住处理。
# shutdown abort报断连错误,进程退出
最大保护模式下,如果备库异常,脏页刷盘将阻塞以防止未提交的数据落盘。
在执行shutdown abort时,如果有线程必须等待脏页刷盘则无法结束该线程,因此会在1分钟超时时间后,强制退出yasdb进程,客户端会报断连错误。
可能的场景为:
data buffer满的情况下,执行shutdown abort,此时有一个线程需要申请页面,则需要data buffer淘汰一个页面,但是脏页刷盘已经阻塞,该线程无法申请页面。
执行表空间相关操作,可能会触发全量checkpoint,但是脏页刷盘已经阻塞,该线程无法等待checkpoint完成。
redo日志追尾,需要触发全量checkpoint,释放redo空间,但是脏页刷盘已经阻塞,redo空间无法释放,所有等待redo空间释放的线程无法结束。
# 执行build或并行build时卡住
当主备处于最大保护模式下,备库全部断连,主库事务无法提交,执行build或并行build会偶现卡住问题。
解决方法:手动切换为最大可用模式,待build执行完成后再酌情修改为其他保护模式。