begin process at 2010 03 16 08:56:50
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > SQL SERVER - PROCÉDURE STOCKÉE FAISANT UN BACKUP DE TOUTES LES BASES ET JOURNAUX DE TRANSACTION AUTOMATIQUEMENT

SQL SERVER - PROCÉDURE STOCKÉE FAISANT UN BACKUP DE TOUTES LES BASES ET JOURNAUX DE TRANSACTION AUTOMATIQUEMENT


 Information sur la source

Note :
9 / 10 - par 2 personnes
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Divers Classé sous :sqlserver, procedure, backup, sauvegarde, journaux Niveau :Expert Date de création :18/02/2005 Vu :22 588

Auteur : fabrice69

Ecrire un message privé
Site perso
Ce membre participe au partage de revenus publicitaires
Commentaire sur cette source (20)
Ajouter un commentaire et/ou une note


 Description

Dans le cadre des taches administratives il faut bien sur faire des BackUp des bases et Journaux de transaction de SQL Server.
Pour cela le plan de maintenance est utilisable, mais souvent peut poser problème.
Voila donc une Procédure Stockée qui permet de faire ces Backup puis d'enchainer par une compression de ces fichiers via les fichier Windows (CAB).

Vous pouvez spécifier à la procédure stockée le fait de vouloir ou non archiver les Bases, les Log de transaction et de spécifier le répertoire dans lequel il sauvera les fichiers.

Vous pouvez ensuite planifier l'exécution de cette procédure toutes les semaines voire tous les mois, via les jobs de SQL Agent.

Source

  • ----------------------------------------------------------------------------------------------------------------
  • CREATE PROCEDURE dbo.SP_System_SauvegardesTotales
  • /*
  • Permet de sauvegarder toutes les bases et logs et de les compresser (CAB)
  • de toutes les bases du serveur SQL Server
  • */
  • @SauvegardeLogs AS int,
  • @SauvegardeBases AS int,
  • @RepertoireSauvegarde AS VarChar(8000)
  • AS
  • -----------------------------------------------------------------
  • -- Déclaration des Variables
  • DECLARE @name sysname
  • DECLARE @status int
  • DECLARE @TestAutoTruncate bit
  • DECLARE @LaRequette varchar(8000)
  • DECLARE @DateJour varchar(20)
  • DECLARE @Repertoire varchar(8000)
  • DECLARE @RepertoireDefaut varchar(100)
  • -----------------------------------------------------------------
  • -- Initialisation des Variables déclarées
  • SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_')
  • SET @RepertoireDefaut = 'C:\BACKUPBASES\'
  • -----------------------------------------------------------------
  • PRINT '-----------------------------------------------------'
  • PRINT ' DATE DE LA SAUVEGARDE LANCEE : '+ @DateJour
  • PRINT '-----------------------------------------------------'
  • -----------------------------------------------------------------
  • -- Vérification du paramètre du répertoire des Bases et Logs
  • IF RTRIM(@RepertoireSauvegarde) != ''
  • BEGIN
  • PRINT 'Répertoire Fourni à la SP'
  • IF RIGHT(@RepertoireSauvegarde, 1) != '\'
  • SET @Repertoire = @RepertoireSauvegarde + '\'
  • ELSE
  • SET @Repertoire = @RepertoireSauvegarde
  • END
  • ELSE
  • BEGIN
  • PRINT 'Répertoire Non Fourni à la SP - Création du répertoire par défaut : '+ @RepertoireDefaut
  • SET @LaRequette = 'master.dbo.xp_cmdshell ''MKDIR '+ @RepertoireDefaut +''', NO_OUTPUT '
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • SET @Repertoire = @RepertoireDefaut
  • END
  • PRINT 'Répertoire de Sauvegarde des Bases et Logs : '+ @Repertoire
  • -----------------------------------------------------------------
  • -- Déclaration du Curseur sur la liste des Bases de données
  • DECLARE TESTCURSEUR CURSOR
  • FOR SELECT master.dbo.sysdatabases.name, master.dbo.sysdatabases.status
  • FROM master.dbo.sysdatabases
  • -- WHERE (master.dbo.sysdatabases.status & 8)!= 8
  • -- WHERE master.dbo.sysdatabases.name NOT IN ('tempdb', 'model', 'pubs')
  • -- Ouverture du Curseur
  • OPEN TESTCURSEUR
  • FETCH NEXT FROM TESTCURSEUR
  • INTO @name, @status
  • -- Bouclage sur le curseur défini
  • WHILE @@FETCH_STATUS = 0
  • BEGIN
  • -- Vérifie que la base de transaction n'est pas en mode simple (donc pas de log à sauver)
  • SET @TestAutoTruncate = @status & 8
  • /*
  • -- Suivi des valeurs pour tests
  • PRINT 'BASE : '+ @name
  • PRINT 'TEST TRUNCATE : '+ CAST(@TestAutoTruncate AS VARCHAR)
  • PRINT 'Valeur Status : '+ CAST(@status AS VARCHAR)
  • */
  • -----------------------------------------------------------------
  • -- Vérification de la sauvegarde des Logs de Bases demandée
  • IF (@SauvegardeLogs = 1) AND (@TestAutoTruncate = 0)
  • BEGIN
  • PRINT ''
  • PRINT '-----------------------------------------------------'
  • PRINT 'BACKUP DU LOG DE LA BASE DE DONNEES : '+ @name
  • ----------------- LOGS -----------------------------
  • -- Sauvegarde du Log de transaction courant dans le Curseur
  • SET @LaRequette = 'USE '+ @name +' EXEC sp_addumpdevice ''DISK'', '''+ @name +'Log'', '''+ @Repertoire + @name +'Log.BAK'' BACKUP LOG '+ @name +' TO '+ @name +'Log'
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • -- Suppression du device déclaré dans la table Master.Sysdevices
  • SET @LaRequette = 'USE '+ @name +' EXEC sp_dropdevice '''+ @name +'Log'' '
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • -- Archivage du fichier BAK avec le format Windows CAB
  • SET @LaRequette = 'master.dbo.xp_cmdshell ''C:\WINDOWS\system32\makecab /V[1] /L '+ @Repertoire +' '+ @Repertoire + @name +'Log.BAK '+ @name +'Log_'+ @DateJour +'.cab'', NO_OUTPUT '
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • -- Suppression du fichier BAK
  • SET @LaRequette = 'master.dbo.xp_cmdshell ''DEL '+ @Repertoire + @name +'Log.BAK'', NO_OUTPUT '
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • END
  • -----------------------------------------------------------------
  • -- Vérification de la sauvegarde des Bases de données demandée
  • IF @SauvegardeBases = 1
  • BEGIN
  • PRINT ''
  • PRINT '-----------------------------------------------------'
  • PRINT 'BACKUP DE LA BASE DE DONNEES : '+ @name
  • ----------------- BASES ----------------------------
  • -- Sauvegarde de la base courante dans le Curseur
  • SET @LaRequette = 'USE '+ @name +' BACKUP DATABASE '+ @name +' TO DISK ='''+ @Repertoire + @name +'.BAK'''
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • -- Archivage du fichier BAK avec le format Windows CAB
  • SET @LaRequette = 'master.dbo.xp_cmdshell ''C:\WINDOWS\system32\makecab /V[1] /L '+ @Repertoire +' '+ @Repertoire + @name +'.BAK '+ @name +'_'+ @DateJour +'.cab'', NO_OUTPUT '
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • -- Suppression du fichier BAK
  • SET @LaRequette = 'master.dbo.xp_cmdshell ''DEL '+ @Repertoire + @name +'.BAK'', NO_OUTPUT '
  • PRINT 'Requette : '+ @LaRequette
  • EXECUTE (@LaRequette)
  • END
  • PRINT ''
  • PRINT '-----------------------------------------------------'
  • -----------------------------------------------------------------
  • -- Avance le curseur d'un Cran
  • FETCH NEXT FROM TESTCURSEUR
  • INTO @name, @status
  • END
  • -----------------------------------------------------------------
  • -- Fermeture du Curseur
  • CLOSE TESTCURSEUR
  • -- Libération de la mémoire prise par le Curseur
  • DEALLOCATE TESTCURSEUR
  • -----------------------------------------------------------------
  • GO
  • ----------------------------------------------------------------------------------------------------------------
  • -- Vous pouvez utiliser cette SP comme suit :
  • -- EXEC dbo.SP_System_SauvegardesTotales 1, 0, 'C:\MonBacUpDeBases\' > il archivera les Logs de Transaction sans les bases
  • -- EXEC dbo.SP_System_SauvegardesTotales 0, 1, 'C:\MonBacUpDeBases\' > il archivera les bases sans les Logs de Transaction
  • -- EXEC dbo.SP_System_SauvegardesTotales 1, 1, '' > il archivera les bases et les Logs de Transaction dans le répertoire par défaut 'C:\BACKUPBASES\'
----------------------------------------------------------------------------------------------------------------
CREATE PROCEDURE dbo.SP_System_SauvegardesTotales
/* 
	Permet de sauvegarder toutes les bases et logs et de les compresser (CAB)
 	de toutes les bases du serveur SQL Server 
*/
	@SauvegardeLogs		AS int,
	@SauvegardeBases	AS int,
	@RepertoireSauvegarde	AS VarChar(8000)

AS

-----------------------------------------------------------------
-- Déclaration des Variables
DECLARE @name sysname
DECLARE @status int
DECLARE @TestAutoTruncate bit
DECLARE @LaRequette varchar(8000)
DECLARE @DateJour varchar(20)
DECLARE @Repertoire varchar(8000)
DECLARE @RepertoireDefaut varchar(100)

-----------------------------------------------------------------
-- Initialisation des Variables déclarées
SET @DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_')
SET @RepertoireDefaut = 'C:\BACKUPBASES\'

-----------------------------------------------------------------
PRINT '-----------------------------------------------------'
PRINT '    DATE DE LA SAUVEGARDE LANCEE : '+ @DateJour
PRINT '-----------------------------------------------------'

-----------------------------------------------------------------
-- Vérification du paramètre du répertoire des Bases et Logs
IF RTRIM(@RepertoireSauvegarde) != '' 
	BEGIN
		PRINT 'Répertoire Fourni à la SP'
		IF RIGHT(@RepertoireSauvegarde, 1) != '\'
			SET @Repertoire = @RepertoireSauvegarde + '\'
		ELSE
			SET @Repertoire = @RepertoireSauvegarde
	END
ELSE
	BEGIN
		PRINT 'Répertoire Non Fourni à la SP - Création du répertoire par défaut : '+ @RepertoireDefaut
		SET @LaRequette = 'master.dbo.xp_cmdshell ''MKDIR '+ @RepertoireDefaut +''', NO_OUTPUT '
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)
		SET @Repertoire = @RepertoireDefaut
	END

PRINT 'Répertoire de Sauvegarde des Bases et Logs : '+ @Repertoire
	
-----------------------------------------------------------------
-- Déclaration du Curseur sur la liste des Bases de données
DECLARE TESTCURSEUR CURSOR
	FOR SELECT master.dbo.sysdatabases.name, master.dbo.sysdatabases.status 
	FROM master.dbo.sysdatabases 

--		WHERE (master.dbo.sysdatabases.status & 8)!= 8
--		WHERE master.dbo.sysdatabases.name  NOT IN ('tempdb', 'model', 'pubs')

-- Ouverture du Curseur
OPEN TESTCURSEUR
FETCH NEXT FROM TESTCURSEUR
INTO @name, @status

-- Bouclage sur le curseur défini
WHILE @@FETCH_STATUS = 0

BEGIN 
	-- Vérifie que la base de transaction n'est pas en mode simple (donc pas de log à sauver)
	SET @TestAutoTruncate = @status & 8

/*
	-- Suivi des valeurs pour tests
	PRINT 'BASE : '+ @name
	PRINT 'TEST TRUNCATE : '+ CAST(@TestAutoTruncate AS VARCHAR)
	PRINT 'Valeur Status : '+ CAST(@status AS VARCHAR)
*/

	-----------------------------------------------------------------
	-- Vérification de la sauvegarde des Logs de Bases demandée
	IF (@SauvegardeLogs = 1) AND (@TestAutoTruncate = 0)
	BEGIN

		PRINT ''
		PRINT '-----------------------------------------------------'
		PRINT 'BACKUP DU LOG DE LA BASE DE DONNEES : '+ @name
	
		----------------- LOGS -----------------------------
		-- Sauvegarde du Log de transaction courant dans le Curseur
		SET @LaRequette = 'USE '+ @name +' EXEC sp_addumpdevice ''DISK'', '''+ @name +'Log'', '''+ @Repertoire + @name +'Log.BAK'' BACKUP LOG '+ @name +' TO '+ @name +'Log'
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)

		-- Suppression du device déclaré dans la table Master.Sysdevices
		SET @LaRequette = 'USE '+ @name +' EXEC sp_dropdevice '''+ @name +'Log'' '
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)
	
		-- Archivage du fichier BAK avec le format Windows CAB
		SET @LaRequette = 'master.dbo.xp_cmdshell ''C:\WINDOWS\system32\makecab /V[1] /L '+ @Repertoire +' '+ @Repertoire + @name +'Log.BAK '+ @name +'Log_'+ @DateJour +'.cab'', NO_OUTPUT '
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)
	
		-- Suppression du fichier BAK
		SET @LaRequette = 'master.dbo.xp_cmdshell ''DEL '+ @Repertoire + @name +'Log.BAK'', NO_OUTPUT '
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)
	END

	-----------------------------------------------------------------
	-- Vérification de la sauvegarde des Bases de données demandée
	IF @SauvegardeBases = 1 
	BEGIN
		PRINT ''
		PRINT '-----------------------------------------------------'
		PRINT 'BACKUP DE LA BASE DE DONNEES : '+ @name
		----------------- BASES ----------------------------
		-- Sauvegarde de la base courante dans le Curseur
		SET @LaRequette = 'USE '+ @name +' BACKUP DATABASE '+ @name +' TO DISK ='''+ @Repertoire + @name +'.BAK'''
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)
	
		-- Archivage du fichier BAK avec le format Windows CAB
		SET @LaRequette = 'master.dbo.xp_cmdshell ''C:\WINDOWS\system32\makecab /V[1] /L '+ @Repertoire +' '+ @Repertoire + @name +'.BAK '+ @name +'_'+ @DateJour +'.cab'', NO_OUTPUT '
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)
	
		-- Suppression du fichier BAK
		SET @LaRequette = 'master.dbo.xp_cmdshell ''DEL '+ @Repertoire + @name +'.BAK'', NO_OUTPUT '
		PRINT 'Requette : '+ @LaRequette
		EXECUTE (@LaRequette)
	END

	PRINT ''
	PRINT '-----------------------------------------------------'

	-----------------------------------------------------------------
	-- Avance le curseur d'un Cran
	FETCH NEXT FROM TESTCURSEUR
	INTO @name, @status

END

-----------------------------------------------------------------
-- Fermeture du Curseur 
CLOSE TESTCURSEUR

-- Libération de la mémoire prise par le Curseur 
DEALLOCATE TESTCURSEUR

-----------------------------------------------------------------
GO

----------------------------------------------------------------------------------------------------------------

-- Vous pouvez utiliser cette SP comme suit : 
-- EXEC dbo.SP_System_SauvegardesTotales 1, 0, 'C:\MonBacUpDeBases\' > il archivera les Logs de Transaction sans les bases
-- EXEC dbo.SP_System_SauvegardesTotales 0, 1, 'C:\MonBacUpDeBases\' > il archivera les bases sans les Logs de Transaction
-- EXEC dbo.SP_System_SauvegardesTotales 1, 1, '' > il archivera les bases et les Logs de Transaction dans le répertoire par défaut 'C:\BACKUPBASES\'





 Conclusion

En espérant que cette SP vous rende service.

Bon coding

Romelard Fabrice (Alias F___)


 Sources du même auteur

SQL SERVER - OBTENIR LES VALEURS CORRESPONDANT A DES UNICODE
SQL SERVER 2000 - VIDER ET COMPACTER TOUTES LES BASES DE DON...
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN...
SQL SERVER - OBTENIR LA POSITION DU PREMIER CHIFFRE D'UNE CH...
SQL SERVER - UPDATE D'UNE TABLE EN BOUCLE PAR LOT

 Sources de la même categorie

CAPTURE DES CHANGEMENTS DE DONNÉES (CDC: CHANGE DATA CAPTURE... par wissemhabboub
INTERPRETEUR BRAINFUCK par coucou747
CRÉATION D'UNE BASE DE DONNÉE AVEC FICHIER DE DONNÉES, JOURN... par fearmaker
MYSQL : CRÉATION D'UN GUID par maitredede
SQL SERVER 2005 : OBTENIR LA LISTE DES BASES DE CONTENU D'UN... par fabrice69

 Sources en rapport avec celle ci

SQL SERVER - RESTAURER UNE BASE DEPUIS UN BACKUP par fabrice69
MYSQL - MISE EN PLACE D'UN BACKUP AUTOMATIQUE DES BASES DE D... par fabrice69
BACKUP DU FICHIER LOG par jfperras
SQL SERVER - PROCÉDURE STOCKÉE METTANT À JOUR TOUTES LES STA... par fabrice69
SQL SERVER - REQUETTE POUR OBTENIR LES INFORMATIONS D'UNE PR... par fabrice69

Commentaires et avis

Commentaire de dhardy le 17/10/2005 14:27:50

Bonjour Fabrice,

Aurais-tu le même type de procédure au niveau de la restauration ?
Je dois faire des transferts d'un base de données réseau vers un portable. La procédure de sauvegarde m'est donc très utile mais je dois la restaurer sur un base de données sur un portable.

Merci
PS : mon adresse e-mail est dha@sigroup.be pour plus de facilité.

Commentaire de fabrice69 le 17/10/2005 14:59:11 administrateur CS

Bonjour,

Vous devez utiliser la commande RESTORE, tel que l'exemple ci dessous :
---------------------------------------
RESTORE FILELISTONLY
   FROM DISK = 'c:\Northwind.bak'
GO
---------------------------------------
> Cette commande restaure la base dans sa configuration d'origine (répertoires pour les fichiers de Log et Base)

---------------------------------------
RESTORE DATABASE TestDB
   FROM DISK = 'c:\Northwind.bak'
   WITH MOVE 'Northwind' TO 'c:\test\testdb.mdf',
   MOVE 'Northwind_log' TO 'c:\test\testdb.ldf'
GO
---------------------------------------
> Cette commande restaure la base en spécifiant un chemin donné pour le fichier de base et un autre pour le fichier de Log.

Cordialement
Romelard Fabrice.

Commentaire de nourwahiba le 17/04/2007 14:48:09

bonjour

je trouve que cette procedure est trés compliquée( au moin pour moi)
alors si je veux faire un backup juste a une base de donnée et non pas a toutes les bases de sql quoi changer exactement
merci pour vous

Commentaire de fabrice69 le 17/04/2007 15:24:44 administrateur CS

Bonjour,

La commande de backup est la suivante :
- ' BACKUP DATABASE '+ @name +' TO DISK ='''+ @Repertoire + @name +'.BAK'''

Cordialement
Romelard Fabrice [MVP]

Commentaire de Womby le 27/04/2007 15:53:45

Très pratique et instructif. Merci :)

Commentaire de nourwahiba le 13/05/2007 11:43:07

salam alikoum
merci a vous  fabrice69
alors j'ai mon application vb qui accede a une base de donnée sql server
a partir de mon application je fais un backup :
j'ai cree une procedure stockée en sql server qui a a comme parametre le nom de la base et  le chemin :

CREATE PROCEDURE BackupTeste

@base as varchar(800),
@chemin  nvarchar(1000)
AS
BACKUP DATABASE @base
To DISK = @chemin
GO

lorsque j'execute mon application sur mon server ( server2005)ca marche tres bien mais quand je l'execute sous reseau( un autre pc(portable2005) sous reseau qui a aussi le sql serveur ça marche pas meme je fais arreté le server portable2005 pour garder que le server2005 mais  ça marche pas ) comment  faire un backup sous reseau svp et merci pour votre aide

bonne suite

Commentaire de simbole12 le 15/01/2008 04:28:32

slt a ts..
j'ai 1 problem sur le backup d'1 fichier journale sous sql server,voila les codes que j'ai fait apré bien sur le buckup complete:
use master
backup log nom_da_la_base to unite2 with noinit
et voila le message d'erreur:
Serveur : Msg 4208, Niveau 16, État 1, Ligne 2
L'instruction BACKUP LOG n'est pas autorisée lorsque le modèle de récupération est SIMPLE. Faites appel à BACKUP DATABASE ou modifiez le modèle de récupération au moyen de sp_dboption.
Serveur : Msg 3013, Niveau 16, État 1, Ligne 2
BACKUP LOG s'est terminé anormalement.
merci pr vetre aide

Commentaire de fabrice69 le 15/01/2008 09:43:21 administrateur CS

Bonjour,
Le mode "Simple" de journalisation ne fait pas bouger le fichier des logs de transaction.
De ce fait le backup des log ne peut pas se faire.
Je vous invite à lire la documentation sur le sujet :
- http://sql.developpez.com/sqlserver/log/
Cordialement
Romelard Fabrice

Commentaire de nourwahiba le 15/01/2008 11:04:45

bonjour tout le monde
a vous  fabrice69
est ce qui'l est possible de protéger ma base de données sous sql server ..je m'explique ...j'ai installer sql server  dans un PC SERVER  jai ma base "COMMERCAILE08"    il ya 3 personnes qui ont le mot de passe du server  alors comment faire pour les empécher d'acceder carement a entreprise manager ou bien a ma ma base et la consulter

merci a vous tous et bon courage

Commentaire de fabrice69 le 15/01/2008 13:46:58 administrateur CS

Bonjour,
Ce message n'a aucun rapport avec le sujet de cette source.
Je vous invite à poser votre question sur le forum adéquat.
Cordialement
Romelard Fabrice

Commentaire de AMEDTIAB le 24/02/2008 11:01:10

bonjour
la procédure proposée est très instructive et je vous en remercie à titre indivuel, je commence dans le transact SQL et c'est pour moi une veritable bibliothèque.

Commentaire de Nic0s le 19/09/2008 18:48:55

attention le C:\WINDOWS\system32\makecab  est à adapter en focntion du systeme utilisé dans mon cas C:\WINNT\system32\makecab

Commentaire de omardelphi2007 le 05/10/2008 15:18:11

merci et bon courrage

Commentaire de MattZ le 12/02/2009 15:53:25

Bonjour,
La procédure ne fonctionne pas chez moi. Je m'y prends peut-être mal.
J'ai déposé la procédure stoquée dans la base master.
Je l'exécute dans Microsoft SQL Server Management Studio Express. Ce qui le fait planter.
Je l'ai ensuite essayée dans Toad 3.1 pour SQL Server avec la commande : EXEC SP_System_SauvegardesTotales 1, 1, 'C:\BackupExpress2\'
Le message suivant apparaît 11 fois :
"Impossible d'effectuer une sauvegarde ou une restauration dans une transaction.
BACKUP DATABASE s'est terminé anormalement."

Puis
"Requette : master.dbo.xp_cmdshell 'C:\WINDOWS\system32\makecab /V[1] /L C:\BackupExpress2\ C:\BackupExpress2\master.BAK master_2009_02_12.cab', NO_OUTPUT
Requette : master.dbo.xp_cmdshell 'DEL C:\BackupExpress2\master.BAK', NO_OUTPUT

-----------------------------------------------------"

-----------------------------------------------------
BACKUP DE LA BASE DE DONNEES : tempdb
Requette : USE tempdb BACKUP DATABASE tempdb TO DISK ='C:\BackupExpress2\tempdb.BAK'
Requette : master.dbo.xp_cmdshell 'C:\WINDOWS\system32\makecab /V[1] /L C:\BackupExpress2\ C:\BackupExpress2\tempdb.BAK tempdb_2009_02_12.cab', NO_OUTPUT
Requette : master.dbo.xp_cmdshell 'DEL C:\BackupExpress2\tempdb.BAK', NO_OUTPUT

Et ainsi de suite pour chaque base.

J'ai donc utilisé la fonction DEBUG de TOAD.
Ce qui est intéressant, c'est que la fonction PRINT fonctionne correctement lors du debogage du script jusqu'à la ligne EXECUTE
à la fin de
-- Sauvegarde de la base courante dans le Curseur
SET @LaRequette = 'USE '+ @name +' BACKUP DATABASE '+ @name +' TO DISK ='''+ @Repertoire + @name +'.BAK'''
PRINT 'Requette : '+ @LaRequette
EXECUTE (@LaRequette)

Ensuite, ça mouline, sans sortie PRINT. Jusqu'au message d'erreur affiché plus haut.

Je ne vois pas comment corriger le tir.

Pour info, je suis sur SQL SERVER EXPRESS 2005 SP3.

Merci pour toute précison

Commentaire de nsegi le 24/06/2009 09:36:19

Bonjour Mr Fabrice. Je trouve que c'est tres genial ce bout de code et tres pratique
mais en fait je ne vois pas le parametrage de temps d'execution (pendant apres tel periode)
Comment le faire?
merci

Commentaire de julius06 le 21/10/2009 18:50:51

Merci beaucoup pour ce script, très pratique, que j'utilise depuis un moment maintenant.

Est-il possible de limiter l'utilisation du cpu par la sauvegarde?


Commentaire de usager2009 le 23/10/2009 23:07:12

Bonjour,

J'ai le même questionnement que MATTZ. Est-ce possible d'utiliser cette procédure stockée avec "Microsoft SQL Server Management Studio Express". Si oui, comment faire étape par étape. Moi je réussis seulement à faire un backup de mes BD à partir de l'interface de la console de management ou en générant les scripts, ensuite les exécuter dans des batchs avec la commande sqlcmd. En fait, je me retrouves avec plusieurs batchs et tâches planifiées pour mes backups de BD, ce qui est lourd à gérer. Merci

Commentaire de fabrice69 le 24/10/2009 00:54:55 administrateur CS

Bonjour,
Cela vient du fait que cette procédure utilise après la sauvegarde un module de compression (standard sous Windows - MakeCab).
Pour exécuter cette commande, on doit utiliser la procédure system de SQL Server "dbo.xp_cmdshell" qui permet d'exécuter des fichiers exécutable dans le contexte SQL Server.
Cette procédure stockée est désactivée de base sous SQL Server 2005 et 2008. Il vous faut chercher dans les options pour la réactiver (je ne me souviens plus exactement ou mais ca doit être dans l'outil danalyse de la surface de mémoire).

Si vous ne voulez pas être géné avec ca, il suffit de désactiver (commentaire devant la ligne -- souc SQL Server) les lignes 129 et 134

Cordialement
Romelard Fabrice [MVP]

Commentaire de scub82 le 26/01/2010 10:14:07 9/10

Bonjour,
J'ai testé cette procédure qui marche très bien néanmoins j'ai un problème concernant une des bases. Le back up ne se fait pas car il semble que le nom de a base comporte un espace.
Il y a t il un moyen de régler ce problème?

merci d'avance.

Commentaire de fabrice69 le 26/01/2010 11:14:08 administrateur CS

Bonjour,
Dans ce cas, il faut mettre le nom de la base entre crochets [xxxxxxx]
Cordialement
Fabrice Romelard [MVP]

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Sauvegarde automatique sqlserver 2000 [ par jojos89 ] Salut a tous,J'ai une base de données en local sur mon pc (avec sqlserver 2000)que je voudrais sauvegardé automatique (tous les soir) s aide pour SQLSERVER [ par nagrom_om ] salut,quelqu'un sait il comment peut on avoir un listing des requetes qui sont passées sous SQL Server ??Merci ! ms access - sqlserver - procédurestockée [ par metasky ] bonjour,je suis actuellement sur une appli liant access et sqlserver...quand je consulte mes procédures stockées dans mon projet access les sauvegarde access [ par fififoufou2 ] Bonjour, Est-il possible de sauvegarder une bdd Access à l'aide d'une commande sql. A la limite, en exporter les données au format word, excel ou autr Backup et restauration avec les recovery model [ par bubix ] Bonsoir, Je veux réaliser un backup complet de ma base.  Ensuite, je veux faire un backup de journal des transactions.J'utilise la commande procedure stocké sqlhelper [ par htmlchef ] Bonjour, Je developpe en VB.NET et j utilise la classe Sqlhelper de puis l'éspace de noms Microsoft.ApplicationBlocks.Data pour appeler une Proce Quel outil pour SqlServer [ par padurand ] Mon site tourne avec une base de donnees Access, et des pages ASP.Je voudrais remplacer Access par SqlServer ... a priori il ne devrait pas y avoir de exporter des donnees de sqlserver 2005 vers access (dts) [ par tenrod ] Salut a tous ,Voila je travail avec une base sql server 2005 et je voudrais exporter le résultat d'une requete (a partir de ma base sql server) d procedures stockée avec Mysql [ par emna_bz ] Bonjour ,J'ai crée la procedure stockée suivante: CREATE procedure spGetCategorie(Catlien varchar(30) ,out Name varchar(30) ) BEGI 1ere procedure stockée [ par matlocker ] Bonjour a tous,Je realise acuellement ma premiere procedure stockée sous SQL Server 2000.Je dois recuperer dans une table la liste des symbol qui


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,062 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales