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?
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 .
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 .
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
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:
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.
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
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 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
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
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
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é.