आर्कजीस सर्वर (आर्कएसडीई) द्वारा भेजे गए एसक्यूएल प्रश्नों को ऑरेकल डेटाबेस में कैसे ट्रेस करें?


12

मैं एक लॉग फ़ाइल उत्पन्न करना चाहता हूँ जिसमें सभी SQL क्वेरीज़ हैं जो आर्कगिस सर्वर (आर्कएसडीई) द्वारा ओरेकल डेटाबेस को भेजी गई हैं। क्या ऐसा करने का कोई तरीका है? मैं विंडोज पर Oracle 11g और ArcGIS सर्वर 10.0 का उपयोग कर रहा हूं। आर्कएसडीई का उपयोग प्रत्यक्ष कनेक्शन में किया जाता है।


3
आप Oracle के अनुरेखण और लेखा परीक्षा का उपयोग कर सकते हैं। : इस सवाल पर एक नज़र डालें stackoverflow.com/questions/7914354/oracle-sql-query-logging
Devdatta Tengshe

आप वास्तविक समय ट्रैकिंग लॉग के लिए टॉड क्वेस्ट का उपयोग कर सकते हैं।

जवाबों:


13

वास्तव में किसी भी 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 क्लाइंट के लिए किए गए हर कॉल को लॉग करती हैं। ये फाइलें आमतौर पर बड़ी और शोर वाली होती हैं। SDETraceLoc और SDETraceMode को dbinit सहायता में देखें । ये मान आप अनुप्रयोग शुरू करने से पहले पर्यावरण चर के रूप में सेट कर सकते हैं, यह अनुप्रयोग और प्रत्यक्ष कनेक्शन के लिए काम करता है।

आर्कएसडीई अवरोधक फाइलें आमतौर पर अधिक सहायक होती हैं। वे बताएंगे कि किस कॉल में कितना समय बिताया जा रहा है। हालांकि, सतर्कता का एक शब्द एसडीई धाराओं की अवधारणा से काम करता है। कुछ कमांड (जैसे आवेषण, अपडेट और डिलीट) स्ट्रीम पर जानकारी सेट करते हैं, फिर कमांड निष्पादित करते हैं। आमतौर पर स्ट्रीम नंबर इंटरसेप्ट फाइल में कमांड के बाद पहला पूर्णांक होता है। यह भ्रमित हो सकता है यदि आपके पास कई धाराएं हैं (मैंने 26 धाराओं को देखा है)। आप कुछ और जानकारी और उदाहरणों के लिए SDE इंटरसेप्ट और SDEInterceptLoc को dbinit मदद या SDE इंटरसेप्ट फाइलों के KB लेख पर देख सकते हैं।

ArcSDE सेवा लॉगफ़ाइल्स,% SDE_HOME% \ etc फ़ोल्डर में, या सीधे कनेक्ट लॉगफ़ाइल्स,% SDE_HOME% \ etc या% TEMP% फ़ोल्डर में, सेवा, या कनेक्शन के साथ जाने वाली व्हाट्सएप के बारे में सामान्य जानकारी रखते हैं। लॉग की जा रही जानकारी की मात्रा SDEVerbose चर ( dbinit मदद ) के साथ बढ़ाई जा सकती है ।

DBMS लॉगफाइल्स और निशान बहुत उपयोगी हैं। लेकिन वे केवल आपको तस्वीर का हिस्सा देते हैं। इसके अतिरिक्त, कुछ डेटाबेस (जैसे Oracle) वास्तव में DBMS ट्रेस में सभी प्रकार की त्रुटियों को शामिल नहीं करते हैं। SQL अनुरेखण को सक्षम करने के कई तरीके हैं, देवदत्त की टिप्पणी अधिक जानकारी के लिए लिंक के ऊपर।

अन्य लिंक: गहरी खुदाई - आर्कबीडी डेटा का उपयोग करते समय भू-त्रुटियों का निवारण


इस आरेख में ट्रेस और अवरोधन स्थान गलत हैं (ट्रेस आर्कएसडीई क्लाइंट और आर्कएसडीई सर्वर के बीच एपीआई के अंदर है, और इंटरसेप्ट सर्वर और आरडीबीएमएस के बीच हैं)। एप्लिकेशन लॉगिंग जैसे कि आर्कगिस सर्वर का आउटपुट क्लाइंट एप्लिकेशन और आर्कएसडीई एपीआई के बीच बैठता है।
विंस

@, मुझे लगता है कि यहाँ कुछ भ्रम है। मैंने अपनी बात को बेहतर ढंग से समझाने के प्रयास में आरेख को अद्यतन किया। ट्रेस सूचियाँ कमांड जो SDE क्लाइंट (SDE API के माध्यम से) को जारी की जाती हैं, लेकिन SDE सर्वर के लिए आवश्यक नहीं हैं (जैसे। SE_coordref_free, SE_shape_get_binary_size)। अवरोधन में कमांड शामिल हैं जो एसडीई सर्वर के लिए एक गोल यात्रा को ट्रिगर करते हैं, लेकिन जरूरी नहीं कि डीबीएमएस (जैसे। क्वेरविथइन्फो, स्ट्रीमसैटस्टेट)। SDE और DBMS के बीच लॉगिंग DBMS और कनेक्शन प्रकार (OCI, OleDB, ODBC) पर निर्भर है।
ट्रैविस

दी गई, ASCII इसे आरेखित करने का सबसे अच्छा तरीका नहीं है, लेकिन यह मदद करेगा कि दो "आर्कएसडीई क्लाइंट" को "आर्कएसडीई क्लाइंट एपीआई" और "आर्कसेडी सर्वर" के रूप में चिह्नित किया गया है। SDETRACE को क्लाइंट ऐप और API के बीच इंटरफेस में कैप्चर किया गया है (जैसे ही वे दोनों दिशा में एपीआई को पार करते हैं) मापदंडों की गूंज होती है। मेरा मानना ​​है कि SDEINTERCEPT gsrvr DLL में SES फ़ंक्शन इंटरफ़ेस के दोनों किनारों पर रहता है (जैसा कि एप्लिकेशन सर्वर या डायरेक्ट कनेक्ट से प्रकट होता है), और इसमें API से प्राप्त संदेश और DBMS पर किए गए कॉल (ऊपरी क्लाइंट पर अवरोधन) शामिल हैं नीचे की ओर)।
विंस

हां, दो एसडीई ग्राहक एक कॉपी पेस्ट त्रुटि थे। रनटाइम के दौरान, वास्तव में एक एपीआई नहीं है ... बस क्लाइंट (थ्रेड) और मेमोरी) और सर्वर (थ्रेड) और मेमोरी)। लेकिन मैं मानता हूं कि जैसा कि वे उस पार करते हैं SDETRACE इकोस पैरामीटर। मुझे पूरा यकीन है कि डिफ़ॉल्ट रूप से, SDEINTERCEPT DBMS के साथ सीधे करने के लिए कुछ भी लॉग नहीं करता है (उदाहरण के लिए SQL)। ऐसे अन्य पैरामीटर हो सकते हैं जो SQL लॉगिंग को सक्षम करते हैं, लेकिन उन्हें प्रत्येक DBMS के लिए स्वतंत्र रूप से लागू किया जाएगा। और मुझे नहीं पता कि वे क्या हैं।
ट्रैविस

मैं आम तौर पर इंटरसेप्ट आउटपुट को नहीं देखता हूं, लेकिन मैंने केवल एपीआई कॉल ('sdelist -o लेयर्स') का एक सरल सेट चलाया, जिसमें ट्रेस और इंटरसेप्ट दोनों सक्षम थे, और यह दो इंटरसेप्ट फाइलें (SQL इंटरेक्शन के बिना) उत्पन्न करने के लिए प्रतीत होता है याद है), इसलिए ऐसा लग रहा है कि हम इस पर सहमत हो सकते हैं :)
विंस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.