1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
-- déclaration variable
Declare @nom_base sysname,
@FileName varchar(500),
@backup varchar(500),
@CMD varchar(500),
@File_Exists int,
--recupération de la liste des bases
declare curseur_liste_base cursor FOR SELECT [name] FROM sys.DATABASES WHERE sys.DATABASES.name <> 'tempdb' AND sys.DATABASES.name <> 'CMS4-MYBREAD COM' AND state_desc = 'ONLINE';
Open curseur_liste_base
Fetch next FROM curseur_liste_base INTO @nom_base;
while (@@FETCH_STATUS = 0)
BEGIN ;
--parcours de la liste des bases
Fetch next FROM curseur_liste_base INTO @nom_base;
IF EXISTS(Select [name] from sys.DATABASES where [name] = @nom_base )
BEGIN
SELECT @FileName='D:\Backup\'+ @nom_base
SET @backup= @FileName + '\' + @nom_base + REPLACE(REPLACE(REPLACE(CONVERT(CHAR(16),CURRENT_TIMESTAMP, 120), '-', ''), ' ', ''), ':', '') + '.bak' --chemin + nom sauvegarde
EXEC Master.dbo.xp_fileexist @FileName, @File_Exists OUT --test de l'existance du recpertoite de sauvegarde
IF @File_Exists = 1 --si exite sauvegarde
Begin
print @backup
BACKUP DATABASE @nom_base TO DISK = @backup WITH NOFORMAT, NOINIT, NAME = @nom_base, SKIP, NOREWIND, NOUNLOAD, STATS = 10
SET @CMD = 'C:\WINDOWS\system32\gzip ' + @backup -- compression
EXEC xp_cmdshell @CMD
END
Else -- si n'existe pas
Begin
print @backup
SET @CMD = 'MD '+ @FileName -- creation du repertoire
EXEC xp_cmdshell @CMD
BACKUP DATABASE @nom_base TO DISK = @backup WITH NOFORMAT, NOINIT, NAME = @nom_base, SKIP, NOREWIND, NOUNLOAD, STATS = 10
SET @CMD = 'C:\WINDOWS\system32\gzip ' + @backup --compression
EXEC xp_cmdshell @CMD
END
END
Else
BEGIN
PRINT 'la variable ne corespond a aucune base'
END
END;
-- Close and deallocate the cursor.
CLOSE curseur_liste_base;
DEALLOCATE curseur_liste_base; |