sqlmaint (Dienstprogramm)

Das Dienstprogrammsqlmaint führt eine angegebene Reihe von Wartungsvorgängen für eine oder mehrere Datenbanken aus. Verwenden Sie sqlmaint, um DBCC-Überprüfungen auszuführen, eine Datenbank und das zugehörige Transaktionsprotokoll zu sichern, Statistiken zu aktualisieren und Indizes neu zu erstellen. Alle Datenbank-Wartungsaktivitäten generieren einen Bericht, der an eine angegebene Textdatei, HTML-Datei oder ein E-Mail-Konto gesendet werden kann. sqlmaint führt Datenbank-Wartungspläne aus, die mit früheren Versionen von SQL Server erstellt wurden. Verwenden Sie das Dienstprogramm dtexec, um Wartungspläne von SQL Server über die Eingabeaufforderung auszuführen.

Wichtiger HinweisWichtig

Diese Funktion wird in der nächsten Version von Microsoft SQL Server entfernt. Verwenden Sie dieses Feature beim Entwickeln neuer Anwendungen nicht, und planen Sie das Ändern von Anwendungen, in denen es zurzeit verwendet wird. Verwenden Sie stattdessen das Wartungsplanfeature von SQL Server. Weitere Informationen zu Wartungsplänen finden Sie unter Wartungspläne.

Syntax

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]

Argumente

Die Parameter und ihre Werte müssen jeweils durch ein Leerzeichen getrennt werden. So muss beispielsweise zwischen -S und server_name ein Leerzeichen stehen.

  • -?
    Gibt an, dass das Syntaxdiagramm für sqlmaint zurückgegeben werden soll. Dieser Parameter darf nur alleine verwendet werden.

  • -Sserver_name[ **\instance_name]
    Gibt die MicrosoftSQL Server-Zielinstanz an. Geben Sie server_name an, um eine Verbindung mit der Standardinstanz von SQL Server Database Engine (Datenbankmodul) auf diesem Server herzustellen. Geben Sie server_name
    \**instance_name an, um eine Verbindung mit einer benannten Instanz von Database Engine (Datenbankmodul) auf diesem Server herzustellen. Wenn kein Server angegeben wird, stellt sqlmaint eine Verbindung mit der Standardinstanz von Database Engine (Datenbankmodul) auf dem lokalen Computer her.

  • -Ulogin_ID
    Gibt die Anmelde-ID an, der beim Verbinden zum Server verwendet werden soll. Wenn dieses Argument nicht angegeben wird, versucht sqlmaint, die Microsoft Windows-Authentifizierung zu verwenden. Wenn login_ID Sonderzeichen enthält, muss das Argument in doppelte Anführungszeichen (") eingeschlossen werden. Andernfalls sind die doppelten Anführungszeichen optional.

    SicherheitshinweisSicherheitshinweis

    Verwenden Sie nach Möglichkeit die Windows-Authentifizierung.

  • -Ppassword
    Gibt das Kennwort für die Anmelde-ID an und ist nur dann gültig, wenn der -U-Parameter ebenfalls angegeben wird. Wenn password Sonderzeichen enthält, muss das Argument in doppelte Anführungszeichen eingeschlossen werden. Andernfalls sind die doppelten Anführungszeichen optional.

    SicherheitshinweisSicherheitshinweis

    Das Kennwort wird nicht maskiert. Verwenden Sie nach Möglichkeit die Windows-Authentifizierung.

  • -Ddatabase_name
    Gibt den Namen der Datenbank an, in der der Wartungsvorgang durchgeführt werden soll. Wenn database_name Sonderzeichen enthält, muss das Argument in doppelte Anführungszeichen eingeschlossen werden. Andernfalls sind die doppelten Anführungszeichen optional.

  • -PlanNamename
    Gibt den Namen eines Datenbank-Wartungsplans an, der mithilfe des Datenbank-Wartungsplanungs-Assistenten definiert wurde. Von den Informationen, die dieser Plan enthält, verwendet sqlmaint nur die Liste der Datenbanken im Plan. Alle Wartungsaktivitäten, die Sie in den anderen sqlmaint-Parametern angeben, werden auf die in dieser Liste aufgeführten Datenbanken angewendet.

  • -PlanIDguid
    Gibt einen global eindeutigen Bezeichner (Globally Unique Identifier, GUID) eines Datenbank-Wartungsplans an, der mithilfe des Datenbank-Wartungsplanungs-Assistenten definiert wurde. Von den Informationen, die dieser Plan enthält, verwendet sqlmaint nur die Liste der Datenbanken im Plan. Alle Wartungsaktivitäten, die Sie in den anderen sqlmaint-Parametern angeben, werden auf die in dieser Liste aufgeführten Datenbanken angewendet. Der GUID muss mit einem der plan_id-Werte in msdb.dbo.sysdbmaintplans übereinstimmen.

  • -Rpttext_file
    Gibt den vollständigen Pfad und Namen der Datei an, in der der Bericht generiert werden soll. Der Bericht wird auch auf dem Bildschirm generiert. Der Bericht verwaltet Versionsinformationen, indem er das Datum zum Dateinamen hinzufügt. Das Datum wird folgendermaßen generiert: am Ende des Dateinamens, aber vor dem Punkt im Format _yyyyMMddhhmm. yyyy = Jahr, MM = Monat, dd = Tag, hh = Stunde, mm = Minute.

    Angenommen, Sie haben das Dienstprogramm am 1. Dezember 1996 um 10.23 Uhr ausgeführt, und text_file hat folgenden Wert:

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

    Die generierte Datei hat dann folgenden Namen:

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

    Wenn sqlmaint auf einen Remoteserver zugreift, ist für text_file der vollständige UNC-Dateiname (Universal Naming Convention) erforderlich.

  • -To operator_name
    Gibt den Operator an, an den der generierte Bericht über SQL Mail gesendet wird.

  • -HtmlRpthtml_file
    Gibt den vollständigen Pfad und Namen der Datei an, in der ein HTML-Bericht generiert werden soll. sqlmaint generiert den Dateinamen, indem wie beim -Rpt-Parameter eine Zeichenfolge mit dem Format _yyyyMMddhhmm an den Dateinamen angefügt wird.

    Wenn sqlmaint auf einen Remoteserver zugreift, ist für html_file der vollständige UNC-Dateiname erforderlich.

  • -DelHtmlRpt <time_period>
    Gibt an, dass jeder HTML-Bericht im Berichtsverzeichnis gelöscht werden soll, wenn die Zeitspanne nach Erstellen der Berichtsdatei den Wert für <time_period> überschreitet. -DelHtmlRpt sucht nach Dateien, deren Namen dem Muster entsprechen, das aus dem html_file-Parameter generiert wurde. Wenn html_file z. B. der Datei c:\Programme\\Microsoft SQL Server\Mssql\Backup\AdventureWorks_maint.htm entspricht, bewirkt -DelHtmlRpt, dass sqlmaint alle Dateien löscht, deren Namen dem Muster c:\Programme\Microsoft SQL Server\Mssql\Backup\AdventureWorks_maint*.htm entsprechen und die älter als der angegebene Wert für <time_period> sind.

  • -RmUnusedSpacethreshold_percent free_percent
    Gibt an, dass nicht verwendeter Speicherplatz aus der mit -D angegebenen Datenbank entfernt wird. Die Verwendung dieser Option ist nur bei Datenbanken sinnvoll, die automatisch vergrößert werden. Threshold_percent gibt die Größe (in MB) an, die die Datenbank erreicht haben muss, bevor sqlmaint versucht, nicht verwendeten Datenspeicherplatz zu entfernen. Wenn die Datenbank kleiner als threshold_percent ist, geschieht nichts. Free_percent gibt an, wie viel nicht verwendeter Speicherplatz in der Datenbank verbleiben muss. Die Angabe erfolgt in Form des Prozentsatzes der endgültigen Größe der Datenbank. Wenn eine 200 MB große Datenbank z. B. 100 MB an Daten enthält, bewirkt die Angabe des Werts 10 für free_percent, dass die endgültige Größe der Datenbank 110 MB beträgt. Beachten Sie, dass eine Datenbank nicht erweitert wird, wenn sie kleiner als der Wert ist, der sich aus free_percent zuzüglich der Menge der Daten in der Datenbank ergibt. Wenn eine 108 MB große Datenbank z. B. 100 MB an Daten enthält, bewirkt die Angabe des Werts 10 für free_percent nicht, dass die Datenbank auf 110 MB erweitert wird; die Datenbank bleibt 108 MB groß.

  • -CkDB | -CkDBNoIdx
    Gibt an, dass eine DBCC CHECKDB-Anweisung oder eine DBCC CHECKDB-Anweisung mit der Option NOINDEX in der Datenbank ausgeführt werden soll, die mit -D angegeben wurde. Weitere Informationen finden Sie unter DBCC CHECKDB.

    Wenn die Datenbank zum Zeitpunkt der Ausführung von sqlmaint verwendet wird, wird eine Warnung in die Datei geschrieben, die mit text_file angegeben wurde.

  • -CkAl | -CkAlNoIdx
    Gibt an, dass eine DBCC CHECKALLOC-Anweisung mit der Option NOINDEX in der Datenbank ausgeführt werden soll, die mit -D angegeben wurde. Weitere Informationen finden Sie unter DBCC CHECKALLOC (Transact-SQL).

  • -CkCat
    Gibt an, dass eine DBCC CHECKCATALOG-Anweisung (Transact-SQL) in der Datenbank ausgeführt werden soll, die mit -D angegeben wurde. Weitere Informationen finden Sie unter DBCC CHECKCATALOG (Transact-SQL).

  • -UpdOptiStatssample_percent
    Gibt an, dass für jede Tabelle der Datenbank die folgende Anweisung ausgeführt werden soll:

    UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT
    

    Falls die Tabelle berechnete Spalten enthält, müssen Sie auch das -SupportedComputedColumn-Argument angeben, wenn Sie -UpdOptiStats verwenden.

    Weitere Informationen finden Sie unter UPDATE STATISTICS (Transact-SQL).

  • -RebldIdxfree_space
    Gibt an, dass die Indizes der Tabellen in der Zieldatenbank neu erstellt werden sollen, wobei der Umkehrwert des Prozentwerts in free_space als Füllfaktor verwendet wird. Wenn z. B. free_space dem Prozentwert 30 entspricht, wird der Füllfaktor 70 verwendet. Wenn free_space dem Prozentwert 100 entspricht, werden die Indizes mit dem ursprünglichen Füllfaktorwert neu erstellt.

    Falls die Indizes für berechnete Spalten erstellt wurden, müssen Sie zudem das -SupportComputedColumn-Argument angeben, wenn Sie -RebldIdx verwenden.

  • -SupportComputedColumn
    Muss angegeben werden, um DBCC-Wartungsbefehle mit sqlmaint für berechnete Spalten auszuführen.

  • -WriteHistory
    Gibt an, dass für jede von sqlmaint durchgeführte Wartungsaktion ein Eintrag in msdb.dbo.sysdbmaintplan_history vorgenommen wird. Wenn -PlanName oder -PlanID angegeben ist, wird für die Einträge in sysdbmaintplan_history die ID des angegebenen Plans verwendet. Wenn -D angegeben wird, werden für die Einträge in sysdbmaintplan_history Nullen für die Plan-ID verwendet.

  • -BkUpDB [ backup_path] | -BkUpLog [ backup_path ]
    Gibt eine Sicherungsaktion an. -BkUpDb sichert die gesamte Datenbank. -BkUpLog sichert nur das Transaktionsprotokoll.

    backup_path gibt das Verzeichnis für die Sicherung an. backup_path ist nicht erforderlich, wenn -UseDefDir ebenfalls angegeben wird, und wird von -UseDefDir außer Kraft gesetzt, wenn beide Parameter angegeben werden. Die Sicherung kann in einem Verzeichnis oder über eine Bandmediumadresse, z. B. \\.\TAPE0, erfolgen. Der Dateiname für eine Datenbanksicherung wird automatisch folgendermaßen generiert:

    dbname_db_yyyyMMddhhmm.BAK
    

    Dabei gilt:

    • dbname ist der Name der Datenbank, die gesichert werden soll.

    • yyyyMMddhhmm ist der Zeitpunkt des Sicherungsvorgangs, wobei yyyy = Jahr, MM = Monat, dd = Tag, hh = Stunde und mm = Minute.

    Der Dateiname für eine Transaktionssicherung wird automatisch in einem ähnlichen Format generiert:

    dbname_log_yyyymmddhhmm.BAK
    

    Wenn Sie den -BkUpDB-Parameter verwenden, müssen Sie mithilfe des -BkUpMedia-Parameters auch das Medium angeben.

  • -BkUpMedia
    Gibt den Medientyp der Sicherung an, entweder DISK oder TAPE.

  • DISK
    Gibt an, dass das Sicherungsmedium ein Datenträger ist.

  • -DelBkUps< time_period >
    Gibt bei Datenträgersicherungen an, dass jede Sicherungsdatei im Sicherungsverzeichnis gelöscht werden soll, wenn die Zeitspanne nach Erstellen der Sicherungsdatei den Wert für <time_period> überschreitet.

  • -CrBkSubDir
    Gibt bei Datenträgersicherungen an, dass ein Unterverzeichnis im Verzeichnis [backup_path] oder im Standardsicherungsverzeichnis erstellt werden soll, wenn -UseDefDir ebenfalls angegeben ist. Der Name des Unterverzeichnisses wird anhand des Datenbanknamens generiert, der mit -D angegeben wurde. -CrBkSubDir bietet ein einfaches Verfahren, um alle Sicherungen für verschiedene Datenbanken in unterschiedlichen Unterverzeichnissen abzulegen, ohne den backup_path-Parameter ändern zu müssen.

  • -UseDefDir
    Gibt für Datenträgersicherungen an, dass die Sicherungsdatei im Standardsicherungsverzeichnis erstellt werden soll. UseDefDir setzt backup_path außer Kraft, wenn beide Parameter angegeben werden. Bei einer Standardinstallation von MicrosoftSQL Server ist C:\Programme\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup das Standardsicherungsverzeichnis.

  • BAND
    Gibt an, dass das Sicherungsmedium ein Band ist.

  • -BkUpOnlyIfClean
    Gibt an, dass eine Sicherung nur dann erfolgt, wenn bei den mit -Ck angegebenen Überprüfungen keine Probleme bei den Daten gefunden wurden. Wartungsaktionen werden in derselben Reihenfolge ausgeführt, in der sie an der Eingabeaufforderung angezeigt werden. Geben Sie die Parameter -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl oder -CkCat vor dem oder den -BkUpDB/-BkUpLog-Parametern an, wenn Sie auch -BkUpOnlyIfClean angeben möchten. Andernfalls erfolgt die Sicherung unabhängig davon, ob bei der Überprüfung Probleme gemeldet werden.

  • -VrfyBackup
    Gibt an, dass für die Sicherung RESTORE VERIFYONLY ausgeführt wird, sobald die Sicherung abgeschlossen ist.

  • number[minutes| hours| day| weeks| months]
    Gibt die Zeitspanne an, mit der bestimmt wird, ob eine Berichts- oder Sicherungsdatei so alt ist, dass sie gelöscht werden kann. number entspricht einer ganzen Zahl, auf die (ohne Leerzeichen) eine Zeiteinheit folgt. Gültige Beispiele:

    • 12weeks

    • 3months

    • 15days

    Wird nur number angegeben, wird weeks als Standardzeitspanne verwendet.

Hinweise

Das Dienstprogramm sqlmaint führt Wartungsvorgänge für eine oder mehrere Datenbanken aus. Wenn -D angegeben wird, werden die Vorgänge, die mit den verbleibenden Schaltern angegeben werden, nur für die angegebene Datenbank ausgeführt. Wenn -PlanName oder -PlanID angegeben wird, ruft sqlmaint aus dem angegebenen Wartungsplan nur die Liste der Datenbanken im Plan ab. Alle in den verbleibenden sqlmaint-Parametern angegebenen Vorgänge werden für jede Datenbank in der Liste ausgeführt, die aus dem Plan abgerufen wurde. Das Dienstprogramm sqlmaint wendet keine der im Plan selbst definierten Wartungsaktivitäten an.

Das Dienstprogramm sqlmaint gibt 0 bei erfolgreicher Ausführung und 1 bei Auftreten eines Fehlers zurück. Ein Fehler wird in folgenden Fällen gemeldet:

  • Eine Wartungsaktion ist fehlgeschlagen.

  • Überprüfungen mithilfe von -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl oder -CkCat ermitteln Probleme bei den Daten.

  • Ein allgemeiner Fehler ist aufgetreten.

Berechtigungen

Das Dienstprogramm sqlmaint kann von jedem Windows-Benutzer ausgeführt werden, der über die Berechtigung Lesen und Ausführen für die Datei sqlmaint.exe verfügt, die standardmäßig im Ordner x:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER1\MSSQL\Binn gespeichert ist. Darüber hinaus muss der mit -login_ID angegebene SQL Server-Anmeldename über die SQL Server-Berechtigungen verfügen, die zum Ausführen der jeweiligen Aktion erforderlich sind. Wird bei der Verbindung zu SQL Server die Windows-Authentifizierung verwendet, muss der dem authentifizierten Windows-Benutzer zugeordnete SQL Server-Anmeldename über die SQL Server-Berechtigungen zum Ausführen der jeweiligen Aktion verfügen.

Beispielsweise erfordert die Verwendung von -BkUpDB die Berechtigung zum Ausführen der BACKUP-Anweisung. Und die Verwendung des -UpdOptiStats-Arguments erfordert die Berechtigung zum Ausführen der UPDATE STATISTICS-Anweisung. Weitere Informationen finden Sie in den Abschnitten zu Berechtigungen in den entsprechenden Themen der Onlinedokumentation.

Beispiele

A. Ausführen von DBCC-Überprüfungen für die AdventureWorks-Datenbank

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

B. Aktualisieren von Statistiken in allen Datenbanken in einem Plan mithilfe einer Stichprobe von 15 %. Weiterhin: Verkleinern aller Datenbanken, die eine Größe von 110 MB erreicht haben, sodass sie anschließend nur noch 10 % freien Speicherplatz aufweisen

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

C. Sichern aller Datenbanken in einem Plan in ihren jeweiligen Unterverzeichnissen im Standardverzeichnis x:\Programme\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup. Weiterhin: Löschen aller Sicherungen, die älter als 2 Wochen sind

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

D. Sichern der AdventureWorks-Datenbank im Standardverzeichnis x:\Programme\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup.

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir