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 :

[ASE10]Segment d'appartenance d'une table


Sujet :

Sybase

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut [ASE10]Segment d'appartenance d'une table
    Bonjour,

    je suis contraint de "développer" ma propre version de DDLgen pour Sybase 10.X.

    je n'arrive pas à déterminer à quel segment appartient une table.

    qui aurait la réponse ?

    merci par avance.

  2. #2
    Membre Expert

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Sybase 10??? Ouch!

    Ceci étant, cette information existe dans sysindexes.segment, à joindre avec syssegments.

    Ensuite, on peut voir sur quel fragment est mappé le segment (dans master..sysusages), et de là sur quel device.

    Tu n'as peut-être pas perl/sybperl installé, mais je te suggère d'étudier dbschema.pl (www.midsomer.org) qui implémente déjà à peu près tout ce que fait ddlgen.

    Michael

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 48
    Par défaut
    La table syssegments n'ayant pas subi d'évolution depuis la version 10 (qui date quand même de 1994), le code suivant devrait marcher :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    select name_object = i.name, 
             i.indid, 
            segment_num = s.segment, 
            segment_name = s.name 
    from syssegments s, sysindexes i 
    where s.segment = i.segment 
    order by i.name
     
    /* indid donne une indication sur la nature de l'objet */

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    Merci pour vos réponses...

    j'avais déjà la requête qui détermine à quel segment appartient un indexe. (si c'est bien ce que fait la requête que m'a donnée dbafranck). D'ailleurs, j'ai vérifié, et elle ne marche pas pour une des tables que j'ai.

    même remarque pour Michael Peppler.

    ou alors j'ai loupé quelque chose ?

    Michael, j'ai déjà vu tes messages sur sybperl sur un autre sujet. Je ne sais pas si je peux installer ça si facilement sur nos machines ici ! Je sais que je peux utiliser le C sans problèmes. Mon ddlgen ne marche pas trop mal si on exclut cette histoire de segment. Pour l'instant, je triche, j'utilise la requête suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CASE type
    WHEN 'L' THEN 'logsegment'
    WHEN 'S' THEN 'system'
    ELSE 'default' END
    from sysobjects where id = object_id('%s')
    (%s à remplacer par le nom de table). c'est moyen, mais ça marche dans le cas particulier de nos bases qui n'ont pas d'autre segments.

  5. #5
    Membre Expert

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Par défaut
    Pour sybperl tu peux probablement l'installer assez facilement dans ton "home" directory (sous unix) sans avoir besoin des droits administrateur.

    Maintenant il serait quand même intéressant de voir le contenu de sysobjects et de sysindexes pour la table qui pose problème...

    Michael

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 66
    Par défaut
    Pour la table 'utilisateur'

    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
    1> select * from sysobjects where name = 'utilisateur'
    2> go
     name                           id          uid    type userstat sysstat
             indexdel schemacnt sysstat2    crdate
             expdate                    deltrig     instrig     updtrig
             seltrig     ckfirst     cache  audflags    objspare
             versionts                  loginame
     ------------------------------ ----------- ------ ---- -------- -------
            -------- --------- ----------- --------------------------
            -------------------------- ----------- ----------- -----------
            ----------- ----------- ------ ----------- -----------
            -------------------------- ------------------------------
     utilisateur                     1601440779      1 U           0  -32685
                    2       246           0        Dec 24 1999  3:54AM
                    Dec 24 1999  3:54AM           0           0           0
                       0           0      0           0           0
             0x0005ce6004e7db1e00010000 NULL
     
    (1 row affected)
    La requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1> select * from sysindexes where name = 'utilisateur'
    ne retourne rien.

    le requête

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    1> select * from sysindexes where id = object_id('utilisateur')
    2> go
     name                           id          indid  doampg      ioampg
             oampgtrips  status2 ipgtrips    first       root        distribution
             usagecnt segment status maxrowsperpage minlen maxlen maxirow keycnt
             keys1
     
     
             keys2
     
     
             soid csid base_partition fill_factor res_page_gap exp_rowsize
             keys3
     
     
             identitygap
     ------------------------------ ----------- ------ ----------- -----------
            ----------- ------- ----------- ----------- ----------- ------------
            -------- ------- ------ -------------- ------ ------ ------- ------
            --------------------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------------------------
    ----------------------------------------------------------------
            --------------------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------------------------
    ----------------------------------------------------------------
            ---- ---- -------------- ----------- ------------ -----------
            --------------------------------------------------------------------------------------------
    ----------------------------------------------------------------------------------------------------
    ----------------------------------------------------------------
            -----------
     K_user                          1601440779      1        2760      591105
                       0       0           0      586768      591224            0
                    0       1    146              0      5    604       7      1
             0x81020100340200010002000000000000
     
     
             NULL
     
     
                0    0              1           0            0           0
             NULL
     
     
                    NULL
     
    (1 row affected)
    retourne qq chose, mais l'index qui appartient à cette table n'a pas forcément le même nom que la table (cas particulier dans lequel la requête de dbafranck marche).

    je n'arrive plus à faire marcher scview (pourquoi ?) mais si je pouvais, je pourrais montrer que les tables pour lesquelles la requête de dbafranck marche sont celles qui ont un index de même nom que celle de la table.

    voici la DDL que me génère mon programme :

    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    print 'utilisateur'
    SETUSER 'dbo'
    go
     
    IF EXISTS (SELECT 1 FROM sysobjects WHERE name = 'utilisateur') DROP TABLE utilisateur
    go
     
    CREATE TABLE dbo.utilisateur (
            numuser smallint         NOT NULL,
            nomuser varchar(80)      NOT NULL,
            loginuser       varchar(30)      NOT NULL,
            nivuser tinyint  NOT NULL,
            indutilimit     char(1)  NULL,
            nbminutej       int      NULL,
            nbminuteto      int      NULL,
            nbconnectj      int      NULL,
            indutiequ       char(1)  NULL,
            enuminspecti    int      NULL,
            codapp  varchar(8)       NULL,
            indactifuti     char(1)  NULL,
            indprodlimit    char(1)  NULL,
            indgrdcompte    char(1)  NULL,
            codsection      char(8)  NULL,
            libemail        char(80)         NULL,
            codcompagnie    char(8)  NULL,
            libmotdepass    char(255)        NULL,
            indmdpchgaut    char(1)  NULL,
            enumstatututi   smallint         NULL,
            enumprofiluti   smallint         NULL,
            datembauche     datetime         NULL,
            telephone       varchar(20)      NULL,
            fax     varchar(20)      NULL,
            codcrea int      NULL,
            datcrea datetime         NULL,
            codmodif        int      NULL,
            datmodif        datetime         NULL
    )
    on 'default'
    go
     
    print 'K_user'
    CREATE UNIQUE CLUSTERED INDEX K_user
    ON dbo.utilisateur (numuser)
    on 'default'
    go
     
    GRANT SELECT on utilisateur to grp_dev
    go
     
    GRANT SELECT on utilisateur to role_gbprod_dev
    go
     
    GRANT INSERT on utilisateur to role_gbprod_dev
    go
     
    GRANT UPDATE on utilisateur to role_gbprod_dev
    go
     
    GRANT DELETE on utilisateur to role_gbprod_dev
    go
     
    SETUSER
    go
    Pour terminer, je mets un extrait de la doc de Sybase sur la table Sysindexes :

    sysindexes contains one row for each clustered index, one row for each
    nonclustered index, one row for each table that has no clustered index, and
    one row for each table that contains text or image columns.
    En gros, pour moi, il peut y avoir des lignes associées à des tables, mais pas pour toutes les tables.

    Voilà où j'en suis... je paie un menu big mac à qui trouve la solution

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/09/2008, 18h44
  2. Réponses: 3
    Dernier message: 18/07/2008, 11h47
  3. Réponses: 2
    Dernier message: 03/04/2007, 10h46
  4. [MySQL] recuperer tous les id n'appartenant pas à une table
    Par Elianora la blanche dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 18/10/2005, 15h04
  5. comment verifier l'appartenance a une table?
    Par raul83 dans le forum Access
    Réponses: 7
    Dernier message: 11/10/2004, 16h07

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