공통 [FireDAC Skill Sprints] 2. FireDAC으로 DBMS 사용 내역 추적, 모니터링 하기
2015.03.07 01:28
엠바카데로에서 FireDAC Skill Sprint 웨비나(1월 23일 ~ 3월 27일: 매주 금요일 10시)를 진행하고 있습니다.
이 글에서는 웨비나 다시보기와 함께 웨비나 일부 내용을 샘플코드와 함께 소개합니다. 하단 온라인 기술 도움말 링크를 통해 더 자세한 내용을 추가학습하시기 바랍니다.
2회차에서는 FireDAC의 추적과 모니터링에 대한 내용으로 진행합니다.
FireDAC 추적과 모니터링
FireDAC의 추적기능을 이용하면 애플리케이션과 데이터베이스 사이의 통신내용을 상세하게 보거나 기록할 수 있습니다.
이 추적 정보에는 이벤트 발생시간, API 호출내역, DB로 전송된 SQL, 파라메터와 필드 값, 오류와 경고 등이 기록되어 여러분의 DB 애플리케이션으 문제점을 디버깅하고 해결하는데 유용하게 사용할 수 있습니다.
(주의 : 추적과 모니터링 기능은 애플리케이션의 성능에 영향을 줄 수 있습니다. 디버그 모드에서만 추적기능이 동작하도록 구성하기 바랍니다.)
추적 모니터링 컴포넌트
FireDAC에서는 추적 모니터링 기능을 아래 3종류의 컴포넌트로 제공합니다.
- TFDMoniFlatFileClientLink : 추적 결과를 텍스트 파일로 기록합니다. 애플리케이션이 완료되면 생성된 추적기록 파일 목록이 표시됩니다.
- TFDMoniRemoteClientLink : 추적 결과를 FDMonitor 유틸리티에 출력(원격지 가능)합니다.(추적 시작 전에 FDMonitor를 미리 실행해야 추적이 기록됩니다.)
- TFDMoniCustomClientLik : 추적 결과를 커스텀 이벤트핸들러를 통해 출력합니다. 애플리케이션에서는 OnOut 이벤트를 이용해 직접 추적 결과를 기록해야 합니다.
- 추적 모니터링 컴포넌트(TFDMoniXXXXClientLink)를 폼(또는 데이터모듈)에 추가합니다.
- 추가한 컴포넌트의 Tracing 속성을 True로 설정(기록을 위한 속성 추가설정)
- 연결 컴포넌트(TFDConnection)의 연결속성에서 MonitorBy 항목을 선택(FlatFile, Remote, Custom) 합니다.
추적 항목 선택
추적 항목은 추적 모니터링 컴포넌트의 EventKinds 속성을 통해 선택할 수 있습니다. 각 항목은 아래와 같습니다.(참고 : Debugging and Reporting Environment Questions (FireDAC))
- LiveCycle : 객체의 생성 / 소멸. 예를 들어, IFDPhysConnection가 생성됩니다.
- Error : DBMS 오류
- ConnConnect : 연결 열기 및 닫기
- ConnTransact : 시작 / 커밋 / 롤백
- ConnService : 특별 이벤트
- CmdPrepare : IFDPhysCommand.Prepare 호출
- CmdExecute : IFDPhysCommand.Execute 또는 Open 호출
- CmdDataIn : 명령 매개 변수 값
- CmdDataOut : 결과 집합 행
- AdaptUpdat : 업데이트 후 처리 모든 정보
- Vendor : 낮은 수준 DBMS API 호출
- Component : 고레벨 이벤트
추적과 모니터링에 대해 더 자세한 내용은 FireDAC 기술문서 - Tracing and Monitoring(FireDAC)을 참고하기 바랍니다.
메타데이터와 DBMS 연결정보
FireDAC은 데이터베이스의 메타데이터를 조회할 수 있습니다.
메타데이터 쿼리 - TFDConnection 사용
다음과 같이 데이터베이스 오브젝트 이름 목록을 손쉽게 조회할 수 있는 메소드를 제공합니다.
- GetCatalogNames - 카탈로그 목록
- GetSchemaNames - 스키마 목록
- GetTableNames - 테이블 및 뷰 목록
- GetFieldNames - 테이블 필드 목록
- GetKeyFieldNames - 테이블 기본 키 목록
- GetGeneratorNames - 발전기 / 시퀀스 목록
- GetPackageNames - 패키지 목록
- GetStoredProcNames - 저장 프로 시저 목록
사용 예제는 아래와 같습니다.(Memo1에 테이블명 목록을 출력)
1
|
FDConnection1 . GetTableNames( 'Northwind' , 'dbo' , '' , Memo1 . Lines); |
메타데이터 쿼리 - TFDMetaInfoQuery 사용
TFDMetaInfoQuery 컴포넌트는 메타데이터를 조회할 수 있는 데이터셋 컴포넌트입니다.
연결 설정 후 MetaInfoKind 속성만 연결하면 데이터셋을 열수 있습니다.(추가 옵션으로 CatalogName, SchemaName, BaseObjectName, ObjectName 속성을 설정합니다.)
추적과 모니터링, 메타데이터 샘플 프로그램 소개
이 샘플 프로그램에서는 아래 기능을 확인합니다.
- 추적 & 모니터링 기능을 확인합니다.
- DBMS 연결정보를 메모에 출력합니다.
- 메타데이터
- 테이블 목록, 필드목록, 제너레이터 목록, 스토어드프로시저 목록 조회
- TFDConnection의 메소드와 TFDMetaInfoQuery를 이용합니다.
- 폼(또는 데이터 모듈)에 추적 모니터링 컴포넌트 추가
- FDConnection1의 연결속성 중 MonitorBy 항목을 추가한 추적 모니터링 컴포넌트 종류(Remote, FlatFile, Custom)로 선택
- 테스트 주의사항
- 원격 모니터링(Remote)- 애플리케이션 실행 전 FDMonitor 유틸리티(Tools > FireDAC Monitor)를 먼저 실행할 것
- 파일 모니터링(FlatFile) - 애플리케이션 종료 후 실행파일과 같은 경로의 Trace.txt 파일에 로그가 기록됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
procedure TForm2 . Button1Click(Sender: TObject); begin // 원격 모니터링 DM . FDMoniRemoteClientLink1 . Tracing := False ; DM . FDConnection1 . Params . MonitorBy := TFDMonitorBy . mbRemote; DM . FDMoniRemoteClientLink1 . Tracing := True ; DM . FDTable1 . Close; DM . FDTable1 . Open; end ; procedure TForm2 . Button2Click(Sender: TObject); begin // 파일 모니터링 DM . FDMoniFlatFileClientLink1 . Tracing := False ; DM . FDConnection1 . Params . MonitorBy := TFDMonitorBy . mbFlatFile; DM . FDMoniFlatFileClientLink1 . FileName := TPath . Combine(TPath . GetLibraryPath, 'trace.txt' ); DM . FDMoniFlatFileClientLink1 . Tracing := True ; DM . FDTable1 . Close; DM . FDTable1 . Open; end ; |
1
|
DM . FDConnection1 . GetInfoReport(Memo1 . Lines); |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
|
// TFDConnection 메타데이터 메소드 이용 procedure TForm2 . Button4Click(Sender: TObject); var MetaType: string ; begin MetaType := (Sender as TButton).Caption; if MetaType = 'GetTableNames' then DM . FDConnection1 . GetTableNames( '' , '' , '' , Memo2 . Lines) else if MetaType = 'GetFieldNames' then DM . FDConnection1 . GetFieldNames( '' , '' , 'EMPLOYEE' , '' , Memo2 . Lines) else if MetaType = 'GetGeneratorNames' then DM . FDConnection1 . GetGeneratorNames( '' , '' , '' , Memo2 . Lines) else if MetaType = 'GetStoredProcName' then DM . FDConnection1 . GetStoredProcNames( '' , '' , '' , '' , Memo2 . Lines) ; end ; // TFDMetaInfoQuery 컴포넌트 이용 procedure TForm2 . Button5Click(Sender: TObject); var MetaType: string ; begin DM . FDMetaInfoQuery1 . Close; MetaType := (Sender as TButton).Caption; if MetaType = 'GetTableNames' then DM . FDMetaInfoQuery1 . MetaInfoKind := TFDPhysMetaInfoKind . mkTables else if MetaType = 'GetFieldNames' then begin DM . FDMetaInfoQuery1 . MetaInfoKind := TFDPhysMetaInfoKind . mkTableFields; DM . FDMetaInfoQuery1 . ObjectName := 'EMPLOYEE' ; end else if MetaType = 'GetGeneratorNames' then DM . FDMetaInfoQuery1 . MetaInfoKind := TFDPhysMetaInfoKind . mkGenerators else if MetaType = 'GetStoredProcName' then DM . FDMetaInfoQuery1 . MetaInfoKind := TFDPhysMetaInfoKind . mkProcs ; DM . FDMetaInfoQuery1 . Open; end ; |
관련링크
- FireDAC 기술문서 - Tracing and Monitoring
- FireDAC 기술문서 - DBMS 환경 레포팅(DBMS Environment Reports)
- FireDAC 기술문서 - 메타데이터 질의(Querying Metadata)
- [유투브] FireDAC Skill Sprint 다시보기
- [온라인교육] FireDAC 무료 온라인 교육 안내
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
공지 | [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) | 관리자 | 2021.01.19 | 15547 |
공지 | [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) | 관리자 | 2020.11.16 | 13997 |
공지 | [10.4 시드니] What's NEW! 신기능 자세히 보기 | 관리자 | 2020.05.27 | 16533 |
공지 | RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 | 관리자 | 2018.10.23 | 22112 |
공지 | [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] | 관리자 | 2017.02.06 | 23367 |
공지 | [전체 목록] 이 달의 기술자료 & 기술레터 | 관리자 | 2017.02.06 | 18963 |
공지 | RAD스튜디오(델파이, C++빌더) - 시작하기 [1] | 관리자 | 2015.06.30 | 39354 |
공지 | RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) | 험프리 | 2014.01.16 | 174764 |
6 | [FireDAC Skill Sprints] 5. Cascading Options: 고급기능을 활용 할 수 있는 FireDAC 옵션 | Humphery | 2015.03.11 | 1318 |
5 | [FireDAC Skill Sprints] 4. ArrayDML로 30배 빠르게 데이터 입력하기 | Humphery | 2015.03.11 | 1497 |
» | [FireDAC Skill Sprints] 2. FireDAC으로 DBMS 사용 내역 추적, 모니터링 하기 | Humphery | 2015.03.07 | 1543 |
3 | [FireDAC Skill Sprints] 3. 캐쉬를 이용한 업데이트와 자동증가필드(Identity) 적용 | Humphery | 2015.03.07 | 1496 |
2 | [온라인교육] FireDAC 무료 온라인 교육 안내 | Humphery | 2015.01.23 | 1054 |
1 | FireDAC 시작하기 | Humphery | 2014.09.23 | 2960 |