Utilitaire sqlmaint

L'utilitaire sqlmaint exécute un ensemble spécifique d'opérations de maintenance sur une ou plusieurs bases de données. Utilisez sqlmaint pour exécuter des vérifications DBCC, sauvegarder une base de données et son journal des transactions, mettre à jour des statistiques et reconstruire des index. Toutes les activités de maintenance de base de données produisent un rapport qui peut être envoyé vers un fichier texte, un fichier HTML ou un compte de messagerie déterminé. sqlmaint exécute les plans de maintenance de base de données créés avec des versions précédentes de SQL Server. Pour exécuter des plans de maintenance SQL Server à partir de l'invite de commandes, recourez à l'utilitaire dtexec.

Important

Cette fonctionnalité sera supprimée dans la prochaine version de Microsoft SQL Server. Évitez d'utiliser cette fonctionnalité dans de nouveaux travaux de développement, et prévoyez de modifier les applications qui utilisent actuellement cette fonctionnalité. Utilisez plutôt la fonction plan de maintenance de SQL Server. Pour plus d'informations sur les plans de maintenance, consultez Plans de maintenance.

Syntaxe

sqlmaint 
[-?] |
[
     [-S server_name[\instance_name]]
     [-U login_ID [-P password]]
     {
          [-D database_name | -PlanName name | -PlanID guid ]
          [-Rpt text_file]
          [-To operator_name]
          [-HtmlRpt html_file [-DelHtmlRpt <time_period>] ]
          [-RmUnusedSpace threshold_percentfree_percent]
          [-CkDB | -CkDBNoIdx]
          [-CkAl | -CkAlNoIdx]
          [-CkCat]
          [-UpdOptiStats sample_percent]
          [-RebldIdx free_space]
          [-SupportComputedColumn]
          [-WriteHistory]
          [
               {-BkUpDB [backup_path] | -BkUpLog [backup_path] }
               {-BkUpMedia
                    {DISK [
                           [-DelBkUps <time_period>] 
                           [-CrBkSubDir ] 
                           [-UseDefDir ] 
                          ]
                     | TAPE 
                    }
               }
               [-BkUpOnlyIfClean]
               [-VrfyBackup]
          ]
     }
]
<time_period> ::=
number[minutes | hours | days | weeks | months]

Arguments

Les paramètres et leurs valeurs doivent être séparés par un espace. Par exemple, il doit exister un espace entre -S et server_name.

  • -?
    Spécifie que le diagramme de syntaxe pour l'utilitaire sqlmaint doit être retourné. Ce paramètre doit être utilisé seul.

  • -Sserver_name[ **\instance_name]
    Spécifie l'instance cible de Microsoft SQL Server. Spécifiez server_name pour vous connecter à l'instance par défaut du moteur de base de données SQL Server sur ce serveur. Spécifiez server_name
    \**instance_name pour vous connecter à une instance nommée du moteur de base de données sur ce serveur. Si aucun serveur n'est spécifié, l'utilitaire sqlmaint se connecte à l'instance par défaut du moteur de base de données sur l'ordinateur local.

  • -Ulogin_ID
    Spécifie l'ID de connexion à utiliser lors de la connexion au serveur. Si celui-ci n'est pas fourni, sqlmaint tente d'utiliser l'authentification Microsoft Windows. Si le login_ID contient des caractères spéciaux, il doit être encadré par des guillemets doubles (") ; ceux-ci sont facultatifs dans tous les autres cas.

    Remarque relative à la sécuritéRemarque relative à la sécurité

    Utilisez si possible l'authentification Windows.

  • -Ppassword
    Spécifie le mot de passe de l'ID de connexion. Uniquement valide si le paramètre -U est également fourni. Si le password contient des caractères spéciaux, il doit être encadré par des guillemets doubles ; ceux-ci sont facultatifs dans tous les autres cas.

    Remarque relative à la sécuritéRemarque relative à la sécurité

    Le mot de passe n'est pas masqué. Utilisez si possible l'authentification Windows.

  • -Ddatabase_name
    Spécifie le nom de la base de données dans laquelle l'opération de maintenance doit être effectuée. Si le database_name contient des caractères spéciaux, il doit être encadré par des guillemets doubles ; ceux-ci sont facultatifs dans tous les autres cas.

  • -PlanNamename
    Spécifie le nom du plan de maintenance de base de données défini par l'Assistant Plan de maintenance de base de données. La seule information du plan utilisée par sqlmaint est la liste des bases de données qui y figurent. Toutes les activités de maintenance spécifiées dans les autres paramètres de sqlmaint s'appliquent à cette liste de bases de données.

  • -PlanIDguid
    Spécifie l'identificateur global unique (GUID) d'un plan de maintenance de base de données à l'aide de l'Assistant Plan de maintenance de base de données. La seule information du plan utilisée par sqlmaint est la liste des bases de données qui y figurent. Toutes les activités de maintenance spécifiées dans les autres paramètres de sqlmaint s'appliquent à cette liste de bases de données. Cela doit correspondre à une valeur plan_id dans msdb.dbo.sysdbmaintplans.

  • -Rpttext_file
    Spécifie le chemin et le nom complet du fichier dans lequel le rapport doit être créé. Le rapport est aussi créé à l'écran. Le rapport conserve les informations de version en ajoutant une date au nom de fichier. La date est générée comme suit : à la fin du nom de fichier mais avant le point, sous la forme _yyyyMMddhhmm. yyyy = année, MM = mois, dd = jour, hh = heure, mm = minute.

    Si vous exécutez l'utilitaire à 10:23, le 1er décembre 1996, avec la valeur text_file suivante :

    c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint.rpt
    

    Le nom du fichier créé est :

    c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint_199612011023.rpt
    

    Le nom de fichier complet UNC (Universal Naming Convention) est requis pour text_file lorsque sqlmaint accède à un serveur distant.

  • -To operator_name
    Spécifie l'opérateur auquel le rapport créé sera envoyé par l'intermédiaire de SQL Mail.

  • -HtmlRpthtml_file
    Spécifie le chemin et le nom complets du fichier dans lequel le rapport HTML doit être créé. sqlmaint crée le nom de fichier en lui ajoutant une chaîne de type _aaaaMMjjhhmm de la même manière que pour le paramètre -Rpt.

    Le nom de fichier UNC complet est nécessaire pour html_file lorsque sqlmaint accède à un serveur distant.

  • -DelHtmlRpt <time_period>
    Spécifie que tous les rapports HTML du répertoire des rapports doivent être supprimés si l'intervalle de temps écoulé depuis la création du fichier de rapport excède la valeur spécifiée par <time_period>. -DelHtmlRpt recherche les fichiers dont les noms correspondent au modèle créé à partir du paramètre html_file. Si html_file est c:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2.htm, -DelHtmlRpt provoque la suppression, par sqlmaint, de tous les fichiers dont le nom correspond au modèle C:\Program Files\Microsoft SQL Server\Mssql\Backup\AdventureWorks2008R2_maint*.htm et qui sont antérieurs à la date spécifiée par <time_period>.

  • -RmUnusedSpacethreshold_percent free_percent
    Spécifie que l'espace inutilisé est retiré de la base de données spécifiée dans -D. Cette option est uniquement utile pour les bases de données dont la configuration prévoit une croissance automatique. Threshold_percent indique, en Mo, la taille qu'une base de données doit atteindre pour que sqlmaint tente d'en supprimer l'espace de données inutilisé. Si la base de données est plus petite que threshold_percent, aucune action n'est exécutée. Free_percent spécifie l'espace qui doit rester libre dans la base de données, exprimé sous la forme d'un pourcentage de la taille finale de celle-ci. Prenons l'exemple d'une base de données de 200 Mo contenant 100 Mo de données. Si la valeur 10 est affectée à free_percent, la base de données a pour taille finale 110 Mo. La base de données n'est pas étendue si elle est inférieure à la valeur de free_percent augmentée de la quantité de données contenue dans la base de données. Prenons l'exemple d'une base de données de 108 Mo contenant 100 Mo de données. Si la valeur 10 est affectée à free_percent, la base de données ne passera pas à 110 Mo, mais conserve sa taille de 108 Mo.

  • -CkDB | -CkDBNoIdx
    Spécifie qu'une instruction DBCC CHECKDB ou une instruction DBCC CHECKDB avec l'option NOINDEX est exécutée dans la base de données indiquée dans -D. Pour plus d'informations, consultez DBCC CHECKDB.

    Un avertissement est enregistré dans le text_file si la base de données est en cours d'utilisation lorsque sqlmaint est exécuté.

  • -CkAl | -CkAlNoIdx
    Spécifie qu'une instruction DBCC CHECKALLOC avec l'option NOINDEX est exécutée dans la base de données indiquée dans -D. Pour plus d'informations, consultez DBCC CHECKALLOC (Transact-SQL).

  • -CkCat
    Spécifie qu'une instruction DBCC CHECKCATALOG (Transact-SQL) est exécutée dans la base de données indiquée dans -D. Pour plus d'informations, consultez DBCC CHECKCATALOG (Transact-SQL).

  • -UpdOptiStatssample_percent
    Spécifie que l'instruction suivante doit être exécutée sur chacune des tables de la base de données :

    UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT
    

    Si les tables contiennent des colonnes calculées, vous devez également spécifier l'argument -SupportedComputedColumn lorsque vous utilisez -UpdOptiStats.

    Pour plus d'informations, consultez UPDATE STATISTICS (Transact-SQL).

  • -RebldIdxfree_space
    Spécifie que les index sur les tables de la base de données cible doivent être reconstruits sur base d'un pourcentage free_space inversement proportionnel au facteur de remplissage. Par exemple, si le pourcentage free_space est égal à 30, le facteur de remplissage utilisé est 70. Si le pourcentage indiqué dans free_space a comme valeur 100, les index sont reconstruits sur base du facteur de remplissage d'origine.

    Si les index se trouvent sur des colonnes calculées, vous devez également spécifier l'argument -SupportedComputedColumn lorsque vous utilisez -RebldIdx.

  • -SupportComputedColumn
    Doit être spécifié pour l'exécution de commandes de maintenance DBCC avec sqlmaint sur des colonnes calculées.

  • -WriteHistory
    Spécifie que chaque action de maintenance effectuée par sqlmaint fait l'objet d'une entrée dans msdb.dbo.sysdbmaintplan_history. Si -PlanName ou -PlanID est spécifié, les entrées de sysdbmaintplan_history utilisent l'ID du plan spécifié. Si -D est spécifié, l'ID du plan est remplacé par des zéros dans les entrées de sysdbmaintplan_history.

  • -BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
    Spécifie une action de sauvegarde. -BkUpDb sauvegarde l'ensemble de la base de données. -BkUpLog sauvegarde uniquement le journal des transactions.

    backup_path spécifie le répertoire pour la sauvegarde. backup_path n'est pas nécessaire si -UseDefDir est également spécifié et il est remplacé par la valeur de -UseDefDir si toutes deux sont spécifiées. La sauvegarde peut être placée à une adresse de répertoire ou de périphérique à bande (par exemple, \\.\TAPE0). Le nom de fichier pour la sauvegarde d'une base de données est créé automatiquement comme suit :

    dbname_db_yyyyMMddhhmm.BAK
    

    • dbname est le nom de la base de données actuellement sauvegardée.

    • yyyyMMddhhmm est le moment de l'opération de sauvegarde, où yyyy équivaut aux années, MM aux mois, dd aux jours, hh aux heures et mm aux minutes.

    Le nom de fichier d'une transaction de sauvegarde est automatiquement créé sous la forme suivante :

    dbname_log_yyyymmddhhmm.BAK
    

    Si vous utilisez le paramètre -BkUpDB, vous devez aussi spécifier le support de sauvegarde à l'aide du paramètre -BkUpMedia.

  • -BkUpMedia
    Précise le type de support utilisé pour la sauvegarde, DISK ou TAPE.

  • DISK
    Spécifie que le support de sauvegarde est un disque.

  • -DelBkUps< time_period >
    Pour les sauvegardes sur disque, spécifie que tous les fichiers de sauvegarde du répertoire de sauvegarde doivent être supprimés si l'intervalle de temps écoulé depuis la création de la sauvegarde excède la valeur indiquée dans <time_period>.

  • -CrBkSubDir
    Pour les sauvegardes sur disque, spécifie qu'un sous-répertoire doit être créé dans le répertoire [backup_path] ou dans le répertoire de sauvegarde par défaut si -UseDefDir est également spécifié. Le nom du sous-répertoire est généré à partir du nom de base de données spécifié dans -D. -CrBkSubDir offre un moyen aisé de placer toutes les sauvegardes de différentes bases de données dans des sous-répertoires séparés sans devoir modifier le paramètre backup_path.

  • -UseDefDir
    Pour les sauvegardes sur disque, spécifie que le fichier de sauvegarde doit être créé dans le répertoire de sauvegarde par défaut. UseDefDir est prioritaire sur backup_path si ces deux paramètres sont spécifiés. Avec l'installation de Microsoft SQL Server par défaut, le répertoire de sauvegarde par défaut est C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.

  • TAPE
    Spécifie que le support de sauvegarde est une bande.

  • -BkUpOnlyIfClean
    Spécifie que la sauvegarde a lieu uniquement si les contrôles -Ck spécifiés n'ont rencontré aucun problème au niveau des données. Les actions de maintenance s'exécutent dans le même ordre que celui dans lequel elles apparaissent dans la ligne de commande. Spécifiez les paramètres -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl ou -CkCat avant le ou les paramètres -BkUpDB/-BkUpLog si vous allez également spécifier -BkUpOnlyIfClean, ou si la sauvegarde est effectuée que le contrôle signale ou non des problèmes.

  • -VrfyBackup
    Spécifie que RESTORE VERIFYONLY est exécuté sur la sauvegarde lorsque celle-ci est terminée.

  • number[minutes| heures| jour| semaines| mois]
    Spécifie l'intervalle de temps utilisé pour déterminer si un rapport ou un fichier de sauvegarde est suffisamment ancien pour être supprimé. number est un entier suivi (sans espace) d'une unité de temps. Exemples valides :

    • 12weeks

    • 3months

    • 15days

    Si seul le paramètre number est spécifié, la partie de la date sélectionnée par défaut est semaines.

Notes

L'utilitaire sqlmaint effectue des opérations de maintenance sur une ou plusieurs bases de données. Si -D est spécifié, les opérations spécifiées par ailleurs portent uniquement sur la base de données indiquée. Si -PlanName ou -PlanID est spécifié, la seule information extraite du plan de maintenance indiqué par sqlmaint est la liste des bases de données contenues dans le plan. Toutes les opérations spécifiées dans les autres paramètres de sqlmaint s'appliquent à chaque base de données figurant sur la liste extraite du plan, l'utilitaire sqlmaint n'effectuant aucune opération de maintenance définie dans le plan lui-même.

L'utilitaire sqlmaint retourne 0 en cas de réussite et 1 en cas d'échec. L'échec de l'exécution est signalé :

  • Les opérations de maintenance échouent dans les ces suivants :

  • Si les contrôles -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl ou -CkCat détectent des problèmes dans les données.

  • En cas de panne générale.

Autorisations

L'utilitaire sqlmaint peut être exécuté par tout utilisateur Windows disposant de l'autorisation Lecture et exécution sur sqlmaint.exe, qui est stockée par défaut dans le dossier x:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER1\MSSQL\Binn. En outre, le nom d'ouverture de session SQL Server spécifié avec -login_ID doit disposer des autorisations SQL Server requises pour effectuer l'action spécifiée. Si la connexion à SQL Server utilise l'authentification Windows, le nom d'ouverture de session SQL Server mappé à l'utilisateur Windows authentifié doit disposer des autorisations SQL Server requises pour effectuer l'action spécifiée.

Par exemple, l'utilisation de l'argument -BkUpDB nécessite l'autorisation d'exécution de l'instruction BACKUP. L'utilisation de l'argument -UpdOptiStats nécessite l'autorisation d'exécution de l'instruction UPDATE STATISTICS. Pour plus d'informations, consultez la section « Autorisations » des rubriques correspondantes de la documentation en ligne.

Exemples

A. Réalisation de vérifications DBCC sur une base de données

sqlmaint -S MyServer -D AdventureWorks -CkDB -CkAl -CkCat -Rpt C:\MyReports\AdvWks_chk.rpt

B. Mise à jour des statistiques avec un échantillonnage de 15 % dans toutes les bases de données d'un plan. Compactage des bases de données ayant atteint 110 Mo de sorte qu'elles aient seulement 10 % d'espace libre

sqlmaint -S MyServer -PlanName MyUserDBPlan -UpdOptiStats 15 -RmUnusedSpace 110 10

C. Sauvegarde de toutes les bases de données d'un plan dans leurs sous-répertoires respectifs du répertoire par défaut x:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup. Suppression de toute sauvegarde antérieure à 2 semaines

sqlmaint -S MyServer -PlanName MyUserDBPlan -BkUpDB -BkUpMedia DISK -UseDefDir -CrBkSubDir -DelBkUps 2weeks

D. Sauvegarde d'une base de données dans le répertoire par défaut x:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.\

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir