Vue système liant partition et schéma de partition

Le
BVesan
Bonjour,
Je souhaitais me faire un petit script remontant un maximum d'informations
sur les objets partitionés et leurs partitions à l'aide des vues systèmes.
Pas de problème pour lier une partition à son espace de stockage, mais je
n'arrive en revanche pas à trouver le moyen de lier la partition à son schema
de partition.
Quelqu'un sait-il comment faire le lien entre sys.partitions et
sys.partition_schemes ?


Pour info, voici la requête que j'aimerai compléter.


select object_name(SP.object_id) AS 'Table',SI.name AS
'Indexe',SP.partition_number, SP.rows,DS.name AS 'FileGroup'
from sys.partitions SP
inner join ( select object_id,index_id,count(*) AS 'partitions' FROM
sys.partitions GROUP BY object_id,index_id HAVING COUNT(*) >1) O ON (
O.object_id = SP.object_id AND O.index_id = SP.index_id)
inner join sys.indexes SI ON (SI.object_id = SP.object_id AND SI.index_id =
SP.index_id)
inner join sys.allocation_units SU ON SU.container_id = SP.hobt_id
inner join sys.data_spaces DS ON DS.data_space_id = SU.data_space_id
order by 1,2,3
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jean-Pierre Riehl
Le #11853631
Bonjour,

Dans la vue système sys.tables, il y a l'identifiant du data_space. Avec
cette information il est possible de lier une table avec son schéma de
partitionnement.
SELECT t.name, sc.name, lob_data_space_id
FROM sys.tables t
INNER JOIN sys.partition_schemes sc ON sc.data_space_id =
t.lob_data_space_id

Comme il est possible de trouver les partitions d'une table avec la vue
sys.partitions et l'object_id de la table, il est donc possible de faire la
liaison que tu recherches.

J'espère que cela résout ton problème.


--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr



"BVesan" news:
Bonjour,
Je souhaitais me faire un petit script remontant un maximum d'informations
sur les objets partitionés et leurs partitions à l'aide des vues systèmes.
Pas de problème pour lier une partition à son espace de stockage, mais je
n'arrive en revanche pas à trouver le moyen de lier la partition à son
schema
de partition.
Quelqu'un sait-il comment faire le lien entre sys.partitions et
sys.partition_schemes ?


Pour info, voici la requête que j'aimerai compléter.


select object_name(SP.object_id) AS 'Table',SI.name AS
'Indexe',SP.partition_number, SP.rows,DS.name AS 'FileGroup'
from sys.partitions SP
inner join ( select object_id,index_id,count(*) AS 'partitions' FROM
sys.partitions GROUP BY object_id,index_id HAVING COUNT(*) >1) O ON (
O.object_id = SP.object_id AND O.index_id = SP.index_id)
inner join sys.indexes SI ON (SI.object_id = SP.object_id AND SI.index_id
> SP.index_id)
inner join sys.allocation_units SU ON SU.container_id = SP.hobt_id
inner join sys.data_spaces DS ON DS.data_space_id = SU.data_space_id
order by 1,2,3



BVesan
Le #11853611
Bonjour et merci pour cette réponse.
Nous sommes d'accord sur le fait que le partitionnement d'une table sous SQL
Server étant défini comme une clause de stockage, c'est bien un data_space_id
qui lie la table à son schéma de partition.

Mis Lob_data_space_id renvoit à l'emplacement de stockage des colonnes qui
ne sont pas "IN ROW DATA" (donc text, image, varchar(max), ...) et non pas à
l'emplacement de stockage des données partitionnables de la table. Je ne
trouve pas dans sys.tables d'information permettant de pointer vers le
schéma...

Une autre idée ?
Jean-Pierre Riehl
Le #11853511
Au temps pour moi, j'ai répondu un peu hativement.
En effet, comme tu le dis, lob_data_space_id pointe bien vers le FG qui
contient les champs text, ntext, image et varXX(max).

Le data_space où se trouve les données d'une table est celui vers lequel
pointe l'index CLUSTERED de la table.
Ainsi, on peut l'obtenir depuis sys.indexes

select t.name, ix.name, ds.*
from sys.tables t
inner join sys.indexes ix on ix.object_id = t.object_id
and ix.type in (0,1)
inner join sys.data_spaces ds on ds.data_space_id = ix.data_space_id

Le type 0 correspond à un index de type HEAP (quand il n'y a aucun index
clustered défini) et le type 1 correspond à un index Clustered.

Avec sys.indexes comme pivot, tu peux lier une partition à son schéma de
partition.

--
Jean-Pierre Riehl
http://blog.djeepy1.net
http://www.bewise.fr



"BVesan" news:

Bonjour et merci pour cette réponse.
Nous sommes d'accord sur le fait que le partitionnement d'une table sous
SQL
Server étant défini comme une clause de stockage, c'est bien un
data_space_id
qui lie la table à son schéma de partition.

Mis Lob_data_space_id renvoit à l'emplacement de stockage des colonnes
qui
ne sont pas "IN ROW DATA" (donc text, image, varchar(max), ...) et non pas
à
l'emplacement de stockage des données partitionnables de la table. Je ne
trouve pas dans sys.tables d'information permettant de pointer vers le
schéma...

Une autre idée ?





BVesan
Le #11853471
Merci beaucoup, c'est exactement ce que je cherchais !
Publicité
Poster une réponse
Anonyme