#数据同步监测

配置逻辑备库后,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. 扩展表空间:

    -- 方式1:创建表空间时开启数据文件自动扩展(默认为开启),创建后无法调整该属性
    CREATE TABLESPACE yashan2 DATAFILE 'yashan2' SIZE 4M AUTOEXTEND ON NEXT 4M MAXSIZE 1G EXTENT UNIFORM SIZE 64K; 
    
    -- 方式2:为已有表空间添加数据文件
    ALTER TABLESPACE yashan ADD DATAFILE;
    
  2. 优化监控方案,增加对表空间使用率的关注,及时发现容量告急避免再次阻塞。

    SELECT tablespace_name,user_bytes,user_blocks FROM DBA_TABLESPACES;
    

# 因CURSOR POOL不足阻塞逻辑回放

现象

逻辑备库报错“YAS-02009 no free cursors in cursor pool”,SQL回放速度骤降甚至停滞。

解决方案

  1. 将游标开启量纳入日常监控指标,方便及时发现并关闭不必要的游标。

    -- 确认每个会话允许打开的游标数上限,并合理设置该参数值
    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
    
  2. 优化应用代码,例如:

    1. )检视业务代码确保每次开启游标必有关闭操作形成闭环。

    2. )尽可能多使用绑定变量,减少硬解析,降低游标占用量。

  3. 按需提高逻辑备库的CURSOR_POOL_SIZE配置,需重启数据库生效。

    ALTER SYSTEM SET CURSOR_POOL_SIZE=2T scope=spfile;  
    

# 因STREAM POOL空间不足阻塞逻辑回放

现象

逻辑备库报错“YAS-00103 no free block in stream pool”,SQL回放停滞,归档日志堆积。

解决方案

  1. 按需提高逻辑备库的STREAM_POOL_SIZE配置。

    -- 推荐采用Stream Pool占Share Pool最大百分比的方式配置STREAM_POOL_SIZE
    ALTER SYSTEM SET STREAM_POOL_SIZE=55 scope=spfile;  
    
  2. 若采用占Share Pool最大百分比的方式配置STREAM_POOL_SIZE,还可按需提高逻辑备库的SHARE_POOL_SIZE配置。

    ALTER SYSTEM SET SHARE_POOL_SIZE=2T scope=spfile;  
    
edit-icon
反馈
coperate-icon
coperate
合作
communication-icon
communicate
交流