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

Sybase Discussion :

Automatisation des evolutions d'une base


Sujet :

Sybase

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut Automatisation des evolutions d'une base
    Bonjour,

    Dans l'optique d'une automatisation des procédures des livraison sur une base de donnée sybase, autant pour les procédures stockés ça ne pose pas problème de les supprimer et de les recréer lors d'une évolution mais concernant les tables ça pose problème.
    Par exemple si je dois modifié une table de la sorte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table toto (
    colonne1 varchar(10),
    colonne2 varchar(10),
    colonne3 varchar(10))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    create table toto (
    colonne1 varchar(10),
    colonne2 varchar(10),
    colonne4 varchar(10))
    Dans cette évolution la colonne 3 a été supprimer et j'ai ajouté une colonne4.

    Donc théoriquement je devrais procédait ainsi :
    - je fais un sp_rename de toto en old.toto
    - je creer la nouvelle version de la table toto
    - puis j'insère les données de old.toto dans la nouvelle table toto.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    insert into toto(colonne1, colonne2) 
    select colonne1, colonne2 from old.toto
    puis je drop l'ancienne table old.toto.

    Mais justement pour faire cela y a t-il un moyen de détecter les colonne ayant changer etc..c'est à dire récupérer tous les informations de la table etc.

    Je sais qu'avec sp_help, j'ai la structure de la table sous une forme très fouilli et que je pourrai travailer en shell par exmple. Mais est-une bonne methode.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    J'utilise un outil qui s'appelle SQLM (SQLModel) pour cela.

    Cet outil s'appuie sur un format XML - on crée un fichier XML qui decrit la table, et l'outil compare ensuite cet XML avec la structure actuelle de la table, et fait les modifications nécessaires.

    http://sourceforge.net/projects/sqlm/

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci pour la réponse.

    Mais le problème c'est ce que c'est un produit Windows et je suis dans un environnement unix
    aie aie aie, je crois que je vais devoir créer ma propre usine à gaz en shell, ça ne va pas être facile...

  4. #4
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    En fait sqlm peut être compilé sous unix, mais requiert la librairie "mono" (un port open source de DotNet).

    Alternativement, si tu te debrouille en perl regarde le script dbschema.pl (dispo à http://www.peppler.org/downloads) qui fait du reverse engineering des tables Sybase, et qui pourrait être la base d'un outil de comparaison.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  5. #5
    Membre habitué
    Inscrit en
    Août 2007
    Messages
    134
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 134
    Points : 168
    Points
    168
    Par défaut
    Je pense que sp_odbc_columns est plus facile à parser qu'un sp_help, si cela peut vous aider:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exec sp_odbc_columns sysobjects
    go
    DBA sybase confirmé
    Cherche un poste sur Paris

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Ok merci pour vos reponses je vais voir tout ça.
    Sinno je suis très nul en perl, donc je vais devoir me contenter du shell pour déterminer les differences entre les bases etc...



    Bonjour,

    Sinon tout autre sujet(quoique un peut lié), avez vous des mécanisme de test de non regression sur vos bases pour autant ques vous que vous en servez comme infocentre : donc alimenté quotidiennement et qui fait l'objet d'extraction pour les reportings
    J'aimerai mettre en place un mécanisme de test de non regression après chaque évolution de cette base de données(changement d'une procedure stocké entre autres).

    Existe t-il des mecanismes qui ont deja fait leur preuve dans le monde de sybase?

    J'avais deja une piste en utilisation un diff :
    Donc concrètement avant l'évolution : je lance toutes les procédures d'alimentations et d'extraction de la base de données et les stockes dans des fichiers et je fais de même après intégrations des évolutions.
    Puis je diff sur chaque fichier correspondant. Les différences qu'il pourrait y avoir seront dues aux évolutions si tant est qu'elles impactes les procédures d'alimentation/extractions deja existantes.
    De ce fait je verrai les differences sur chaque table et extraction etc... et pourrait valider ou non les tests.

    Pensez vous que c'est une solution qui vous semble plausible?

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Bonjour,

    comment savoir si un trigger est activé sur une table? Je n'ai pas cette information en faisant un sp_help sur l'index ou en interrogeant les tables systeme sysobjects where type='TR'.
    ET éventuellement avant cela comment je peux récupérer la liste des triggers d'une table. Genre existe t-il une fonction sp_gettrriger "maTable" ou en interogeant sysobjetx.
    merci d'avance pour votre aide.

  8. #8
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Le status du trigger est dans sysobjects.sysstat2 pour la table correspondante, avec 0x00100000 pour le trigger d'insert, 0x00200000 pour delete, et 0x00400000 pour update.

    Un check simple pour voir si tous les triggers sont disablés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    select name, case when sysstat2 & 0x00700000 != 0 then 'Some triggers are disabled' else 'enabled' end 
    from sysobjects
    where type = 'U'
    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  9. #9
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 61
    Points : 36
    Points
    36
    Par défaut
    Merci pour l'astuce, finalement je prefere desactiver tous les triggers de la table, vu que j'ai des difficultés pour cibler tous les triggers d'une table donnée.

    Sinon quand je fais appel à un sp_helpindex, les primary key apparaissent en tant que "index unique clusterd". Le problème c'est que lorsque je dois "catcher" les indexes pour les supprimer et les recréer après les insert, il me créer donc les primary key en tant qu'index, comment faire la différence pour bien distinguer une primary key; bien que techniquement c'est la même chose.
    Merci par avance.

  10. #10
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Cela peut être relativement compliqué.

    Tu peux regarder le code SQL de sp_helpconstraint, ou éventuellement utiliser le résultat de cette proc pour correler avec le nom de l'index qui est implemente la PK.

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

Discussions similaires

  1. Réponses: 2
    Dernier message: 30/06/2011, 15h56
  2. Réponses: 4
    Dernier message: 14/01/2008, 08h42
  3. 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
  4. Liste des tables d'une bases de données spécifique
    Par faridos23 dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2003, 22h20
  5. noms des tables d'une base
    Par molto dans le forum SQL
    Réponses: 2
    Dernier message: 17/03/2003, 22h14

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