web-dev-qa-db-fra.com

Sauvegardes automatisées SQL Server

Quelles sont les recommandations de produits logiciels pour la création de sauvegardes automatisées de bases de données SQL Server 2008?

La sauvegarde devrait se produire sans prendre la base de données hors ligne/détachement.

27
blu

Je recommanderais simplement de créer un plan de maintenance dans SQL Server pour gérer les sauvegardes, il peut être configuré pour sauvegarder à un emplacement spécifié aux heures spécifiées, sans prendre les bases de données hors ligne et gérera votre nettoyage de sauvegarde incrémentielle.

http://msdn.microsoft.com/en-us/library/ms189715.aspx

17
cmsjr

Si vous utilisez SQL Server Express, vous ne trouverez pas d'interface utilisateur pour exécuter des sauvegardes périodiques.
[.____] Dans ce cas, vous devez exécuter un lot à l'aide de tâches planifiées Windows ou quelque chose de similaire.

N'oubliez pas d'utiliser un utilisateur avec suffisamment de privilèges pour accéder à SQL Server.

Dans le fichier de lot

"C:\Program Files\Microsoft SQL Server\100\Tools\Binn\SQLCMD.EXE" -S 
(local)\SQLExpress -i D:\dbbackups\SQLExpressBackups.sql

Dans sqlexpressackups.sql

BACKUP DATABASE MyDataBase1 TO  DISK = N'D:\DBbackups\MyDataBase1.bak' 
WITH NOFORMAT, INIT,  NAME = N'MyDataBase1 Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

BACKUP DATABASE MyDataBase2 TO  DISK = N'D:\DBbackups\MyDataBase2.bak' 
WITH NOFORMAT, INIT,  NAME = N'MyDataBase2 Backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10

GO
68
Eduardo Molteni

J'ai eu du mal avec cela pendant un moment, car il n'était pas évident comment travailler un régime qui a produit des fichiers avec des noms différents afin que l'on ne soit pas sur l'autre écrivant l'autre. En fin de compte, il a créé le fichier de lots Windows suivant

:: Daily Backup of SQLSERVER databases

:: AKC 30 Apr 2011

::

:: Set environment variables

SET SQLCMDPASSWORD=xxxxxx
SET BACKUPDIR=C:\backups\db\

SET SCRIPTDIR=D:\Public\DB\batch_scripts\

:: Issue backup commands from a sql script

SQLCMD -U a_backup -S SERVER\SQLEXPRESS -i %SCRIPTDIR%daily_backup.sql

:: Tidy Up Old Backup Files (keep for 5 days)

FORFILES /P %BACKUPDIR% /S /M "*.bak" /D -5 /C "cmd /c del @path"

où a_backup est mon identifiant SQLServer avec des privilèges de sauvegarde. Le SQL correspondant est

DECLARE @thistime nvarchar(25);

DECLARE @filename nvarchar(255);

SET @thistime = CONVERT(nvarchar,GETDATE(),126);

SET @filename = "$(BACKUPDIR)" + N'PASL' + SUBSTRING(@thistime,1,10) + N'_DB.bak';

BACKUP DATABASE DB_live

    TO DISK = @FILENAME

    WITH INIT;

GO

La découverte de la commande "forfiles" pour purger les fichiers plus anciens était la principale trouvant pour moi.

Les logs de transaction sont des équivalents

:: Transaction Log Backups of SQLSERVER databases

:: AKC 30 Apr 2011

:: Run at reasonably spread out times of the day

:: Set environment variables

SET SQLCMDPASSWORD=xxxxxx
SET BACKUPDIR=C:\backups\db\
SET SCRIPTDIR=D:\Public\DB\batch_scripts\

:: Issue backup commands from a sql script

SQLCMD  -U a_backup -S SERVER\SQLEXPRESS -i %SCRIPTDIR%tlog_backup.sql

avec fichier sql

DECLARE @thistime nvarchar(25);

DECLARE @filename nvarchar(255);

SET @thistime = CONVERT(nvarchar,GETDATE(),126);

SET @filename = "$(BACKUPDIR)" + N'PASL' + SUBSTRING(@thistime,1,10) + SUBSTRING(@thistime,11,3) + N'_LOG.bak';

BACKUP LOG DB_live

    TO DISK = @FILENAME

    WITH INIT;

GO

Je dois noter que les fichiers de base de données sont sur mon D: lecteur, c'est pourquoi j'ai pris les sauvegardes sur le lecteur C:.

La sauvegarde quotidienne est entrée en tant que travail dans le planificateur de tâches Windows pour fonctionner quotidiennement à 4h00. La sauvegarde du journal de transaction est définie sur l'exécution quotidienne à 8h00 avec une répétition toutes les 4 heures de finition après 13 heures (que cela fonctionne à 8h midi, 16h et 20h00 tous les jours)

9
akc42