Delphi 中 FireDAC 数据库连接(恢复连接 )
一个数据库应用程序可以在一个不稳定的环境中工作,网络可能被物理断开或DBMS服务器可能被重新启动。应用程序需要从这种中断中无缝恢复并继续与DBMS进行通信。FireDAC的自动连接恢复功能允许你检测到连接丢失的情况,并对这种情况作出正确的反应和恢复。只有在执行特定的DB操作时,如Open、ExecSQL或Ping,才会发现丢失。然后DBMS驱动会引发EFDDBEngineException,Kin
描述了如何在不稳定的环境中工作。FireDAC允许一个应用程序从连接失败中恢复。
一、概述
一个数据库应用程序可以在一个不稳定的环境中工作,网络可能被物理断开或DBMS服务器可能被重新启动。应用程序需要从这种中断中无缝恢复并继续与DBMS进行通信。
FireDAC的自动连接恢复功能允许你检测到连接丢失的情况,并对这种情况作出正确的反应和恢复。只有在执行特定的DB操作时,如Open、ExecSQL或Ping,才会发现丢失。然后DBMS驱动会引发EFDDBEngineException,Kind = ekServerGone。
验证连接状态和/或保持连接活力的最简单方法是调用TFDCustomConnection.Ping方法。Ping方法甚至可以在连接被关闭时使用,以查看何时可以建立连接。
已知的限制如下:
DBMS | 说明 |
Advantage Database |
|
dbExpress bridge driver | - FireDAC可能无法检测到ekServerGone。 - 不支持Ping方法。 |
Informix | 需要将DirectExecute设置为True。 |
Microsoft Access | 不支持。 |
MySQL | 为了尽量减少网络连接丢失时的呼叫延迟,考虑调整ReadTimeout和WriteTimeout连接定义参数。 |
ODBC bridge driver |
|
SQLite | 不支持。 |
二、控制连接恢复
要启用自动连接恢复,请将ResourceOptions.AutoReconnect设置为True。可以选择使用TFDCustomConnection事件处理程序。
OnRecover - 响应连接丢失事件,为FireDAC提供下一步行动。
OnLosted - 当连接丢失并且没有恢复时触发。
OnRestored - 当一个连接丢失并恢复时触发。
TFDCustomConnection.OnRecover事件处理程序的响应可能是重新建立连接,进入离线模式,或者干脆关闭连接。当OnRecover没有被指定时,FireDAC会尝试重新建立连接。比如说:
procedure TForm1.FDConnection1Recover(ASender: TObject;
const AInitiator: IFDStanObject; AException: Exception;
var AAction: TFDPhysConnectionRecoverAction);
var
iRes: Integer;
begin
iRes := MessageDlg('Connection is lost. Offline - yes, Retry - ok, Fail - Cancel',
mtConfirmation, [mbYes, mbOK, mbCancel], 0);
case iRes of
mrYes: AAction := faOfflineAbort;
mrOk: AAction := faRetry;
mrCancel: AAction := faFail;
end;
Log('Connection is recovering');
end;
我们强烈建议你不要在OnRecover、OnLost和OnRestored事件处理程序中关闭FireDAC管理器,因为这可能导致意外的问题。
三、准备申请
当一个连接被恢复时,以下状态会丢失。
活动的事务被回滚,从失败的语句开始继续执行。
尚未被获取的结果集被修剪,TFDDataSet.SourceEOF被设置为True。
数据库会话状态丢失,包括Oracle包状态和会话变量。
已注册的数据库警报被取消注册。
为了让你的应用程序准备好在不稳定的环境中工作,并尽量减少故障影响,请设置以下选项值:
Set this option | To the following value |
fmAll | |
200 - 300 | |
True (the default) | |
True | |
True |
该应用程序可以使用离线连接模式和CachedUpdates。
更多推荐
所有评论(0)