Kori 4월 4일, 2022에 포스트됨 공유하기 4월 4일, 2022에 포스트됨 Docwiki에 있는 "Recovering Connection (FireDAC)"을 번역한 글: 번역일: 2022년 4월 4일) 위로 가기: [DocWiki 번역] 연결(connection)을 가지고 작업하기 (FireDAC) 안정적이지 않은 환경에서 작동하는 방법을 설명한다. FireDAC을 사용하면, 애플리케이션에서 연결 실패를 회복할 수 있다. 목차 1 일반 (General) 2 연결 복구 제어하기 (Controlling Connection Recovery 3 애플리케이션에서 대비하기 (Preparing the Application) 4 기타 자료 (See Also) 1 일반 (General) 데이터베이스는 안정적이지 않은 환경에서 작동하는 경우가 있다. 즉, 물리적으로 네트워크가 끊길 수도 있고, DBMS 서버가 재시작될 수도 있다. 애플리케이션은 자연스럽게 이런 방해를 복구하고 DBMS와 통신을 지속할 수 있어야 한다. FireDAC의 자동 연결 복구를 사용하면, 연결이 끊졌을 때 탐지할 수 있고, 올바르게 대응하고 상황을 회복할 수 있다. 연결 끊김을 DB의 특정 행위 (예: Open, ExecSQL, Ping 등등)가 수행될 때에만 탐지할 수 있다. 탐지되면 해당 DBMS 드라이버에서 Kind = ekServerGone인 EFDDBEngineException을 일으킨다. TFDCustomConnection.Ping 메소드를 호출하면,연결 상태를 검증하기 그리고/또는 연결을 계속 살아있도록 유지하기를 가장 간단하게 할 수 있다. Ping 메소드는 연결이 닫힘(closed) 상태일 때에도 사용할 수 있어서 언제 연결을 설정할 수 있을 지를 알 수 있다. 알려진 한계: DBMS 설명 Advantage Database 로컬 자유 연결 (local free connection)을 지원하지 않음 dbExpress bridge driver FireDAC에서 ekServerGone을 탐지하지 못할 수 있음 Ping 메소드를 지원하지 않음 Informix DirectExecute를 True로 지정해야만 함 Microsoft Access 지원하지 않음 MySQL 네트워크 연결을 잃어버렸을 때 호출 지연을 최소화 하려면, 연결 정의 파라미터 중 ReadTimeout과 WriteTimeout 조정을 고려한다. ODBC bridge driver FireDAC에서 ekServerGone을 탐지하지 못할 수 있음 Ping 메소드를 지원하지 않음 SQLite 지원하지 않음 2 연결 복구 제어하기 (Controlling Connection Recovery 자동 연결 복구를 활성화하려면, ResourceOptions.AutoReconnect를 True로 지정한다. 원한다면, TFDCustomConnection의 이벤트 핸들러를 사용한다. OnRecover - 연결 분실(connection lost) 이벤트에 반응하고, FireDAC이 수행할 다음 액션(action)을 제공한다. OnLosted - 연결 분실(connection lost)이 발생되고 회복되지 않았을 때 발생된다. OnRestored - 연결 분실(connection lost)이 발생되고 회복되었을 때 발생된다. TFDCustomConnection.OnRecover 이벤트 핸들러에서는 연결을 다시 설정하도록 대응하기, 또는 오프라인 모드로 전환하기, 또는 그냥 연결을 닫아 버리기 등의 대응을 할 수 있을 것이다. OnRecover가 지정되어 있지 않고 비어있으면, FireDAC은 연결을 다시 설정하려고 시도한다. 예문: procedure TForm1.FDConnection1Recover(ASender: TObject; const AInitiator: IFDStanObject; AException: Exception; var AAction: TFDPhysConnectionRecoverAction); var iRes: Integer; begin iRes := MessageDlg('연결이 끊겼습니다. 오프라인 - Yes, 다시 시도 - OK, 실패 - Cancel을 클릭하세요.', mtConfirmation, [mbYes, mbOK, mbCancel], 0); case iRes of mrYes: AAction := faOfflineAbort; mrOk: AAction := faRetry; mrCancel: AAction := faFail; end; Log('연결 복구 중'); end; OnRecover, OnLost, OnRestored 이벤트 핸들러 안에서는 FireDAC manager를 닫기(close) 하지 않기를 강력히 권한다. 자칫 예상치 못한 문제를 유발할 수 있다. 3 애플리케이션에서 대비하기 (Preparing the Application) 연결이 복구되면 다음 상태들을 잃게 된다. 설정할 옵션 다음 값을 지정 FetchOptions.Mode fmAll FetchOptions.RowsetSize 200 - 300 FetchOptions.AutoClose True (기본값) TxOptions.AutoCommit True ResourceOptions.AutoReconnect True 오프라인 연결 모드와 캐시된 업데이트에서 활용할 수 있다. 4 기타 자료 (See Also) [DocWiki 번역] 연결을 설정하기 [DocWiki 번역] 연결을 오프라인 모드으로 하기 1 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
c2design 6월 23일에 포스트됨 공유하기 6월 23일에 포스트됨 관련 데모는 아래 링크에서 볼 수 있습니다. 인용하기 이 댓글 링크 다른 사이트에 공유하기 더 많은 공유 선택 사항
Recommended Posts
이 토의에 참여하세요
지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.