Oracle RAC 故障转移备份过程

Oracle RAC 故障转移备份过程

我们在两个节点上安装了 Oracle 11gR2 RAC 数据库。我们还有一个运行良好的 RMAN 备份脚本,使用位于距离数据中心 20 公里的城镇的恢复目录数据库。数据库备份脚本运行良好,可以从 crontab 作业或 Oracle dbconsole 启动(目前它从 crontab 运行)。检查了恢复过程,一切正常。

问题是脚本从集群中的第一个节点运行,如果节点关闭,则无法运行备份。我们如何确保我们的脚本具有故障转移备份版本。我们还尝试通过 dbconsole 进行备份,但这仅在启动作业的节点已启动时才有效。

本质上的问题是“如何确保我们的备份有效,无论两个节点是否处于活动状态”

答案1

在一个简单且编写良好的 RMAN 脚本中,没有什么可以阻止它在同一个数据库的不同实例上使用,所以我想问题实际上在于摆脱此类 RMAN 脚本调用的单点故障 (SPOF)。

使用 crontab 调度时,为避免 SPOF,您必须有两个(或更多)crontab。

粗暴的方法是始终在每个节点上执行备份,但这会浪费时间和资源。

更好的解决方案是有一个自定义脚本,始终在第一个节点上执行备份,并且仅当通过 crsstat 检测到第一个节点处于离线状态时才在第二个节点上执行备份。

如果您擅长编写脚本,我会将其安排如下(原谅伪代码):

this_host = hostname -s
alphabetical_good_hosts = ` crsstat -t | grep 'inst *ONLINE *ONLINE' | cut the hostname | sort `
if this_host != first_element_of( alphabetical_good_hosts ) ; then
    echo Silently exiting, we are not the preferred node for backup
    exit 0
endif
rman target / catalog someone@rman

答案2

通过数据库服务连接到数据库。该服务应由服务器池管理,并且两个节点都应是池的一部分。然后始终提供服务,并且只要两个节点中的任何一个启动,脚本就会运行。可以使用 srvctl 命令定义该服务。

相关内容