修改sys.database_mirroring中的mirroring_partner_instance名称

时间:2014-09-10 19:13:57

标签: c++ sql sql-server dns database-mirroring

我遇到了正确故障转移到镜像数据库的问题。当我连接到主体数据库(dbx)(镜像已启用并设置)并且我对主体数据库进行故障转移(关闭SQL Server以模拟崩溃)时,我无法再发送没有失败的查询。这是预期的,因为之前的连接现在丢失了。

我想简单地关闭我的连接并处理并使用相同的连接字符串重新建立新连接,然后重新连接到镜像数据库(dby,现在是主要数据库)。

我的连接字符串如下:

Driver = {SQL Native Client}; Server = dbx; Failover_Partner = dby; Database = db; Uid = uid; Pwd = pwd; Network = DBMSSOCN;

通过研究,我了解到连接中的Failover_Partner参数几乎一文不值。它仅在主体服务器关闭并且第一次建立新连接时使用。出于某种原因,在与主体建立连接并且使用sys.database_mirroring表中找到的mirroring_partner_instance时,会在内部覆盖Failover_Partner。因此,当我将Failover_Partner指定为dby时,在建立连接后,我查询它认为故障转移伙伴是什么,并返回故障转移伙伴的INSTANCE名称而不是DNS名称(dby)。

以下是问题,我无法使用INSTANCE名称作为故障转移合作伙伴。我需要使用DNS名称作为故障转移伙伴。

所以我的问题是:

  • 有没有办法修改sys.database_mirroring条目并更改mirroring_partner_instance?
  • 此字段从哪里获得价值?
  • 是否有其他方法可以强制SQL Server使用DNS名称而不是INSTANCE名称?

1 个答案:

答案 0 :(得分:0)

如果有人有相同或类似的问题,我找到了这个问题的答案。

我不得不修改SQL中的@@ SERVERNAME属性。它在内部设置为计算机WIN -...实例名称,我可以删除它并使用以下命令添加我想要的服务器名称:

获取当前服务器名称(WIN_NAME)

SELECT @@SERVERNAME

删除WIN-NAME

SP_DropServer  'WIN_NAME' 
GO
SP_AddServer 'SERVER_NAME',local
GO

重新启动SQL Server以查看更改是否生效。