Je souhaite effectuer quotidiennement une sauvegarde complète de toutes les bases de données de mon serveur avec un nom unique. Pour cela, j'ai une idée de garder un horodatage qui rendra la copie de base de données séparée . Supposons qu'il y ait une base de données sur le serveur appelée ABCD, alors elle devrait être sauvegardée comme ceci:
ABCD_21_03_2013
ABCD_22_03_2013
Comment puis-je faire ceci. Je ne connais pas grand-chose de ces types de travaux de sauvegarde SQL.
Sauvegarde automatique de toutes les bases de données sur le serveur.
À propos des emplois:
http://msdn.Microsoft.com/en-us/library/ms190268.aspx
Requête:
SET NOCOUNT ON;
DECLARE
@FileName NVARCHAR(1024)
, @DBName NVARCHAR(256)
, @PathName NVARCHAR(256)
, @Message NVARCHAR(2048)
, @IsCompressed BIT
SELECT
@PathName = 'D:\BACKUP\'
, @IsCompressed = 1
DECLARE db CURSOR LOCAL READ_ONLY FAST_FORWARD FOR
SELECT
sd.name
, file_path = @PathName + FileDate + '_' + name + '.bak'
FROM sys.databases sd
CROSS JOIN (
SELECT FileDate = 'ABCD_' + REPLACE(CONVERT(VARCHAR(10), GETDATE(), 103), '/', '_')
) fd
WHERE sd.state_desc != 'OFFLINE'
AND sd.name NOT IN ('master', 'model', 'msdb', 'tempdb')
ORDER BY sd.name
OPEN db
FETCH NEXT FROM db INTO
@DBName
, @FileName
WHILE @@FETCH_STATUS = 0 BEGIN
DECLARE @SQL NVARCHAR(MAX)
SELECT @Message = REPLICATE('-', 80) + CHAR(13) + CONVERT(VARCHAR(20), GETDATE(), 120) + N': ' + @DBName
RAISERROR (@Message, 0, 1) WITH NOWAIT
SELECT @SQL =
'BACKUP DATABASE [' + @DBName + ']
TO DISK = N''' + @FileName + '''
WITH FORMAT, ' + CASE WHEN @IsCompressed = 1 THEN N'COMPRESSION, ' ELSE '' END + N'INIT, STATS = 15;'
EXEC sys.sp_executesql @SQL
FETCH NEXT FROM db INTO
@DBName
, @FileName
END
CLOSE db
DEALLOCATE db
Sortie:
BACKUP DATABASE [AdventureWorks2008R2]
TO DISK = N'D:\BACKUP\ABCD_24_05_2013_AdventureWorks2008R2.bak'
WITH FORMAT, COMPRESSION, INIT, STATS = 15;
BACKUP DATABASE [AdventureWorks2008R2_Live]
TO DISK = N'D:\BACKUP\ABCD_24_05_2013_AdventureWorks2008R2_Live.bak'
WITH FORMAT, COMPRESSION, INIT, STATS = 15;
BACKUP DATABASE [AdventureWorks2012]
TO DISK = N'D:\BACKUP\ABCD_24_05_2013_AdventureWorks2012.bak'
WITH FORMAT, COMPRESSION, INIT, STATS = 15;
Résultats:
2013-05-24 09:54:34: AdventureWorks2008R2
15 percent processed.
30 percent processed.
45 percent processed.
60 percent processed.
75 percent processed.
90 percent processed.
Processed 23416 pages for database 'AdventureWorks2008R2', file 'AdventureWorks2008R2_Data' on file 1.
Processed 1 pages for database 'AdventureWorks2008R2', file 'AdventureWorks2008R2_Log' on file 1.
BACKUP DATABASE successfully processed 23417 pages in 4.052 seconds (45.148 MB/sec).
.....
Pour créer une sauvegarde quotidienne avec un nom tel que Filename_MM_DD_YYYY:
Le code existant ressemble à:
BACKUP DATABASE [AdventureWorks2012] TO DISK = N'E:\Test\AdventureWorks.bak' WITH NOFORMAT, NOINIT, NAME = N'AdventureWorks2012-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
Remplacez-le pour être
DECLARE @SQLStatement VARCHAR(2000)
SET @SQLStatement = 'E:\Test\AdventureWorks_' + CONVERT(nvarchar(30), GETDATE(), 110) +'.bak'
BACKUP DATABASE [AdventureWorks2012] TO DISK = @SQLStatement
6 Enregistrer le travail
Les sauvegardes de la base de données seront nommées:
AdventureWorks_07-29-2013
AdventureWorks_07-30-2013
AdventureWorks_07-31-2013
Maintenant, tout ce que vous avez à faire est de faire le bon programme
Je pense que la meilleure façon d'effectuer une sauvegarde planifiée est de créer Job
. Ajoutez votre travail de sauvegarde et programmez-le à une date et une heure données.
Merci pour les publications Je veux juste partager une petite mise à jour que j'ai faite sur le script pour effectuer des sauvegardes de base de données de journal et ignorer automatiquement toutes les bases de données avec recovery model = simple
qui n'autorise pas les sauvegardes de journal. J'espère que cela vous aidera .... Et oui, M. Ravi a raison, la meilleure approche consiste à créer un emploi, j'ai créé un SP et je me suis éloigné d'un emploi.
CREATE PROCEDURE sp_logbackup
AS
SET NOCOUNT ON;
DECLARE
@FileName NVARCHAR(1024)
, @DBName NVARCHAR(256)
, @PathName NVARCHAR(256)
, @Message NVARCHAR(2048)
, @IsCompressed BIT
SELECT
@PathName = '\\myServer\...'
, @IsCompressed = 1
DECLARE db CURSOR LOCAL READ_ONLY FAST_FORWARD FOR
SELECT
sd.name
, file_path = @PathName + name + '_' + FileDate + '.trn'
FROM sys.databases sd
CROSS JOIN (
SELECT FileDate = REPLACE(REPLACE(REPLACE(CONVERT(varchar,GETDATE(), 20),'-','_'),':',''),' ','')
) fd
WHERE sd.state_desc != 'OFFLINE'
AND sd.recovery_model != 3
AND sd.name NOT IN ('master', 'model', 'msdb', 'tempdb')
ORDER BY sd.name
OPEN db
FETCH NEXT FROM db INTO
@DBName
, @FileName
WHILE @@FETCH_STATUS = 0 BEGIN
DECLARE @SQL NVARCHAR(MAX)
SELECT @Message = REPLICATE('-', 80) + CHAR(13) + CONVERT(VARCHAR(20), GETDATE(), 120) + N': ' + @DBName
RAISERROR (@Message, 0, 1) WITH NOWAIT
SELECT @SQL =
'BACKUP LOG [' + @DBName + ']
TO DISK = N''' + @FileName + '''
WITH FORMAT, NAME = N''' + @DBName + ''', SKIP, REWIND, NOUNLOAD, STATS = 10;'
EXEC sys.sp_executesql @SQL
FETCH NEXT FROM db INTO
@DBName
, @FileName
END
CLOSE db
DEALLOCATE db
Certains programmes de sauvegarde tiers, par exemple: EMS Sauvegarde SQL , permettent de définir des modèles pour les noms de fichiers de sauvegarde. L'horodatage, le nom d'instance de serveur, les noms de base de données et d'autres informations peuvent être ajoutés au nom de fichier.