IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

MS SQL Server Discussion :

Utilisation de try catch dans une procédure de backup de database


Sujet :

MS SQL Server

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut Utilisation de try catch dans une procédure de backup de database
    Bonjour,

    voici ci dessous le code de ma procédure pour backuper une de mes BDD :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    --*************************************************
    ALTER procedure [dbo].[SetDumpByCampaignId]
    (
    	@campaignId char(32)
    )
    AS
    BEGIN TRANSACTION
    	BEGIN TRY
     
    		--Backup de la BDD
    		EXEC ('BACKUP DATABASE Data_'+@campaignId+' to disk=''E:\Backup\Data_'+@campaignId+'.bak''')
     
    		--Suppression de la BDD
    		EXEC ('DROP DATABASE Data_'+@campaignId)
     
    	END TRY
    	BEGIN CATCH
    		SELECT 
    			ERROR_NUMBER() AS ErrorNumber,
    			ERROR_SEVERITY() AS ErrorSeverity,
    			ERROR_MESSAGE() as ErrorMessage;
     
    		IF @@TRANCOUNT > 0
    			ROLLBACK TRANSACTION;
    			SELECT (-1) AS ReturnCode;
    	END CATCH;
     
    IF @@TRANCOUNT > 0
        COMMIT TRANSACTION;
    	SELECT (0) AS ReturnCode;
     
    GO
    --*************************************************
    Quand je mets en place le try catch, j'ai l'erreur suivante :
    N° d'erreur : 3013
    Severity : 16
    Message : BACKUP DATABASE s'est terminé anormalement.

    Par contre, quand j'enleve toute la partie try catch, je n'ai pas d'erreur !!!

    Comment puis-je faire la gestion d'erreur sur le backup ?

    Merci de votre aide...

  2. #2
    Expert éminent sénior
    Avatar de mikedavem
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Août 2005
    Messages
    5 450
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Distribution

    Informations forums :
    Inscription : Août 2005
    Messages : 5 450
    Points : 12 891
    Points
    12 891
    Par défaut
    Bonjour,

    Vous ne pouvez pas encapsuler des opérations de sauvegarde et de suppression de base dans une transaction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    ...
    BEGIN TRY
    	--Backup de la BDD
    	EXEC ('BACKUP DATABASE Data_'+@campaignId+' to disk=''E:\Backup\Data_'+@campaignId+'.bak''');
    	--Suppression de la BDD
    	EXEC ('DROP DATABASE Data_'+@campaignId);
     
    END TRY
    BEGIN CATCH
     SELECT 
    			ERROR_NUMBER() AS ErrorNumber,
    			ERROR_SEVERITY() AS ErrorSeverity,
    			ERROR_MESSAGE() AS ErrorMessage;
    END CATCH
    ...
    ++

  3. #3
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Bonjour,

    Une sauvegarde de base de données n'a rien à voir avec une transaction.

    Un transaction permet de garantir l'intégrité des données d'une base de données : une modification des données est effectuée totalement ou pas du tout effectuée.

    Par exemple quand on effectue un retrait à un distributeur automatique de billets il s'agit d'une transaction :

    - soit l'argent est délivré au client, et son compte est débité de la somme qu'il a demandé
    - soit, pour une quelconque raison, l'argent n'est pas délivré au client, et son compte conserve la valeur qu'il avait avant que le processus de retrait d'argent ait démarré.

    Une sauvegarde est simplement la copie des pages de données des fichiers de données de votre base de données : en aucun cas celui-ci modifie les données que la base de données stocke

    Sous SQL Server, toute exécution d'une instruction SELECT, INSERT, UPDATE ou DELETE est implicitement une transaction.

    Vous pouvez grouper plusieurs transactions pour qu'elles s'exécutent comme une seule en déclarant explicitement la transaction, à l'aide de BEGIN TRANSACTION, comme vous l'avez fait.
    Par exemple vous voulez faire un INSERT puis un UPDATE comme une seule unité de travail, mais si l'une des deux transactions échoue, alors la base de données n'a subi aucun changement relatif à ces deux transactions.

    Pour en savoir plus sur les transactions

    @++

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Merci de vos réponses.

    Dans ce cas comment peut-on vérifier que le backup et la création du .bak se sont bien déroulé avant de faire le drop ?

    Merci

  5. #5
    Modérateur

    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Janvier 2005
    Messages
    5 826
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2005
    Messages : 5 826
    Points : 12 371
    Points
    12 371
    Par défaut
    Après la sauvegarde, faites donc un RESTORE VERIFYONLY

    @++

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    ça marche!!!

    Merci beaucoup.

  7. #7
    Membre extrêmement actif
    Avatar de mihaispr
    Inscrit en
    Décembre 2008
    Messages
    1 025
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 025
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par megtrinity Voir le message
    ça marche!!!

    Merci beaucoup.

    Tu peux nous donner la source de ta procedure de backup?
    (avec des petites commentaires)

    J'aurais besoin de ca dans le futur.

    Merci pour comprehension!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 9
    Dernier message: 28/05/2011, 15h47
  2. [PROC] utiliser des données selectionnées dans une procédure.
    Par ellix86 dans le forum Développement
    Réponses: 5
    Dernier message: 17/04/2009, 13h08
  3. Try, catch dans une fonction
    Par mactwist69 dans le forum Windows Forms
    Réponses: 10
    Dernier message: 10/07/2008, 16h39
  4. Try/ catch dans une fonction ActionPerformed
    Par thomas2929 dans le forum Langage
    Réponses: 13
    Dernier message: 09/06/2008, 12h06
  5. Try catch dans une dll - possible ?
    Par Pendary dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/03/2007, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo