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 :

Automatisation détachement bases en osql


Sujet :

Outils SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Par défaut Automatisation détachement bases en osql
    Bonjour,
    Je souhaiterais détacher des bases de données en commande osql sous commande DOS, et de l'automatiser.
    Mais il ne faut pas que je détache certaines bases tel que :
    - master
    - tempdb
    - model
    - msdb
    - pubs

    Alors voici sur quoi je me base :
    J'ai une première requete avec laquelle je récupère les bases que je souhaite :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    select name from sysdatabases where name not in ('master','tempdb','model','msdb','pubs')
    Et voici l'outils qui sert à détacher des bases :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    osql -U sa -P -Q "sp_detach_db @dbname="DATABASE"
    Ma question est la suivante :

    Comment je pourrais faire pour que les données extraites dans ma requete puissent être traitées dans le sp_detachdb ?
    Du style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    osql -U sa -P -Q "sp_detach_db @dbname=`select name from sysdatabases where name not in ('master','tempdb','model','msdb','pubs')`"
    Mais le hic c'est que celle-ci ne fonctionne pas, et j'aimerais vraiment faire un batch pour que ce soit traité tous les dimanches.

    Pourquoi, parce que je bosse dans une entreprise qui édite des logiciels et que tous le monde monte des bases, mais ne les démontent pas. Après ils se plaigne que c'est trop long, donc ma solution c'est de détacher les bases des utilisateurs non soigneux.

    Peace ...

  2. #2
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Tu peux créer une procédure, puis l'appeler dans ta commande ?

  3. #3
    Membre confirmé Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Tu peux créer une procédure, puis l'appeler dans ta commande ?
    Salut pacman,

    Ok mais en clair ça donne quoi ?!

  4. #4
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Hmmm, en fait, je n'en ai jamais fait

    Mais j'ai regardé un peu ce qui se fait :

    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
     
    CREATE PROCEDURE DetacheLes
    AS
    --Mettre les noms des bases dans un machin que tu peux parcourir
    SET @Curseur_Bases= CURSOR
    FORWARD_ONLY STATIC FOR
    SELECT name
    FROM sysdatabases
    WHERE (...)
     
    OPEN @Curseur_Bases
     
    -- tu parcours tes résultats pour exécuter ton détache...
    FETCH NEXT FROM @Curseur_Bases INTO @BaseName
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
       sp_detach_db @dbname=@BaseName
       FETCH NEXT FROM @Curseur_Bases INTO @BaseName
    END
    CLOSE @MyCursor
    DEALLOCATE @MyCursor
     
    GO
    Et après, ton batch appelle juste DetacheLes.
    Bon, après ça, j'y connais rien, et j'ai entendu dire qu'il faut pas faire de curseur...

  5. #5
    Membre confirmé Avatar de smooncef
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    118
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 118
    Par défaut
    Ok, merci pour cette information,
    alors voici ce que j'ai fait :
    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
     
    CREATE PROCEDURE DetacheLesDB
    @Curseur_Bases CURSOR VARYING OUTPUT, @BaseName NVarChar(15)=null
    AS
    -- Mettre les noms des bases dans un machin que tu peux parcourir
    SET @Curseur_Bases=CURSOR
    FORWARD_ONLY STATIC FOR
    SELECT name
    FROM dbo.sysdatabases
    WHERE name not in ('master','tempdb','model','msdb','pubs','QP_TEST','Northwind')
     
    OPEN @Curseur_Bases
     
    -- Tu parcours tes résultats pour exécuter ton détache...
    FETCH NEXT FROM @Curseur_Bases INTO @BaseName
    WHILE (@@FETCH_STATUS = 0)
    BEGIN
       EXEC sp_detach_db @dbname=@BaseName
       FETCH NEXT FROM @Curseur_Bases INTO @BaseName
    END
    CLOSE @Curseur_Bases
    DEALLOCATE @Curseur_Bases
    GO
    Mais voilà c'est le drame, voici ce que me retourne comme erreur cette procédure lorsque je l'appelle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    osql -Usa -P -Q DetacheLesDB
    Msg 201, Niveau 16, État 4, Serveur 2835B, Procédure DetacheLesDB, Ligne 0
    La procédure 'DetacheLesDB' attend le paramètre '@Curseur_Bases', qui n'a pas été fourni.
    Mais qu'est-ce que cela peut-il bien vouloir dire !!!!?

    Need help please !

    Peace ...

  6. #6
    Membre Expert Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    CREATE PROCEDURE DetacheLesDB
    @Curseur_Bases CURSOR VARYING OUTPUT, @BaseName NVarChar(15)=NULL
    AS
    Tu mets des arguments dans ta déclaration, alors que tu n'en mets pas dans l'appel.

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

Discussions similaires

  1. Projet Automatiser une Base de donnée sous Excel en VBA
    Par raph_13 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/10/2011, 16h10
  2. Réponses: 3
    Dernier message: 03/07/2009, 12h33
  3. automatiser sauvegarde base mysql
    Par bcd_30 dans le forum Administration
    Réponses: 3
    Dernier message: 30/01/2008, 21h43
  4. Automatiser l'exportation des données d'une base de données MySQL?
    Par zakiaetanas dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/03/2007, 10h04
  5. creation automatisée d'une base
    Par emy10 dans le forum 4D
    Réponses: 1
    Dernier message: 28/07/2006, 14h37

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