使用 SQL 镜像和连接字符串进行自动故障转移



我设置了 3 台服务器,用于使用见证服务器的 SQL 镜像和自动故障转移。这按预期工作。

现在,连接到数据库的应用程序在发生故障转移时似乎出现问题 - 我需要手动干预并更改连接字符串才能再次连接。到目前为止,我找到的最佳解决方案涉及使用连接字符串的参数Failover Partner但它既不直观也不完整:Data Source="Mirror";Failover Partner="Principal"在这里找到。

从上面博客中的示例(方案 #3(中,当发生第一次故障转移并且主体(故障转移伙伴(不可用时,将改用数据源(即新主体(。如果它再次失败(我只在有限的时间内尝试过(,它会弹出一条错误消息。发生这种情况是因为连接字符串已缓存,因此在刷新之前,它会不断出现错误(似乎连接字符串在遇到错误后 ~5 分钟刷新(。如果在故障转移后交换数据源和故障转移伙伴,我将再次进行一次静默故障转移。

有没有办法为使用镜像数据库的应用程序实现全自动故障转移(而不会看到错误(?

我可以看到使用自定义脚本的潜在解决方法,这些脚本将轮询当前活动的数据库节点名称并相应地调整连接字符串,但目前这似乎有点矫枉过正。

在此处阅读博客文章http://blogs.msdn.com/b/spike/archive/2010/12/15/running-a-database-mirror-setup-with-the-sqlbrowser-service-off-may-produce-unexpected-results.aspx

它解释了正在发生的事情,故障转移伙伴实际上是从 sql 服务器而不是从您的配置中读取的。运行该帖子中的查询,找出实际用作故障转移服务器的内容。它可能是无法从客户端运行的位置发现的计算机名称。

在发生故障转移时可以清除应用程序池。我知道不是很好;-(

  // ClearAllPools resets (or empties) the connection pool. 
  // If there are connections in use at the time of the call, 
  // they are marked appropriately and will be discarded 
  // (instead of being returned to the pool) when Close is called on them.
  System.Data.SqlClient.SqlConnection.ClearAllPools();

当我们通过 SQL Server 别名更改基础服务器时,我们会使用它来强制"刷新"服务器名称。

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlconnection.clearallpools.aspx

解决方案是关闭连接池Pooling="false"

虽然这对小型应用程序的影响很小,但我还没有在每分钟(或更多(接收数百个请求并且不确定其含义的应用程序上对其进行测试。有人愿意评论吗?

试试这个连接字符串:

connectionString="Data Source=[MSSQLPrincipalServerIP,MSSQLPORT];Failover Partner=[MSSQLMirrorServerIP,MSSQLPORT];Initial Catalog=DatabaseName;Persist Security Info=True;User Id=userName; Password=userPassword.; Connection Timeout=15;"

如果你使用的是.net开发,你可以尝试使用ObjAdoDBLib或PigSQLSrvLib和PigSQLSrvCoreLib,代码将变得简单。

示例代码:

新建对象
ObjAdoDBLib

Me.ConnSQLSrv = New ConnSQLSrv(Me.DBSrv, Me.MirrDBSrv, Me.CurrDB, Me.DBUser, Me.DBPwd, Me.ProviderSQLSrv(

PigSQLSrvLib

或 PigSQLSrvCoreLib

Me.ConnSQLSrv = New ConnSQLSrv(Me.DBSrv, Me.MirrDBSrv, Me.CurrDB, Me.DBUser, Me.DBPwd(

执行此方法可在镜像数据库故障转移后自动连接到联机数据库。

Me.ConnSQLSrv.OpenOrKeepActive

有关详细信息,请参阅相关链接。

https://www.nuget.org/packages/ObjAdoDBLib/

https://www.nuget.org/packages/PigSQLSrvLib/

https://www.nuget.org/packages/PigSQLSrvCoreLib/

最新更新