Oracle RAC故障转移备份过程

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

问题是脚本从集群中的第一个节点运行,如果节点closures,则不能运行备份。 我们如何确保我们的脚本具有故障转移备份版本。 我们还尝试通过dbconsole进行备份,但只有在启动作业的节点已启动的情况下才有效。

本质上,问题是“如何确保我们的备份工作,无论这两个节点是否活动”

通过数据库服务连接到数据库。 该服务应该是服务器池pipe理,并且这两个节点应该是池的一部分。 然后,总是提供服务,如果两个节点中的任何一个启动,脚本将运行。 该服务可以使用srvctl命令来定义。

在一个简单的写得很好的RMAN脚本中,没有任何东西可以阻止它在同一个数据库的不同实例上使用,所以我想这个问题实际上是摆脱了这种调用的单点故障(SPOF) RMAN脚本。

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

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

更好的解决scheme是有一个自定义脚本,始终在第一个节点上执行备份,而在第二个节点上,只有当它通过crsstat检测到第一个节点是OFFLINE时。

如果你擅长编写脚本,我会安排它(原谅伪代码):

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