修改sys.database_mirroring中的mirroring_partner_instance名称

Modify mirroring_partner_instance name in sys.database_mirroring

本文关键字:mirroring instance 名称 partner 中的 sys 修改 database      更新时间:2023-10-16

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

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

我的连接字符串如下:

驱动程序={SQL Native Client};服务器=dbx;Failover_Partner=dby;数据库=db;Uid=Uid;Pwd=Pwd;网络=DBMSSOCN;

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

问题是,我不能使用INSTANCE名称作为故障转移伙伴。我需要使用DNS名称作为故障转移伙伴。

所以我的问题是:

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

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

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

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

SELECT @@SERVERNAME

放下WIN-NAME

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

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