लॉगिंग क्वेरी और अन्य टी-एसक्यूएल


14

मैं जानना चाहूंगा कि क्या SQL Server 2008 R2 में SELECTकथन के लिए डिफ़ॉल्ट लॉगिंग स्कीम है (या उस मामले के लिए कोई अन्य T-SQL)।

यदि हाँ, तो मैं इसे कहाँ देख सकता हूँ? यदि नहीं, तो मैं इसे कैसे स्थापित कर सकता हूं?

जवाबों:


18

डिफ़ॉल्ट रूप से, SQL सर्वर गतिविधि आपके द्वारा अपेक्षित तरीके से लॉग नहीं की जाती है। कुछ लेखन गतिविधि लेन-देन लॉग में दर्ज की जाती है , लेकिन यह इस बात पर भी निर्भर करता है कि आपके डेटाबेस की स्थापना कैसे की जाती है।

सर्वर पर SELECT गतिविधि पर नज़र रखने के लिए चार मुख्य विकल्प हैं:

  1. आप अपने सर्वर से कनेक्ट करने और विशिष्ट गतिविधि को देखने के लिए SQL सर्वर प्रोफाइलर का उपयोग कर सकते हैं जैसा कि ऐसा होता है।

  2. आप सर्वर पर एक ट्रेस फ़ाइल में गतिविधि लॉग करने के लिए एक सर्वर-साइड ट्रेस बना सकते हैं , जिसे तब SQL सर्वर प्रोफाइलर द्वारा पढ़ा जा सकता है, या fn_trace_ अविस्मरणीय का उपयोग करके इसे आगे के विश्लेषण के लिए एक तालिका में लोड किया जा सकता है।

  3. आप विस्तारित ईवेंट का उपयोग कर सकते हैं , जो सर्वर-साइड निशानों की तुलना में अधिक कार्यक्षमता प्रदान करता है, और जिसे Microsoft SQL Server 2012 के साथ शुरू होने वाले सर्वर-साइड ट्रैस के बजाय सुझाता है।

  4. आप C2 ऑडिट मोड का उपयोग कर सकते हैं ।

आप अपने ट्रेस को सेट करने के लिए SQL सर्वर प्रोफाइलर का उपयोग कर सकते हैं (विशिष्ट घटनाओं, फ़िल्टर, आदि जो आप चाहते हैं) का चयन करें, फिर इसे फ़ाइल मेनू का उपयोग करके स्क्रिप्ट करें और सर्वर-साइड ट्रेस बनाने के लिए इसे सर्वर पर निष्पादित करें, जैसा कि वर्णित है। यहाँ


5

SELECT स्टेटमेंट को ट्रैक करने के लिए कई SQL सर्वर सॉल्यूशंस और तकनीकें हैं

  1. विशेष रूप से विकसित संग्रहीत कार्यविधियाँ और कार्य - नोट: इस विधि में टी-एसक्यूएल प्रोग्रामिंग के उन्नत ज्ञान और संग्रहीत प्रक्रियाओं और कार्यों को अतिरिक्त बनाए रखने की आवश्यकता होती है (जैसे डेटाबेस स्कीमा परिवर्तन के मामले में)। आप इस लेख में अधिक देख सकते हैं: http://alstechtips.blogspot.com/2011/02/auditing-select-statements-in-sql.html

  2. SQL सर्वर ट्रेस तकनीक - आप इस लेख में चरण-दर-चरण निर्देश पढ़ सकते हैं: http://solutioncenter.apexsql.com/auditing-select-statements-on-sql-server/

  3. SQL सर्वर ऑडिट सुविधा का उपयोग करना - ऑडिट सुविधा (SQL सर्वर 2008 में पेश किया गया) सर्वर और डेटाबेस दोनों घटनाओं को ट्रैक कर सकता है, और विस्तारित वीडियो प्रौद्योगिकी का उपयोग कर रहा है। लेकिन, डेटाबेस स्तर ऑडिटिंग केवल SQL सर्वर डेवलपर और एंटरप्राइज़ संस्करणों द्वारा समर्थित है।

  4. ApexSQL ऑडिट या Idera SQL अनुपालन प्रबंधक जैसे 3 पार्टी टूल का उपयोग करना


3

डिफ़ॉल्ट रूप से, यह SELECT स्टेटमेंट लॉग नहीं करता है। सेलेक्ट स्टेटमेंट्स को ऑडिट करने के लिए अधिक विवरण के लिए आप यहां मेरे जवाब का उल्लेख कर सकते हैं ।

इसके अलावा, डिफ़ॉल्ट रूप से यह टी-एसक्यूएल स्टेटमेंट्स को भी लॉग नहीं करता है, इसके बजाय यह सर्वर मेमोरी चेंज, ऑडिट लॉग फेल, ऑडिट एडलगिन इवेंट इत्यादि जैसे ईवेंट्स को लॉग करता है और आप जानकारी निकालने के लिए टी-एसक्यूएल स्क्रिप्स के साथ यहां अधिक जानकारी पा सकते हैं । डिफ़ॉल्ट ट्रेस।


3

जब तक आपको परवाह नहीं है कि प्रश्नों को किसने चलाया है, आपके सिस्टम में चलाए जा रहे प्रश्नों के बारे में मीट्रिक देखने के कुछ तरीके हैं। यह अंतिम पुनरारंभ के बाद से डेटा तक सीमित है और संभावित रूप से क्वेरी को कितना गहरा बढ़ाता है, इसके आधार पर प्लान कैश (या अन्य मेमोरी) दबाव से संभव है।

;WITH x AS
(
  SELECT 
    [text] = SUBSTRING(t.[text], 
      (s.statement_start_offset/2)+1, 
      COALESCE(NULLIF(s.statement_end_offset,-1),DATALENGTH(t.[text])*2)
       -(s.statement_start_offset/2)), 
    s.execution_count, s.last_execution_time,
    s.max_logical_reads, s.max_elapsed_time
  FROM sys.dm_exec_query_stats AS s
  CROSS APPLY sys.dm_exec_sql_text(s.sql_handle) AS t
)
SELECT * FROM x
WHERE LTRIM([text]) LIKE 'SELECT%';

आप पैटर्न का विस्तार करना चाह सकते हैं - उदाहरण के लिए, यह उन प्रश्नों को अनदेखा कर देगा ;WITH, जो विडंबना से शुरू होते हैं , SELECT INTOऔर वास्तविक टेबल को संदर्भित नहीं करने वाले चर असाइनमेंट को भी पकड़ सकते हैं ।

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


मैं उपरोक्त कथन से सहमत हूं, मैं आपके डेटाबेस के सभी चुनिंदा बयानों की निगरानी के बारे में अविश्वसनीय रूप से सतर्क रहूंगा।
ज़ेन

मैंने आपके समाधान की कोशिश की - क्या यह संभव है कि यह केवल प्रक्रियाएं, कार्य और ट्रिगर बचाता है और एडहॉक निष्पादित वर्ग विवरणों में से कोई भी नहीं है?
मगियर

@Magier नहीं, sysinos_exec_query_stats केवल क्वेरी स्टेटमेंट (तदर्थ या किसी मॉड्यूल से) पर रिपोर्ट करना चाहिए।
हारून बर्ट्रेंड
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.