자유롭게 질의 및 응답을 할 수 있는 게시판입니다. 개발자 여러분의 답변이 큰 도움이 됩니다.
- 제품설치/등록 오류 문의: 설치/등록 Q&A 이용 (제품 구매 고객 한정)
Delphi FireDAC Connection 체크를 어떤 방식으로 하는게 좋을까요?
2021.02.22 13:29
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요.
Firebird 3.0 DB를 사용중이고 RAD 10.3 에서 FireDAC을 통해 커넥션을 연결해주고 있습니다.
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Recovering_Connection_(FireDAC)
컨넥션이 끊기는 경우 위 문서처럼 쿼리 실행하면 Errer가 발생되고
OnRecover 이벤트 에서 Retry로 처리를 해둬서 해결되는 것을 확인했습니다.
문제는 네트워크가 일시적으로 잠깐 (와이파이 핑튐이라던지..) 끊겼다 붙거나,
Firebird service가 정지되었다가 재시작된 그런 일시적일때 장애가 복귀 된 후에..
동일한 DB를 연결 중인 원격 클라이언트들은 쿼리를 날리기 전까지는
트리거를 받질 못하고 있더라구요.
(예를 들어 버튼을 클릭 후 쿼리 날리면 에러가 발생된 후 그제서야
Recover에서 Retry 되니깐 그 후부턴 정상이라 트리거를 받긴하는데..)
클라이언트 쪽에서 연결이 되고 문제가 없다는 것을 실시간으로 알 수 있게 하는 좋은 방법이 떠오르질 않습니다..
1분마다 쿼리를 날려서 오류가 나는지 체크를 해야하는 건지.. 계속 쿼리를 날리는게 좋은 방법인지
제가 아직 경험이 없어 판단하기가 어렵네요..
어떻게 하는 게 좋을지 아니면 FireDAC에서 제공해주는 기술이 있는지 궁금합니다.
Delphi FireDAC Connection 체크를 어떤 방식으로 하는게 좋을까요?
2021.02.22 13:29
본 게시판은 개발자들이 자유롭게 질문과 답변을 공유하는 게시판입니다.
* 따라서 최대한 정중하게 질문을 올려 주세요.
* 질문을 상세히 작성해 주실 수록 좋은 답변이 올라 옵니다.
* 다른 분들도 참고할 수 있도록 결과 댓글 필수(또는 감사 댓글)
(결과 댓글을 달지 않는 경우 다음 질문에 대한 답변이 달리지 않는 불이익이 있을 수 있습니다.)
-----------------------------------------------------------------------------------------------
안녕하세요.
Firebird 3.0 DB를 사용중이고 RAD 10.3 에서 FireDAC을 통해 커넥션을 연결해주고 있습니다.
http://docwiki.embarcadero.com/RADStudio/Berlin/en/Recovering_Connection_(FireDAC)
컨넥션이 끊기는 경우 위 문서처럼 쿼리 실행하면 Errer가 발생되고
OnRecover 이벤트 에서 Retry로 처리를 해둬서 해결되는 것을 확인했습니다.
문제는 네트워크가 일시적으로 잠깐 (와이파이 핑튐이라던지..) 끊겼다 붙거나,
Firebird service가 정지되었다가 재시작된 그런 일시적일때 장애가 복귀 된 후에..
동일한 DB를 연결 중인 원격 클라이언트들은 쿼리를 날리기 전까지는
트리거를 받질 못하고 있더라구요.
(예를 들어 버튼을 클릭 후 쿼리 날리면 에러가 발생된 후 그제서야
Recover에서 Retry 되니깐 그 후부턴 정상이라 트리거를 받긴하는데..)
클라이언트 쪽에서 연결이 되고 문제가 없다는 것을 실시간으로 알 수 있게 하는 좋은 방법이 떠오르질 않습니다..
1분마다 쿼리를 날려서 오류가 나는지 체크를 해야하는 건지.. 계속 쿼리를 날리는게 좋은 방법인지
제가 아직 경험이 없어 판단하기가 어렵네요..
어떻게 하는 게 좋을지 아니면 FireDAC에서 제공해주는 기술이 있는지 궁금합니다.
앞의 RECOVERY부분에서 fdconnection의 resourceoption중에 autoreconnect를 true로 놓고 사용해 보십시오. 아래의 내용은 헬프를 번여간 것입니다.
AutoReconnect 속성을 사용하여 자동 연결 복구 기능을 제어합니다.
*연결이 끊어졌을 때 투명하게 다시 설정하려면이 속성을 True로 설정합니다. False이면 FireDAC에서 예외가 발생하고 재 연결을 시도하지 않습니다.
*애플리케이션은 TFDCustomConnection 이벤트를 사용하여 연결 복구를 제어 할 수 있습니다. 자세한 내용은 OnRecover를 참조하십시오. 100 % 투명한 복구는 불가능합니다.
*연결 복구 후 다음이 적용됩니다.
*모든 데이터 세트는 연결 복구 전과 같이 동일한 활성 상태를 갖습니다.
*모든 데이터 세트는 연결 복구 전과 같이 동일한 준비 됨 상태를 갖습니다.
*아직 페치되지 않은 모든 레코드가 삭제되고 해당 커서가 닫힙니다.
*모든 트랜잭션이 비활성 상태입니다.
*모든 이벤트 경고가 등록되지 않았습니다.
*응용 프로그램은 DBMS 서버에 로그인 한 후 수행 한 것과 유사한 조치를 취해야합니다.
또다른 경우로는
(기본적으로 옵션에 말씀하신 경우처럼 fdconnection의 통신 상태가 일시 불안정한 경우에는 offlinemode를 사용할 수도 있습니다.
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Offlining_Connection_(FireDAC)
연결 상태를 체크하는것은 보통은 타이머를 사용하여 FDCONNECTION의 상태를 체크하여 CONNECT를 다시 시키면서 오류 체크를 하게 하는 경우도 있는 것 같습니다.