2010-10-21 81 views
2

我已经在两台不同的SQL Server计算机上为我的数据库安装了用于SQL Server 2005的数据库镜像。这里没有使用见证服务器。我还在我的数据库的主服务器和镜像服务器上分别看到“主体/同步”和“镜像,同步/恢复”状态。SQL Server数据库镜像没有见证

现在我想测试故障转移到镜像服务器是否正常工作。所以我写了一个如下的小型控制台应用程序。

try 
{ 
    SqlConnection cn = new SqlConnection("data source=PRIMARYSQL1;Failover Partner=MIRRORSQL1;initial catalog=TESTDB;Integrated Security=SSPI;"); 
    SqlCommand cm = new SqlCommand("insert into department(name) values('Dept10')", cn); 
    cn.Open(); 
    cm.ExecuteNonQuery(); 
} 

我再关闭thehSQL Server和SQL代理服务在主服务器上,我希望我的控制台应用程序仍然正常工作,但我得到以下错误。

"A network-related or instance-specific error occurred while establishing a conne ction to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: Named Pipes Provider, error: 40 - Could not open a conne ction to SQL Server)"

而且,一旦主服务器出现故障我也没有办法,使镜像数据库主要因为它不允许我这样做镜像服务器。

我确定我做错了什么。谁能帮我?

回答

0

我认为你在寻找这样的事情(上镜运行此):

ALTER DATABASE数据库名称SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS GO

+0

这样做后,我仍然需要改变我的连接字符串,或者我应该期望它的原始连接字符串自动工作?实际上在执行alter database query之后,我的代码仍然没有使用“data source = PRIMARYSQL1; Failover Partner = MIRRORSQL1;初始目录= TESTDB;集成安全性= SSPI;”我不得不将连接字符串更改为“data source = MIRRORSQL1;故障转移伙伴= PRIMARYSQL1;初始目录= TESTDB;集成安全性= SSPI;”使其工作。这是错的不是吗? – MICHAEL 2010-10-21 17:34:17

+0

有意思......我用SQL Server 2008做了我的测试,并专注于有见证服务器。您可能需要深入了解MSDN上的文档才能达到这个水平(这是我必须在当天完成的)。 – RQDQ 2010-10-22 14:13:11

2

你期待发生自动故障转移,但自动故障转移不能发生没有证人。鉴于从任何便宜/老化的硬件运行的任何SQL Express实例都可以作为见证人,我强烈建议您添加一个见证并自动进行故障转移,而不是在发生主要丢失的情况下进行手动故障转移,并且可能会发生数据丢失。

+1

好,所以我添加了sqlexpress作为见证,然后尝试测试自动故障转移,它工作正常。我现在唯一的问题是,当我的原始主管回到网上时,它不会自动成为主要的,我必须明确地对镜子进行故障转移。以下是我的步骤。关闭主要sonow上的sql server服务证人使我的镜像为主,我的代码工作正常2.我在原始主服务器上重新启动了sql server服务,并期待它再次成为主服务器,发生。我的期望是否在这里? – MICHAEL 2010-10-21 18:30:48

+1

否。一旦发生故障转移,旧镜像将成为主体,旧主体将成为镜像。如果旧的校长开始回来,它将以新的角色(镜子)开始,而不是作为旧的角色(校长)。与故障转移群集不同,在镜像中,没有“最喜欢的”主机的概念。 – 2010-10-21 18:35:33