Planen und Automatisieren von Sicherungen der SQL Server-Datenbanken in SQL Server Express

Gilt für: Microsoft SQL Server

Zusammenfassung


SQL Server Express-Editionen bieten keine Möglichkeit, Aufträge und Wartungspläne planen, da die SQL Server-Agent-Komponente nicht in diesen Editionen enthalten ist. Daher müssen Sie einen anderen Ansatz zum Sichern der Datenbanken, wenn Sie diese Versionen verwenden.   

Derzeit können Benutzer von SQL Server Express ihre Datenbanken sichern mithilfe einer der folgenden Methoden:

  • Verwenden Sie eine Transact-SQL-Skript, die der BACKUP DATABASE-Produktfamilie Befehle verwendet. Weitere Informationen finden Sie auf der folgenden MSDN-Website: Sicherung (Transact-SQL)

Dieser Artikel beschreibt wie Sie ein Transact-SQL-Skript mit Windows Task Scheduler um Backups von SQL Server Express-Datenbanken regelmäßig zu automatisieren.

Weitere Informationen


Sie müssen diese drei Schritte zum Sichern Ihrer SQL Server-Datenbanken mithilfe von Windows-Taskplaner:

Schritt A: mit SQL Server Management Studio Express oder Sqlcmd die folgende gespeicherte Prozedur in der master-Datenbank erstellen:

Copyright © Microsoft Corporation.  Alle Rechte vorbehalten.

Dieser Kodex gemäß der

/ / Microsoft Public License (MS-PL http://opensource.org/licenses/ms-pl.html.)

MIT [Master] 

GO 

/ *** Objekt:  StoredProcedure [Dbo]. [Sp_BackupDatabases] *** / 

SET ANSI_NULLS ON 

GO 

SET QUOTED_IDENTIFIER ON 

GO 

 

-- ============================================= 

-Autor: Microsoft 

– Erstellt am: 2010-02-06

-Beschreibung: Sichern von Datenbanken für SQLExpress

--Parameter1: Datenbankname 

--Parameter2: BackupType F = vollständig, D = differenziell L = Protokoll

-3. Parameter: Speicherort sichern

-- =============================================

 

CREATE PROCEDURE [Dbo]. [Sp_BackupDatabases]  

            @databaseName Sysname = Null

            @backupType CHAR(1),

            @backupLocation nvarchar(200) 

AS 

 

       SET NOCOUNT AKTIVIEREN; 

           

            @DBs Tabelle deklarieren

            (

                  ID Int IDENTITY-PRIMÄRSCHLÜSSEL

                  DBNAME vom Datentyp nvarchar(500)

            )

           

             --Wählen Sie nur Datenbanken online sind, falls alle Datenbanken gesichert werden gewählt werden

             --Wenn Datenbank gesichert werden möchten nur wählen Sie aus, aus @DBs

            @DBs (DBNAME) einfügen

            Wählen Sie Namen aus master.sys.databases

            wobei Status = 0

            UND name=@DatabaseName

            ODER @DatabaseName ist NULL

            NACH Namen sortieren

           

            -Filtern Sie Datenbanken nicht gesichert müssen

            IF @backupType = "F"

                  BEGINNEN

                  Löschen @DBs, DBNAME IN ('Tempdb', 'Northwind' "Pubs", "AdventureWorks")

                  ENDE

            ELSE IF @backupType = hatte "

                  BEGINNEN

                  Löschen @DBs, DBNAME IN ('Tempdb', 'Northwind', 'Pubs' 'master', "AdventureWorks")

                  ENDE

            ELSE IF @backupType = "L"

                  BEGINNEN

                  Löschen @DBs, DBNAME IN ('Tempdb', 'Northwind', 'Pubs' 'master', "AdventureWorks")

                  ENDE

            oder

                  BEGINNEN

                  Rückgabe

                  ENDE

           

            -Variablen

            @BackupName varchar(100) deklarieren

            @BackupFile varchar(100) deklarieren

            @DBNAME varchar(300) deklarieren

            @SqlCommand vom Datentyp NVARCHAR(1000) deklarieren 

        @DateTime vom Datentyp NVARCHAR(20) deklarieren

            @Loop Int deklarieren                  

                       

            --Datenbanken einzeln durchlaufen

            SELECT @Loop = min(ID) von @DBs

 

      Beim @Loop IS NOT NULL

      BEGINNEN

 

-Datenbanknamen müssen im Format [Dbname], da einige haben- oder _ in ihrem Namen

      SET @DBNAME = '[' +(SELECT DBNAME FROM @DBs WHERE ID = @Loop) +"']

 

-Legen Sie das aktuelle Format für Datums- / n yyyyhhmmss

      SET @dateTime = ersetzen (konvertieren (VARCHAR, GETDATE(),101),'/','') + '_' +  ersetzen (CONVERT (VARCHAR, GETDATE(),108),':','')  

 

– Erstellen Sie Sicherungsdateiname path\filename.extension Format für vollständige, Diff und Protokoll-backups

      IF @backupType = "F"

            SET @BackupFile = @backupLocation + ersetzen (ersetzen (@DBNAME, ' [', ''),'] ','') + '_FULL_' @dateTime+ '. BAK "

      ELSE IF @backupType = hatte "

            SET @BackupFile = @backupLocation + ersetzen (ersetzen (@DBNAME, ' [', ''),'] ','') + '_DIFF_' @dateTime+ '. BAK "

      ELSE IF @backupType = "L"

            SET @BackupFile = @backupLocation + ersetzen (ersetzen (@DBNAME, ' [', ''),'] ','') + '_LOG_' @dateTime+ '. TRN'

 

-Benennen Sie der Sicherung in den Medien speichern

      IF @backupType = "F"

            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') + "vollständige Sicherung" + @dateTime

      IF @backupType = hatte "

            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') + "differenzielle Sicherung für ' + @dateTime

      IF @backupType = "L"

            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') + "Sicherung für ' + @dateTime

 

-Generieren von dynamischen SQL-Befehl ausgeführt werden

 

       IF @backupType = "F" 

                  BEGINNEN

               SET @sqlCommand = "Datenbank sichern" +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' INIT, NAME = ''' +@BackupName+'' ', NOSKIP, NoFormat. '

                  ENDE

       IF @backupType = hatte "

                  BEGINNEN

               SET @sqlCommand = "Datenbank sichern" +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' DIFFERENZIELL INIT, Namen = ''' +@BackupName+'' ', NOSKIP, NoFormat. "        

                  ENDE

       IF @backupType = "L" 

                  BEGINNEN

               SET @sqlCommand = 'BACKUP LOG +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' INIT, NAME = ''' +@BackupName+'' ', NOSKIP, NoFormat. "        

                  ENDE

 

-Generierten SQL-Befehl ausführen

       EXEC(@sqlCommand)

 

-Gehe zu der nächsten Datenbank

SELECT @Loop = min(ID) von @DBs, ID > @Loop

 

ENDE

Schritt B: In einem Text-Editor eine Batchdatei mit dem Namen Sqlbackup.bat erstellen und kopieren Sie den Text aus einem der folgenden Beispiele in dieser Datei je nach Szenario:

Beispiel1:Vollständige Sicherung aller Datenbanken in der lokalen benannte Instanz SQLExpress mithilfe der Windows-Authentifizierung

// Sqlbackup.bat

Sqlcmd -S. \EXPRESS – E – Q "EXEC Sp_BackupDatabases @backupLocation = hatte: \SQLBackups\", @backupType = 'F'" 

Beispiel2:Differenzielle Backups aller Datenbanken in der lokalen benannte Instanz SQLExpress mithilfe einer SQLLogin und das zugehörige Kennwort

// Sqlbackup.bat

Sqlcmd - U SQLLogin -P Kennwort -S. \SQLEXPRESS -Q "EXEC Sp_BackupDatabases  @backupLocation = D:\SQLBackups, @BackupType = war '"

Hinweis: der SQLLogin Shouldhave am wenigsten Sicherungsoperatoren Rolle in SQL Server.

Beispiel 3:Protokoll-Backups aller Datenbanken in lokalen benannte Instanz SQLExpress mithilfe der Windows-Authentifizierung

// Sqlbackup.bat

Sqlcmd -S. \SQLEXPRESS -E – Q "EXEC Sp_BackupDatabases @backupLocation = hatte: \SQLBackups\", @backupType = "L" "

Beispiel 4: Vollständige Backups der Datenbank enthalten, in der lokalen benannte Instanz SQLExpress mithilfe der Windows-Authentifizierung

// Sqlbackup.bat

Sqlcmd -S. \SQLEXPRESS -E – Q "EXEC Sp_BackupDatabases @backupLocation = hatte: \SQLBackups\", @databaseName enthalten, @backupType = 'F' = "

Ebenso können Sie eine differenzielle Sicherung enthalten durch Einfügen wird "für den Parameter @backupType und durch Einfügen 'L' für den Parameter @backupType eine Sicherung enthalten.

Schritt C:Zeitplan einen Auftrag mithilfe von Windows-Taskplaner die Batchdatei ausgeführt, die Sie in Schritt b erstellt Gehen Sie hierzu folgendermaßen vor:

  1. Auf dem Computer mit SQL Server Express ist, klicken Sie auf Start, AlleProgramme, Zubehör, Systemprogrammeund klicken Sie dann auf Geplante Tasks. 
  2. Doppelklicken Sie auf geplanten Task hinzufügen. 
  3. Klicken Sie im Assistenten für geplante Tasks auf Weiter. 
  4. Klicken Sie auf Durchsuchen, klicken Sie auf die Batchdatei, die Sie in Schritt B erstellt haben und klicken Sie dann auf Öffnen. 
  5. SQLBACKUP für den Namen der Aufgabe auf täglich, und klicken Sie dann auf Weiter. 
  6. Geben Sie Informationen für einen Zeitplan zum Ausführen des Tasks. (Wir empfehlen, dass Sie diese Aufgabe mindestens einmal täglich ausführen.) Klicken Sie dann auf Weiter.
  7. Geben Sie im Feld Geben Sie den Benutzernamen einen Benutzernamen ein, und geben Sie ein Kennwort in das Feld Geben Sie das Kennwort . Hinweis Dieser Benutzer sollte mindestens werden der Rolle BackupOperator auf SQL Server verwenden Sie eine der in Beispiel 1, 3 oder 4 Batch-Dateien.
  8. Klicken Sie auf Weiter, und klicken Sie dann auf Fertig stellen. 
  9. Ausführen des Tasks einmal sicherstellen, dass die Sicherung erfolgreich erstellt wurde.

HinweisDen Ordner für die SQLCMD ausführbare Datei ist im Allgemeinen der Path-Variablen für den Server nach SQL Server installiert, aber wenn die Variable Path dieser Ordner nicht aufgelistet wird, Sie es unter < Installationsverzeichnis > \90\Tools\Binn finden (zum Beispiel: C:\ Programmierung c:\Programme\Microsoft SQL Server\90\Tools\Binn).

 Achten Sie auf Folgendes, bei dem Verfahren, das in diesem Artikel beschrieben wird:

  • Der Windows-Taskplanerdienst muss gleichzeitig ausgeführt werden, die der Einzelvorgang ausführen soll. Wir empfehlen den Starttyp für diesen Dienst als automatischfestgelegt. Dadurch wird sichergestellt, dass der Dienst auch bei einem Neustart ausgeführt werden.
  • Viel Platz auf dem Laufwerk, Sicherungskopien die geschrieben werden, soll. Reinigen Sie die alten Dateien im backup-Ordner regelmäßig, um sicherzustellen, dass Sie nicht Speicherplatz empfohlen. Das Skript enthält keine Logik, um alte Dateien zu bereinigen.

Weitere Informationsquellen