ArcGIS Server (ArcSDE)에서 Oracle 데이터베이스로 보낸 SQL 쿼리를 추적하는 방법은 무엇입니까?


12

ArcGIS Server (ArcSDE)에서 Oracle 데이터베이스로 보낸 모든 SQL 쿼리를 포함하는 로그 파일을 생성하고 싶습니다. 그렇게 할 수있는 방법이 있습니까? Windows에서 Oracle 11g 및 ArcGIS Server 10.0을 사용하고 있습니다. ArcSDE는 직접 연결에 사용됩니다.


3
Oracle의 추적 및 감사를 사용할 수 있습니다. 이 질문에 보라 : stackoverflow.com/questions/7914354/oracle-sql-query-logging
Devdatta Tengshe

실시간 추적 로그에 Toad Quest를 사용할 수 있습니다.

답변:


13

실제로 ArcSDE 연결을 추적하는 방법에는 여러 가지가 있습니다. 클라이언트 애플리케이션과 ArcSDE 클라이언트 간의 통화는 SDE 추적 파일에, ArcSDE 클라이언트와 서버 간의 SDE 인터셉트 파일에 기록되며, ArcSDE 서버는 특정 이벤트를 서비스 또는 직접 연결 로그에 기록하며 데이터베이스 통화는 로그인됩니다. DBMS 로그 파일

-------------------------------------------------------------
|                                                           |
|  Client (ArcObject, ArcCatalog, ArcGIS Server, ArcIMS...) |
|                                                           |
-------------------------------------------------------------
      |
      |
     \|/
------------------ --------> SDE Trace
|                |  
|  ArcSDE Client |
|                |  
------------------ --------> SDE Intercept
      |
      |
     \|/
------------------- --------> SDE Intercept
|                 | 
|  ArcSDE Server  | --------> ArcSDE Service Logfile, or direct connect log
|                 |  
------------------- 
      |
      |
     \|/
------------------
|                |  
|  DBMS          | -----------> DBMS logfiles or trace
|                |  
------------------      

ArcSDE 추적 파일은 ArcSDE 클라이언트에 대한 모든 호출을 기록합니다. 이 파일은 일반적으로 크고 시끄 럽습니다. dbinit help 에서 SDETraceLoc 및 SDETraceMode를 보십시오 . 응용 프로그램을 시작하기 전에이 값을 환경 변수로 설정할 수도 있습니다. 응용 프로그램 및 직접 연결에 사용됩니다.

ArcSDE 차단 파일이 일반적으로 더 유용합니다. 그들은 어떤 전화에 어떤 시간을 보내고 있는지 보여줄 것입니다. 그러나 SDE는 스트림 개념을 작동시킵니다. 삽입, 업데이트 및 삭제와 같은 특정 명령은 스트림에 정보를 설정 한 다음 명령을 실행합니다. 일반적으로 스트림 번호는 인터셉트 파일에서 명령 다음의 첫 번째 정수입니다. 스트림이 많은 경우 혼란 스러울 수 있습니다 (최대 26 개의 스트림을 보았습니다). 자세한 정보 및 예제 는 dbinit 도움말 의 SDEIntercept 및 SDEInterceptLoc 또는 SDE Intercept 파일에 대한 이 KB 기사를 참조하십시오.

% SDE_HOME % \ etc 폴더의 ArcSDE 서비스 로그 파일 또는 % SDE_HOME % \ etc 또는 % TEMP % 폴더의 직접 연결 로그 파일에는 서비스 또는 연결에 대한 일반적인 정보가 포함되어 있습니다. SDEVerbose 변수 ( dbinit help )를 사용하여 기록되는 정보의 양을 늘릴 수 있습니다 .

DBMS 로그 파일 및 추적은 매우 유용합니다. 그러나 그들은 당신에게 그림의 일부만을 제공합니다. 또한 Oracle과 같은 일부 데이터베이스는 실제로 모든 유형의 오류를 DBMS 추적에 포함하지 않습니다. 위의 Devdatta의 의견은 더 많은 정보에 대한 링크 인 SQL 추적을 활성화하는 많은 방법이 있습니다.

다른 링크 : 더 깊이 파기 – ArcSDE 데이터 사용시 지오 프로세싱 오류 문제 해결


이 다이어그램의 추적 및 인터셉트 위치가 올바르지 않습니다 (추적은 ArcSDE 클라이언트와 ArcSDE 서버 사이의 API 내에 있으며 인터셉트는 서버와 RDBMS 사이에 있습니다). ArcGIS Server의 출력과 같은 애플리케이션 로깅은 클라이언트 애플리케이션과 ArcSDE API 사이에 있습니다.
Vince

@Vince, 여기에 약간의 혼란이 있다고 생각합니다. 내 요점을 더 잘 설명하기 위해 다이어그램을 업데이트했습니다. 추적 목록은 SDE 클라이언트 (SDE API를 통해)에 발행되지만 반드시 SDE 서버에 필요한 것은 아닙니다 (예 : SE_coordref_free, SE_shape_get_binary_size). 인터셉트에는 SDE 서버로의 왕복을 트리거하는 명령이 포함되어 있지만 반드시 DBMS (예 : QueryWithInfo, StreamSetState)는 아닙니다. SDE와 DBMS 간의 로깅은 DBMS 및 연결 유형 (OCI, OleDB, ODBC)에 따라 다릅니다.
travis

물론 ASCII는 이것을 설명하는 가장 좋은 방법은 아니지만 두 "ArcSDE 클라이언트"가 "ArcSDE 클라이언트 API"및 "ArcSDE 서버"로 표시되어 있으면 도움이됩니다. SDETRACE는 클라이언트 앱과 API 간의 인터페이스에서 캡처됩니다 (매개 방향으로 API를 교차 할 때 매개 변수를 에코 함). SDEINTERCEPT는 gsrvr DLL (응용 프로그램 서버 또는 Direct Connect에 의해 표시됨)의 SES 기능 인터페이스 양쪽에 있으며 API에서 수신 한 메시지와 DBMS에 대한 호출을 모두 포함합니다 (상위 클라이언트에서 인터셉트 이동). 아래쪽으로).
Vince

예, 두 SDE 클라이언트는 복사 붙여 넣기 오류였습니다. 런타임 중에는 실제로 API가 없으며 클라이언트 (스레드 및 메모리)와 서버 (스레드 및 메모리) 만 있습니다. 그러나 SDETRACE는 매개 변수가 교차 할 때 매개 변수를 에코한다는 데 동의합니다. 기본적으로 SDEINTERCEPT는 DBMS (예 : SQL)와 직접 관련된 내용을 기록하지 않습니다. SQL 로깅을 가능하게하는 다른 매개 변수가있을 수 있지만 각 DBMS에 대해 독립적으로 구현됩니다. 그리고 나는 그들이 무엇인지 모른다.
travis

나는 일반적으로 인터셉트 출력을 보지 않지만 추적 및 인터셉트가 활성화 된 간단한 API 호출 세트 ( 'dedelist -o layer')를 실행했으며 두 개의 인터셉트 파일을 생성하는 것처럼 보입니다 (SQL 상호 작용없이 기억하십시오), 그래서 우리가 이것에 동의 할 수있을 것 같습니다 :)
Vince
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.