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

cs_dhardy Messages postés 45 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 24 février 2009 - 17 oct. 2005 à 14:27
kraps04 Messages postés 3 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 16 janvier 2012 - 13 janv. 2012 à 14:59
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/29625-sql-server-procedure-stockee-faisant-un-backup-de-toutes-les-bases-et-journaux-de-transaction-automatiquement

kraps04 Messages postés 3 Date d'inscription vendredi 18 juillet 2008 Statut Membre Dernière intervention 16 janvier 2012
13 janv. 2012 à 14:59
Bonjour,
j'ai testé cette procédure qui fonctionne très bien , seulement moi j'ai décidé d'en faire 2 procédures , une pour la sauvegarde des bases de données et une pour les journaux des transactions afin de sauvegarder les journaux plus régulièrement que les bases .
J'ai donc essayer de rajouter l'heure aux nom des fichier de sauvegardes des logs ,mais en vain ,l'heure s'écrivant sous cette forme HH:MM:SS ,les : ne sont pas utilisable dans un nom de fichier .. si vous auriez une réponse pour me venir en aide s'il vous plait .. merci
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
26 janv. 2010 à 11:14
Bonjour,
Dans ce cas, il faut mettre le nom de la base entre crochets [xxxxxxx]
Cordialement
Fabrice Romelard [MVP]
scub82 Messages postés 2 Date d'inscription samedi 2 juillet 2005 Statut Membre Dernière intervention 24 octobre 2014
26 janv. 2010 à 10:14
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.
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
24 oct. 2009 à 00:54
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]
usager2009 Messages postés 1 Date d'inscription vendredi 23 octobre 2009 Statut Membre Dernière intervention 23 octobre 2009
23 oct. 2009 à 23:07
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
julius06 Messages postés 8 Date d'inscription jeudi 23 septembre 2004 Statut Membre Dernière intervention 21 octobre 2009
21 oct. 2009 à 18:50
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?
nsegi Messages postés 31 Date d'inscription mardi 22 juillet 2008 Statut Membre Dernière intervention 20 décembre 2013
24 juin 2009 à 09:36
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
cs_MattZ Messages postés 2 Date d'inscription vendredi 30 août 2002 Statut Membre Dernière intervention 12 février 2009
12 févr. 2009 à 15:53
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
omardelphi2007 Messages postés 1 Date d'inscription mercredi 17 janvier 2007 Statut Membre Dernière intervention 5 octobre 2008
5 oct. 2008 à 15:18
merci et bon courrage
Nic0s Messages postés 10 Date d'inscription vendredi 2 avril 2004 Statut Membre Dernière intervention 18 décembre 2008
19 sept. 2008 à 18:48
attention le C:\WINDOWS\system32\makecab est à adapter en focntion du systeme utilisé dans mon cas C:\WINNT\system32\makecab
AMEDTIAB Messages postés 1 Date d'inscription dimanche 21 août 2005 Statut Membre Dernière intervention 24 février 2008
24 févr. 2008 à 11:01
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.
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
15 janv. 2008 à 13:46
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
nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011
15 janv. 2008 à 11:04
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
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
15 janv. 2008 à 09:43
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
simbole12 Messages postés 1 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 15 janvier 2008
15 janv. 2008 à 04:28
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
nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011
13 mai 2007 à 11:43
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
cs_Womby Messages postés 69 Date d'inscription jeudi 29 août 2002 Statut Membre Dernière intervention 27 avril 2007
27 avril 2007 à 15:53
Très pratique et instructif. Merci :)
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
17 avril 2007 à 15:24
Bonjour,

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

Cordialement
Romelard Fabrice [MVP]
nourwahiba Messages postés 82 Date d'inscription mardi 18 octobre 2005 Statut Membre Dernière intervention 23 juin 2011
17 avril 2007 à 14:48
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
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
17 oct. 2005 à 14:59
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.
cs_dhardy Messages postés 45 Date d'inscription lundi 23 juin 2003 Statut Membre Dernière intervention 24 février 2009
17 oct. 2005 à 14:27
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é.
Rejoignez-nous