web-dev-qa-db-fra.com

Comment afficher l'historique complet des travaux SQL?

Dans SQL Server Management Studio, lorsque je "Afficher l'historique" pour un travail SQL, je n'affiche que les 50 dernières exécutions du travail.

Comment puis-je afficher un journal complet de chaque exécution d'un travail SQL depuis sa création sur le serveur?

26
Curt

Le système de travaux SQL Server limite le nombre total d'entrées de l'historique des travaux à la fois par travail et sur l'ensemble du système. Ces informations sont stockées dans la base de données MSDB.

Évidemment, vous ne pourrez pas revenir en arrière et voir les informations qui ont été supprimées depuis, mais vous pouvez modifier les propriétés SQL Server Agent et augmenter le nombre d'entrées qui seront désormais enregistrées.

Dans les propriétés de l'Agent SQL Server:

  • Sélectionnez la page Historique
  • Modifiez la "Taille maximale du journal de l'historique des travaux (lignes)" et "Nombre maximal de lignes de l'historique des travaux par travail" pour l'adapter, ou modifiez la façon dont les données historiques des travaux sont supprimées en fonction de leur âge.

Cela ne vous rendra pas votre historique, mais cela vous aidera dans vos futures requêtes!

38
Jeremy Smyth

Je suis presque sûr que l'historique des travaux est stocké quelque part dans une base de données dédiée dans SQL Server lui-même. Si tel est le cas, vous pouvez utiliser SQL Server Profiler pour intercepter les instructions SQL envoyées par SQL Server Management Studio et trouver les noms des tables, etc.

4
Anton Gogolev

Votre résultat dépend de deux ou trois choses.

  1. Ce que vous avez défini vos paramètres "Limiter la taille de l'historique du journal des travaux" et "Supprimer automatiquement l'historique de l'agent" [clic droit sur SQL Agent | Propriétés | Histoire] et
  2. si vous effectuez ou non une tâche de "nettoyage de l'historique" dans un plan de maintenance (ou manuellement de cette manière). La tâche MP exécute la msdb.dbo.sp_purge_jobhistory procédure stockée avec un paramètre "date la plus ancienne" qui correspond à la période que vous avez sélectionnée.
3
Tony Covarrubias

Vous pouvez utiliser la table temporelle pour modifier la conservation des données. Historique des travaux persistant dans l'instance gérée Azure SQL :

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD StartTime DATETIME2 NOT NULL DEFAULT ('19000101 00:00:00.0000000')

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD EndTime DATETIME2 NOT NULL DEFAULT ('99991231 23:59:59.9999999')

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD PERIOD FOR SYSTEM_TIME (StartTime, EndTime)

ALTER TABLE [msdb].[dbo].[sysjobhistory]
ADD CONSTRAINT PK_sysjobhistory PRIMARY KEY (instance_id, job_id, step_id)

ALTER TABLE [msdb].[dbo].[sysjobhistory]
SET(SYSTEM_VERSIONING = ON (HISTORY_TABLE = [dbo].[sysjobhistoryall],
    DATA_CONSISTENCY_CHECK = ON, HISTORY_RETENTION_PERIOD = 1 MONTH))

select * from msdb.dbo.sysjobhistoryall

Cette approche permet de définir la période de rétention en temps (ici 1 MONTH) au lieu du nombre maximal de lignes par travail/taille maximale du journal de l'historique des travaux (lignes).

0
Lukasz Szozda