web-dev-qa-db-fra.com

Qu'est-ce qu'un simple programme ou script en ligne de commande pour sauvegarder des bases de données SQL Server?

J'ai été trop laxiste dans l'exécution de sauvegardes de bases de données sur nos serveurs internes. 

Existe-t-il un simple programme de ligne de commande que je peux utiliser pour sauvegarder certaines bases de données dans SQL Server 2005? Ou existe-t-il un simple VBScript? 

87
Frank Krueger

Pour sauvegarder une base de données unique à partir de la ligne de commande, utilisez osql ou sqlcmd .

"C:\Program Files\Microsoft SQL Server\90\Tools\Binn\osql.exe" 
    -E -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak' WITH FORMAT"

Vous voudrez aussi lire la documentation sur BACKUP et RESTORE et procédures générales .

100
Craig Trader

Planifiez ce qui suit pour sauvegarder toutes les bases de données:

Use Master

Declare @ToExecute VarChar(8000)

Select @ToExecute = Coalesce(@ToExecute + 'Backup Database ' + [Name] + ' To Disk =     ''D:\Backups\Databases\' + [Name]   + '.bak'' With Format;' + char(13),'')
From
Master..Sysdatabases
Where
[Name] Not In ('tempdb')
and databasepropertyex ([Name],'Status') = 'online'

Execute(@ToExecute)

Il y a aussi plus de détails sur mon blog: comment automatiser les sauvegardes de SQL Server Express .

9
GateKiller

J'utilise ExpressMaint .

Pour sauvegarder toutes les bases de données utilisateur, je fais par exemple:

C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS
9
Martin Meixger

Vous pouvez utiliser l’application de sauvegarde d’ApexSQL. Bien qu’il s’agisse d’une application graphique, toutes ses fonctionnalités sont prises en charge dans la CLI. Il est possible de réaliser des opérations de sauvegarde ponctuelles ou de créer une tâche permettant de sauvegarder régulièrement des bases de données spécifiques. Vous pouvez vérifier les règles de commutation et les exemples dans les articles:

5
P.Thompson

J'ai trouvé cela sur une page de support technique Microsoft http://support.Microsoft.com/kb/2019698

Cela fonctionne très bien! Et depuis que ça vient de Microsoft, j'ai l'impression que c'est assez légitime.

Fondamentalement, il y a deux étapes.

  1. Créez une procédure stockée dans votre base de données maître. Voir le lien msft ou s'il est cassé, essayez ici: http://Pastebin.com/svRLkqnq
  2. Planifiez la sauvegarde à partir de votre planificateur de tâches. Vous voudrez peut-être d'abord créer un fichier .bat ou .cmd, puis planifier ce fichier.

    sqlcmd -S YOUR_SERVER_NAME\SQLEXPRESS -E -Q "EXEC sp_BackupDatabases @backupLocation='C:\SQL_Backup\', @backupType='F'"  1>c:\SQL_Backup\backup.log            
    

Évidemment, remplacez YOUR_SERVER_NAME par le nom de votre ordinateur ou essayez éventuellement.\SQLEXPRESS et assurez-vous que le dossier de sauvegarde existe. Dans ce cas, il essaie de le mettre dans c:\SQL_Backup

5
John W.

J'utilise tsql sur une infrastructure Linux/UNIX pour accéder aux bases de données MSSQL. Voici un script Shell simple pour vider une table dans un fichier:

#!/usr/bin/ksh
#
#.....
(
tsql -S {database} -U {user} -P {password} <<EOF
select * from {table}
go
quit
EOF
) >{output_file.dump}
4
Ira C

Eventuel si vous n’avez pas de connexion sécurisée comme le déclare le commutateur –E 

Utilisez la ligne de commande suivante

"[program dir]\[sql server version]\Tools\Binn\osql.exe" -Q "BACKUP DATABASE mydatabase TO DISK='C:\tmp\db.bak'" -S [server] –U [login id] -P [password]

Sur les systèmes d’exploitation 64 bits c:\Program Files (x86)\Microsoft SQL Server \

[version du serveur SQL] votre version du serveur SQL 110, 100, 90 ou 80 commence par le plus grand nombre

[serveur] votre nom de serveur ou votre adresse IP

[ID de connexion] votre nom de connexion utilisateur du serveur ms-sql

[mot de passe] le mot de passe requis

2
George Vrynios

Voici le script simple pour effectuer une sauvegarde de base de données.

DECLARE @name VARCHAR(50) -- database name  
DECLARE @path VARCHAR(256) -- path for backup files  
DECLARE @fileName VARCHAR(256) -- filename for backup  
DECLARE @fileDate VARCHAR(20) -- used for file name


-- specify database backup directory
SET @path = 'C:\Backup\'  


-- specify filename format
SELECT @fileDate = CONVERT(VARCHAR(20),GETDATE(),112) 


DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master','model','msdb','tempdb')  -- exclude these databases


OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @name   


WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @fileName = @path + @name + '_' + @fileDate + '.BAK'  
       BACKUP DATABASE @name TO DISK = @fileName  


       FETCH NEXT FROM db_cursor INTO @name   
END   


CLOSE db_cursor   
DEALLOCATE db_cursor
2
Jitendra Pancholi
SET NOCOUNT ON;
declare @PATH VARCHAR(200)='D:\MyBackupFolder\'
 -- path where you want to take backups
IF OBJECT_ID('TEMPDB..#back') IS NOT NULL

DROP TABLE #back

CREATE TABLE #back
(
RN INT IDENTITY (1,1),
DatabaseName NVARCHAR(200)

)

INSERT INTO #back 
SELECT       'MyDatabase1'
UNION SELECT 'MyDatabase2'
UNION SELECT 'MyDatabase3'
UNION SELECT 'MyDatabase4'

-- your databases List

DECLARE @COUNT INT =0 ,  @RN INT =1, @SCRIPT NVARCHAR(MAX)='',  @DBNAME VARCHAR(200)

PRINT '---------------------FULL BACKUP SCRIPT-------------------------'+CHAR(10)
SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN

SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.bak'''+CHAR(10)+'WITH COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END

 PRINT '---------------------DIFF BACKUP SCRIPT-------------------------'+CHAR(10)

  SET  @COUNT  =0 SET  @RN  =1 SET @SCRIPT ='' SET @DBNAME =''
 SET @COUNT = (SELECT COUNT(*) FROM #back)
PRINT 'USE MASTER'+CHAR(10)
WHILE(@COUNT > = @RN)
BEGIN
SET @DBNAME =(SELECT DatabaseName FROM #back WHERE RN=@RN)
SET @SCRIPT ='BACKUP DATABASE ' +'['+@DBNAME+']'+CHAR(10)+'TO DISK =N'''+@PATH+@DBNAME+ N'_Backup_'
+ REPLACE ( REPLACE ( REPLACE ( REPLACE ( CAST ( CAST ( GETDATE () AS DATETIME2 ) AS VARCHAR ( 100 )), '-' , '_' ), ' ' , '_' ), '.' , '_' ), ':' , '' )+'.diff'''+CHAR(10)+'WITH DIFFERENTIAL, COMPRESSION, STATS = 10'+CHAR(10)+'GO'+CHAR(10)
PRINT @SCRIPT
SET @RN=@RN+1
END
0
Sagar Mahajan

Vous pouvez utiliser un script VB que j'ai écrit exactement à cette fin: https://github.com/ezrarieben/mssql-backup-vbs/

Planifiez une tâche dans le "Planificateur de tâches" pour exécuter le script à votre guise. Il sauvegardera l'intégralité de la base de données dans un fichier BAK et l'enregistrera à l'endroit souhaité.

0
ezrarieben