web-dev-qa-db-fra.com

Comment créer une sauvegarde quotidienne avec un nom unique sur le serveur SQL

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.

13
Dhwani

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).

.....
9
Devart

Pour créer une sauvegarde quotidienne avec un nom tel que Filename_MM_DD_YYYY:

  1. Dans SSMS, cliquez avec le bouton droit sur la base de données que vous souhaitez sauvegarder.
  2. Sélectionnez les tâches | Sauvegarder
  3. Dans la boîte de dialogue, sélectionnez le type et l'emplacement de la sauvegarde.
  4. En haut de cette boîte de dialogue, sélectionnez l’option Script Action to Job dans le menu déroulant Script.
  5. Une boîte de dialogue New Job s'ouvre et la première étape crée une sauvegarde de la base de données Accédez à la première étape puis cliquez sur Edit.

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

24
Milena Petrovic

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.

Comment créer un emploi

2
Ravi

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
0
leandro sardinha

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.

0
Stropharius