Logical Standby日常维护与性能优化(一)―日常维护与故障排除

Logical Standby日常维护与性能优化(一)―日常维护与故障排除
2011年09月01日
  本篇主要讲述logical stanby日常管理维护中的检查和故障排除要点,不涉及性能问题。性能问题和相关调整将在下篇中单独阐述。
  Logical Standby日常维护与性能优化(二)―性能诊断与优化
  10gR2大大简化了logical stanby的创建步骤,从physical到logical的转换步骤异常简单,不再对搭建过程过多描述。
  因为Logical standby是SQL语句的逻辑运用,而standby是block级别的recover,从故障角度上将,Logical standby比standby stanby有更多的故障机会出现。
  常用的用于维护和排查logical standby的视图几乎都是已”dba_logstdby_*”和“v$logstdby_*”开头,常用的包以”dbms_logstdby.*”开 头,具体含义根据字面意思也不难理解,不赘述(下文有部分提及)。当然,用于physical standby的部分视图,对排查逻辑备库也同样适用。
  1. APPLY状态的检查和诊断
  Apply进程是逻辑SQL运用的核心。Apply进程遇到错误会自动终止,需要处理后手工重新启动。因此,监控apply进度和状态是监控逻辑备库同步与否的关键,如同物理DG监控日志同步。
  (1) 监控备库上各个进程的状态
  可以查询v$logstdby_process视图,用于得到与SQL APPLY相关的各进程的状态情况.
  如果没有返回值,表示APPLY进程没有启动或者已停止。如果是后者,可以从alert.log文件或者dba_logstdby_events中得到更多的错误信息用于后续处理。
  (2) Apply 进度
  监控Apply进度可以得到备库的恢复进展以及同步状态。关联查询v$logstdby_progress 和dba_logstdby_log,得出目前SQL APPLY的apply scn/time以及log sequence。如果apply进程正常而主备之间同步有很大差异,需要做进一步排查。
  2. SQL Apply的异常事务处理
  SQL Apply的异常事务会记录到dba_logstdby_events视图中,对于能够进行手工fix的异常,可以处理后重新运行apply进程。对于 某些无法处理或者修复后需要忽略的异常,通过dbms_logstdby.skip*一系列包做标记以便让apply进程跳过。比如,我们可以对特定的错 误事务进行标记,通过dbms_logstdby.skip_transaction标记指定的事务而忽略该事务的运用。
  在10G中,oracle提供了带skip failed transaction子句的 SQL apply启动语句,可以方便的对当前记录的错误事务全部跳过。
  SQL>alter database start logical standby apply skip failed transaction;
  3.SKIP策略
  Logical standby提供skip的策略,可根据实际情况跳过不想被apply的对象或者跳过特定对象上的所有错误事务。
  dbms_logstdby.skip: 用于指定对象的DML DDL skip
  dbms_logstdby.skip_error: 用于指定对象上的错误事务 skip
  dbms_logstdby.skip_transaction: 用于指定事务 skip
  4. UNSKIP与初始化
  Unskip是与skip相反的操作,用于已skip操作的撤销。对于unskip的对象,需要进行手工构造或者初始化。
  Oracle提供dbms_logstdby.instantiate_table包来对指定的table初始化。我们也可以手工来构造一个当前apply scn时刻的闪回查询版本来初始化数据。
  5. DDL handle
  Logical standby中提供DDL handle的功能,用于自定义的一些DDL语句处理,比如一些表对象的重命名。
  需要注意的是,在逻辑备库中,db_file_name_convert/ log_file_name_convert参数并不生效。对于路径不同的主备体系,添加数据文件和表空间会引起逻辑备库的apply错误,可以通过 DDL handle可以实现文件路径的重命名。
  ORACLE联机文档上的一个例子:
  CREATE OR REPLACE PROCEDURE SYS.HANDLE_TBS_DDL (
  OLD_STMT IN VARCHAR2,
  STMT_TYP IN VARCHAR2,
  SCHEMA IN VARCHAR2,
  NAME IN VARCHAR2,
  XIDUSN IN NUMBER,
  XIDSLT IN NUMBER,
  XIDSQN IN NUMBER,
  ACTION OUT NUMBER,
  NEW_STMT OUT VARCHAR2
  ) AS
  BEGIN
  
<think>好的,用户之前已经问过人大金仓怎么做主从,我给出了个基本的配置步骤。现在用户要求再详细些,特别是从的情况。我需要考虑用户可能需要的详细信息,可能是在实际操作中遇到了问题,或者想确保每步都正确。 首先,用户可能希望得到更详细的步骤说明,包括具体的配置文件参数、命令示例以及注意事项。需要确认主从配置的每个环节,比如主库和备库的具体配置,参数的解释,以及常见问题的解决方法。 接下来,应该检查之前回答是否有遗漏的部分,比如系统参数的具体设置,如何验证配置是否成功,以及如何处理可能出现的错误。用户可能需要详细的命令和配置片段,确保他们能够步步跟随操作。 另外,用户提到从,可能需要更多的细节关于流复制模式,同步和异步的区别,以及如何选择适合的模式。需要解释清楚这些概念,帮助用户理解不同配置的优缺点。 还要考虑用户的环境,比如操作系统、人大金仓的版本,是否需要特定的权限或者依赖。如果有版本差异,可能需要指出注意事项,避免兼容性问题。 最后,用户可能需要故障排除的建议,比如如何检查主从同步状态,处理网络问题,或者修复复制中断的情况。提供详细的排查步骤和命令,帮助用户在遇到问题时能够自行解决。 总结下来,需要扩展每个配置步骤的详细说明,增加参数解释,操作示例,验证方法,以及常见问题的解决方案,确保用户能够顺利完成从的配置,并理解其背后的原理和注意事项。</think>以下针对人大金仓(KingbaseES)**从**架构的详细配置说明,包含具体参数解释和操作细节: --- ### **、环境准备** **系统要求**: - 主从服务器时间同步(NTP配置) - 主从数据库版本完全致(建议V8R6以上) - 磁盘空间:从库至少需要主库相同容量 - 网络要求:主从间54321端口互通,禁用防火墙或配置白名单 **推荐目录结构**: ```bash # 主库/从库统路径 /data/kingbase # 数据目录 /opt/Kingbase/ES/V8/bin # 执行程序路径 /opt/Kingbase/ES/V8/log # 日志目录 ``` --- ### **二、主库详细配置** #### 1. **修改 kingbase.conf** ```conf # 核心参数 listen_addresses = '0.0.0.0' # 监听所有IP port = 54321 # 服务端口 wal_level = logical # WAL级别(replica/logical) max_wal_senders = 10 # 最大WAL发送进程数 wal_keep_segments = 1024 # 保留的WAL段数(每段16MB) hot_standby = on # 允许备库查询 synchronous_commit = off # 异步模式(若同步需改为on) # 连接参数 max_connections = 1000 # 需大于等于从库设置 shared_buffers = 4GB # 内存分配需从库致 ``` #### 2. **创建复制专用账户** ```sql -- 使用sysdba账户执行 CREATE ROLE repl_role WITH REPLICATION LOGIN PASSWORD 'Repl_2023@SEC'; ``` #### 3. **配置 sys_hba.conf** ```conf # 允许从库IP访问(示例:从库IP为192.168.1.101) host replication repl_role 192.168.1.101/32 md5 ``` #### 4. **重启主库服务** ```bash sys_ctl restart -D /data/kingbase -l /opt/Kingbase/ES/V8/log/start.log ``` --- ### **三、从库详细配置** #### 1. **清理从库数据(全新部署可跳过)** ```bash rm -rf /data/kingbase/* ``` #### 2. **执行物理基础备份** ```bash sys_basebackup -h 192.168.1.100 -p 54321 -U repl_role -D /data/kingbase \ -Fp -Xs -P -R -W ``` **参数解释**: - `-Fp`:明文格式备份 - `-Xs`:持续流式传输WAL - `-P`:显示进度 - `-R`:自动生成recovery.conf - `-W`:提示输入密码 #### 3. **检查生成的 recovery.conf** ```conf standby_mode = 'on' primary_conninfo = 'host=192.168.1.100 port=54321 user=repl_role password=Repl_2023@SEC application_name=standby1' recovery_target_timeline = 'latest' ``` **高级配置**: ```conf # 设置同步模式(需主库配合) primary_conninfo += ' synchronous_commit=on' ``` #### 4. **启动从库服务** ```bash sys_ctl start -D /data/kingbase -l /opt/Kingbase/ES/V8/log/standby.log ``` --- ### **四、同步状态验证** #### 1. **主库检查** ```sql SELECT pid, application_name, client_addr, state, sync_state FROM sys_stat_replication; ``` **预期输出**: ``` pid | application_name | client_addr | state | sync_state -----+------------------+--------------+-----------+------------ 589 | standby1 | 192.168.1.101 | streaming | async ``` #### 2. **从库验证** ```sql -- 查看恢复状态 SELECT sys_is_in_recovery(); -- 查看延迟(单位:字节) SELECT * FROM sys_stat_wal_receiver; ``` #### 3. **数据同步测试** ```sql -- 主库创建测试表 CREATE TABLE sync_test(id int); INSERT INTO sync_test VALUES (1); -- 从库查询验证 SELECT * FROM sync_test; ``` --- ### **五、故障处理手册** #### **场景1:主从复制中断** 1. 检查网络连通性: ```bash telnet 192.168.1.100 54321 ``` 2. 查看主库WAL发送进程: ```sql SELECT * FROM sys_stat_replication; ``` 3. 检查从库恢复日志: ```bash tail -100 /opt/Kingbase/ES/V8/log/standby.log ``` #### **场景2:从库无法连接主库** 1. 检查主库hba规则: ```sql SELECT * FROM sys_hba_file_rules WHERE type='host' AND database='replication'; ``` 2. 验证账号权限: ```bash ksql -h 192.168.1.100 -p 54321 -U repl_role -d test -c "\conninfo" ``` #### **场景3:数据不同步** 1. 手动重新同步: ```bash # 从库停止服务 sys_ctl stop -D /data/kingbase # 清空数据目录 rm -rf /data/kingbase/* # 重新执行基础备份 sys_basebackup -h 主库IP ...(同前) # 重启从库 ``` --- ### **六、性能优化建议** 1. **WAL调优**: ```conf wal_buffers = 16MB # 增大WAL缓冲区 checkpoint_timeout = 30min # 延长检查点间隔 ``` 2. **复制监控**: ```sql -- 创建监控视图 CREATE VIEW rep_monitor AS SELECT now() - pg_last_xact_replay_timestamp() AS replication_lag; ``` 3. **自动清理**: ```conf # 配置归档策略 archive_mode = on archive_command = 'rsync -av %p kingbase@backup:/archive/%f' ``` --- **附:主从切换操作** ```bash # 主库降级为从库 touch /data/kingbase/standby.signal # 原从库升级为主库 rm -f /data/kingbase/standby.signal sys_ctl promote -D /data/kingbase ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值