我正在尝试学习如何手动解决主备之间的差距,我的oracle数据库版本是11gr2。
我所做的如下:
- 一开始,主备同步日志顺序相同
- 禁用
log_archive_dest_2
主要用于将重做发送到备用的参数 alter system switch logfile
通过at primary创建归档日志- 对 at standby 执行查询
v$archive_gap
以找出主数据库和备用数据库之间的差距
在第 4 步,没有从 v$archive_gap 返回行,所以我对这种情况感到困惑:
Q1:我在待机时设置了参数fal_client
和fal_server
设置,这个因素是否会导致“no data return from v$archive_gap
”
Q2:如果一切顺利find,会返回一些数据行v$archive_gap
。事实上,我log_archive_dest_2
在primary上禁用了,所以standby和primary没有相互意识到,standby怎么知道有差距?
archivelog gap 仅仅意味着备用站点上的应用服务无法继续,因为在应用的序列和下一个可用序列(从主站点发送或手动复制)之间缺少序列。
换句话说,如果在备用站点应用了序列 57,但下一个可用序列是 59,则应用服务无法继续,直到序列 58 可用(并已应用)。
解决差距在很大程度上取决于为什么会存在差距。如果使用“删除所有输入”选项在主站点上进行存档日志备份并且这些存档日志尚未发送到备用站点,则可能会发生这种情况。由于在重新启用装运过程时归档日志备份不会自动发送到备用站点,因此会在备用站点上检测到差距,然后可以在
v$archive_gap
.在上面的示例中,解决差距涉及(假设是 Windows 环境):
通过 OS 命令手动将归档日志备份复制到备用站点(在本例中,我将归档日志备份复制到 l:\oracle\archivegaps 中):
向备用站点注册归档日志备份:
从归档日志备份中解压归档文件:
向备用站点注册存档日志(此步骤可能是可选的,因为从备份中解压存档日志可能会自动注册存档日志,但老实说我不记得了)。
在解决差距之前,您可能还需要重新启动应用服务:
至于你的具体问题:
A1:fal_client 和 fal_server 应该与行是否在 v$archive_gap 中无关。
A2:在应用侧检测到间隙,技术上不是运输侧,因此即使关闭运输也可以检测到间隙。此外,如果在运输开启时检测到差距,然后关闭运输,该差距仍将列出,
v$archive_gap
直到差距得到解决。