2

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

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

我的连接字符串如下:

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

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

这是问题所在,我不能使用实例名称作为故障转移伙伴。我需要使用 DNS 名称作为故障转移伙伴。

所以我的问题是/是这样的:

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

1 回答 1

0

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

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

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

SELECT @@SERVERNAME

删除 WIN-NAME

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

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

于 2015-06-22T20:59:47.053 回答