|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
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. |
|
|
00
|
|
|
#2 |
![]() ![]() |
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
__________________
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 |
|
|
00
|
|
|
#3 | ||
|
Membre du Club
![]() Inscription : décembre 2005 Messages : 48 ![]() |
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 :
|
||
|
|
00
|
|
|
#4 | ||
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
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 :
|
||
|
|
00
|
|
|
#5 |
![]() ![]() |
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
__________________
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 |
|
|
00
|
|
|
#6 | |||||||
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
Pour la table 'utilisateur'
Code :
Code :
1> SELECT * FROM sysindexes WHERE name = 'utilisateur' le requête Code :
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 :
Citation:
Voilà où j'en suis... je paie un menu big mac à qui trouve la solution |
|||||||
|
|
00
|
|
|
#7 | ||
![]() ![]() |
Hmmm... j'utilise la requète suivante
Code :
Cette requète devrait marcher en version 10 (je viens de l'essayer avec succès dans une 4.9.2 :-) 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 |
||
|
|
00
|
|
|
#8 | ||
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
Encore merci !!... mais désolé si j'insiste. Je comprends que ta requête me renvoie toujours l'index de ma table et le segment associé à l'index :
Code :
J'espère que je ne me trompe pas ! |
||
|
|
00
|
|
|
#9 | ||
![]() ![]() |
Si, justement.
Il y a dans sysindexes la ligne pour la table (indid 0) et pour chaque indexe. Par example: Code :
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 |
||
|
|
00
|
|
|
#10 | |||
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
voici ce que donne ta requête chez moi (j'ai filtré):
Code :
peut être que tes tables qui ont le indid à 0 n'ont pas de "clustered index" ? lorsque indid > 1 c'est je cite: Citation:
|
|||
|
|
00
|
|
|
#11 |
![]() ![]() |
Il est important de comprendre ce qu'est un "clustered index" pour Sybase ASE pour comprendre les données dans sysindexes.
Si tu as une table qui est en APL avec un index clustered alors le clustered index EST la table (cad les pages "feuilles" de l'indexe correspondent aux pages datas de la table) et les deux sont en fait indissociables (et il n'y a qu'une ligne dans sysindexes avec un indid = 1). Dans le cas des tables DOL le clustered index est séparé de la table elle-même, mais la table "suit" le clustered index (cad si on crée le clustered index sur le segment toto alors la table sera copiée sur le segment toto également.) Dans ce cas il y a deux lignes dans sysindexes. Donc - le résultat ci-dessus est tout à fait cohérent. 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 |
|
|
00
|
|
|
#12 | ||
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
j'ai un peu du mal à suivre... (APL, DOL ?)
mais j'ai fait un expérience : j'ai passé le DDL suivant en entrée à isql : Code :
donc le segment qui compte semble être celui de l'index. en tout cas merci. Lorsque j'aurais le temps j'essaierai de comprendre un peu mieux. |
||
|
|
00
|
|
|
#13 |
![]() ![]() |
APL: All Pages Locking - granularité des verrous: 1 page.
DOL: Data only locking - granularité des verrous: 1 enregistrement (il y a deux variantes, sans importance pour ce qui nous interesse) Dans ton cas, puisque tu crée un index "clustered" la table va "suivre" l'index, et se trouver sur le segment où l'index est créé. Fait le même exercice en ne créant pas d'index "clustered", et un autre index et tu verras que le segment définis pour la table sera toujours valide. 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 |
|
|
00
|
|
|
#14 |
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
OK un merci (beaucoup!) et je pars en week end !
|
|
|
00
|
|
|
#15 |
|
Membre du Club
![]() Inscription : septembre 2005 Messages : 66 ![]() |
Bonjour,
Je ne sais pas si Michael (Peppler) tombera sur ce message. Je voudrais apporter quelques précisions : il *semble* que ce que tu as dit sur les indexes clustered soit vrai, c'est à dire que la table se trouve sur le même segment que l'index clustered qui lui est associé, sinon il reste sur son segment d'origine, auquel cas il y a une entrée dans sysindexes avec indid = 0. Mais c'est seulement lorsque cet index est UNIQUE CLUSTERED. Confirmes-tu ? (ou quelqu'un d'autre ?) |
|
|
00
|
|
|
#16 |
![]() ![]() |
L'option UNIQUE n'est pas significative. C'est uniquement l'attribut CLUSTERED qui indique si la table va "suivre" l'indexe au niveau du segment.
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 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com