ArcGIS Sunucusu (ArcSDE) tarafından Oracle veritabanına gönderilen SQL sorgularını nasıl izleyebilirim?


12

ArcGIS Server (ArcSDE) tarafından Oracle veritabanına gönderilen tüm SQL sorgularını içeren bir günlük dosyası oluşturmak istiyorum. Bunu yapmanın bir yolu var mı? Windows'ta Oracle 11g ve ArcGIS Server 10.0 kullanıyorum. ArcSDE doğrudan bağlantıda kullanılır.


3
Oracle'ın izleme ve Denetimi'ni kullanabilirsiniz. Şu soruya bir göz atın: stackoverflow.com/questions/7914354/oracle-sql-query-logging
Devdatta Tengshe

Gerçek zamanlı izleme günlüğü için Toad Quest'i kullanabilirsiniz.

Yanıtlar:


13

Aslında herhangi bir ArcSDE bağlantısını izlemenin birkaç yolu vardır. İstemci uygulaması ile ArcSDE istemcisi arasındaki çağrılar SDE İzleme dosyasına kaydedilir, ArcSDE istemcisi ve SDE Intercept dosyasındaki sunucu arasında, ArcSDE sunucusu hizmetteki veya doğrudan bağlantı günlüğündeki belirli olayları günlüğe kaydeder ve veritabanı çağrıları kaydedilir DBMS günlük dosyaları.

-------------------------------------------------------------
|                                                           |
|  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 Trace dosyaları, ArcSDE istemcisine yapılan her çağrıyı günlüğe kaydeder. Bu dosyalar genellikle büyük ve gürültülüdür. Dbinit yardımında SDETraceLoc ve SDETraceMode'a bakın . Bu değerler, uygulamayı başlatmadan önce ortam değişkenleri olarak da ayarlanabilir; bu, uygulama ve doğrudan bağlantılar için çalışır.

ArcSDE Intercept dosyaları genellikle daha yararlıdır. Hangi çağrıda ne zaman harcandığını gösterecekler. Bununla birlikte, dikkat edilmesi gereken bir nokta, SDE bir akış kavramı geliştirir. Belirli komutlar (ekler, güncellemeler ve siler gibi) akışta bilgileri ayarlar ve komutu çalıştırır. Akış numarası, kesişme dosyasındaki komuttan sonraki ilk tamsayıdır. Çok fazla akışınız varsa bu kafa karıştırıcı olabilir (26 akışa kadar gördüm). Daha fazla bilgi ve örnekler için dbinit yardımındaki SDEIntercept ve SDEInterceptLoc'a veya SDE Intercept dosyalarındaki bu KB makalesine bakabilirsiniz .

% SDE_HOME% \ etc klasöründeki ArcSDE hizmet günlük dosyaları veya% SDE_HOME% \ etc veya% TEMP% klasörlerindeki doğrudan bağlantı günlük dosyaları, hizmet veya bağlantıda olup bitenler hakkında genel bilgiler içerir. Günlüğe kaydedilen bilgi miktarı SDEVerbose değişkeni ile artırılabilir ( dbinit yardımı ).

DBMS günlük dosyaları ve izleri çok faydalıdır. Ama sana resmin sadece bir kısmını veriyorlar. Ayrıca, bazı veritabanı (Oracle gibi) DBMS izlemesinde tüm hata türlerini içermez. SQL izlemeyi etkinleştirmenin birçok yolu vardır, Devdatta'nın daha fazla bilgi bağlantısının üstündeki yorumu.

Diğer bağlantılar: Daha derin kazma - ArcSDE verilerini kullanırken coğrafi işlem hatalarında sorun giderme


Bu diyagramdaki İzleme ve Durdurma konumları yanlış (izleme, ArcSDE istemcisi ile ArcSDE sunucusu arasındaki API içinde ve kesmeler Sunucu ile RDBMS arasında). ArcGIS Server çıktısı gibi uygulama günlüğü, istemci uygulaması ile ArcSDE API arasında bulunur.
Vince

@Vince, burada bir karışıklık olduğunu düşünüyorum. Amacımı daha iyi göstermek için diyagramı güncelledim. İzleme listeleri, SDE İstemcisi'ne (SDE API'si aracılığıyla) verilen, ancak mutlaka SDE Sunucusuna (ör. SE_coordref_free, SE_shape_get_binary_size) verilen komutları listeler. Intercept, SDE Sunucusuna gidiş-dönüş bir yolculuğu tetikleyen ancak DBMS'yi zorunlu kılmayan komutlar içerir (örn. QueryWithInfo, StreamSetState). SDE ve DBMS arasındaki günlük kaydı DBMS'ye ve bağlantı türüne (OCI, OleDB, ODBC) bağlıdır.
travis

ASCII bunu çizmenin en iyi yolu değildir, ancak iki "ArcSDE İstemcisi" nin "ArcSDE İstemci API'sı" ve "ArcSDE Sunucusu" olarak işaretlenmesi yardımcı olacaktır. SDETRACE, istemci uygulaması ile API arasındaki arayüzde yakalanır (parametreleri her iki yönde de geçtiklerinde parametreleri yankılanır). SDEINTERCEPT (uygulama sunucusu veya Direct Connect tarafından tezahür olarak) gsrvr DLL SES işlev arabiriminin her iki tarafında yaşıyor ve API gelen iletileri ve DBMS yapılan aramaları içerir (kesme üst istemcide taşımak) inanıyorum alt kısmına kadar).
Vince

Ya, iki SDE İstemcisi bir kopyala yapıştırma hatasıydı. Çalışma zamanı sırasında gerçekten bir API yoktur ... sadece istemci (iş parçacığı (ları) ve bellek) ve sunucu (iş parçacığı (ları) ve bellek). Ancak SDETRACE echos parametrelerini geçerken kabul ediyorum. Varsayılan olarak, SDEINTERCEPT doğrudan DBMS (örn. SQL) ile ilgili bir şey günlüğe kaydetmez oldukça eminim. SQL günlüğünü etkinleştiren başka parametreler olabilir, ancak bunlar her DBMS için bağımsız olarak uygulanır. Ve ne olduklarını bilmiyorum.
travis

Genellikle kesişme çıkışına bakmıyorum, ancak hem izleme hem de kesişme etkinleştirilmiş basit bir API çağrıları ('sdelist -o katmanları') kümesi çalıştırdım ve iki etkileşim dosyası (SQL etkileşimi olmadan) hatırlıyorum), bu yüzden bunu kabul edebiliriz gibi görünüyor :)
Vince
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.