Teilen über


Sqlmaint-Hilfsprogramm

Gilt für:SQL Server

Das sqlmaint-Hilfsprogramm führt eine bestimmte Reihe von Wartungsvorgängen für eine oder mehrere Datenbanken aus. Verwenden Sie sqlmaint , um Überprüfungen auszuführen DBCC , eine Datenbank und deren Transaktionsprotokoll zu sichern, Statistiken zu aktualisieren und Indizes neu zu erstellen. Alle Datenbankwartungsaktivitäten generieren einen Bericht, den Sie an eine bestimmte Textdatei, HTML-Datei oder ein E-Mail-Konto senden können. Sqlmaint führt Datenbankwartungspläne aus, die in früheren Versionen von SQL Server erstellt wurden. Verwenden Sie das Hilfsprogramm dtexec, um Wartungspläne von SQL 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 SQL Server-Wartungsplanfunktion. 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

Trennen Sie die Parameter und deren Werte durch ein Leerzeichen. Fügen Sie z. B. ein Leerzeichen zwischen -S und server_name ein.

-?

Gibt das Syntaxdiagramm für sqlmaint zurück. Verwenden Sie diesen Parameter eigenständig.

-S server_name[\instance_name]

Gibt die Zielinstanz von SQL Server an. Geben Sie <server_name> an, dass eine Verbindung mit der Standardinstanz des SQL Server-Datenbankmoduls auf diesem Server hergestellt werden soll. Spezifizieren Sie <server_name>\<instance_name> für die Verbindung zu einer benannten Instanz des Datenbankmoduls auf diesem Server. Wenn Sie keinen Server angeben, stellt sqlmaint eine Verbindung mit der Standardinstanz der SQL Server-Datenbank-Engine auf dem lokalen Computer her.

-U login_ID

Gibt das Konto an, das beim Herstellen einer Verbindung mit dem Server verwendet werden soll. Wenn Sie diesen Parameter nicht angeben, versucht sqlmaint , die Windows-Authentifizierung zu verwenden. Wenn login_ID Sonderzeichen enthält, schließen Sie sie in doppelte Anführungszeichen () ein". Andernfalls sind die doppelten Anführungszeichen optional.

Wichtig

Verwenden Sie nach Möglichkeit die Windows-Authentifizierung.

- P-Kennwort

Gibt das Kennwort für die login_ID an. Dieser Parameter ist nur gültig, wenn Sie auch den -U Parameter angeben. Wenn das Kennwort Sonderzeichen enthält, schließen Sie es in doppelte Anführungszeichen ein; andernfalls sind die doppelten Anführungszeichen optional.

Wichtig

Das Kennwort ist 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 database_name Sonderzeichen enthält, schließen Sie sie in doppelte Anführungszeichen ein; andernfalls sind die doppelten Anführungszeichen optional.

-PlanName Name

Gibt den Namen eines Datenbank-Wartungsplans an, der mithilfe des Datenbank-Wartungsplanungs-Assistenten definiert wurde. Die einzige Information, die sqlmaint aus dem Plan verwendet, ist 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. Die einzigen Informationen , die sqlmaint verwendet, ist 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. Dieser Wert muss mit einem plan_id Wert übereinstimmen in msdb.dbo.sysdbmaintplans.

-Rpt text_file

Gibt den vollständigen Pfad und Dateinamen für den generierten Bericht an. Der Bericht wird auch auf dem Bildschirm generiert. Der Bericht verwaltet Versionsinformationen, indem er das Datum zum Dateinamen hinzufügt. Das Datum wird wie folgt generiert, am Ende des Dateinamens, aber vor dem Zeitraum im Formular _<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.

- 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 ein HTML-Bericht generiert wird. sqlmaint generiert den Dateinamen, indem eine Zeichenfolge des Formats _<yyyyMMddhhmm> an den Dateinamen angefügt wird, genau wie für den -Rpt Parameter.

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

-DelHtmlRpt <time_period>

Löscht jeden HTML-Bericht im Berichtsverzeichnis, wenn das Zeitintervall nach der Erstellung der Berichtsdatei time_period überschreitet. -DelHtmlRpt Sucht nach Dateien, deren Name dem Muster entspricht, das aus dem parameter html_file generiert wurde. Wenn html_file ist C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint.htm, -DelHtmlRpt löscht sqlmaint alle Dateien, deren Namen dem Muster C:\Program Files\Microsoft SQL Server\MSSQL\Backup\AdventureWorks2022_maint*.htm entsprechen und älter als die angegebene time_period sind.

-RmUnusedSpace threshold_percent free_percent

Gibt an, dass nicht verwendeter Speicherplatz aus der in -D angegebenen Datenbank gelöscht 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. Eine Datenbank wird nicht erweitert, wenn sie kleiner als free_percent und die Datenmenge in der Datenbank ist. Wenn beispielsweise eine 108-MB-Datenbank 100 MB Daten enthält und 10 für free_percent angegeben wird, wird die Datenbank nicht auf 110 MB erweitert, sondern bleibt bei 108 MB.

-CkDB | -CkDBNoIdx

Gibt an, dass die DBCC CHECKDB-Anweisung oder die DBCC CHECKDB-Anweisung mit der NOINDEX-Option in der Datenbank ausgeführt wird, die in -D.

sqlmaint schreibt eine Warnung in text_file , wenn die Datenbank beim Ausführen verwendet wird.

-CkAl | -CkAlNoIdx

Gibt an, dass eine DBCC CHECKALLOC-Anweisung mit der Option NOINDEX in der angegebenen Datenbank -D ausgeführt wird.

-CkCat

Gibt an, dass eine DBCC CHECKCATALOG-Anweisung in der Datenbank ausgeführt wird, die in -D angegeben ist.

-UpdOptiStats sample_percent

Gibt an, dass die folgende Anweisung für jede Tabelle in der Datenbank ausgeführt wird:

UPDATE STATISTICS table WITH SAMPLE sample_percent PERCENT;

Wenn die Tabellen berechnete Spalten enthalten, müssen Sie auch das -SupportedComputedColumn-Argument angeben, wenn Sie -UpdOptiStats verwenden.

Weitere Informationen finden Sie unter AKTUALISIEREN VON STATISTIKEN (UPDATE STATISTICS).

-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 free_space Prozentwert von 100 angegeben wird, werden die Indizes mit dem ursprünglichen Füllfaktorwert neu erstellt.

Wenn sich die Indizes auf berechneten Spalten befinden, müssen Sie auch das -SupportComputedColumn Argument angeben, wenn Sie -RebldIdx verwenden.

-Unterstützung für berechnete Spalte

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

-WriteHistory

Gibt an, dass für jede Wartungsaktion, die von sqlmaint ausgeführt wird, ein Eintrag in msdb.dbo.sysdbmaintplan_history vorgenommen wird. Wenn -PlanName oder -PlanID angegeben wird, verwenden die Einträge sysdbmaintplan_history die ID des angegebenen Plans. Wenn -D angegeben ist, werden die Einträge in sysdbmaintplan_history mit Nullen für die Plan-ID erstellt.

-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. backup_path ist nicht erforderlich, wenn -UseDefDir auch angegeben wird, und -UseDefDir überschreibt backup_path , wenn beide angegeben werden. Die Sicherung kann in einem Verzeichnis oder einer Bandgeräteadresse (z. B \\.\TAPE0. ) platziert werden. Der Dateiname für eine Datenbanksicherung wird automatisch folgendermaßen generiert:

dbname_db_yyyyMMddhhmm.BAK

Ort:

  • <dbname> ist der Name der Datenbank, die gesichert wird.
  • <yyyyMMddhhmm> ist die Zeit des Sicherungsvorgangs mit <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 auch die Medien mithilfe des -BkUpMedia Parameters 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 für Datenträgersicherungen an, dass alle Sicherungsdateien im Sicherungsverzeichnis gelöscht werden, wenn das Zeitintervall nach der Erstellung der Sicherung den time_period überschreitet.

-CrBkSubDir

Gibt für Datenträgersicherungen an, dass ein Unterverzeichnis im backup_path oder im Standardsicherungsverzeichnis erstellt werden soll, wenn -UseDefDir ebenfalls angegeben ist. Der Name des Unterverzeichnisses wird aus dem in -Dder Datei angegebenen Datenbanknamen generiert. -CrBkSubDir bietet eine einfache Möglichkeit, alle Sicherungen für verschiedene Datenbanken in separate Unterverzeichnisse zu platzieren, ohne den parameter backup_path ä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 angegeben sind. Bei einem standardmäßigen SQL Server-Setup ist C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backupdas Standardsicherungsverzeichnis .

Magnetband

Gibt an, dass das Sicherungsmedium ein Band ist.

-BkUpOnlyIfClean

Gibt an, dass die Sicherung nur auftritt, wenn die angegebenen -Ck Prüfungen keine Probleme mit den Daten finden. 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 -BkUpDB- oder -BkUpLog-Parameter an, wenn Sie auch -BkUpOnlyIfClean angeben möchten. Wenn Sie diese Parameter nicht angeben, wird die Sicherung durchgeführt, unabhängig davon, ob die Prüfung Probleme meldet.

-VrfyBackup

Gibt an, dass RESTORE VERIFYONLY bei Abschluss der Sicherung im Backup-System ausgeführt wird.

Anzahl [ Minuten | Stunden| Tag| Wochen | Monate ]

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

Wenn Sie nur eine Zahl angeben, lautet weeksder Standarddatumsteil .

Bemerkungen

Das Hilfsprogramm sqlmaint führt Wartungsvorgänge für eine oder mehrere Datenbanken aus. Wenn Sie angeben -D, führt das Hilfsprogramm die in den verbleibenden Schaltern angegebenen Vorgänge nur in der angegebenen Datenbank aus. Wenn Sie -PlanName oder -PlanID angeben, sind die einzigen Informationen, die sqlmaint aus dem angegebenen Wartungsplan abruft, die Liste der Datenbanken im Plan. 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 sqlmaint-Hilfsprogramm wendet keine der wartungsaktivitäten an, die im Plan selbst definiert sind.

Das Hilfsprogramm sqlmaint gibt bei erfolgreicher Ausführung 0 und bei Auftreten eines Fehlers 1 zurück. Fehler werden gemeldet, wenn:

  • Eine der Wartungsaktionen schlägt fehl.

  • Die -CkDB, -CkDBNoIdx, -CkAl, -CkAlNoIdx, -CkTxtAl, oder -CkCat überprüfen Probleme mit den Daten.

  • Ein allgemeiner Fehler ist aufgetreten.

Berechtigungen

Jeder Windows-Benutzer mit Lese- und Ausführungsberechtigungsqlmaint.exe kann das sqlmaint-Hilfsprogramm ausführen. Standardmäßig wird sqlmaint.exe im <X>:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER1\MSSQL\Binn Ordner gespeichert. Darüber hinaus muss die angegebene -login_ID SQL Server-Anmeldung über die SQL Server-Berechtigungen verfügen, die zum Ausführen der angegebenen Aktion erforderlich sind. Wenn Sie die Windows-Authentifizierung zum Herstellen einer Verbindung mit SQL Server verwenden, muss die SQL Server-Anmeldung, die dem authentifizierten Windows-Benutzer zugeordnet ist, über die SQL Server-Berechtigungen verfügen, die zum Ausführen der angegebenen Aktion erforderlich sind.

Zum Beispiel erfordert die Verwendung der -BkUpDB 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 unter Berechtigungen (Datenbankmodul).

Beispiele

Ein. Durchführen von DBCC-Prüfungen für eine Datenbank

In diesem Beispiel werden Überprüfungen für eine Datenbank ausgeführt DBCC .

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

B. Statistikaktualisierung

In diesem Beispiel werden Statistiken mithilfe einer 15%-Stichprobe in allen Datenbanken in einem Schema aktualisiert. Jede Datenbank, die 110 MB erreicht, wird auf nur 10% freien Speicherplatz verkrumpft.

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

C. Sichern aller Datenbanken

In diesem Beispiel werden alle Datenbanken in einem Plan in ihren einzelnen Unterverzeichnissen mithilfe des Standardverzeichnisses <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup gesichert. Außerdem werden alle Sicherungen gelöscht, die älter als zwei Wochen sind.

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

D. Sichern einer Datenbank

In diesem Beispiel wird eine einzelne Datenbank im Standardverzeichnis <X>:\Program Files\Microsoft SQL Server\MSSQLl13.MSSQLSERVER\MSSQL\Backup gesichert.

sqlmaint -S MyServer -BkUpDB -BkUpMedia DISK -UseDefDir