Bagaimana cara melacak permintaan SQL yang dikirim oleh ArcGIS Server (ArcSDE) ke database Oracle?

12

Saya ingin membuat file log yang berisi semua pertanyaan SQL yang dikirim oleh ArcGIS Server (ArcSDE) ke database Oracle. Apakah ada cara untuk melakukannya? Saya menggunakan Oracle 11g dan ArcGIS Server 10.0 di Windows. ArcSDE digunakan dalam koneksi langsung.

yo_haha
sumber
3
Anda dapat menggunakan pelacakan & Audit Oracle. Lihat pertanyaan ini: stackoverflow.com/questions/7914354/oracle-sql-query-logging
Devdatta Tengshe
Anda dapat menggunakan Toad Quest untuk log pelacakan waktu nyata.

Jawaban:

13

Sebenarnya ada sejumlah cara untuk melacak koneksi ArcSDE. Panggilan antara aplikasi klien dan klien ArcSDE dicatat dalam file Trace SDE, antara klien ArcSDE dan server dalam file Intercept SDE, server ArcSDE akan mencatat peristiwa tertentu dalam layanan atau log koneksi langsung, dan panggilan basis data dicatat file 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
|                |  
------------------      

File ArcSDE Trace mencatat setiap panggilan yang dilakukan ke klien ArcSDE. File-file ini biasanya besar dan berisik. Lihatlah SDETraceLoc dan SDETraceMode dalam bantuan dbinit . Nilai-nilai ini juga dapat ditetapkan sebagai variabel lingkungan sebelum Anda memulai aplikasi, ini berfungsi untuk aplikasi dan koneksi langsung.

File ArcSDE Intercept biasanya lebih bermanfaat. Mereka akan menunjukkan waktu yang dihabiskan untuk panggilan apa. Namun, kata hati-hati, SDE bekerja dengan konsep stream. Perintah tertentu (seperti sisipan, pembaruan, dan penghapusan) mengatur informasi di arus, kemudian jalankan perintah. Biasanya nomor aliran adalah bilangan bulat pertama setelah perintah dalam file intersep. Ini bisa membingungkan jika Anda memiliki banyak aliran (saya telah melihat hingga 26 aliran). Anda dapat melihat SDEIntercept dan SDEInterceptLoc dalam bantuan dbinit atau artikel KB ini pada file SDE Intercept untuk beberapa informasi dan contoh lebih lanjut.

Logfile layanan ArcSDE, dalam folder% SDE_HOME% \ etc, atau log koneksi langsung, dalam folder% SDE_HOME% \ etc atau% TEMP%, berisi informasi umum tentang apa yang terjadi dengan layanan, atau koneksi. Jumlah informasi yang sedang dicatat dapat ditingkatkan dengan variabel SDEVerbose ( bantuan dbinit ).

File dan jejak DBMS sangat berguna. Tetapi mereka hanya memberi Anda bagian dari gambar. Selain itu, beberapa database (seperti Oracle) tidak benar-benar menyertakan semua jenis kesalahan dalam jejak DBMS. Ada banyak cara untuk mengaktifkan pelacakan SQL, komentar Devdatta di atas tautan ke informasi lebih lanjut.

Tautan lain: Menggali lebih dalam - Mengatasi masalah kesalahan geoproses saat menggunakan data ArcSDE

travis
sumber
Lokasi Trace dan Intercept dalam diagram ini salah (jejak ada di dalam API antara klien ArcSDE dan ArcSDE, dan intersep berada di antara Server dan RDBMS). Pencatatan aplikasi seperti output ArcGIS Server berada di antara aplikasi klien dan ArcSDE API.
Vince
@Vince, saya pikir ada beberapa kebingungan di sini. Saya memperbarui diagram dalam upaya saya untuk lebih menggambarkan poin saya. Perintah Trace mendaftar yang dikeluarkan untuk Klien SDE (melalui SDE API) tetapi tidak harus ke Server SDE (mis. SE_coordref_free, SE_shape_get_binary_size). Intercept berisi perintah yang memicu perjalanan bolak-balik ke SDE Server, tetapi belum tentu DBMS (mis. QueryWithInfo, StreamSetState). Logging antara SDE dan DBMS tergantung pada DBMS dan tipe koneksi (OCI, OleDB, ODBC).
Travis
Memang, ASCII bukan cara terbaik untuk diagram ini, tetapi akan membantu jika dua "ArcSDE Client" ditandai "ArcSDE Client API" dan "ArcSDE Server". SDETRACE ditangkap pada antarmuka antara aplikasi klien dan API (parameter gema saat mereka melintasi API di kedua arah). Saya percaya SDEINTERCEPT hidup di kedua sisi antarmuka fungsi SES di gsrvr DLL (seperti yang ditunjukkan oleh server aplikasi atau Sambungan Langsung), dan termasuk pesan yang diterima dari API dan panggilan yang dilakukan ke DBMS (pindahkan intersepsi pada klien atas ke bawah lebih rendah).
Vince
Ya, kedua Klien SDE adalah kesalahan salin tempel. Selama runtime, sebenarnya tidak ada API ... hanya klien (utas dan memori) dan server (utas dan memori). Tapi saya setuju bahwa SDETRACE menggemakan parameter saat mereka menyeberang itu. Saya cukup yakin bahwa secara default, SDEINTERCEPT tidak mencatat apa pun yang berkaitan dengan DBMS secara langsung (misalnya SQL). Mungkin ada parameter lain yang memungkinkan SQL logging, tetapi mereka akan diimplementasikan secara independen untuk setiap DBMS. Dan saya tidak tahu apa itu.
Travis
Saya biasanya tidak melihat output intersep, tapi saya hanya menjalankan satu set panggilan API sederhana ('sdelist -o layers') dengan kedua jejak dan intersep diaktifkan, dan sepertinya menghasilkan dua file intersep (tanpa interaksi SQL I ingat), jadi sepertinya kita bisa menyetujui ini :)
Vince