Sauvegarde des bases SQL serveur 2005 express

francoissql Messages postés 12 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 11 mai 2011 - 22 juin 2009 à 13:55
francoissql Messages postés 12 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 11 mai 2011 - 20 août 2009 à 13:36
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="ProgId" content="Word.Document" />
<meta name="Generator" content="Microsoft Word 11" />
<meta name="Originator" content="Microsoft Word 11" />
<link rel="File-List" href="file:///C:%5CDOCUME%7E1%5Cfm%5CLOCALS%7E1%5CTemp%5Cmsohtml1%5C01%5Cclip_filelist.xml" />
<!--[if gte mso 9]><xml>
<w:WordDocument>
<w:View>Normal</w:View>
<w:Zoom>0</w:Zoom>
<w:HyphenationZone>21</w:HyphenationZone>
<w:PunctuationKerning/>
<w:ValidateAgainstSchemas/>
<w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid>
<w:IgnoreMixedContent>false</w:IgnoreMixedContent>
<w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText>
<w:Compatibility>
<w:BreakWrappedTables/>
<w:SnapToGridInCell/>
<w:WrapTextWithPunct/>
<w:UseAsianBreakRules/>
<w:DontGrowAutofit/>
</w:Compatibility>
<w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel>
</w:WordDocument>
</xml><![endif]-->
<!--[if gte mso 9]><xml>
<w:LatentStyles DefLockedState="false" LatentStyleCount="156">
</w:LatentStyles>
</xml><![endif]-->
<style>
<!--
/* Font Definitions */
@font-face
{font-family:"Century Gothic";
panose-1:2 11 5 2 2 2 2 2 2 4;
mso-font-charset:0;
mso-generic-font-family:swiss;
mso-font-pitch:variable;
mso-font-signature:647 0 0 0 159 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:11.0pt;
mso-bidi-font-size:12.0pt;
font-family:"Century Gothic";
mso-fareast-font-family:"Times New Roman";
mso-bidi-font-family:"Times New Roman";
mso-ansi-language:FR-CH;}
@page Section1
{size:595.3pt 841.9pt;
margin:42.55pt 1.0cm 1.0cm 1.0cm;
mso-header-margin:35.45pt;
mso-footer-margin:35.45pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
-->
</style>
<!--[if gte mso 10]>
<style>
/* Style Definitions */
table.MsoNormalTable
{mso-style-name:"Tableau Normal";
mso-tstyle-rowband-size:0;
mso-tstyle-colband-size:0;
mso-style-noshow:yes;
mso-style-parent:"";
mso-padding-alt:0cm 5.4pt 0cm 5.4pt;
mso-para-margin:0cm;
mso-para-margin-bottom:.0001pt;
mso-pagination:widow-orphan;
font-size:10.0pt;
font-family:"Times New Roman";
mso-ansi-language:#0400;
mso-fareast-language:#0400;
mso-bidi-language:#0400;}
</style>
<![endif]-->

Je désire sauvegarder mes bases de données
Express Server 2005 avec la requête suivante :






 






CREATE
PROCEDURE dbo.SP_System_SauvegardesTotales





@SauvegardeLogs
AS int,





@SauvegardeBases
AS int,





@RepertoireSauvegarde
AS VarChar(8000)





AS





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)





SET
@DateJour = REPLACE(CONVERT(VARCHAR, GetDate(), 102), '.', '_')





SET
@RepertoireDefaut = 'C:\BACKUPBASES\'





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





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





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





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





DECLARE
TESTCURSEUR CURSOR





FOR SELECT
master.dbo.sysdatabases.name, master.dbo.sysdatabases.status





FROM
master.dbo.sysdatabases





OPEN
TESTCURSEUR





FETCH NEXT
FROM TESTCURSEUR





INTO @name,
@status





WHILE
@@FETCH_STATUS = 0





BEGIN





SET @TestAutoTruncate
= @status & 8





IF
(@SauvegardeLogs 1) AND (@TestAutoTruncate 0)





BEGIN





PRINT ''





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





PRINT 'BACKUP DU LOG DE LA BASE DE DONNEES
: '+ @name





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)





SET
@LaRequette = 'USE '+ @name +' EXEC sp_dropdevice '''+ @name +'Log'' '





PRINT 'Requette : '+ @LaRequette





EXECUTE (@LaRequette)





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)





SET
@LaRequette = 'master.dbo.xp_cmdshell ''DEL '+ @Repertoire + @name +'Log.BAK'',
NO_OUTPUT '





PRINT 'Requette : '+ @LaRequette





EXECUTE (@LaRequette)





END





IF
@SauvegardeBases = 1





BEGIN





PRINT ''





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





PRINT 'BACKUP DE LA BASE DE DONNEES : '+
@name





SET
@LaRequette 'USE '+ @name +' BACKUP DATABASE '+ @name +' TO DISK'''+
@Repertoire + @name +'.BAK'''





PRINT 'Requette : '+ @LaRequette





EXECUTE (@LaRequette)





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)





SET
@LaRequette = 'master.dbo.xp_cmdshell ''DEL '+ @Repertoire + @name +'.BAK'',
NO_OUTPUT '





PRINT 'Requette : '+ @LaRequette





EXECUTE (@LaRequette)





END





PRINT ''





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





FETCH NEXT
FROM TESTCURSEUR





INTO @name,
@status





END





CLOSE
TESTCURSEUR





DEALLOCATE
TESTCURSEUR





GO






 







 






La requête semble fonctionner mais lorsque
je lance son exécution par la requète suivante :






 






EXEC
master.dbo.SP_System_SauvegardesTotales 1, 1, 'C:\BackupExpress\'






 






J'ai les messages d'erreurs suivants :






 







 






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






 DATE
DE LA SAUVEGARDE LANCEE : 2009_06_22





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





Répertoire Fourni à la SP





Répertoire de Sauvegarde des Bases et Logs
: C:\BackupExpress\






 







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





BACKUP DE LA BASE DE DONNEES : master





Requette :
USE master BACKUP DATABASE master TO DISK ='C:\BackupExpress\master.BAK'





376 pages traitées pour la base de données
'master', fichier 'master' dans le fichier 1.





3 pages traitées pour la base de données
'master', fichier 'mastlog' dans le fichier 1.





BACKUP DATABASE a traité avec succès 379
pages en 0.263 secondes (11.805 Mo/s).





Requette :
master.dbo.xp_cmdshell 'C:\WINDOWS\system32\makecab /V[1] /L C:\BackupExpress\
C:\BackupExpress\master.BAK master_2009_06_22.cab', NO_OUTPUT





Requette :
master.dbo.xp_cmdshell 'DEL C:\BackupExpress\master.BAK', NO_OUTPUT






 







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






 







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





BACKUP DE LA BASE DE DONNEES : tempdb





Requette :
USE tempdb BACKUP DATABASE tempdb TO DISK ='C:\BackupExpress\tempdb.BAK'





Msg 3147, Niveau 16, État 3, Ligne 1





La sauvegarde et la restauration ne sont
pas autorisées sur la base de données tempdb.





Msg 3013, Niveau 16, État 1, Ligne 1





BACKUP DATABASE s'est terminé anormalement.





Requette :
master.dbo.xp_cmdshell 'C:\WINDOWS\system32\makecab /V[1] /L C:\BackupExpress\
C:\BackupExpress\tempdb.BAK tempdb_2009_06_22.cab', NO_OUTPUT





Requette :
master.dbo.xp_cmdshell 'DEL C:\BackupExpress\tempdb.BAK', NO_OUTPUT






 







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





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





BACKUP DE LA BASE DE DONNEES : SL_M2-200901





Requette :
USE SL_M2-200901 BACKUP DATABASE SL_M2-200901 TO DISK
='C:\BackupExpress\SL_M2-200901.BAK'





Msg 102, Niveau 15, État 1, Ligne 1





Syntaxe incorrecte vers '-'.





Msg 102, Niveau 15, État 1, Ligne 1





Syntaxe incorrecte vers '-'.





Requette :
master.dbo.xp_cmdshell 'C:\WINDOWS\system32\makecab /V[1] /L C:\BackupExpress\
C:\BackupExpress\SL_M2-200901.BAK SL_M2-200901_2009_06_22.cab', NO_OUTPUT





Requette :
master.dbo.xp_cmdshell 'DEL C:\BackupExpress\SL_M2-200901.BAK', NO_OUTPUT






 







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






 







 







 






Qu'est-ce qui n'est pas correct ?






 






Par ailleurs, comment dois-je procéder pour
ne sauvegarder que les bases d'une certaine instance ou que les bases
commençant par exemple par sl ?






 






De plus, que risque-t-on lorsque l'on fait
une sauvegarde par une simple copie des fichiers MDF/LDF ou du répertoire Data
? Que cela change-t-il par rapport à un agent de sauvegarde d'un logiciel
spécifique ?






 






Merci d'avance !





Francois

32 réponses

nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
27 juil. 2009 à 18:43
5) TINA se paye au mega sauvegardé, hors avec une sauvegarde a froid tu sauvegarde beaucoup de vide que tu paye pour rien ;)
0
cs_ferservadou Messages postés 5 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 29 juillet 2009
28 juil. 2009 à 08:49
Après de nombreuses tentatives infructueuses, nos spécialistes TINA - avec le concours de Atempo - m'ont dit que ce n'était pas possible sur cette version.

Le Pb, c'est que je ne maîtrise pas du tout la version, dans la mesure où cette BD est "embedded" et fournie comme support à une appli commerciale : Il n'y a que le moteur, mais aucun outil et aucune info... : Ça a été une galère pour trouver comment créer un compte TINA et lui donner les droits d'administration !

Mais ton idée de script me paraît séduisante... As-tu un lien à me donner pour que je trouve le B-A-BA de la méthode ? (comment fait-on une sauvegarde avec un script, quels sont les fichiers produits et comment fait-on pour restaurer la BD avec ces fichiers-là ?)

Cordialement,
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
28 juil. 2009 à 12:45
B-A-BA :
Avec un utilisateur administrateur local de la machine voici l'exemple dans une boite DOS :
C:\>osql -S BASE -H BASE -E
1> use master;
2> go
1> select name from sysdatabases where name like 'm%';
2> go
name
-----------------------------------------------------------------------------------
master
model
msdb

(3 lignes affectées)
1> backup database msdb to disk = N'C:\Temp\msdb.bak';
2> go
Processed 1584 pages for database 'msdb', file 'MSDBData' on file 2.
Processed 1 pages for database 'msdb', file 'MSDBLog' on file 2.
BACKUP DATABASE successfully processed 1585 pages in 1.051 seconds (12.347 MB/sec).
1> quit

C:\>


Comme tu as un client SQL 2000 j'utilise OSQL mais sache que tu peux faire ca depuis n'importe quelle autre machine (du meme domaine avec un utilisateur admin du domaine si tu veux l'option -E sinon tu y vas avec le compte SA et son mot de passe, pour plus d'information OSQL /? pour avoir l'aide ^^) sur laquelle tu as installer un client SQL 2005 et l'utilitaire SQLCMD, tu peux lancer ton back a distance c'est le pied ;)
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
28 juil. 2009 à 12:47
J'ajoute qu'en etant vicieux tu dois pouvoir installer le client natif SQL 2005 sur ton serveur et faire croire a TINA qu'il a affaire a un serveur SQL 2005 ... de toute facon c'est un ordre Backup qui est passer derriere ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_ferservadou Messages postés 5 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 29 juillet 2009
29 juil. 2009 à 16:42
À quoi sert la première partie, sinon à afficher les 3 noms ?

Chez moi, ça donne exactement le même résultat. J'ai donc sauvegardé msdb :
1> backup database msdb to disk = N'C:\sav\msdb.bak';
2> go
Processed 312 pages for database 'msdb', file 'MSDBData' on file 1.
Processed 1 pages for database 'msdb', file 'MSDBLog' on file 1.
BACKUP DATABASE successfully processed 313 pages in 0.175 seconds (14.616 MB/sec).

Ça marche super bien et ce n'est pas long !

Et maintenant, encore 2 questions :
1)- Comment faut-il faire pour restaurer la BD en cas de besoin ? Je pense qu'il faut lancer la commande
1> restore database msdb from disk = N'C:\sav\msdb.bak';

mais peut-être faut-il arrêter la BD auparavant ???

2)- Pour automatiser tout ça, je le mettrais bien dans une crontab (ou ce qui en tient lieu chez MS). Est-ce que je peux condenser en une seule ligne, du genre:
osql -S LANDESKCTL\LDMSDATA -U sa -P xxxx -Q "backup database msdb to disk = 'C:\sav\msdb.bak';"

Encore merci de ton aide !
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
29 juil. 2009 à 17:35
La premiere partie est juste la pour agrémenter le tout ^^ ca affiche les bases de données présente sur l'instance dont le nom commence par "m" (choisi expret pour n'avoir que les bases systeme microsoft).

Il vas de soit que pour restaurer il faudra via TINA redescendre les fichiers bak sur le disque du serveur et passer la commande restore (Qui comme la commande backup possede un certain nombre de parametres, dans mon exemple les sauvegarde successive s'accumule dans msdb.bak au lieu de se remplacer, ce qui fait que si tu repasse le script ton fichier bak vas doubler de volume, je t'invite donc a regarder les options de la commande backup, de meme pour la commande restore un certain nombre d'option sont disponibles que je t'invite a consulter)

Tu peux utiliser l'option -Q d'OSQL pour passer une requete unitaire, ou l'option -i <nom de fichier> pour passer un fichier de commande SQL.

Pour sauvegarder ton instance tu dois sauvegarder toutes les bases dont master (surtout master).

Aide sur RESTORE
Aide sur BACKUP

Par ailleur, mettre ca en CRONTAB n'est peut etre pas la meilleur solution, en effet il se peut que TINA sauvegarde le repertoire de destination avant ou pendant le backup des bases, ce qui fait que tu n'aura rien d'exploitable coté TINA. En revanche TINA sait lancer des script tu peux donc faire executer ta commande par TINA directement.
0
cs_ferservadou Messages postés 5 Date d'inscription mercredi 7 novembre 2007 Statut Membre Dernière intervention 29 juillet 2009
29 juil. 2009 à 18:04
Pour sauvegarder ton instance tu dois sauvegarder toutes les bases dont master (surtout master).

et model aussi ?

et pour les restaurer ensuite, il y a un ordre à respecter ?

tu peux donc faire executer ta commande par TINA directement

OK, bon plan, ça ! Je vais voir avec eux quand ils rentreront.
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
29 juil. 2009 à 18:15
Model peut etre interressant oui, dans le sens ou elle peut avoir été modifier pour que les nouvelles bases créées sur l'instances aient une configuration particuliere.

Par contre tu dois exclure TempDB qui n'est de toute facon pas sauvegardable.

Pour ce qui est de l'ordre de restauration tu dois commencer par master mais c'est une manoeuvre un peu particuliere car tu dois démarrer l'instance en mode monoutilisateur (flag particulier dans les parametres de démarrage sur service) et restaurer master dans ce mode particulier.
Ensuite tu restaure model et msdb, puis enfin tes bases utilisateurs.


Sinon pour ce qui est de la sauvegarde je te dirais d'utiliser la procédure stockée de francoissql (voir page 1 de ce sujet de discussion) avec les quelques corrections que j'ai pu lui donner en l'épurant de ce qui ne t'interresse pas (genre la compression des fichier bak en cab, le backup des logs etc). Tu n'a plus qu'a lancer la proc via OSQL ce qui vas te généré dynamiquement tous les fichiers bak de chacune de tes bases que tu n'aura plus qu'a sauvegarder avec TINA.
0
francoissql Messages postés 12 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 11 mai 2011
19 août 2009 à 16:03
Je reviens sur mes premiers message concernant la sauvegarde de mes bases

Tout se sauvegarde correctement, il n'y a aucun problème

Par contre, j'ai constaté que le volume de mes fichiers .BAK ne cessait d'augmenter. Je pensais que ce fichier BAK contenait uniquement la dernière sauvegarde et que les précédentes étaient écrasées. Or, ce n'est pas le cas, le fichier BAK contient toutes les sauvegardes ce qui pose un gros problème de place au fil des semaines.

Comment corriger ce problème afin que le BAK ne contienne que la dernière sauvegarde ?

Merci d'avance !

Francois
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
19 août 2009 à 18:42
Il faut spécifier l'option REWIND dans la commande backup, par defaut c'est le NOREWIND et donc l'ajout du nouveau backup au jeu existant ;) :

SET @LaRequette 'USE '+ @name +' BACKUP DATABASE '+ @name +' TO DISK'''+ @Repertoire + @name +'.BAK'' WITH REWIND'
0
nivsql Messages postés 159 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 14 décembre 2010 1
19 août 2009 à 18:44
Oups je me suis trompé, c'est n'est pas REWIND mais INIT ;) par defaut c'est NOINIT :p

SET @LaRequette 'USE '+ @name +' BACKUP DATABASE '+ @name +' TO DISK'''+ @Repertoire + @name +'.BAK'' WITH INIT'

Au temps pour moi ;)
0
francoissql Messages postés 12 Date d'inscription lundi 22 juin 2009 Statut Membre Dernière intervention 11 mai 2011
20 août 2009 à 13:36
Once again... thank you !

Francois
0
Rejoignez-nous