Vue système liant partition et schéma de partition
4 réponses
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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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
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.
"BVesan" <BVesan@discussions.microsoft.com> wrote in message
news:DC4848B8-D57E-4F5E-9FF2-F605E4127966@microsoft.com...
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
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.
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
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 ?
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...
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
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.
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 ?
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.
"BVesan" <BVesan@discussions.microsoft.com> wrote in message
news:0428BE23-D13A-438D-9E72-1F5930A95A34@microsoft.com...
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...
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.
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
Merci beaucoup, c'est exactement ce que je cherchais !
Merci beaucoup, c'est exactement ce que je cherchais !