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

Outils SQL Server Discussion :

Procédure stockée : BCP pour sauvegarde d'une base...


Sujet :

Outils SQL Server

  1. #1
    Expert éminent
    Avatar de Webman
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 232
    Points : 8 154
    Points
    8 154
    Par défaut Procédure stockée : BCP pour sauvegarde d'une base...
    Bonjour,

    J'utilise une procedure stockée pour sauvegarder les tables d'une base de données. Ma base contenant pas mal de table j'ai une petite question. Suis je obligé d'appeller ma procédure stockée autant de fois que j'ai de table à sauvegarder ou je poeux faire autrement ?

    Voilà ma procédure stockée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE PROCEDURE Sauvegarde 
    (@Fichier varchar(255)) 
    AS 
    DECLARE @BCPCommand varchar(255) 
    SET @BCPCommand = 'BCP mabase..matable out C:\sauvegarde\' + @Fichier +  '/T /c' 
    EXECUTE master..xp_cmdshell @BCPCommand
    GO
    N'ayant pas trop de connaissance sur les procédures stockées et sur l'utilitaire BCP, je me pose les questions suivantes: puis-je exécuter plusieurs commandes BCP de suite dans ma procédure (car d'aprés ce que j'ai compris on ne peut que copier qu'une seule table par commade BCP executée) ? Dois-je appeller a chaque fois ma procédure en executant une commade BCP à chaque fois ?

    Désolé je suis pas trés clair En clair, quelle est selon vous la meilleure technique (en un minimum de temps utilisant le moins de ressource possible je veux dire) pour sauvegarder plus d'une dizaine de tables ?

    Je précise que j'utilise cette procédure stockée dans une application ASP.Net.

    Si vous voulez des précisions n'hésitez pas à me demander car je suis pas clair la dessus (je vous rassure mon code est plus clair que mes explications! enfin j'espère )

    Webman
    Rédacteur .Net
    MVP C#
    Mes articles - CodeQuake (blog)
    Pas de question technique par MP, merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 554
    Points
    19 554
    Billets dans le blog
    25
    Par défaut
    Vous pouvez très bien créer un curseur sur sysobjects et l'intégrer à votre procédure stockée pour passer toutes les tables d'un coup.

    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
    CREATE PROCEDURE Sauvegarde 
    (@chemin varchar(225)) 
    AS 
    BEGIN
    DECLARE cur CURSOR 
    AS SELECT name FROM sysobjects 
    WHERE type='U'
    FOR READ ONLY
     
    DECLARE @BCPCommand varchar(255), @TBL  varchar(30)
     
    OPEN cur
     
    FETCH cur INTO @TBL
     
    while @@status <> 2
       BEGIN
       SET @BCPCommand = 'BCP '+db_name()+'..'+@TBL
        +' out '+@PATH + @TBL +  '.bcp /T /c' 
       EXECUTE master..xp_cmdshell @BCPCommand 
       FETCH cur INTO @TBL
       END
    CLOSE cur
    DEALLOCATE CURSOR cur
    END
    GO
    Mais ne serait-il pas plus simple, si ce n'est qu'à des fins de sauvegarde, de passer par une unique commande de BACKUP DATABASE ?
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  3. #3
    Expert éminent
    Avatar de Webman
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 232
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 232
    Points : 8 154
    Points
    8 154
    Par défaut
    Bonjour,

    Merci beaucoup pour cette solution Je vais tester ca au plus vite. En fait mon choix se porte vers BCP car ca me permet de sauvergader les tables que je désire, car il n'est pas impossible que parfois il y ait uniquement quelques tables à sauvegarder et non toute la base. En plus BCP permet d'exporter des données vers d'autres applications facilement. En clair ca me permet d'avoir une sauvegarde modulable pouvant aussi servir de "système d'exportation" de données.


    Merci beaucoup de votre aide ,
    Webman
    Rédacteur .Net
    MVP C#
    Mes articles - CodeQuake (blog)
    Pas de question technique par MP, merci.

  4. #4
    Nouveau Candidat au Club
    Inscrit en
    Septembre 2004
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Je cherche également à effectuer des sauvegardes.
    J'ai copié la procédure stockée que vous proposez mais j'obtiens le message d'erreur suivant :

    User access denied. Not a member of NT administrators group.

    Je travaille pourtant avec le compte administrateur et ma connexion sur la base est celle du SA.

    Auriez-vous une idée?

    Merci par avance

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

Discussions similaires

  1. Sauvegarde d'une base de données
    Par dcollart dans le forum Informix
    Réponses: 8
    Dernier message: 28/05/2006, 00h23
  2. Procédure stockée - Retourner plusieurs ligne d'une table
    Par ronando dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 02/11/2005, 13h19
  3. [cmde shell pour installation d'une base sous windows]
    Par Lady_jade dans le forum Installation
    Réponses: 2
    Dernier message: 24/10/2005, 10h29
  4. Procédure stockée : BCP pour sauvegarde d'une base...
    Par Webman dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 09/09/2004, 11h31
  5. sauvegarde d'une base ailleurs qu'en local
    Par jbat dans le forum MS SQL Server
    Réponses: 10
    Dernier message: 13/01/2004, 11h25

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