SQL Server 2008 Express - «Meilleure» solution de sauvegarde?

20

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 milieu MySQL , j'ai pensé à configurer la réplication sur un autre ordinateur et à prendre simplement des sauvegardes Xcopy de ce serveur.

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

Le site est largement accessible, il ne doit donc pas y avoir de retards et de 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.

alexn
la source
Est-ce que quelqu'un sait s'il y a des problèmes avec simplement l'utilisation de la sauvegarde de Windows Server pour ce faire?
James

Réponses:

30

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 de Windows pour appeler SQLCmd pour exécuter le script selon quel calendrier vous intéresse:

 sqlcmd -s server_name\sqlexpress -i C:\SqlJobs\backup.sql -o C:\Logs\output.txt
splattne
la source
1
La syntaxe BACKUP ressemble à ceci: BACKUP DATABASE MyDatabase TO DISK = 'C: \ MyDatabase.bak';
Martin Marconcini
Merci pour cette information, je vais essayer.
alexn
lors de l'utilisation du script T-sql, assurez-vous que vos noms de base de données ne contiennent pas d'espaces.
redknight
+1 Encore une information: n'oubliez pas de mentionner le nom de l'instance via le -S ".\SomeInstance"si vous obtenez des erreurs de connexion de sqlcmd.
Tomalak
Il serait utile, pour le reste d'entre nous venant à cette question à la recherche de la même réponse, si vous incluez le SQL que vous utilisez pour exécuter une sauvegarde.
Ian Boyd
6

J'utilise SQLBackupAndFTP - produit fantastique et simple.


la source
sqlbackupandftp est le meilleur .. si vous voulez revenir + compresser + supprimer automatiquement (après des jours spécifiés)
suraj jain
Oui, je l'utilise également. Fonctionne bien.
Alan B
5

J'ai été écrit un script de sauvegarde pour moi-même, installez comme indiqué dans le post 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 ''
Joan Pham
la source
2

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.

CPU_BUSY
la source
1

Sur la base du post d'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, puis j'utilise JungleDisk pour faire une sauvegarde hors site vers le stockage cloud Amazon EC2 .

Guppy
la source
Le problème avec expressmaint est qu'il ne prend pas en charge SQL Server 2008 R2. Cela fonctionnera avec 2008 et cela fonctionnera si vous installez 2008 puis effectuez une mise à niveau vers 2008 R2, mais il ne trouvera pas les bases de données sur une nouvelle installation de 2008 R2. C'est un bug connu avec un correctif soumis mais l'exécutable n'a pas été mis à jour avec le correctif.
James
1

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.

Peter Mortensen
la source
0

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.

personne
la source
Vous devez également mentionner comment un fichier de commandes sauvegarde une base de données.
Ian Boyd
0

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

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

Ben Lachman
la source