จะติดตามการสืบค้น SQL ที่ส่งโดย ArcGIS Server (ArcSDE) ไปยังฐานข้อมูล Oracle ได้อย่างไร


12

ฉันต้องการสร้างไฟล์บันทึกที่มีคำสั่ง SQL ทั้งหมดที่ส่งโดย ArcGIS Server (ArcSDE) ไปยังฐานข้อมูล Oracle มีวิธีทำเช่นนั้นหรือไม่? ฉันใช้ Oracle 11g และ ArcGIS Server 10.0 บน Windows ArcSDE ใช้ในการเชื่อมต่อโดยตรง


3
คุณสามารถใช้การติดตามและการตรวจสอบของ Oracle ดูคำถามนี้: stackoverflow.com/questions/7914354/oracle-sql-query-logging
Devdatta Tengshe

คุณสามารถใช้ Toad Quest สำหรับบันทึกการติดตามเรียลไทม์

คำตอบ:


13

จริงๆแล้วมีหลายวิธีในการติดตามการเชื่อมต่อ ArcSDE การโทรระหว่างแอปพลิเคชันไคลเอนต์และไคลเอนต์ ArcSDE ถูกบันทึกไว้ในไฟล์ SDE Trace ระหว่างไคลเอนต์ ArcSDE และเซิร์ฟเวอร์ในไฟล์ SDE Intercept เซิร์ฟเวอร์ 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 Trace บันทึกการโทรทุกครั้งที่เรียกไปยังไคลเอนต์ ArcSDE ไฟล์เหล่านี้มักมีขนาดใหญ่และมีเสียงดัง ดูที่ SDETraceLoc และ SDETraceMode ในความช่วยเหลือ dbinit ค่าเหล่านี้ยังสามารถตั้งค่าเป็นตัวแปรสภาพแวดล้อมก่อนที่คุณจะเริ่มต้นแอปพลิเคชันซึ่งใช้ได้กับแอปพลิเคชันและการเชื่อมต่อโดยตรง

ไฟล์ดักฟัง ArcSDE มักมีประโยชน์มากกว่า พวกเขาจะแสดงเวลาที่ใช้ในการโทร คำเตือนแม้ว่า SDE จะทำงานนอกแนวคิดของสตรีม คำสั่งบางอย่าง (เช่นส่วนแทรกอัพเดตและลบ) ตั้งค่าข้อมูลในสตรีมจากนั้นเรียกใช้คำสั่ง โดยปกติหมายเลขสตรีมจะเป็นจำนวนเต็มแรกหลังจากคำสั่งในไฟล์สกัดกั้น สิ่งนี้อาจสร้างความสับสนหากคุณมีสตรีมจำนวนมาก (ฉันเห็นสตรีมมากถึง 26 สตรีม) คุณสามารถดู SDEIntercept และ SDEInterceptLoc ในวิธีใช้dbinitหรือบทความ KB นี้เกี่ยวกับไฟล์ SDE Interceptสำหรับข้อมูลและตัวอย่างเพิ่มเติม

Logfiles ของบริการ ArcSDE ในโฟลเดอร์% SDE_HOME% \ etc หรือ logfiles เชื่อมต่อโดยตรงในโฟลเดอร์% SDE_HOME% \ etc หรือ% TEMP% โฟลเดอร์มีข้อมูลทั่วไปเกี่ยวกับสิ่งที่เกิดขึ้นกับบริการหรือการเชื่อมต่อ จำนวนข้อมูลที่ถูกบันทึกสามารถเพิ่มขึ้นได้ด้วยตัวแปรSDEVerbose ( dbinit ช่วย )

DBMS logfiles และการติดตามมีประโยชน์มาก แต่พวกเขาให้คุณเป็นส่วนหนึ่งของภาพเท่านั้น นอกจากนี้บางฐานข้อมูล (เช่น Oracle) ไม่ได้รวมข้อผิดพลาดทุกประเภทในการติดตาม DBMS มีหลายวิธีในการเปิดใช้งานการติดตาม SQL ความคิดเห็นของ Devdatta ด้านบนลิงก์ไปยังข้อมูลเพิ่มเติม

ลิงค์อื่น ๆ : ขุดลึกลงไป - การแก้ไขปัญหาข้อผิดพลาดในการประมวลผลทางภูมิศาสตร์เมื่อใช้ข้อมูล ArcSDE


ตำแหน่งการติดตามและการสกัดกั้นในแผนภาพนี้ไม่ถูกต้อง (การติดตามอยู่ภายใน API ระหว่างไคลเอนต์ ArcSDE และเซิร์ฟเวอร์ ArcSDE และการสกัดกั้นอยู่ระหว่างเซิร์ฟเวอร์และ RDBMS) การบันทึกแอปพลิเคชันเช่นเอาต์พุตของเซิร์ฟเวอร์ ArcGIS อยู่ระหว่างแอปพลิเคชันไคลเอนต์และ ArcSDE API
วินซ์

@ ตั้งแต่ฉันคิดว่ามีความสับสนอยู่ที่นี่ ฉันอัปเดตไดอะแกรมเพื่อพยายามแสดงจุดของฉันให้ดีขึ้น คำสั่ง Trace รายการที่ออกให้กับลูกค้า 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 Client" สองตัวถูกทำเครื่องหมาย "ArcSDE Client API" และ "ArcSDE Server" SDETRACE ถูกจับที่ส่วนต่อประสานระหว่างแอปไคลเอ็นต์และ API (พารามิเตอร์การสะท้อนเมื่อข้าม API ในทิศทางใดทิศทางหนึ่ง) ฉันเชื่อว่า SDEINTERCEPT อาศัยอยู่ทั้งสองด้านของส่วนต่อประสานฟังก์ชัน SES ใน gsrvr DLL (ตามที่แสดงโดยแอ็พพลิเคชันเซิร์ฟเวอร์หรือ Direct Connect) และรวมถึงข้อความทั้งสองที่ได้รับจาก API และการเรียกไปยัง DBMS (ย้ายการสกัดกั้นบนไคลเอ็นต์ด้านบน ไปด้านล่างล่าง)
วินซ์

Ya, ลูกค้า SDE สองรายมีข้อผิดพลาดในการคัดลอกวาง ระหว่างรันไทม์ไม่มี API จริงๆ ... แค่ไคลเอนต์ (เธรดและหน่วยความจำ) และเซิร์ฟเวอร์ (เธรดและหน่วยความจำ) แต่ฉันยอมรับว่าพารามิเตอร์ SDETRACE echos นั้นข้ามไป ฉันค่อนข้างมั่นใจว่าโดยค่าเริ่มต้น SDEINTERCEPT จะไม่บันทึกสิ่งที่เกี่ยวข้องกับ DBMS โดยตรง (เช่น SQL) อาจมีพารามิเตอร์อื่น ๆ ที่เปิดใช้งานการบันทึก SQL แต่จะถูกนำไปใช้อย่างอิสระสำหรับแต่ละ DBMS และฉันไม่รู้ว่ามันคืออะไร
travis

โดยทั่วไปฉันไม่ได้ดูผลลัพธ์ของการสกัดกั้น แต่ฉันเพิ่งเรียกใช้การเรียก API แบบง่าย ๆ ('sdelist -o layer') โดยเปิดใช้งานทั้งการติดตามและการสกัดกั้นและดูเหมือนว่าจะสร้างไฟล์สกัดสองไฟล์ (โดยไม่มีการโต้ตอบ SQL) จำได้) ดังนั้นจึงดูเหมือนว่าเราสามารถตกลงเกี่ยวกับนี้ :)
วินซ์
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.