Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

4 réponses
Avatar
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

4 réponses

Avatar
Jean-Pierre Riehl
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" wrote in message
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



Avatar
BVesan
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 ?
Avatar
Jean-Pierre Riehl
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" wrote in message
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 ?





Avatar
BVesan
Merci beaucoup, c'est exactement ce que je cherchais !