Qu'est-ce qu'un simple programme ou script en ligne de commande pour sauvegarder des bases de données SQL Server?
-
02-07-2019 - |
Question
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 puisse utiliser pour sauvegarder certaines bases de données dans SQL Server 2005? Ou existe-t-il un simple VBScript?
La solution
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 également lire la documentation sur SAUVEGARDER et RESTORE et procédures générales .
Autres conseils
J'utilise ExpressMaint .
Pour sauvegarder toutes les bases de données utilisateur, je le fais par exemple:
C:\>ExpressMaint.exe -S (local)\sqlexpress -D ALL_USER -T DB -BU HOURS -BV 1 -B c:\backupdir\ -DS
Planifiez les éléments suivants 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)
Mon blog contient également plus de détails: comment Automatiser les sauvegardes SQL Server Express .
J'ai trouvé ceci 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.
En gros, il y a deux étapes.
- Créez une procédure stockée dans votre base de données maître. Voir le lien msft ou s'il est brisé, essayez ici: http://pastebin.com/svRLkqnq
-
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
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 d'effectuer des opérations de sauvegarde ponctuelles ou de créer un travail qui sauvegarderait régulièrement des bases de données spécifiques. Vous pouvez vérifier les règles de commutation et voir des exemples dans les articles:
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}
Eventuel si vous ne disposez pas d'une connexion sécurisée lorsque le commutateur –E déclare
Utilisez la ligne de commande suivante
"[répertoire du programme] \ [version du serveur SQL] \ Tools \ Binn \ osql.exe &"; -Q & "BACKUP DATABASE mydatabase TO DISK = 'C: \ tmp \ db.bak'" -S [serveur] –U [identifiant] -P [mot de passe]
Où
[répertoire du programme] est le répertoire où existe le fichier osql.exe
On 32bit OS c:\Program Files\Microsoft SQL Server\
On 64bit OS 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 adresse IP du serveur
[identifiant] votre nom de connexion utilisateur du serveur ms-sql
[mot de passe] le mot de passe requis
Vous trouverez ci-dessous 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
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 où vous le souhaitez.
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
Si vous pouvez trouver les fichiers de base de données ... "cp DBFiles backup /"
Il est presque certain que ce n'est pas conseillé dans la plupart des cas , mais c'est simple comme bonjour.