0

我的数据库连接有点问题。有2个数据库服务器:

DBSA, DBSB

DBSA (primary server)
DBSB (mirrored server)

我使用以下连接字符串连接:

Data Source=DBSA;Failover Partner=DBSB;Persist Security Info=True;Initial Catalog=database;User ID=user;Password=password

当我在我的 PC 上运行我的程序时,它可以工作,但是当我在 DMZ 的 Web 服务器上尝试该程序时,故障转移不起作用。

有人知道这是什么原因吗?

=> 我忘了在问题中说明。还有一个见证服务器。

4

2 回答 2

1

在您的主体数据库上运行它

SELECT DB_NAME(database_id) AS 'DatabaseName'
, mirroring_role_desc 
, mirroring_safety_level_desc 
, mirroring_state_desc 
, mirroring_partner_instance
FROM
sys.database_mirroring WHERE mirroring_guid IS NOT NULL; 

mirroring_partner_instance 中返回的值是连接将用于故障转移的服务器名称,而不是您在配置中指定的名称。我想您的 PC 可以使用此名称看到此服务器,而在 DMZ 中运行时则不能。

于 2014-01-17T21:44:31.863 回答
1

应用程序必须从 SQL 服务器获取故障转移服务器名称(甚至可能不是 FQDN 名称),而不是web.config.

尝试运行ipconfig /flushdns然后对 SQL 数据库进行故障转移,并在遇到第一个 SQL 异常错误后运行ipconfig /displaydns以查看它无法解析的名称。我敢打赌,它看起来不像您在连接字符串中为故障转移伙伴设置的数据库别名......

我不得不处理同样的事情——微软的实现有点复杂,因为他们试图涵盖所有可能的场景。

于 2013-09-24T19:44:29.800 回答