我们在两个节点上有Oracle 11gR2 RAC数据库。我们还有一个RMAN备份脚本,它可以很好地工作,使用一个位于离数据中心20公里的小镇上的恢复目录数据库。数据库备份脚本运行良好,并从crontab作业或Oracle dbconsole启动(目前它从crontab启动)。检查恢复过程,一切正常工作。
问题是脚本从集群中的第一个节点运行,如果节点被关闭,备份就无法运行。如何确保脚本具有故障转移备份版本。我们还试图通过dbconsole进行备份,但只有在启动作业所在的节点时才能进行备份。
本质上,问题是“如何确保我们的备份工作,无论两个节点是否都处于活动状态”。
发布于 2011-12-02 22:51:45
在一个简单的、写得很好的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发布于 2011-09-02 03:17:48
通过数据库服务连接到数据库。服务应该是管理服务器池的,两个节点都应该是池的一部分。然后,将始终提供服务,如果两个节点中的任何一个处于运行状态,则脚本将运行。可以使用srvctl命令定义服务。
https://serverfault.com/questions/303912
复制相似问题