#数据同步监测
配置逻辑备库后,DBA应通过该备库上的DBA_LOGSTDBY_EVENTS、V$DIAG_INCIDENT、V$LOGSTDBY_PROGRESS等视图对逻辑备库的日常使用进行监测与管理。
# 相关视图
# DBA_LOGSTDBY_EVENTS
DBA_LOGSTDBY_EVENTS视图会记录以下信息:
逻辑备库因资源类错误(例如,表空间不足,CURSOR POOL不足等)产生逻辑备库SQL回放阻塞的相关事件,若出现此类事件,需DBA介入进行修复。
逻辑备库SQL回放时因主键更新冲突而直接跳过引起冲突的操作记录,可能会出现与主库数据不一致。
# V$DIAG_INCIDENT
若STREAM POOL空间不足,逻辑备库的SQL回放会中断,数据库会记录并上报事件(V$DIAG_INCIDENT视图)。此时需要DBA介入,调整STREAMP POOL大小并重新启动SQL回放。
# V$LOGSTDBY_PROGRESS
V$LOGSTDBY_PROGRESS视图会记录逻辑备库的回放进度。
# 常见问题及处理方法
# 因表空间不足阻塞逻辑回放
现象
逻辑备库报错“YAS-02007 no free extent in tablespace XXX”,SQL回放停滞,逻辑备库数据同步延迟持续增大。
解决方案
扩展表空间:
-- 方式1:创建表空间时开启数据文件自动扩展(默认为开启),创建后无法调整该属性 CREATE TABLESPACE yashan2 DATAFILE 'yashan2' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G EXTENT UNIFORM SIZE 64K; -- 方式2:为已有表空间添加数据文件 ALTER TABLESPACE yashan ADD DATAFILE;优化监控方案,增加对表空间使用率的关注,及时发现容量告急避免再次阻塞。
SELECT tablespace_name,user_bytes,user_blocks FROM DBA_TABLESPACES;
# 因CURSOR POOL不足阻塞逻辑回放
现象
逻辑备库报错“YAS-02009 no free cursors in cursor pool”,SQL回放速度骤降甚至停滞。
解决方案
将游标开启量纳入日常监控指标,方便及时发现并关闭不必要的游标。
-- 确认每个会话允许打开的游标数上限,并合理设置该参数值 SHOW PARAMETER OPEN_CURSORS; NAME VALUE ---------------------------------------------------------------- ---------------------------------------------------------------- OPEN_CURSORS 310 -- 观测当前未关闭的游标量 SELECT name,value FROM V$SYSSTAT WHERE name='OPENED CURSORS CURRENT'; NAME VALUE ---------------------------------------------------------------- --------------------- OPENED CURSORS CURRENT 1优化应用代码,例如:
)检视业务代码确保每次开启游标必有关闭操作形成闭环。
)尽可能多使用绑定变量,减少硬解析,降低游标占用量。
按需提高逻辑备库的CURSOR_POOL_SIZE配置,需重启数据库生效。
ALTER SYSTEM SET CURSOR_POOL_SIZE=2T scope=spfile;
# 因STREAM POOL空间不足阻塞逻辑回放
现象
逻辑备库报错“YAS-00103 no free block in stream pool”,SQL回放停滞,归档日志堆积。
解决方案
按需提高逻辑备库的STREAM_POOL_SIZE配置。
-- 推荐采用Stream Pool占Share Pool最大百分比的方式配置STREAM_POOL_SIZE ALTER SYSTEM SET STREAM_POOL_SIZE=55 scope=spfile;若采用占Share Pool最大百分比的方式配置STREAM_POOL_SIZE,还可按需提高逻辑备库的SHARE_POOL_SIZE配置。
ALTER SYSTEM SET SHARE_POOL_SIZE=2T scope=spfile;

