begin process at 2012 05 27 05:14:56
  Trouver un code source :
 
dans
 
Accueil > Forum > 

SQL

 > 

SQL Server, MSDE, SQL Express

 > 

Requêtes

 > 

Sauvegarde des bases SQL serveur 2005 express


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Sauvegarde des bases SQL serveur 2005 express

lundi 22 juin 2009 à 13:55:24 | Sauvegarde des bases SQL serveur 2005 express

francoissql

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
lundi 22 juin 2009 à 16:22:10 | Re : Sauvegarde des bases SQL serveur 2005 express

nivsql


A premiere vue je dirais que le - problématique viens du nom de la base dans la commande USE.

Je changerais ainsi :

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

Cela devrais corriger ton probleme.


Pour restreindre les bases a sauvegarder je modifirais le curseur :


DECLARE TESTCURSEUR CURSOR
FOR SELECT master.dbo.sysdatabases.name, master.dbo.sysdatabases.status
FROM master.dbo.sysdatabases
WHERE master.dbo.sysdatabases.name LIKE 'SL%'

Pour ce qui est de sauvegarder le repertoir DATA, il n'y a aucun risque si ton SQL EXPRESS est arrêté, on appel cela une sauvegarde à froid.
La commande backup permet de faire des sauvegarde à chaud (instance SQL EXPRESS démarrée). C'est a toi de voir selon tes problématique de disponibilité.

Si ton SQL EXPRESS est démarré et que tu sauvegarde le repertoir DATA tes fichiers de bases de données ont toutes les chances de ne pas etre cohérant et de ne jamais pouvoir servir a réstauré quoi que ce soit.
lundi 22 juin 2009 à 16:50:47 | Re : Sauvegarde des bases SQL serveur 2005 express

francoissql

Merci bcp pour ta rapide réponse. Je vais aller dans le sens indiqué et regarder le résultat

Par contre, concernant le chaud vs froid, j'imagine que ça peut poser un problème si on fait une sauvegarde (simple copie des fichiers) à chaud alors que des utilisateurs travaillent sur la base. Par contre, si le copie se fait au milieu de la nuit et que personne ne travaille dessus, est-ce vraiment problématique ?

Merci d'avance !

Francois
lundi 22 juin 2009 à 16:58:46 | Re : Sauvegarde des bases SQL serveur 2005 express

nivsql

Tant que ton serveur SQL est démarré cela reste problématique, il n'y a pas que les tables utilisateurs dans ta base et les tables systems vivent meme sans utilisateurs connectés. En revanche si tu es sur qu'aucun utilisateur ne se connecte, il y a peu de probleme pour arreter le service Sql Server (SQLEXPRESS) (via commande DOS : net stop MSSQL$SQLEXPRESS ) copier tes fichiers .mdf et .ldf dans un repertoire de sauvegarde et redémarrer le service (via la commande DOS : Net start MSSQL$SQLEXPRESS )
lundi 22 juin 2009 à 18:13:38 | Re : Sauvegarde des bases SQL serveur 2005 express

nivsql

je me relis et je vois que j'ai oublier quelque chose.

Quand je te fais rajouter des [] pour encadrer ton nom de base dans la commande USE il faut aussi les rajouter dans la commande backup :

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

mercredi 24 juin 2009 à 10:01:07 | Re : Sauvegarde des bases SQL serveur 2005 express

francoissql

Merci beaucoup, ça semble bien marcher. J'ai juste encore deux erreurs :

BACKUP DE LA BASE DE DONNEES : master
Requette : USE [master] BACKUP DATABASE [master] TO DISK ='C:\BackupExpress\master.BAK'
Msg 3201, Niveau 16, État 1, Ligne 1
Impossible d'ouvrir l'unité de sauvegarde 'C:\BackupExpress\master.BAK'. Erreur 3(Le chemin d'accès spécifié est introuvable.) du système d'exploitation.
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\master.BAK master_2009_06_24.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_24.cab', NO_OUTPUT
Requette : master.dbo.xp_cmdshell 'DEL C:\BackupExpress\tempdb.BAK', NO_OUTPUT


Par contre, ces deux tables (tempdb et master) ne semblent pas contenir de données significatives, je peux m'en passer je pense ?!

Merci encore !

Francois
mercredi 24 juin 2009 à 11:53:07 | Re : Sauvegarde des bases SQL serveur 2005 express

nivsql

Tempdb tu peux largement t'en passer. Elle ne contient que des objets temporaire déstiné aux tris. Pour information cette base est détruite et recréée a chaque démarrage de l'instance. C'est d'ailleur pour ca que tu ne peux pas la sauvegarder (comme indiquer dans le message d'erreur).

La base master en revanche est d'une importance capitale car c'est elle qui contient toutes les informations de fonctionnement du moteur.  Je te recommande de la sauvegarder à chaque fois que tu manipule un objet du serveur (connexion, nouvelle base, option de l'instance, etc.)
Pour ton erreur sur la sauvegarde de master c'est simplement que le repertoir de destination n'existe pas sur ton disque C:

Pour ne pas t'ennuyer tu peux ajouter au debut de ton script :

master

.dbo.xp_cmdshell'mkdir C:\BackupExpress\', NO_OUTPUT
mercredi 24 juin 2009 à 14:32:53 | Re : Sauvegarde des bases SQL serveur 2005 express

francoissql

Pour le problème Master, ça fonctionne

Par contre, je désire exclure la table tempdb mais ça ne joue toujours pas. J'ai essayé :

WHERE master.dbo.sysdatabases.name not LIKE 'tempdb%'

ou encore

WHERE master.dbo.sysdatabases.name <> 'tempdb'


Est-ce que ça vient du fait que c'est une base du système et non une base normale ? Y'a une solution pour l'exclure et ainsi avoir une sauvegarde sans erreur ?

Merci encore pour tes rapides réponses ! Normalement c'est ma dernière demande, après c'est tout bon !

Francois
mercredi 24 juin 2009 à 15:03:59 | Re : Sauvegarde des bases SQL serveur 2005 express

nivsql

normalement ton curseur devrait ressembler a ca :



DECLARE TESTCURSEUR CURSOR
FOR SELECT master.dbo.sysdatabases.name, master.dbo.sysdatabases.status
FROM master.dbo.sysdatabases
WHERE master.dbo.sysdatabases.name not in ('tempdb','model')

(j'exclus aussi model qui ne presente pas d'interet particulier dans la plus part des cas).

Je viens de tester ta proc chez moi avec ce curseur, elle fonctionne parfaitement et tempdb est bien exclue.
mercredi 24 juin 2009 à 16:21:35 | Re : Sauvegarde des bases SQL serveur 2005 express

francoissql

Mille mercis, ça fonctionne enfin parfaitement. @+

1 2 3 4

Cette discussion est classée dans : requette, name, print, master, larequette


Répondre à ce message

Sujets en rapport avec ce message

requette select [ par beny100 ] bonjour,je desire effectuer une requette qui donne une somme  selon que dans la colonne il existe une element nommé envap ou enva  avec une condition probleme dans une requette [ par saragi ] j'ai un probleme dans une requette$req="SELECT SUM(nbre) as total,date,offre_id         FROM vendre         GROUP BY(offre_id,date)";lorsque je fais g Erreur parametrage de clause SELECT [ par zen69 ] Bonjours à tous!J'ai un problem ici avec une Proc Stockée que je suis en train de construire.WHILE (@loop     BEGIN        SET @fld_list = @fld_list + ORDER BY avec paramètre de Sort [ par billou_13 ] Bonjour à tous,Alors voila, je suis en train de travailler sur une procédure stockée et je voudrais savoir comment rendre dynamique mon order by pour requette - deux serveur [ par skiso ] jai une table (annonces) en local, et la meme table sur un serveur distantje veux remplire s'elle distant avec s'elle qui es local.j'ai essaier cette log de requette [ par casy ] Salut à tous,Existe-il sous SQLServer, une astuce, fonction, outil, ou autre qui permet de visualiser ou tracer les requettes sql qui sont faites sur concatenation dans requette mysql [ par glipper ] Bonjour,je ne connais vraiment rien sur le language SQL, et bien que d'habitude je m'en sors en cherchant les requetes sur google, cette fois-ci je ne traitement de requette /urgent svp [ par aminem15 ] salut, j'ai un problem dont j'ai besoin de programmer un compteur ce compteur  vient du dernier enregistrement de numero de commande de la table comma probleme de requette pour importer des donnees dans mysql [ par clement1138 ] voila mon code :  $requette=mysql_query( 'LOAD DATA LOCAL INFILE "base.csv"REPLACE INTO TABLE organigrammeFIELDS TERMINATED BY ";" ENCLOSED BY """ESCA


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
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 : 2,168 sec (3)

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