Neben der Erstellung von Backups stellt SQL Server eine Vielzahl von Aufgaben und Funktionen zur Verfügung, die sowohl die Performance als auch die Zuverlässigkeit Ihrer Datenbanken verbessern können. Wir haben es Ihnen bereits gezeigt So sichern Sie SQL Server-Datenbanken mit einem einfachen Befehlszeilenskript Daher stellen wir auf die gleiche Weise ein Skript bereit, mit dem Sie gängige Wartungsaufgaben einfach ausführen können.
Komprimieren/Verkleinern einer Datenbank [/Compact]
Es gibt mehrere Faktoren, die zum physischen Speicherplatz beitragen, den eine SQL Server-Datenbank verwendet. Nur um ein paar zu nennen:
- Im Laufe der Zeit, wenn Datensätze hinzugefügt, gelöscht und aktualisiert werden, wächst und verkleinert SQL ständig Tabellen und generiert temporäre Datenstrukturen, um Abfragemanipulationen durchzuführen. Um den Anforderungen an den Festplattenspeicher gerecht zu werden, erhöht SQL Server die Größe der Datenbank (normalerweise um 10 %) nach Bedarf, damit sich die Größe der Datenbankdatei nicht ständig ändert. Dies ist zwar ideal für die Leistung, kann jedoch zu einer Unterbrechung des verwendeten Speicherplatzes führen, denn wenn Sie beispielsweise eine sehr große Anzahl von Datensätzen hinzufügen, die dazu führen, dass die Datenbank wächst, und diese Datensätze anschließend löschen, wird SQL Server dies nicht automatisch zurückfordern Festplattenplatz.
- Wenn Sie den vollständigen Wiederherstellungsmodus für Ihre Datenbanken verwenden, kann die Transaktionsprotokolldatei (LDF) ziemlich groß werden, insbesondere bei Datenbanken mit vielen Aktualisierungen.
Durch das Komprimieren (oder Verkleinern) der Datenbank wird ungenutzter Speicherplatz zurückgewonnen. Bei kleinen Datenbanken (200 MB oder weniger) ist dies normalerweise nicht viel, aber bei großen Datenbanken (1 GB oder mehr) kann der zurückgewonnene Speicherplatz erheblich sein.
Neuindizierung einer Datenbank [/Reindex]
Ähnlich wie das ständige Erstellen, Bearbeiten und Löschen von Dateien zu einer Festplattenfragmentierung führen kann, kann das Einfügen, Aktualisieren und Löschen von Datensätzen in einer Datenbank zu einer Tabellenfragmentierung führen. Die praktischen Ergebnisse sind insofern die gleichen, als Lese- und Schreiboperationen einen Leistungseinbruch erleiden. Obwohl dies keine perfekte Analogie ist, defragmentiert die Neuindizierung der Tabellen in einer Datenbank sie im Wesentlichen. In einigen Fällen kann dies die Geschwindigkeit des Datenabrufs erheblich erhöhen.
Aufgrund der Funktionsweise von SQL Server müssen Tabellen einzeln neu indiziert werden. Bei Datenbanken mit einer großen Anzahl von Tabellen kann dies manuell sehr mühsam sein, aber unser Skript trifft jede Tabelle in der jeweiligen Datenbank und baut alle Indizes neu auf.
Integrität überprüfen [/Verify]
Damit eine Datenbank sowohl funktionsfähig bleibt als auch genaue Ergebnisse liefert, müssen zahlreiche Integritätselemente vorhanden sein. Zum Glück treten physische und/oder logische Integritätsprobleme nicht sehr häufig auf, aber es empfiehlt sich, gelegentlich den Integritätsüberprüfungsprozess für Ihre Datenbanken auszuführen und die Ergebnisse zu überprüfen.
Wenn der Verifizierungsprozess durch unser Skript ausgeführt wird, werden nur Fehler gemeldet, also sind keine Nachrichten eine gute Nachricht.
Verwenden des Skripts
Das SQLMaint-Batchskript ist mit SQL 2005 und höher kompatibel und muss auf einem Computer ausgeführt werden, auf dem das SQLCMD-Tool installiert ist (als Teil der SQL Server-Installation installiert). Es wird empfohlen, dieses Skript an einem Ort abzulegen, der in Ihrer Windows PATH-Variable festgelegt ist (zB C:Windows), damit es wie jede andere Anwendung einfach von der Befehlszeile aus aufgerufen werden kann.
Um die Hilfeinformationen anzuzeigen, geben Sie einfach Folgendes ein:
SQLMaint /?
Beispiele
So führen Sie eine Komprimierung und anschließend eine Überprüfung der Datenbank „MyDB“ über eine vertrauenswürdige Verbindung aus:
SQLMaint MyDB /Compact /Verify
Um eine Neuindizierung durchzuführen und dann auf „MyDB“ auf der benannten Instanz „Special“ mit dem „sa“-Benutzer mit dem Passwort „123456“ zu komprimieren:
SQLMaint MyDB /S:.Special /U:sa /P:123456 /Reindex /Compact
Verwenden von innerhalb eines Batch-Skripts
Während das SQLMaint-Batch-Skript wie eine Anwendung von der Befehlszeile aus verwendet werden kann, muss ihm bei Verwendung in einem anderen Batch-Skript das Schlüsselwort CALL vorangestellt werden.
Dieses Skript führt beispielsweise alle Wartungsaufgaben für jede Nicht-Systemdatenbank in einer standardmäßigen SQL Server-Installation mit vertrauenswürdiger Authentifizierung aus:
@ECHO AUS
SETLOCAL EnableExtensions
SET DBList=”%TEMP%DBList.txt”
SqlCmd -E -h-1 -w 300 -Q “SET NoCount ON; SELECT Name FROM master.dbo.sysDatabases WHERE Name Not IN (‘master’,’model’,’msdb’,’tempdb’)” > %DBList%
FOR /F „usebackq Token=1“ %%i IN (%DBlist%) DO (
CALL SQLMaint „%%i“ /Compact /Reindex /Verify
ECHO ++++++++++
)
WENN EXIST %DBList% DEL /F /Q %DBList%
ENDLOKAL
Laden Sie das SQLMaint-Batch-Skript von SysadminGeek.com herunter