Freigeben über


sqlmaint (Hilfsprogramm)

Gilt für: SQL Server

Dassqlmaint -Hilfsprogramm führt eine Reihe angegebener Wartungsvorgänge 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. Bei allen Datenbankwartungsaktivitäten wird ein Bericht generiert, der an eine festgelegte Textdatei, HTML-Datei oder ein festgelegtes E-Mail-Konto gesendet werden kann. sqlmaint führt Datenbankwartungspläne aus, die in früheren Versionen von SQL Server erstellt wurden. Verwenden Sie das Hilfsprogramm dtexec , um Wartungspläne vonSQL Server über die Eingabeaufforderung auszuführen.

Wichtig

Diese Funktion wird in einer zukünftigen Version von SQL Serverentfernt. Nutzen Sie diese Funktionen bei Neuentwicklungen nicht mehr, und planen Sie die Änderung von Anwendungen, die diese Funktion zurzeit verwenden. Verwenden Sie stattdessen die Wartungsplanfunktion 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 Servernameein Leerzeichen stehen.

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

-S server_name[ \instance_name]
Gibt die Zielinstanz von Microsoft SQL Server an. Geben Sie server_name an, um eine Verbindung mit der Standardinstanz der SQL Server Datenbank-Engine auf diesem Server herzustellen. Geben Sie server_name\instance_name an, um eine Verbindung mit der benannten Instanz der Datenbank-Engine auf diesem Server herzustellen. Wenn kein Server angegeben wird, stellt sqlmaint eine Verbindung mit der Standardinstanz von Datenbank-Engine auf dem lokalen Computer her.

-U login_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 die Anmelde-ID Sonderzeichen enthält, muss das Argument in doppelte Anführungszeichen (") eingeschlossen werden. Andernfalls sind die doppelten Anführungszeichen optional.

Wichtig

Verwenden Sie nach Möglichkeit die Windows-Authentifizierung.

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

Wichtig

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

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

-PlanName name
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.

-PlanID guid
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.

-Rpt text_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.

Wenn Sie das Dienstprogramm am 1. Dezember 1996 um 10:23 Uhr ausführen und dies der Wert von text_file ist:

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

Die generierte Datei hat dann folgenden Namen:

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

Für extdatei ist der vollständige UNC-Dateiname (Universal Naming Convention) erforderlich, wenn sqlmaint auf einen Remoteserver zugreift.

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

-HtmlRpt html_file
Gibt den vollständigen Pfad und Namen der Datei an, in der der HTML-Bericht generiert werden soll. sqlmaint generiert den Dateinamen, indem eine Zeichenfolge im Format _yyyyMMddhhmm an den Dateinamen angefügt wird, ebenso wie beim -Rpt -Parameter.

Für HTML-Datei ist der vollständige UNC-Dateiname erforderlich, wenn sqlmaint auf einen Remoteserver zugreift.

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

-RmUnusedSpace threshold_percent free_percent
Gibt an, dass nicht verwendeter Speicherplatz aus der mit -Dangegebenen Datenbank entfernt wird. Diese Option ist nur für Datenbanken nützlich, die für das automatische Wachstum definiert wurden. Schwellenwert_Prozent gibt die Größe in Megabytes an, die die Datenbank erreichen muss, bevor sqlmaint versucht, nicht verwendeten Datenspeicherplatz zu entfernen. Wenn die Datenbank kleiner als Schwellenwert_Prozentist, wird keine Aktion ausgeführt. Prozent_frei gibt an, wie viel nicht verwendeter Speicherplatz in der Datenbank verbleiben muss. Die Angabe erfolgt als Prozentsatz 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 Prozent_frei , 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 Prozent_frei 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 Prozent_frei 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 -Dangegeben 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 Textdatei angegeben wurde.

-CkAl | -CkAlNoIdx
Gibt an, dass eine DBCC CHECKALLOC-Anweisung mit der Option NOINDEX in der Datenbank ausgeführt werden soll, die mit -Dangegeben 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).

-UpdOptiStats sample_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 Tabellen berechnete Spalten enthalten, müssen Sie auch das -SupportedComputedColumn -Argument angeben, wenn Sie -UpdOptiStatsverwenden.

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

-RebldIdx free_space
Gibt an, dass die Indizes der Tabellen in der Zieldatenbank neu erstellt werden sollen, wobei der Speicher_frei -Prozentwert als Umkehrwert des Füllfaktors verwendet wird. Wenn der Speicher_frei -Prozentsatz z.B. 30 beträgt, dann ist der verwendete Füllfaktor 70. Wenn ein Speicher_frei -Prozentwert von 100 angegeben wird, 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 -RebldIdxverwenden.

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

-WriteHistory
Gibt an, dass für jede von sqlmaintdurchgefü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 ist, 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.

Sicherungspfad gibt das Verzeichnis für die Sicherung an. Sicherungspfad wird nicht benötigt, wenn auch -UseDefDir angegeben wird, und wird von -UseDefDir überschrieben, wenn beide 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  
  

Hierbei gilt:

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

  • yyyyMMddhhmm ist die Uhrzeit des Sicherungsvorgangs ( 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<Zeitraum>
Gibt bei Datenträgersicherungen an, dass jede Sicherungsdatei im Sicherungsverzeichnis gelöscht werden soll, wenn das Zeitintervall nach Erstellen der Sicherungsdatei den Wert für <time_period> überschreitet.

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

-UseDefDir
Gibt für Datenträgersicherungen an, dass die Sicherungsdatei im Standardsicherungsverzeichnis erstellt werden soll. UseDefDir überschreibt Sicherungspfad , wenn beide Parameter angegeben werden. Bei einer Standardeinrichtung von befindet sich das Standardsicherungsverzeichnis unter dem Pfad C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup.

TAPE
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, -CkTxtAloder -CkCat vor den Parametern -BkUpDB/-BkUpLog an, wenn Sie auch -BkUpOnlyIfCleanangeben möchten. Andernfalls erfolgt die Sicherung unabhängig davon, ob bei der Überprüfung Probleme gemeldet werden oder nicht.

-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 das Zeitintervall an, das verwendet wurde, um zu bestimmen, ob ein Bericht oder eine Sicherungsdatei alt genug ist, um gelöscht zu werden. number ist eine ganze Zahl, gefolgt von einer Zeiteinheit (ohne Leerzeichen). Gültige Beispiele:

  • 12weeks

  • 3months

  • 15days

Wird nur number angegeben, wird weeksals standardmäßiges Datumsteil verwendet.

Bemerkungen

Das Hilfsprogramm 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 Hilfsprogramm sqlmaint wendet keine der im Plan selbst definierten Wartungsaktivitäten an.

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

  • Eine Wartungsaktion ist fehlgeschlagen.

  • Die Überprüfungen -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAloder -CkCat finden Probleme mit den Daten.

  • Ein allgemeiner Fehler ist aufgetreten.

Berechtigungen

Das Hilfsprogramm sqlmaint kann von jedem Windows-Benutzer ausgeführt werden, der über die Berechtigung Lesen und Ausführen für die Datei sqlmaint.exeverfügt, die standardmäßig im Ordner x:\Program Files\Microsoft SQL Server\MSSQL13.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. Die Verwendung des -UpdOptiStats -Arguments erfordert zudem 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 eine Datenbank

sqlmaint -S MyServer -D AdventureWorks2022 -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 ihre jeweiligen Unterverzeichnissen im Standardverzeichnis „x:\Programme\Microsoft SQL Server\MSSQL13.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 einer Datenbank in das Standardverzeichnis „x:\Programme\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Backup“.

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir  

Weitere Informationen

BACKUP (Transact-SQL)
UPDATE STATISTICS (Transact-SQL)