web-dev-qa-db-fra.com

SQL Server 2008 Express - "Meilleure" solution de sauvegarde?

Quelles solutions de sauvegarde recommanderiez-vous lors de l'utilisation de SQL Server 2008 Express ? Je suis assez nouveau sur SQL Server, mais comme je viens d'un arrière-plan MySQL , j'ai pensé à configurer la réplication sur un autre ordinateur et à prendre Xcopy des sauvegardes de ce serveur. .

Mais malheureusement, la réplication n'est pas disponible dans l'édition Express.

Le site est très fréquenté, il ne doit donc y avoir ni retards ni temps d'arrêt. Je pense aussi à faire une sauvegarde deux fois par jour ou quelque chose.

Que recommanderais-tu? J'ai plusieurs ordinateurs que je peux utiliser, mais je ne sais pas si cela m'aide puisque j'utilise la version Express.

20
alexn

SQL Server Express 2008 prend en charge les sauvegardes de bases de données. Il manque l'Agent SQL, qui permet de planifier des sauvegardes, et l'assistant de plan de maintenance pour créer des tâches de sauvegarde.

Vous pouvez sauvegarder des bases de données de deux manières différentes:

  1. Utilisez Microsoft SQL Server Management Studio Express qui a l'option de sauvegarde dans le menu contextuel pour chaque base de données sous "tâches".
  2. Utilisez T-SQL pour écrire manuellement votre script de sauvegarde. Lisez la documentation MSDN pour la commande T-SQL BACKUP .
    Syntaxe quelque chose comme: BACKUP DATABASE MyDatabase TO DISK='C:\MyDatabase.bak';

Si vous souhaitez planifier vos travaux de sauvegarde, vous devez écrire un script T-SQL, puis utiliser le calendrier des tâches Windows pour appeler SQLCmd pour exécuter le script selon ce que chaque programme vous intéresse:

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

J'utilise SQLBackupAndFTP - produit fantastique et simple.

6
Ruslan Sudentas

J'ai été écrit un script de sauvegarde pour moi-même, installez comme mentionné dans le message par splattne:

----- Version: 2.0 - 2009-12-12 - SQL 2000 Compatible
----- Pham Kim Ngan ([email protected])
----- 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 ''
5
Joan Pham

J'utilise ExpressMaint , et cela fonctionne très bien comme tâche planifiée. Passez simplement les paramètres appropriés pour le type de travail que vous effectuez.

Le code source est également disponible. Nous l'avons légèrement modifié pour ajouter une entrée dans l'échec du journal des événements d'application.

2
CPU_BUSY

Basé sur Post de UndertheFold J'ai fait une recherche sur Google et trouvé les détails d'ExpressMaint. Je n'avais jamais vu cela auparavant, donc je suis très heureux de l'avoir trouvé.

Pour info, la page web est, http://expressmaint.codeplex.com/

J'ai ensuite utilisé l'un des exemples que j'ai trouvés pour créer ce fichier de commandes que j'ai prévu d'exécuter pendant la nuit tous les jours.

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

Cela prend une sauvegarde, conserve chaque sauvegarde (-BU) pendant quatre jours, vous obtenez donc un historique en cas de corruption. Les journaux (-RU) sont conservés pendant une semaine.

Je ne l'utilise que depuis quelques semaines, mais j'en suis très content, car c'est une approche mains libres. Localement, je place les sauvegardes sur un deuxième disque, j'utilise ensuite JungleDisk pour faire une sauvegarde hors site sur le stockage cloud Amazon EC2 .

1
Guppy

Vous pouvez utiliser DBSave . C'est un excellent outil gratuit pour sauvegarder et restaurer MS SQL Server. C'est très simple à configurer et à utiliser.

1
MP1963

Je vérifierais SQLServerBooster: http://www.sqlserverbooster.com .

On dirait qu'il a un ensemble de fonctionnalités Nice et est gratuit. Le support pour Azure/S3/glacier est également agréable.

0
Ben Lachman

J'utilise un travail de planificateur Windows pour sauvegarder la base de données SQL Server express toutes les quelques heures à l'aide d'un fichier de commandes. Semble bien fonctionner.

0
no_one