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

StackOverflow https://stackoverflow.com/questions/122690

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?

Était-ce utile?

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.

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

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]

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top