परिचय
एक डेटाबेस प्रशासक या एक आईटी व्यक्ति के रूप में आपको जिन प्रमुख कौशलों की आवश्यकता होती है, उनमें से एक आम तौर पर सिस्टम की बहुत सावधानी से निगरानी करने की क्षमता है। समस्याओं का निवारण करते समय इस प्रमुख कौशल की कमी से गलत निदान हो सकता है। SQL सर्वर कई उपकरणों को उजागर करता है जो उत्पादन में होने वाली समस्याओं के निवारण में DBA की सहायता कर सकते हैं। SQL सर्वर त्रुटि लॉग और SQL सर्वर एजेंट लॉग SQL सर्वर के समस्या निवारण के लिए दो सबसे महत्वपूर्ण सुविधाएं हैं। इस लेख में, हम उन तरीकों का पता लगाएंगे जिनसे हम सर्वर और एजेंट लॉग में हेरफेर कर सकते हैं।
डिफ़ॉल्ट व्यवहार
डिफ़ॉल्ट रूप से, SQL सर्वर पिछले छह त्रुटि लॉग और अंतिम नौ एजेंट लॉग को उदाहरण में रखता है। डिफ़ॉल्ट रूप से, हर बार एजेंट की आवृत्ति के पुनरारंभ होने पर एक नई लॉग फ़ाइल उत्पन्न होती है। नीचे दिए गए समतुल्य GUI के कथन का उपयोग करके SQL सर्वर लॉग के लिए रखी गई लॉग फ़ाइलों की संख्या को संशोधित किया जा सकता है (चित्र 1)। इस GUI को Object Explorer में खोलने के लिए, प्रबंधन . पर राइट-क्लिक करें , SQL सर्वर त्रुटि लॉग का चयन करें और कॉन्फ़िगर करें . क्लिक करें .
चित्र 1. अंतिम छह त्रुटि लॉग
प्रत्येक लॉग फ़ाइल को पुनः आरंभ करने पर उत्पन्न किया जाता है और भौतिक रूप से C: . में संग्रहीत किया जाता है \Program Files\ Microsoft SQL Server\MSSQL14.
इंस्टेंस स्टार्टअप के दौरान, इंजन त्रुटि लॉग में महत्वपूर्ण जानकारी लिखता है जिसमें निम्न शामिल होंगे:
SQL सर्वर संस्करण विवरण सिस्टम निर्माता
- एसक्यूएल सर्वर प्रक्रिया आईडी
- पोर्ट नंबर उपयोग में है
- प्रमाणीकरण मोड
- रजिस्ट्री स्टार्टअप पैरामीटर
- सेवा खाता
- सीपीयू और मेमोरी के आकार का पता चला
- मुख्य विकल्पों की स्थिति उदा. बड़े पृष्ठ, बफर पूल एक्सटेंशन, इन-मेमोरी OLTP आदि।
यह जानकारी तब बहुत उपयोगी हो सकती है जब आप अपने द्वारा पेश किए गए उदाहरण से उनमें से किसी के बारे में तुरंत पता लगाना चाहते हैं।
त्रुटि लॉग विकल्प कॉन्फ़िगर करना
जैसा कि पहले उल्लेख किया गया है, SQL त्रुटि लॉग और एजेंट लॉग के कुछ पहलू कॉन्फ़िगर करने योग्य हैं। मेरे परिवेश में, हम NumErrorLogs . सेट करते हैं 30 तक क्योंकि हम चाहते हैं कि पिछले तीस दिनों के लॉग को दैनिक आधार पर संरक्षित किया जाए। हम सुनिश्चित करते हैं कि प्रत्येक लॉग फ़ाइल में एजेंट जॉब का उपयोग करके मध्यरात्रि में sp_cycle_errorlog (और sp_cycle_agent_errorlog) चलाकर एक दिन का डेटा होता है। लिस्टिंग 3 इस नौकरी का विवरण दिखाती है। ये संग्रहीत कार्यविधियाँ त्रुटि लॉग को स्पष्ट रूप से साइकिल चलाने के लिए भी काफी उपयोगी हो सकती हैं जब आप किसी समस्या को पुन:उत्पन्न करना चाहते हैं और उसे प्रकट होते हुए देखना चाहते हैं (अर्थात SQL Profiler या विस्तारित ईवेंट में आगे बढ़ने से पहले)।
-- Listing 1: Configure NumErrorLogs USE [master] GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO
चित्र 2. त्रुटि लॉग फ़ाइलों की अधिकतम संख्या निर्धारित करना
SQL एजेंट त्रुटि लॉग को SQL सर्वर एजेंट पर राइट-क्लिक करके विवरण के कुछ स्तर पर कॉन्फ़िगर किया जा सकता है , और फिर त्रुटि लॉग और कॉन्फ़िगर करें . चुनें मेनू से। लिस्टिंग 2 और चित्र 2 में लॉगिंग स्तर को संशोधित करने का तरीका दिखाया गया है।
-- Listing 2: Setting Error Logging Level USE [msdb] GO EXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO
चित्र 3. SQL एजेंट त्रुटि लॉग विकल्प सेट करना
-- Listing 3 /* Create Job to Cycle Server and Agent Error Logs */ USE [msdb] GO /****** Object: Job [Cycle Error Logs] Script Date: 01/25/2015 15:40:34 ******/ BEGIN TRANSACTION DECLARE @ReturnCode INT SELECT @ReturnCode = 0 /****** Object: JobCategory [[Uncategorized (Local)]]] Script Date: 01/25/2015 15:40:34 ******/ IF NOT EXISTS (SELECT name FROM msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class 1 BEGIN EXEC @ReturnCode = msdb dbo sp_add_category @class N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback END DECLARE @jobId BINARY(16 EXEC @ReturnCode = msdb dbo sp_add_job @job_name=N'Custom_Cycle_Error_Logs', @enabled 1 @notify_level_eventlog 0, @notify_level_email 0, @notify_level_netsend 0 @notify_level_page 0 @delete_level 0, @description=N'No description available.', @category_name=N'[Uncategorized (Local)]', @owner_login_name N'COMPANYDOMAIN\kigiri', @job_id = @jobId OUTPUT IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback /****** Object: Step [Step 1] Script Date: 01/25/2015 15:40:35 ******/ EXEC @ReturnCode = msdb dbo sp_add_jobstep @job_id @jobId, @step_name N'Step 1', @step_id 1 @cmdexec_success_code 0 @on_success_action 1 @on_success_step_id 0, @on_fail_action 2 @on_fail_step_id 0, @retry_attempts 0 @retry_interval 0 @os_run_priority 0, @subsystem=N'TSQL', @command=N'EXEC master.sys.sp_cycle_errorlog GO EXEC msdb.dbo.sp_cycle_agent_errorlog GO', @database_name=N'master', @flags 0 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb dbo sp_update_job @job_id = @jobId @start_step_id = 1 IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb dbo sp_add_jobschedule @job_id @jobId @name N'Daily Schedule', @enabled 1 @freq_type 4, @freq_interval 1 @freq_subday_type 1 @freq_subday_interval 0 @freq_relative_interval 0 @freq_recurrence_factor 0 @active_start_date 20121208, @active_end_date 99991231 @active_start_time 0 @active_end_time 235959 [email protected]_uid=N'f3eb3e85-9875-4cf5-a789-8c558b772d27' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback EXEC @ReturnCode = msdb dbo sp_add_jobserver @job_id = @jobId @server_name = N'(local)' IF (@@ERROR <> 0 OR @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTION GOTO EndSave QuitWithRollback: IF (@@TRANCOUNT > 0) ROLLBACK TRANSACTION EndSave: GO /* Change Maximum Number of Error Log Files to 30 */ USE [master] GO EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'NumErrorLogs', REG_DWORD, 30 GO /* Set jo history length and agent properties */ EXEC msdb dbo.sp_purge_jobhistory @oldest_date '2015-11-28T19:29:00' GO USE [msdb] GO EXEC msdb dbo.sp_set_sqlagent_properties @jobhistory_max_rows 10000, @jobhistory_max_rows_per_job 1000 GO
लॉग के माध्यम से "डालना"
त्रुटि लॉग के साथ खुद को परिचित करना ऐसी चीजों की पहचान करने के लिए उपयोगी है जैसे कि दूसरे खंड में सूचीबद्ध आइटम या बड़े डेटाबेस की पुनर्प्राप्ति जैसी घटनाओं की निगरानी करना। लेकिन लॉग के समुद्र में छिपी हुई लॉगिन विफलताओं या इसी तरह की त्रुटियों जैसे विशिष्ट आइटम की खोज करते समय, आप फ़िल्टर का उपयोग करना चाह सकते हैं या खोज क्षमता।
चित्र 4. फ़िल्टर करें और खोजें
खोज विशिष्ट त्रुटि संख्या या पाठ की तलाश में उपयोगी होगा। खोज एक बार में लाइन द्वारा आवश्यक वस्तु की घटनाओं को लौटाती है। जब आपको विशिष्ट मानदंडों का उपयोग करके त्रुटि लॉग को कम करने की आवश्यकता हो, तो फ़िल्टर का उपयोग करें। आप कनेक्शन . द्वारा फ़िल्टर कर सकते हैं , तारीख या सामान्य विवरण।
चित्र 5. खोज मानदंड
चित्र 6. फ़िल्टर मानदंड
जब इंस्टेंस विफल हो जाता है
एक अच्छा सवाल एक उत्सुक पाठक पूछेगा कि क्या होता है जब SQL सर्वर प्रारंभ करने में विफल रहता है? हम लॉग की जांच कैसे करते हैं? खैर, ऐसा होता है कि इस तथ्य के अलावा कि त्रुटि लॉग फ्लैट फाइलों पर लिखे गए हैं, जिसका पथ पहले निर्दिष्ट किया गया था, आप विंडोज इवेंट व्यूअर में सर्वर और एजेंट लॉग भी देख सकते हैं। आपको केवल एक स्रोत MSSQLSERVER. के साथ ईवेंट के लिए ईवेंट व्यूअर एप्लिकेशन लॉग को फ़िल्टर करना है। अधिक उन्नत वातावरण में, SQL सर्वर लॉग, किसी भी अन्य Windows लॉग की तरह, SEIM या Splunk जैसे किसी तृतीय-पक्ष टूल में संग्रहीत किया जा सकता है। इससे चीजें बहुत आसान हो जाती हैं। SQL सर्वर 2012 से शुरू करते हुए, पंजीकृत सर्वरों के साथ-साथ WMI और WQL का उपयोग करके पूरी तरह से किसी अन्य उदाहरण से ऑफ़लाइन त्रुटि लॉग देखना संभव है।
चित्र 7. इवेंट व्यूअर में SQL सर्वर लॉग देखना
निष्कर्ष
SQL सर्वर त्रुटि लॉग को सामान्य त्रुटियों के निवारण के लिए प्रारंभिक बिंदु माना जा सकता है। अन्य लॉग, जैसे कि SQL ट्रेस द्वारा उत्पन्न ट्रेस फ़ाइलें या SQL Profiler द्वारा कैप्चर की गई या विस्तारित ईवेंट सत्र, इंजन के अंदर क्या हो रहा है, इस पर अधिक विवरण देते हैं। डेटाबेस मेल या प्रतिकृति से संबंधित विशिष्ट लॉग भी होते हैं। हालांकि ये सभी SQL सर्वर में समस्याओं के निवारण के लिए बहुत उपयोगी हैं, मैं SQL सर्वर त्रुटि लॉग को एक बेहतरीन शुरुआती बिंदु के रूप में सुझाऊँगा।
संदर्भ
SQL सर्वर त्रुटि लॉग देखना
ऑफ़लाइन लॉग फ़ाइलें देखना
एसपी चक्र त्रुटि लॉग
एसपी साइकिल एजेंट त्रुटि लॉग
SQL सर्वर डिफ़ॉल्ट स्थापना पथ