c++ - 修改sys.database_mirroring中的mirroring_partner_instance名称

标签 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 参数几乎没有值(value)。它仅在主服务器关闭且首次建立新连接时使用。出于某种原因,当与主体建立连接并使用在 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 名称?

最佳答案

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

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

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

SELECT @@SERVERNAME

放下 WIN-NAME

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

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

关于c++ - 修改sys.database_mirroring中的mirroring_partner_instance名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25773301/

相关文章:

c++ - 重构仅在最内层范围内不同的多个重复函数

c++ - 如何在 C++ 和 ZMQ 中正确使用多线程

mysql - 在 SQL 查询中复制和移动列

c# - 插入前检查重复项 (C#.net)

sql-server - SQL Server Analysis Services 帐户名丢失

sql-server - 探查器在过滤掉 sp_reset_connection 后显示该连接

c++ - 使用它们的 ascii 值将 char 数组中的多个 ascii 字符转换为单个 int --- c/c++

c++ - 为什么转换不起作用?

sql - LIKE 条件中的多个字符串 - Presto SQL

使用 Server Management Studio 从 SQL Server Express 导入 SQL Compact 数据库