问题
随着SQL Server 2005版本的发布,数据库镜像技术已经成为了解决故障问题的非常流行的方法。但数据库镜像的一大问题就是failover(失效转移)仅仅作用在发生故障的主库上,当一个数据库失效时,系统中的备用数据库会立即接替它的位置,但是所有其他的数据库依然保持在原服务器上发挥作用。这种技术的缺点就是在多数据库系统中会不断建立越来越多的应用程序,一旦主库失效,备库虽然可以继续在原服务器上发挥作用,但是基于失效主库所建立的应用程序也会随之失效。当这种情况发生时,我们怎样才能被通知并立即failover所有的数据库呢?
专家解答
就像SQL Server的所有功能一样,当数据库镜像功能失败时,有一种方法能让我们得到警告并检测所发生的情况。遗憾的是,这种针对镜像功能的事件警报机制并不想您所想象的那么直接明了,但它仍然可以被实施。
对于数据库镜像功能来说,您可以选择使用事件追踪功能或设置SQL Server Alert(警报管理器)来检测当数据库镜像状态值改变时所发生的WMI (Windows Management Instrumentation,即windows管理规范)事件。在我们开始之前,您仍需做以下几件事情:
准备步骤
首先必须要启动备库和msdb(目录管理)数据库的service broker功能。此项功能可以通过以下代码来检测:
SELECT name, is_broker_enabled
FROM sys.databases
如果service broker的值未被设为1,您可以为每一个数据库设置如下命令来启动此项功能:
ALTER DATABASE msdb SET ENABLE_BROKER
如果SQL Server Agent处于运行当中,这条命令将无法被执行,您需要先终止SQL Server Agent,接着运行上述命令,然后再重新启动它。
最后,如果SQL Server Agent没有处于运行状态,您需要启动此项功能。
创建警报管理器
其创建方法同其他警报管理器一样,只是我们需要选择WMI事件警报管理器(WMI event alert)类型。
首先展开SQL Server Agent的树形目录,右键点击Alerts然后选择New Alert
图1:选择New Alert
在New Alert(警报管理器)页面,我们要把类型改为WMI event alert。您要注意的另外一点就是系统还需要Namespace一栏的信息,SQL Server系统已经根据您所使用的SQL Server版本默认选择了正确的信息。
图2:New Alert页面