Sqlserver
 sql >> Base de données >  >> RDS >> Sqlserver

Navigation dans les journaux d'erreurs SQL Server

Présentation

L'une des compétences clés dont vous avez besoin en tant qu'administrateur de base de données ou informaticien est généralement la capacité de surveiller très attentivement les systèmes. L'absence de cette compétence clé peut entraîner des erreurs de diagnostic lors du dépannage des problèmes. SQL Server propose un certain nombre d'outils qui peuvent aider le DBA à résoudre les problèmes qui surviennent en production. Le journal des erreurs SQL Server et le journal de l'agent SQL Server sont deux des fonctions les plus importantes pour le dépannage de SQL Server. Dans cet article, nous allons explorer les manières dont nous pouvons manipuler les journaux du serveur et de l'agent.

Comportement par défaut

Par défaut, SQL Server conserve les six derniers journaux d'erreurs et les neuf derniers journaux d'agent dans l'instance. Par défaut, un nouveau fichier journal est généré à chaque redémarrage de l'instance de l'agent. Le nombre de fichiers journaux conservés peut être modifié pour les journaux SQL Server à l'aide de la déclaration de l'interface graphique équivalente ci-dessous (Fig. 1). Pour ouvrir cette interface graphique dans l'Explorateur d'objets, cliquez avec le bouton droit sur Gestion , sélectionnez Journal des erreurs SQL Server et cliquez sur Configurer .

Fig 1. Six derniers journaux d'erreurs

Chaque fichier journal est généré au redémarrage et stocké physiquement dans C : \Program Files\ Microsoft SQL Server\MSSQL14.\MSSQL\Log ainsi que des fichiers de trace et des fichiers de vidage. Les journaux d'erreurs SQL Server sont nommés ERRORLOG.x (où x est un nombre) tandis que les journaux de l'agent SQL sont nommés SQLAGENT.x.

Lors du démarrage de l'instance, le moteur écrit des informations clés dans le journal des erreurs, notamment :

Détails de la version de SQL Server Fabricant du système

  • ID de processus SQL Server
  • Numéro de port utilisé
  • Mode d'authentification
  • Paramètres de démarrage du registre
  • Compte de service
  • Taille du processeur et de la mémoire détectée
  • État des options de clé, par ex. Grandes pages, extension du pool de mémoire tampon, OLTP en mémoire, etc.

Ces informations peuvent être très utiles lorsque vous souhaitez simplement en savoir plus rapidement sur l'une d'entre elles à partir de l'instance qui vous est présentée.

Configuration des options du journal des erreurs

Comme mentionné précédemment, certains aspects du journal des erreurs SQL et du journal de l'agent sont configurables. Dans mon environnement, nous définissons NumErrorLogs à 30 parce que nous voulons que les journaux des trente derniers jours soient conservés quotidiennement. Nous nous assurons que chaque fichier journal contient les données d'une journée en exécutant sp_cycle_errorlog (et sp_cycle_agent_errorlog) à minuit à l'aide d'un travail d'agent. Le Listing 3 montre les détails de ce travail. Ces procédures stockées peuvent également être très utiles pour parcourir explicitement le journal des erreurs lorsque vous souhaitez reproduire un problème et le regarder se dérouler (c'est-à-dire avant de passer à SQL Profiler ou Extended Events).

-- 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

Fig 2. Définition du nombre maximal de fichiers journaux d'erreurs

Le journal des erreurs de l'agent SQL peut être configuré avec un certain niveau de détail en cliquant avec le bouton droit sur SQL Server Agent , puis Journaux d'erreurs et sélectionnez Configurer du menu. Le Listing 2 et la Fig. 2 montrent comment modifier le niveau de journalisation.

-- Listing 2: Setting Error Logging Level
USE [msdb]
GO
EXEC msdb dbo.sp_set_sqlagent_properties @errorlogging_level 7 GO

Fig 3. Définition des options du journal des erreurs de l'agent 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

« Verser » à travers les bûches

Se familiariser avec le journal des erreurs est utile pour identifier des éléments tels que les éléments répertoriés dans la deuxième section ou surveiller des événements tels que la récupération d'une base de données volumineuse. Mais lorsque vous recherchez un élément spécifique tel que des échecs de connexion ou des erreurs similaires cachées dans la mer de journaux, vous pouvez utiliser le filtre ou rechercher capacité.

Fig 4. Filtrer et rechercher

La recherche serait utile lors de la recherche d'un numéro ou d'un texte d'erreur spécifique. La recherche renvoie les occurrences de l'élément requis par ligne à la fois. Lorsque vous devez affiner le journal des erreurs à l'aide de critères spécifiques, utilisez le filtre. Vous pouvez filtrer par connexion , date ou général détails.

Fig 5. Critère de recherche

Fig 6. Critère de filtrage

Lorsque l'instance échoue

Une bonne question qu'un lecteur passionné poserait est que se passe-t-il lorsque SQL Server ne démarre pas ? Comment examinons-nous les journaux ? Eh bien, il se trouve qu'en plus du fait que les journaux d'erreurs sont écrits dans des fichiers plats dont le chemin a été précédemment spécifié, vous pouvez également afficher les journaux du serveur et de l'agent dans l'Observateur d'événements Windows. Tout ce que vous avez à faire est de filtrer les journaux d'application de l'Observateur d'événements pour les événements avec une source MSSQLSERVER. Dans des environnements plus avancés, les journaux SQL Server, comme tous les autres journaux Windows, peuvent être stockés dans un outil tiers comme SEIM ou Splunk. Cela rend les choses tellement plus faciles. À partir de SQL Server 2012, il est également possible d'afficher entièrement les journaux d'erreurs hors ligne à partir d'une autre instance, en utilisant des serveurs enregistrés ainsi qu'en utilisant WMI et WQL.

Fig 7. Affichage des journaux SQL Server dans l'Observateur d'événements

Conclusion

Le journal des erreurs SQL Server peut être considéré comme le point de départ du dépannage des erreurs courantes. D'autres journaux, tels que les fichiers de trace générés par SQL Trace ou capturés par SQL Profiler ou Extended Events Session, donnent beaucoup plus de détails sur ce qui se passe à l'intérieur du moteur. Il existe également des journaux spécifiques comme ceux liés à la messagerie de base de données ou à la réplication. Bien qu'ils soient tous très utiles pour résoudre les problèmes dans SQL Server, je recommanderais les journaux d'erreurs SQL Server comme un excellent point de départ.

Références

Affichage du journal des erreurs SQL Server

Affichage des fichiers journaux hors ligne

Journal des erreurs du cycle SP

Journal des erreurs de l'agent de cycle SP

Chemin d'installation par défaut de SQL Server