DataGuard日常维护常见问题之数据同步异常

造成日志无法传到standby 的原因有:

  1. standby 服务器异常
  2. standby 相应的进程异常
  3. standby 监听器服务异常

日志传输问题

1、一般通过以下语句查看primary数据库和standby数据库的归档日志的sequence是否一样。

先在primary数据库执行

SQL> alter system switch logfile;

System altered.

SQL> select max(sequence#) from v$archived_log;

MAX(SEQUENCE#)
--------------
            38

如果一样说明没有问题,
如果不一样说明日志没有归档。

首先确认standby是否开启了日志应用

SQL> alter database recover managed standby database disconnect from session;

如果已经开启。再确认归档位置是否可用。

SQL> select dest_name,status,error from v$archive_dest;

DEST_NAME
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
STATUS             ERROR
------------------ -----------------------------------------------------------------
LOG_ARCHIVE_DEST_1
VALID

LOG_ARCHIVE_DEST_2
VALID

我遇到过这种情况:监听器没有监听到数据库
在操作系统Oracle用户登录查看监听器是否启动,lsnrctl stauts , lsnrctl start

用tnsping两个数据库是否正常,如果没有问题,在primary 数据库日志切换一次,看standby是否接收到归档日志了。

这几步没有问题就考虑数据库启动参数文件配置的问题了。
具体问题具体解决了。

排查思路

当 DG 出现故障时,第一时间检测 alert 日志,服务器 OS 日志,网络是否通畅。

当DG出现日志不能传输到备库:

一、查看是不是TNS配置错误和监听配置错误。
二、主备库初始化参数文件配置错误(如archive_log_dest文件位置错误)。
三、备库控制文件过旧,从主库生成一个STANDBY CONTROL过去。
SQL> alter database create standby controlfile as '/bnerp_data1/bnerp/cntrl01.dbf';
四、备库是否应用了Failovers 。

GAP处理

下面就简单说说手工处理日志GAP的步骤:
1、在备库检查是否有日志缺失

SQL> select * from V$ARCHIVE_GAP;

2、在主库中查询缺失的日志的所在路径和名称

SQL> SELECT NAME FROM V$ARCHIVED_LOG 

如果把日志移动到其他路径,则把日志所在路径换成当前实际所在路径。

3、把日志拷贝到备库上

4、在备库上手工注册上一步中从主库拷贝来的日志

SQL> ALTER DATABASE REGISTER LOGFILE '路径';

5、观察备库的alert日志信息

6、检查备库是否还有日志GAP

SQL> select * from V$ARCHIVE_GAP;

no rows selected

如果有行返回,则重复2-5步,直到查询结果是"no rows selected"。

如果日志只是临时移动到其他地方,过后会再移回原路径,则不用这么大费周折手工去手工处理了,把日志拷回原处后FAL会自动处理GAP。

常用SQL

 ---查询线程号
SELECT UNIQUE THREAD#, MAX(SEQUENCE#) OVER(PARTITION BY THREAD#) LAST FROM V$ARCHIVED_LOG;

SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

---查询未应用日志(仅备库)
select thread#,sequence#,first_time,next_time,applied from v$archived_log where applied='NO';

select name,open_mode,protection_mode,database_role,switchover_status from v$database;

select DEST_NAME,STATUS,ERROR from v$archive_dest;

select PROCESS,CLIENT_PROCESS,SEQUENCE# ,STATUS from v$managed_standby;

archive log list;
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Oracle 数据库中,DataGuard 是一种数据保护和灾难恢复解决方案,可以实现将主数据库数据实时同步到备库中,以保证数据的高可用性和可靠性。在 DataGuard 的使用过程中,可能会出现同步异常的问题,下面我将介绍一些处理同步异常的方法和步骤。 1. 查看 DataGuard 状态 执行以下命令查看 DataGuard 的状态: ``` DGMGRL> show configuration; ``` 如果主库和备库的状态都是 `SUCCESS`,则表示 DataGuard 同步正常;如果有一方的状态是 `ERROR`,则表示同步异常。 2. 查看 DataGuard 错误日志 执行以下命令查看 DataGuard 的错误日志: ``` DGMGRL> show database <database_name> log transport; ``` 其中 `<database_name>` 是指备库的名称。如果出现同步异常,可以从日志中查看具体的错误信息,比如网络连接异常或者磁盘空间不足等。 3. 检查网络连接 如果同步异常是由于网络连接异常引起的,可以执行以下命令检查网络连接: ``` tnsping <database_name> ``` 其中 `<database_name>` 是指备库的名称。如果出现网络连接异常,可以根据错误信息进行调整,比如修改 tnsnames.ora 文件中的网络配置或者检查防火墙设置等。 4. 检查磁盘空间 如果同步异常是由于磁盘空间不足引起的,可以执行以下命令检查磁盘空间: ``` df -h ``` 如果磁盘空间不足,可以考虑清理无用的文件或者增加磁盘容量等。 5. 重新启动 DataGuard 如果以上方法都无法解决同步异常问题,可以考虑重新启动 DataGuard,执行以下命令: ``` DGMGRL> disable database <database_name>; DGMGRL> enable database <database_name>; ``` 其中 `<database_name>` 是指备库的名称。重新启动 DataGuard 会重新建立同步连接,可以解决一些难以排查的同步异常问题。 综上所述,以上是处理 DataGuard 同步异常的一些方法和步骤,可以根据具体情况进行调整和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DBA大董

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值