Auteur de questions
sauvegarde de mes bases de données sous SQL server Express 2005

Discussion générale
-
<!-- /* 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;} -->
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 ? Cela pose-t-il vraiment un problème de faire à chaud même si aucun utilisateur ne travaille sur le base ?
Merci d'avance !
- Type modifié Roxana PANAITMicrosoft employee mercredi 9 décembre 2009 08:15
- Type modifié Roxana PANAITMicrosoft employee mercredi 9 décembre 2009 08:16
Toutes les réponses
-
Bonjour,
Vous pouvez consulter:
· http://www.sqlteam.com/article/introduction-to-sql-server-database-backups
· http://msdn.microsoft.com/en-us/library/cc917611.aspx
· http://msdn.microsoft.com/fr-fr/library/ms186865.aspx
Cordialement
Roxana Panait, MSFT