Comment puis-je programmer une sauvegarde quotidienne avec SQL Server Express? [dupliquer]

cette question a déjà une réponse ici:

  • SQL Server sauvegarde automatique [fermé] 3 réponses

j'exécute une petite application web avec SQL server express (2005) comme backend. Je peux créer une sauvegarde avec un script SQL, cependant, je voudrais programmer cela sur une base quotidienne. Comme option supplémentaire (devrait-avoir) je voudrais garder seulement les dernières sauvegardes X (pour des raisons d'économie d'espace évidemment) des pointeurs?

[edit] SQL server agent n'est pas disponible dans SQL server express...

60
demandé sur Jon Seigel 2009-01-28 16:51:01

6 réponses

vous ne pouvez pas utiliser L'agent SQL Server dans SQL Server Express. La façon dont je l'ai fait avant est de créer un Script SQL, puis l'exécuter comme une tâche programmée chaque jour, vous pourriez avoir plusieurs tâches programmées pour s'adapter à votre horaire de sauvegarde/conservation. La commande que j'utilise dans la tâche programmée est:

" C:\Program fichiers\Microsoft SQL Server\90\Tools\Binn\SQLCMD.EXE" - i"c:\path\to\sqlbackupScript.sql"

49
répondu Sam Cogan 2009-01-28 14:03:31

Eduardo Molteni a eu une grande réponse:

Utilisant Windows Tâches Programmées:

dans le fichier de lot

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

In SQLExpressBackups.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
49
répondu JohnB 2017-05-23 12:26:20

il suffit d'utiliser ce script pour sauvegarder dynamiquement toutes les bases de données sur le serveur. Puis créer le fichier batch selon l'article. Il est utile de créer deux fichiers batch, un pour la sauvegarde complète a et un pour la sauvegarde diff. Ensuite, créez deux tâches dans L'ordonnanceur des tâches, une pour full et une pour diff.

-- // Copyright © Microsoft Corporation.  All Rights Reserved.
-- // This code released under the terms of the
-- // Microsoft Public License (MS-PL, http://opensource.org/licenses/ms-pl.html.)
USE [master] 
GO 
/****** Object:  StoredProcedure [dbo].[sp_BackupDatabases] ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 

-- ============================================= 
-- Author: Microsoft 
-- Create date: 2010-02-06
-- Description: Backup Databases for SQLExpress
-- Parameter1: databaseName 
-- Parameter2: backupType F=full, D=differential, L=log
-- Parameter3: backup file location
-- =============================================

CREATE PROCEDURE [dbo].[sp_BackupDatabases]  
            @databaseName sysname = null,
            @backupType CHAR(1),
            @backupLocation nvarchar(200) 
AS 

       SET NOCOUNT ON; 

            DECLARE @DBs TABLE
            (
                  ID int IDENTITY PRIMARY KEY,
                  DBNAME nvarchar(500)
            )

             -- Pick out only databases which are online in case ALL databases are chosen to be backed up
             -- If specific database is chosen to be backed up only pick that out from @DBs
            INSERT INTO @DBs (DBNAME)
            SELECT Name FROM master.sys.databases
            where state=0
            AND name=@DatabaseName
            OR @DatabaseName IS NULL
            ORDER BY Name

            -- Filter out databases which do not need to backed up
            IF @backupType='F'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','AdventureWorks')
                  END
            ELSE IF @backupType='D'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE IF @backupType='L'
                  BEGIN
                  DELETE @DBs where DBNAME IN ('tempdb','Northwind','pubs','master','AdventureWorks')
                  END
            ELSE
                  BEGIN
                  RETURN
                  END

            -- Declare variables
            DECLARE @BackupName varchar(100)
            DECLARE @BackupFile varchar(100)
            DECLARE @DBNAME varchar(300)
            DECLARE @sqlCommand NVARCHAR(1000) 
        DECLARE @dateTime NVARCHAR(20)
            DECLARE @Loop int                  

            -- Loop through the databases one by one
            SELECT @Loop = min(ID) FROM @DBs

      WHILE @Loop IS NOT NULL
      BEGIN

-- Database Names have to be in [dbname] format since some have - or _ in their name
      SET @DBNAME = '['+(SELECT DBNAME FROM @DBs WHERE ID = @Loop)+']'

-- Set the current date and time n yyyyhhmmss format
      SET @dateTime = REPLACE(CONVERT(VARCHAR, GETDATE(),101),'/','') + '_' +  REPLACE(CONVERT(VARCHAR, GETDATE(),108),':','')  

-- Create backup filename in path\filename.extension format for full,diff and log backups
      IF @backupType = 'F'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_FULL_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'D'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_DIFF_'+ @dateTime+ '.BAK'
      ELSE IF @backupType = 'L'
            SET @BackupFile = @backupLocation+REPLACE(REPLACE(@DBNAME, '[',''),']','')+ '_LOG_'+ @dateTime+ '.TRN'

-- Provide the backup a name for storing in the media
      IF @backupType = 'F'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' full backup for '+ @dateTime
      IF @backupType = 'D'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' differential backup for '+ @dateTime
      IF @backupType = 'L'
            SET @BackupName = REPLACE(REPLACE(@DBNAME,'[',''),']','') +' log backup for '+ @dateTime

-- Generate the dynamic SQL command to be executed

       IF @backupType = 'F' 
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'
                  END
       IF @backupType = 'D'
                  BEGIN
               SET @sqlCommand = 'BACKUP DATABASE ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH DIFFERENTIAL, INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END
       IF @backupType = 'L' 
                  BEGIN
               SET @sqlCommand = 'BACKUP LOG ' +@DBNAME+  ' TO DISK = '''+@BackupFile+ ''' WITH INIT, NAME= ''' +@BackupName+''', NOSKIP, NOFORMAT'        
                  END

-- Execute the generated SQL command
       EXEC(@sqlCommand)

-- Goto the next database
SELECT @Loop = min(ID) FROM @DBs where ID>@Loop

END

et le fichier de lot peut ressembler à ceci:

sqlcmd -S localhost\myDB -Q "EXEC sp_BackupDatabases @backupLocation='c:\Dropbox\backup\DB\', @backupType='F'"  >> c:\Dropbox\backup\DB\full.log 2>&1

et

sqlcmd -S localhost\myDB -Q "EXEC sp_BackupDatabases @backupLocation='c:\Dropbox\backup\DB\', @backupType='D'"  >> c:\Dropbox\backup\DB\diff.log 2>&1

le l'avantage de cette méthode est que vous n'avez pas besoin de changer quoi que ce soit si vous ajoutez une nouvelle base de données ou supprimez une base de données, vous n'avez même pas besoin d'énumérer les bases de données dans le script. La réponse de JohnB est meilleure / plus simple pour le serveur avec une base de données, cette approche est plus appropriée pour les serveurs de bases de données multiples.

6
répondu qub1n 2015-05-27 20:34:52

les gens à MSSQLTips ont quelques articles très utiles, le plus pertinent pour cela est " automatiser SQL Server 2005 sauvegardes Express et suppression de fichiers de sauvegarde plus anciens

l'approche de base est de configurer deux tâches en utilisant le planificateur de tâches Windows. Une tâche exécute un script TSQL qui génère des fichiers de sauvegarde séparés pour toutes les bases de données MSSQL (sauf TEMPDB) avec le nom de la base de données et un tampon de date / heure dans le nom de fichier dans un spécifié répertoire. La deuxième tâche exécute un script VBScript qui passe par ce répertoire et supprime tous les fichiers avec un.Extension BAK de plus de 3 jours.

les deux scripts nécessitent édition mineure pour votre environnement (chemins, combien de temps pour garder ces dumps de base de données) mais sont très proches de drop-in-and-run.

notez qu'il y a des implications de sécurité possibles si vous êtes négligent avec ces permissions ou avec les répertoires, car ils sont de simples fichiers texte qui devront fonctionner avec un certain niveau de privilège. Ne sois pas négligente.

4
répondu fencepost 2009-12-04 17:53:17

Nous avons utilisé la combinaison de:

  1. Cobian Backup for scheduling / maintenance

    151990920"
  2. ExpressMaint pour la sauvegarde

les deux sont libres. Le processus consiste à script ExpressMaint pour prendre une sauvegarde comme un événement Cobian "before Backup". Je laisse habituellement cela écraser le fichier de sauvegarde précédent. Cobian puis prend un zip / 7zip de ceci et les Archive dans le dossier de sauvegarde. En Cobian vous pouvez spécifier le nombre de copies complètes à conserver, faire plusieurs cycles de sauvegarde, etc.

exemple de syntaxe de commande ExpressMaint:

expressmaint -S HOST\SQLEXPRESS -D ALL_USER -T DB -R logpath -RU WEEKS -RV 1 -B backuppath -BU HOURS -BV 3 
3
répondu mika 2009-01-28 16:21:03

vous pouvez créer un périphérique de sauvegarde dans l'objet serveur, disons

BDTEST

et ensuite créer un fichier de lot contiennent la commande suivante

sqlcmd -S 192.168.1.25 -E -Q "BACKUP DATABASE dbtest TO BDTEST"

disons avec nom

de sauvegarde.chauve-souris

alors vous pouvez appeler

de sauvegarde.chauve-souris

in planificateur de tâches selon votre convenance

0
répondu Susheel Kumar 2017-03-27 06:56:09