Làm cách nào để theo dõi các truy vấn SQL được gửi bởi ArcGIS Server (ArcSDE) đến cơ sở dữ liệu của Oracle?


12

Tôi muốn tạo một tệp nhật ký chứa tất cả các truy vấn SQL được gửi bởi ArcGIS Server (ArcSDE) đến cơ sở dữ liệu của Oracle. Có cách nào để làm vậy không? Tôi đang sử dụng Oracle 11g và ArcGIS Server 10.0 trên Windows. ArcSDE được sử dụng trong kết nối trực tiếp.


3
Bạn có thể sử dụng theo dõi và kiểm toán của Oracle. Hãy xem câu hỏi này: stackoverflow.com/questions/7914354/oracle-sql-query-logging
Devdatta Tengshe

Bạn có thể sử dụng Toad Quest cho nhật ký theo dõi thời gian thực.

Câu trả lời:


13

Thực tế, có một số cách truy tìm bất kỳ kết nối ArcSDE nào. Các cuộc gọi giữa ứng dụng khách và máy khách ArcSDE được ghi vào tệp Theo dõi SDE, giữa máy khách ArcSDE và máy chủ trong tệp Chặn SDE, máy chủ ArcSDE sẽ ghi nhật ký một số sự kiện trong dịch vụ hoặc nhật ký kết nối trực tiếp và các cuộc gọi cơ sở dữ liệu được đăng nhập các logfile 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
|                |  
------------------      

Các tệp ArcSDE Trace ghi lại mọi cuộc gọi được thực hiện cho máy khách ArcSDE. Những tập tin này thường lớn và ồn ào. Nhìn vào SDETraceLoc và SDETraceMode trong trợ giúp dbinit . Các giá trị này cũng có thể được đặt làm biến môi trường trước khi bạn khởi động ứng dụng, điều này hoạt động cho ứng dụng và kết nối trực tiếp.

Các tập tin đánh chặn ArcSDE thường hữu ích hơn. Họ sẽ cho thấy thời gian đang được sử dụng trong những gì gọi. Mặc dù vậy, một lời cảnh báo, SDE hoạt động dựa trên khái niệm về luồng. Một số lệnh nhất định (như chèn, cập nhật và xóa) đặt thông tin trên luồng, sau đó thực hiện lệnh. Thông thường số luồng là số nguyên đầu tiên sau lệnh trong tệp chặn. Điều này có thể gây nhầm lẫn nếu bạn có nhiều luồng (tôi đã thấy tới 26 luồng). Bạn có thể xem SDEIntercept và SDEInterceptLoc trong trợ giúp dbinit hoặc bài viết KB này trên các tệp SDE Intercept để biết thêm thông tin và ví dụ.

Các logfiles dịch vụ ArcSDE, trong thư mục% SDE_HOME% \ etc hoặc các logfiles kết nối trực tiếp, trong các thư mục% SDE_HOME% \ etc hoặc% TEMP%, chứa thông tin chung về những gì đang xảy ra với dịch vụ hoặc kết nối. Lượng thông tin được đăng nhập có thể được tăng lên với biến SDEVerbose ( dbinit giúp đỡ ).

Các logfiles và dấu vết DBMS rất hữu ích. Nhưng họ chỉ cung cấp cho bạn một phần của hình ảnh. Ngoài ra, một số cơ sở dữ liệu (như Oracle) không thực sự bao gồm tất cả các loại lỗi trong theo dõi DBMS. Có nhiều cách để kích hoạt theo dõi SQL, nhận xét của Devdatta ở trên liên kết để biết thêm thông tin.

Các liên kết khác: Đào sâu hơn - Khắc phục lỗi xử lý địa lý khi sử dụng dữ liệu ArcSDE


Các vị trí theo dõi và đánh chặn trong sơ đồ này là không chính xác (dấu vết nằm trong API giữa máy khách ArcSDE và máy chủ ArcSDE và các lần chặn nằm giữa Máy chủ và RDBMS). Ghi nhật ký ứng dụng, chẳng hạn như đầu ra của ArcGIS Server nằm giữa ứng dụng khách và API ArcSDE.
Vince

@Vince, tôi nghĩ có một số nhầm lẫn ở đây. Tôi đã cập nhật sơ đồ trong nỗ lực để minh họa rõ hơn quan điểm của tôi. Lệnh liệt kê Trace được cấp cho Máy khách SDE (thông qua API SDE) nhưng không nhất thiết phải là Máy chủ SDE (ví dụ: SE_coordref_free, SE_shape_get_binary_size). Chặn chứa các lệnh kích hoạt một chuyến đi khứ hồi đến Máy chủ SDE, nhưng không nhất thiết phải là DBMS (ví dụ: QueryWithInfo, StreamSetState). Ghi nhật ký giữa SDE và DBMS phụ thuộc vào DBMS và loại kết nối (OCI, OleDB, ODBC).
ngày

Được cấp, ASCII không phải là cách tốt nhất để lập sơ đồ này, nhưng sẽ hữu ích nếu hai "Máy khách ArcSDE" được đánh dấu là "API máy khách ArcSDE" và "Máy chủ ArcSDE". SDETRACE được chụp tại giao diện giữa ứng dụng khách và API (lặp lại các tham số khi chúng đi qua API theo một trong hai hướng). Tôi tin rằng SDEINTERCEPT sống ở cả hai phía của giao diện chức năng SES trong gsrvr DLL (như được hiển thị bởi máy chủ ứng dụng hoặc Kết nối trực tiếp) và bao gồm cả các thông báo nhận được từ API và các cuộc gọi được thực hiện đến DBMS (di chuyển chặn trên máy khách phía trên xuống dưới cùng).
Vince

Ya, hai khách hàng SDE là một lỗi sao chép dán. Trong thời gian chạy, thực sự không có API ... chỉ có máy khách (luồng) và bộ nhớ) và máy chủ (luồng) và bộ nhớ). Nhưng tôi đồng ý rằng các tham số tiếng vang SDETRACE khi chúng vượt qua đó. Tôi khá chắc chắn rằng theo mặc định, SDEINTERCEPT không ghi nhật ký bất cứ điều gì để làm trực tiếp với DBMS (ví dụ: SQL). Có thể có các tham số khác cho phép ghi nhật ký SQL, nhưng chúng sẽ được triển khai độc lập cho mỗi DBMS. Và tôi không biết chúng là gì.
ngày

Nói chung, tôi không nhìn vào đầu ra chặn, nhưng tôi chỉ chạy một tập hợp các lệnh gọi API đơn giản ('sdelist -o layer') với cả dấu vết và chặn được bật và dường như nó tạo ra hai tệp chặn (không có tương tác SQL I đã nhớ), vì vậy có vẻ như chúng ta có thể đồng ý về điều này :)
Vince
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.