Ein vollständiger Wartungsplan für SQL Server 2008
Datenbanken optimieren
Dieser Abschnitt ist darauf ausgerichtet, Datenbanken optimiert zu halten. In diesem Beispiel werden wir den Code einrichten, um folgendes zu machen (siehe ein grobes Diagramm, wie die Server verbunden sind);
- Backup-Datenbank vom Live-Server zu einem freigegebenen Backup-Ordner
- Re-Index-Datenbank
- Töte alle Verbindungen und stelle die Datenbank auf dem Berichtsserver wieder her.
- Linked Servers wird in einem separaten Artikel bald sein
- Log-Versand wird in einem separaten Artikel bald sein
Wenn Sie es mit dem Server umgehen, müssen Sie das Konto zulassen, das von SQL Server aus dem Zugriff auf das Zielserver-Dateisystem ausgeführt wird.
Alle SQL-Code wird aus einer Dienstprogramm-Datenbank ausgeführt und Schema auf "maint" gesetzt
Es gibt eine Vielzahl von anderen Artikeln, die wir unten geschrieben haben, die für Sie interessant sein können.
Vollständiger Wartungsplan
Jetzt können wir alle diese separaten Code-Segmente mit einer anderen Prozedur verwalten, die sie in der richtigen Reihenfolge anrufen wird, wird dies in den Live-Server gestellt werden. Der Code läuft wie folgt:
- Trainiere die Zeit
- Wenn es abends re-index die Datenbank ist
- Führen Sie eine Sicherung der Datenbank aus (fügen Sie hinzu, wo Sie benötigen)
- Wenn es abends die anderen Datenbanken wieder hinzufügt (füge wo du brauchst)
- Töten Sie Verbindungen und Wiederherstellungsdatenbank (addieren Sie, wo Sie benötigen)
Dieser Code wurde erprobt und lief für Perioden von Monaten ohne Probleme.
Bitte beachten Sie, dass das Schrumpfen von Protokolldateien und Datenbankdateien auf ein Minimum reduziert werden muss, indem Sie eine Sicherung durchführen, die Sie das Protokoll leeren (obwohl es den verwendeten Speicherplatz beibehalten wird). Wenn es nötig ist, wenn es außerhalb der normalen Arbeitszeiten laufen sollte.
SQL Code
GO
CREATE PROC [maint].MaintenancePlan AS BEGIN
DECLARE @BackupType VARCHAR(1)='E'
IF DATEPART(HOUR,GETDATE()) BETWEEN 5 AND 21 BEGIN
SET @BackupType='D'
END
--EXEC ('USE TempDb; DBCC SHRINKFILE(templog, 0)');--This is only needed when space is at a premium!
--Re-index Live
IF @BackupType='E' EXEC [maint].DatabaseReIndex 'dbname'
--Create Backup
BACKUP DATABASE TO DISK=N'{backuplocation}{dbname}.bak'
WITH NOFORMAT, INIT, NAME =N'{dbname}', SKIP, NOREWIND, NOUNLOAD, STATS= 10;
--EXEC ('USE ; DBCC SHRINKFILE(_log, 0)');--This is only needed when space is at a premium!
--Backup Other Files at Night
IF @BackupType='E' BEGIN
EXEC [maint].DatabaseReIndex 'dbname'
--Backup Others
BACKUP DATABASE [databasename] TO DISK=N'{backuplocation}{dbname2}.bak'
WITH FORMAT,INIT, NAME =N'{dbname2}',SKIP, NOREWIND, NOUNLOAD, STATS= 10
END
--Restore Backups on other server
EXEC [server].[utilities].[maint].KillConnections 'dbname';
IF @BackupType='E' BEGIN
EXEC [server].[utilities].[maint].KillConnections 'dbname2';
GO
Sicherungsdatenbank
Um den Code zu sichern, um Ihre Datenbank zu sichern, ist es am einfachsten, den Code von SSMS zu schreiben.
Folgen Sie dem Prozess, den Sie normalerweise verwenden würden, und wählen Sie dann "Skriptaktion zu neuem Abfragefenster" aus.
Kopiere diesen Code in den Wartungsplan.
Re-Index-Datenbank
Als nächstes können wir einen Code hinzufügen, um unsere Datenbank neu zu indizieren, dies ist wieder eine freigegebene gespeicherte Prozedur, wo man nur dem System den Namen mitteilen muss.
Um Code-Duplizierung zu vermeiden, können Sie darüber lesen auf dem Link unten.
Kill-Verbindungen
Wenn Sie eine Wiederherstellung in der Datenbank durchführen, können Sie nur eine Verbindung dazu haben (der Vorgang, der die Wiederherstellung durchführt), daher können wir eine gespeicherte Prozedur erstellen, um alle Verbindungen außer dem aktuellen Prozess zu schließen. Wir haben hierzu einen eigenen Artikel erstellt.
Datenbank wiederherstellen
Dieser Code kann auch aus SQL Server Management Studio skriptiert werden. Wenn Sie diesen Code zu einer gespeicherten Prozedur hinzufügen, können Sie ihn von anderen Prozessen und sogar anderen Servern wirklich leicht anrufen. Wir haben diese in einen separaten Artikel verschoben, um mehr Optionen zu decken.