主镜像日志为空,但镜像日志正常

Hea*_*ore 8 sql-server mirroring

我们有几十个主服务器和相应的镜像,大多数都运行良好,但其中1个运行异常。具体来说,sp_dbmmonitorresults对于给定的主数据库,proc 将所有列返回为 NULL,而sp_dbmmonitorresults在镜像上返回有效信息:

原理服务器上的历史记录

镜像服务器上的历史

现在,我大致知道原因是什么;当设置主服务器和镜像服务器时,主服务器上的区域设置不正确(时间正确但使用的是 +4 区域(美国等),在设置镜像后,时间区域更正为 GMT +0我知道男孩的错误,但是c'est la vie!)

编辑:19/12/2012

今天我删除了镜像,删除了镜像上的副本并重新设置了镜像,但是这并没有解决问题!我将在这个问题上悬赏以尝试找出问题的根源。

确认一下,如果我EXEC sp_dbmmonitorresults @database_name = 'ProScript'在每台服务器上手动运行,它会为主要服务器上的大多数值返回 NULL,但在镜像上返回正常,如下所示:

在主要运行时:

在此处输入图片说明 缩放:点击查看全尺寸版本

对着镜子跑的时候:

在此处输入图片说明 缩放:点击查看全尺寸版本

如您所见,时间是当前的并且数据库是同步的,但是主数据库上的 log_generation_rate、unsent_log、send_rate 等变量都为 NULL?

两台服务器都有监控作业每分钟运行一次,exec sys.sp_dbmmonitorupdate作为作业步骤等。

查看 sys.sp_dbmmonitorupdate 的来源,它从中获取这些值sys.dm_os_performance_counters- 所以如果我在镜像上运行以下内容:

SELECT  counter_name ,
        cntr_value
FROM    sys.dm_os_performance_counters
WHERE   instance_name = 'ProScript'
        AND counter_name IN ( N'Log Send Queue KB', N'Log Bytes Sent/sec', N'Redo Queue KB', N'Redo Bytes/sec', N'Transaction Delay', N'Log Bytes Flushed/sec', N'Transactions/sec' )
Run Code Online (Sandbox Code Playgroud)

我得到了很好的结果:

在此处输入图片说明

但是,如果我在主数据库上运行相同的 SQL,则没有行!

这表明该sys.dm_os_performance_counters表没有为镜像填充?会导致什么???

Hea*_*ore 5

好吧,它花了几个月的时间,但我终于找到了问题!

sys.dm_os_performance_counters 根本没有在主服务器上填充。

结果发现没有安装计数器,我可以手动执行以下操作:

C:\Windows\system32>lodctr "D:\Program Files\Microsoft SQL Server\MSSQL10_50.MSS
QLSERVER\MSSQL\Binn\perf-MSSQLSERVERsqlctr.ini"
Run Code Online (Sandbox Code Playgroud)

重新启动 SQL 和繁荣,现在正在填充表 - 包括我的镜像统计信息。