- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试制作一个 Delphi 应用程序来与 AlwaysOn 解决方案一起使用。我在 Google 上发现必须在连接字符串中使用 MultiSubnetFailover=True
。
应用程序在 Delphi XE3 中编译并使用 TADOConnection
。
如果我在连接字符串中使用 Provider=SQLOLEDB
,应用程序会启动,但看起来 MultiSubnetFailover=True
没有效果。
如果我使用 Provider=SQLNCLI11
(我在 Google 上发现 OLEDB 不支持 AlwaysOn 解决方案,我必须使用 SQL Native 客户端),我在尝试打开连接时会得到无效属性。
连接字符串是:
Provider=SQLOLEDB.1;Password="password here";Persist Security Info=True;User ID=sa;Initial Catalog="DB here";Data Source="SQL Instance here";MultiSubnetFailover=True
我是否必须在 Delphi 上升级到较新版本才能使用此故障转移解决方案,或者连接字符串中缺少某些内容?
最佳答案
我目前正在将 XE2 与 SQL Server AlwaysOn 一起使用。如果您阅读文档,您将看到 AlwaysOn 弹性事件将导致您的数据库连接失败,您需要启动一个新的连接。
If a SqlClient application is connected to an AlwaysOn database that fails over, the original connection is broken and the application must open a new connection to continue work after the failover.
我通过简单的权宜之计处理了这个问题,即使用我自己的版本覆盖 TAdoQuery 组件,该版本在连接失败后重试连接。这可能不是正确的方法,但它确实有效。它的作用是覆盖为打开而调用的方法(如果查询返回结果集)或执行 SQL(否则),如果由于连接丢失错误而失败,则再次尝试(但仅一次)。我已经针对 AlwaysOn 切换进行了大量测试,它对于我们的配置可靠地工作。它还会对任何其他连接丢失事件使用react,从而处理查询失败的其他一些原因。如果您使用 TAdoQuery 以外的组件,则需要为该组件创建类似的覆盖。
这可能可以通过其他方式来解决,但一旦我找到了可行的方法,我就不再寻找替代方案。您可能需要整理 use 语句,因为它显然包含一些不需要的内容。 (光是看这段代码就让我想离开并重构代码重复)
unit sptADOQuery;
interface
uses
Windows, Messages, SysUtils, Classes, Db, ADODB;
type
TsptADOQuery = class(TADOQuery)
protected
procedure SetActive(Value: Boolean); override;
public
function ExecSQL: Integer; // static override
published
end;
procedure Register;
implementation
uses ComObj;
procedure Register;
begin
RegisterComponents('dbGo', [TsptADOQuery]);
end;
procedure TsptADOQuery.SetActive(Value: Boolean);
begin
try
inherited SetActive(Value);
except
on e: EOleException do
begin
if (EOleException(e).ErrorCode = HRESULT($80004005)) then
begin
if Assigned(Connection) then
begin
Connection.Close;
Connection.Open;
end;
inherited SetActive(Value); // try again
end
else raise;
end
else raise;
end;
end;
function TsptADOQuery.ExecSQL: Integer;
begin
try
Result := inherited ExecSQL;
except
on e: EOleException do
begin
if (EOleException(e).ErrorCode = HRESULT($80004005)) then
begin
if Assigned(Connection) then
begin
Connection.Close;
Connection.Open;
end;
Result := inherited ExecSQL; // try again
end
else raise;
end
else raise;
end;
end;
end.
关于delphi - Microsoft AlwaysOn 故障转移解决方案和 Delphi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30479459/
这个问题是关于访问可用性组监听器的正确方法? 假设我有两个 AlwaysOn 可用性组,它们具有以下 AG:AG1和 AG2 . 我也有 2 个听众叫 LISTENER1 (在 AG1 上)和 LIS
我正在尝试制作一个 Delphi 应用程序来与 AlwaysOn 解决方案一起使用。我在 Google 上发现必须在连接字符串中使用 MultiSubnetFailover=True。 应用程序在 D
我有一对 SQL Server 2014 数据库,设置为同步 AlwaysOn 可用性组。 两台服务器均设置为 Synchronous commit可用性模式, session 超时为 50 秒。辅助
我有一个数据库已从旧的 SQL Server 2008R2 实例移至 SQL Server 2012 AlwaysOn 集群中。数据库中有多个字段使用 SQL Server 内置加密功能(主 key
我尝试关闭应用服务的 AlwaysOn 功能,但保存更改后它又恢复为“打开”。 这是一项 Windows 服务计划,目前处于 B1 定价层。我想缩小到 D1 或 F1 定价级别,但这些级别需要关闭 A
windows server 2016 与 sql server 2016 都可用允许不许要加入AD ,管理方面省了挺多操作,也不用担心域控出现问题影响各服务器了。 本测试版本: window s
我正在运行 Powershell 5 并尝试使用 Set-AzureRmWebApp(而不是 Set-AzureResource)操作我的 Azure WebApp 对象,以设置 Web 应用程序的“
在我们的环境中,我们在具有两台服务器的集群上使用 SQLServer Always。 其中一个用于写入,第二个用于读取。在应用程序服务中,SqlConnection 每秒打开和关闭一次以执行短查询。但
这是我的第一篇文章,所以我会很简短。我有两个 SQL 2014 Enterprise 服务器;一个主要副本和一个辅助副本。这是一个 Multi-Tenancy 部署,每个租户都有单独的数据库。 (没有
我有两个正在进行负载平衡的 SQL 服务器 - AlwaysOn。这些服务器中只有第二个应该用于 Crystal 报表。我想使用连接字符串中的 readOnly 标志访问第二个 SQL 服务器:App
对于 Visual Studio Team Services 持续集成,我想禁用“Always On”,释放,然后启用它。 (因为NewRelic发布时需要禁用AlwaysOn,所以使用特定的dll)
对于 Visual Studio Team Services 持续集成,我想禁用“Always On”,释放,然后启用它。 (因为NewRelic发布时需要禁用AlwaysOn,所以使用特定的dll)
我有一个 Azure PaaS 实例,在 Tomcat8 容器内运行 Spring-Boot 打包的“war”。问题是,经过一段时间的不活动后,“java”进程被终止。 上图是tomcat进程没有被杀
我想知道 SQL Server 2012 中故障转移群集和 AlwaysOn 可用性组之间的区别 最佳答案 AlwaysOn 故障转移集群 (FCI) 与 Windows 服务故障转移集群 (WSFC
我正在尝试测试我的应用程序数据库的 SQL Server AlwaysOn 可用性组行为。我已经创建了可用性组并且能够从集群管理器或从 SQL Server Studio 正确地模拟故障转移。如果服务
学习者向 AWS 用户寻求设计意见, 我有一组申请4 个应用程序需要 2 个 MSSQL 实例。 一直在探索将其托管在 AWS 上的想法与 M6i.l 上 4 个应用程序的应用程序负载平衡 4 个应用
学习者向 AWS 用户寻求设计意见, 我有一组申请4 个应用程序需要 2 个 MSSQL 实例。 一直在探索将其托管在 AWS 上的想法与 M6i.l 上 4 个应用程序的应用程序负载平衡 4 个应用
我有一个与以下场景相关的问题:使用 Microsoft JDBC Driver 4.0 从 Java 应用程序连接到设置了 AlwaysOn 可用性组以实现高可用性的 SQL Server 2014。
我们最近购买了一个众所周知的备份解决方案,即使在保证它可以备份 SQL 2012 数据库并且我们的 SQL 2012 AlwaysOn HA 解决方案不会有问题之后,事实证明他们目前实际上并不支持它。
我是一名优秀的程序员,十分优秀!