SQL Server 2008 Express - die beste Sicherungslösung?


20

Welche Sicherungslösungen würden Sie bei Verwendung von SQL Server 2008 Express empfehlen ? Ich bin ziemlich neu in SQL Server, aber da ich einen MySQL- Hintergrund habe, habe ich mir überlegt, die Replikation auf einem anderen Computer einzurichten und einfach Xcopy- Backups dieses Servers zu erstellen .

Leider ist die Replikation in der Express Edition nicht verfügbar.

Die Site ist stark frequentiert, sodass es zu keinen Verzögerungen und Ausfallzeiten kommen muss. Ich denke auch daran, zweimal am Tag ein Backup zu machen oder so.

Was würdest du empfehlen? Ich habe mehrere Computer, die ich verwenden kann, aber ich weiß nicht, ob das mir hilft, da ich die Express-Version verwende.


Weiß jemand, ob es Probleme gibt, wenn nur die Windows Server-Sicherung verwendet wird?
James

Antworten:


30

SQL Server Express 2008 unterstützt Datenbanksicherungen. Es fehlt SQL Agent, mit dem Sicherungen geplant werden können, und der Wartungsplanungs-Assistent zum Erstellen von Sicherungsaufgaben.

Sie können Datenbanken auf zwei verschiedene Arten sichern:

  1. Verwenden Sie Microsoft SQL Server Management Studio Express mit der Option "Sichern" im Kontextmenü für jede Datenbank unter "Aufgaben".
  2. Verwenden Sie T-SQL, um Ihr Sicherungsskript manuell zu schreiben. Lesen Sie die MSDN-Dokumentation zum Befehl T-SQL BACKUP .
    Syntax etwas wie:BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Wenn Sie Ihre Sicherungsjobs planen möchten, müssen Sie ein T-SQL-Skript schreiben und dann mithilfe des Windows-Task-Zeitplans SQLCmd aufrufen , um das Skript nach jedem gewünschten Zeitplan auszuführen :

 sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt

1
Die BACKUP-Syntax sieht ungefähr so ​​aus: BACKUP DATABASE MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Martin Marconcini

Danke für diese Information, Jungs, ich werde das ausprobieren.
Alexander

Stellen Sie bei Verwendung des T-SQL-Skripts sicher, dass Ihre DB-Namen keine Leerzeichen enthalten.
Redknight

+1 Noch ein Hinweis: Vergessen Sie nicht, den -S ".\SomeInstance"Instanznamen über anzugeben, wenn Sie Anmeldefehler von sqlcmd erhalten.
Tomalak

Es wäre hilfreich, wenn wir uns mit dieser Frage befassen und nach der gleichen Antwort suchen würden, wenn Sie die SQL einschließen würden, mit der Sie eine Sicherung ausführen.
Ian Boyd

6

Ich benutze SQLBackupAndFTP - fantastisches und einfaches Produkt.


sqlbackupandftp ist am besten .. wenn Sie zurück + komprimieren + automatisch löschen möchten (nach bestimmten Tagen)
suraj jain

Ja das nutze ich auch. Funktioniert gut.
Alan B

5

Ich habe ein Backup-Skript geschrieben, um es selbst zu verwenden. Installiere es wie in splattnes Beitrag beschrieben :

----- Version: 2.0 - 2009-12-12 - SQL 2000 Compatible
----- Pham Kim Ngan (jbngan@gmail.com)
----- Usage:
-- Copy 7za.exe (http://www.7-zip.org/download.html - Command Line Version) to @CFG_BACKUP_PATH
-- Modify @CFG_BACKUP_PATH = <Backup Store Path> - no long filename/directory please
-- Modify @CFG_DAYS_DELETE = Days to keep backups
-- Enable 'xp_cmdshell' (SQL 2005/EXPRESS or higher)

----- Configuration Variables
DECLARE @CFG_BACKUP_PATH NVARCHAR(256)
DECLARE @CFG_DAYS_DELETE INT

SET @CFG_BACKUP_PATH = 'C:\DatabaseBackup'
SET @CFG_DAYS_DELETE = 30

DECLARE @Today DATETIME
DECLARE @TodayName CHAR(8)
SET @Today = GETDATE()
SET @TodayName = CONVERT(CHAR(8), @Today, 112)

DECLARE @id INT
DECLARE @name VARCHAR(50)
DECLARE @path VARCHAR(256)
DECLARE @cmd VARCHAR(256)

----- Create Temporarity Directory
DECLARE @TempDir VARCHAR(256)
SET @TempDir = @CFG_BACKUP_PATH + '\' + CONVERT(VARCHAR(256), NEWID())
SET @cmd = 'md ' + @TempDir
EXEC xp_cmdshell @cmd, no_output

----- List of current databases, only 'ONLINE' databases to be backup
DECLARE @dbList TABLE
    (
      dbno INT IDENTITY,
      dbname NVARCHAR(256)
    )

INSERT  INTO @dbList ( dbname )
        SELECT  name
        FROM    master.dbo.sysdatabases
        WHERE   ( name NOT IN ( 'tempdb' ) )
                AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'


------ Starting backup, one by one
SELECT  @id = dbno,
        @name = dbname
FROM    @dbList
WHERE   dbno = 1
WHILE @@ROWCOUNT = 1
    BEGIN
        PRINT N'++ Backup: ' + @name
        SET @path = @TempDir + '\' + @name + '.bak'

        BACKUP DATABASE @name TO DISK = @path

        SELECT  @id = dbno,
                @name = dbname
        FROM    @dbList
        WHERE   dbno = @id + 1
    END

PRINT N'++ Compressing: ' + @TempDir

----- Delete output file if existed
SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @TodayName + '.ZIP'
EXEC xp_cmdshell @cmd, no_output

DECLARE @Count INT
DECLARE @StartTime DATETIME
SET @StartTime = GETDATE()
----- Compress, -mx1 = Set Compression Ratio to 1 (very low)
SET @cmd = @CFG_BACKUP_PATH + '\7za.exe a -bd -y -tzip -mx1 '
SET @cmd = @cmd + @CFG_BACKUP_PATH + '\' + @TodayName + '.ZIP ' + @TempDir + '\*.bak"'
EXEC xp_cmdshell @cmd, no_output

SET @Count = DATEDIFF(second, @StartTime, GETDATE())
PRINT N'++ Compression Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'
SET @Count = DATEDIFF(second, @Today, GETDATE())
PRINT N'++ Total Execution Time: ' + CONVERT(VARCHAR, @Count) + ' seconds'

---- Delete temporarity directory
SET @cmd = 'rd /s /q ' + @TempDir
EXEC xp_cmdshell @cmd, no_output

---- Delete previous backup versions
DECLARE @OlderDateName CHAR(8)
SET @OlderDateName = CONVERT(CHAR(8), @Today - @CFG_DAYS_DELETE, 112)

----- List all .ZIP files
CREATE TABLE #delList
    (
      subdirectory VARCHAR(256),
      depth INT,
      [file] BIT
    )
INSERT  INTO #delList
        EXEC xp_dirtree @CFG_BACKUP_PATH, 1, 1
DELETE  #delList
WHERE   RIGHT(subdirectory, 4) <> '.ZIP'

SELECT  @Count = COUNT(1)
FROM    #delList
PRINT N'++ Number of Backups: ' + CONVERT(NVARCHAR, @Count)

SELECT TOP 1
        @name = subdirectory
FROM    #delList
WHERE   LEN(subdirectory) = 12
        AND RIGHT(subdirectory, 4) = '.ZIP'
        AND REPLACE(subdirectory, '.ZIP', '') < @OlderDateName

WHILE ( @@ROWCOUNT = 1 ) 
    BEGIN
        PRINT N'++ Delete Older Backup: ' + @name
        SET @cmd = 'del /f /q ' + @CFG_BACKUP_PATH + '\' + @name
        EXEC xp_cmdshell @cmd, no_output

        DELETE  #delList
        WHERE   subdirectory = @name

        SELECT TOP 1
                @name = subdirectory
        FROM    #delList
        WHERE   LEN(subdirectory) = 12
                AND RIGHT(subdirectory, 4) = '.ZIP'
                AND REPLACE(subdirectory, '.ZIP', '') < @OlderDateName
    END

DROP TABLE #delList

PRINT N'++ Done.'
PRINT ''
PRINT ''
PRINT ''

2

Ich verwende ExpressMaint und es funktioniert hervorragend als geplante Aufgabe. Übergeben Sie einfach die entsprechenden Parameter für die Art des Auftrags, den Sie ausführen.

Der Quellcode ist auch da draußen. Wir haben es geringfügig geändert, um einen Eintrag im Anwendungsereignisprotokoll hinzuzufügen, wenn ein Fehler aufgetreten ist.


1

Basierend auf dem Beitrag von UndertheFold habe ich ein bisschen gegoogelt und die Details von ExpressMaint herausgefunden. Ich hatte das noch nie gesehen und bin sehr froh, es gefunden zu haben.

Zur Info, die Webseite ist http://expressmaint.codeplex.com/

Ich habe dann eines der gefundenen Beispiele verwendet, um diese Stapeldatei zu erstellen, die ich jeden Tag über Nacht ausführen möchte.

c:\expressmaint\expressmaint -S (local)\SQLExpress -D ALL_USER -T DB -R E:\backups\sqlexpress\backupreports -RU WEEKS -RV 1 -B E:\backups\sqlexpress -BU DAYS -BV 4 -V -C

Hierdurch wird eine Sicherung erstellt und jede Sicherung ( -BU) vier Tage lang aufbewahrt, sodass Sie einen Verlauf erhalten, wenn eine Beschädigung vorliegt. Die Protokolle ( -RU) werden eine Woche lang aufbewahrt.

Ich benutze es erst seit ein paar Wochen, aber ich bin sehr zufrieden damit, da es ein Hands-Off-Ansatz ist. Ich lege die Sicherungen lokal auf eine zweite Festplatte und verwende JungleDisk , um eine Offsite-Sicherung im Amazon EC2- Cloud-Speicher durchzuführen .


Das Problem mit expressmaint ist, dass es SQL Server 2008 R2 nicht unterstützt. Es funktioniert mit 2008 und wenn Sie 2008 installieren und dann auf 2008 R2 aktualisieren, werden die Datenbanken bei einer Neuinstallation von 2008 R2 jedoch nicht gefunden. Es handelt sich um einen bekannten Fehler, bei dem ein Patch eingereicht wurde, die ausführbare Datei jedoch nicht mit dem Patch aktualisiert wurde.
James

1

Sie können DBSave verwenden . Es ist ein großartiges Freeware-Tool zum Sichern und Wiederherstellen von MS SQL Server. Es ist sehr einfach einzurichten und zu verwenden.


0

Ich verwende einen Windows Scheduler-Auftrag, um die SQL Server Express-Datenbank alle paar Stunden mithilfe einer Batchdatei zu sichern. Scheint gut zu funktionieren.


Sie sollten auch erwähnen, wie eine Batch-Datei eine Datenbank sichert.
Ian Boyd

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.