0

Jointure entre syssegments et sysusages

twitterlinkedinmail

Un segment peut s’étaler sur plusieurs fragments. Les segments sont listés dans syssegments.

Un fragment peut supporter plusieurs segments. Les fragments sont listés dans master..sysusages.

La jointure entre ces deux tables aurait donc du faire intervenir une troisième table assurant la liaison.

Au lieu de cela, Sybase opte pour une jointure par bitmask.

Dans la table syssegments, chaque segment possède un numéro.

Dans la table master..sysusages, chaque fragment possède une valeur numérique qui s’appelle segmap. Ce nombre est la somme des puissances de deux correspondant aux segments attachés à ce fragment.

Exemple A : Si un fragment est attaché aux segments 0 et 1, le segmap = 2^0+ 2^1 = 3.

Exemple B : Si un fragment est attaché aux segments 2 et 5, le segmap = 2^2 + 2^5 = 36.

Se pose donc le problème de la lisibilité d’une telle méthode. La jointure nécessaire pour décoder cela est la suivante :

select * from syssegments, master..sysusages
where segmap & power(2,segment) = power(2,segment)

On peut rétrécir son résultat pour ne voir que ce qui concerne la base courante :

select * from syssegments, master..sysusages
where segmap & power(2,segment) = power(2,segment)
and dbid=db_id()

Enfin, on peut rajouter les noms des devices pour être plus complet :

select s.name segment, d.name device, phyname
from syssegments s, master..sysusages f, master..sysdevices d
where segmap & power(2,segment) = power(2,segment)
and dbid=db_id()
and f.vdevno = d.vdevno
order by s.name

Continuez votre lecture sur le blog :

twitterlinkedinmail

Capdata team

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.