|
|
|
|
||||||
![]() |
|
|
LinkBack | Outils de la discussion |
|
|
#1 |
|
Messages: n/a
Hébergeur: |
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 |
|
|
|
#2 |
|
Messages: n/a
Hébergeur: |
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" <BVesan@discussions.microsoft.com> wrote in message news C4848B8-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 > |
|
|
|
#3 |
|
Messages: n/a
Hébergeur: |
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 ? |
|
|
|
#4 |
|
Messages: n/a
Hébergeur: |
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" <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... > > Une autre idée ? > > > |
|
|
|
#5 |
|
Messages: n/a
Hébergeur: |
Merci beaucoup, c'est exactement ce que je cherchais !
|
|
![]() |
| Outils de la discussion | |
|
|