sys.internal_tables (Transact-SQL)

Retourne une ligne par objet représentant une table interne. Les tables internes sont générées automatiquement par SQL Server pour la prise en charge de différentes fonctionnalités. Par exemple, lorsque vous créez un index XML primaire, SQL Server crée automatiquement une table interne pour assurer la persistance des données du document XML fragmenté. Les tables internes apparaissent dans le schéma sys de toutes les bases de données et possèdent un nom unique généré par le système qui indique leur fonction, comme par exemple xml_index_nodes_2021582240_32001 ou queue_messages_1977058079.

Les tables internes ne contiennent pas de données accessibles aux utilisateurs et leur schéma est fixe et invariable. Vous ne pouvez pas faire référence à des noms de tables internes dans les instructions Transact-SQL. Par exemple, vous ne pouvez pas exécuter une instruction telle que SELECT * FROM <sys.internal_table_name>. Par contre, vous pouvez interroger les affichages catalogue pour voir les métadonnées des tables internes.

Nom de la colonne

Type de données

Description

<Colonnes héritées de sys.objects>

 

Pour obtenir la liste des colonnes dont cette vue hérite, consultez sys.objects (Transact-SQL).

internal_type

tinyint

Type de la table interne :

201 = queue_messages

202 = xml_index_nodes

203 = fulltext_catalog_freelist

204 = fulltext_catalog_map

205 = query_notification

206 = service_broker_map

207 = extended_indexes (tel qu'un index spatial)

208 = filestream_tombstone

209 = change_tracking

210 = tracked_committed_transactions

internal_type_desc

nvarchar(60)

Description du type de table interne :

QUEUE_MESSAGES

XML_INDEX_NODES

FULLTEXT_CATALOG_FREELIST

FULLTEXT_CATALOG_MAP

QUERY_NOTIFICATION

SERVICE_BROKER_MAP

EXTENDED_INDEXES

FILESTREAM_TOMBSTONE

CHANGE_TRACKING

TRACKED_COMMITTED_TRANSACTIONS

parent_id

int

ID du parent, qu'il soit ou non de portée de schéma. En l'absence de parent, a pour valeur 0.

queue_messages = object_id de la file d'attente

xml_index_nodes = object_id de l'index xml

fulltext_catalog_freelist = fulltext_catalog_id du catalogue de texte intégral

fulltext_index_map = object_id de l'index de texte intégral

query_notification ou service_broker_map = 0

extended_indexes = object_id d'un index étendu, tel qu'un index spatial

object_id de la table pour laquelle le suivi de table est activé = change_tracking

parent_minor_id

int

ID mineur du parent.

xml_index_nodes = index_id de l'index XML

extended_indexes = index_id d'un index étendu, tel qu'un index spatial

0 = queue_messages, fulltext_catalog_freelist, fulltext_index_map, query_notification, service_broker_map ou change_tracking

lob_data_space_id

int

Une valeur différente de zéro représente l'ID d'espace de données (groupe de fichiers ou schéma de partition) qui contient les données LOB de cette table.

filestream_data_space_id

int

Réservé pour un usage ultérieur.

Autorisations

La visibilité des métadonnées dans les affichages catalogue est limitée aux éléments sécurisables qu'un utilisateur détient ou pour lesquels des autorisations lui ont été accordées. Pour plus d'informations, consultez Configuration de la visibilité des métadonnées.

Notes

Les tables internes sont placées dans le même groupe de fichiers que l'entité parente. Vous pouvez utiliser la requête de catalogue présentée dans l'exemple F ci-dessous pour retourner le nombre de pages que les tables internes utilisent pour les données sur ligne, hors ligne et LOB.

Vous pouvez utiliser la procédure système sp_spaceused pour retourner des informations sur l'espace utilisé dans les tables internes. sp_spaceused indique l'espace interne des tables comme suit :

  • Si un nom de file d'attente est spécifié, la table interne sous-jacente associée à la file d'attente est référencée et sa consommation de stockage est renseignée.

  • Les pages utilisées par les tables internes des index XML, des index spatiaux et des index de texte intégral sont incluses dans la colonne index_size. Si un nom de table ou de vue indexée est spécifié, les pages des index XML, des index spatiaux et des index de texte intégral de cet objet sont incluses dans les colonnes reserved et index_size.

Exemples

Les exemples suivants montrent comment interroger les métadonnées des tables internes à l'aide des affichages catalogue.

A.Afficher les tables internes qui héritent des colonnes de l'affichage catalogue sys.objects

SELECT * FROM sys.objects WHERE type = 'IT';

B.Retourner toutes les métadonnées des tables internes (y compris celles qui sont héritées de sys.objects)

SELECT * FROM sys.internal_tables;

C.Retourner les colonnes et les types de données des colonnes des tables internes

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    ,typ.name AS column_data_type 
    ,col.*
FROM sys.internal_tables AS itab
JOIN sys.columns AS col ON itab.object_id = col.object_id
JOIN sys.types AS typ ON typ.user_type_id = col.user_type_id
ORDER BY itab.name, col.column_id;

D.Retourner les index des tables internes

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    , itab.name AS internal_table_name
    , idx.*
FROM sys.internal_tables AS itab
JOIN sys.indexes AS idx ON itab.object_id = idx.object_id
ORDER BY itab.name, idx.index_id;

E.Retourner les statistiques des tables internes

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    , s.*
FROM sys.internal_tables AS itab
JOIN sys.stats AS s ON itab.object_id = s.object_id
ORDER BY itab.name, s.stats_id;

F.Retourner les informations relatives aux partitions et aux unités d'allocation des tables internes

SELECT SCHEMA_NAME(itab.schema_id) AS schema_name
    ,itab.name AS internal_table_name
    ,idx.name AS heap_or_index_name
    ,p.*
    ,au.*
FROM sys.internal_tables AS itab
JOIN sys.indexes AS idx
--     JOIN to the heap or the clustered index
    ON itab.object_id = idx.object_id AND idx.index_id IN (0,1)
JOIN   sys.partitions AS p 
    ON p.object_id = idx.object_id AND p.index_id = idx.index_id
JOIN   sys.allocation_units AS au
--     IN_ROW_DATA (type 1) and ROW_OVERFLOW_DATA (type 3) => JOIN to partition's Hobt
--     else LOB_DATA (type 2) => JOIN to the partition ID itself.
ON au.container_id =  
    CASE au.type 
        WHEN 2 THEN p.partition_id 
        ELSE p.hobt_id 
    END
ORDER BY itab.name, idx.index_id;

G.Retourner les métadonnées des tables internes pour les index XML

SELECT t.name AS parent_table
    ,t.object_id AS parent_table_id
    ,it.name AS internal_table_name
    ,it.object_id AS internal_table_id
    ,xi.name AS primary_XML_index_name
    ,xi.index_id as primary_XML_index_id
FROM sys.internal_tables AS it
JOIN sys.tables AS t 
    ON it.parent_id = t.object_id
JOIN sys.xml_indexes AS xi 
    ON it.parent_id = xi.object_id
    AND it.parent_minor_id  = xi.index_id
WHERE it.internal_type_desc = 'XML_INDEX_NODES';
GO

H.Retourner les métadonnées des tables internes pour les files d'attente Service Broker

SELECT q.name AS queue_name
    ,q.object_id AS queue_id
    ,it.name AS internal_table_name
    ,it.object_id AS internal_table_id
FROM sys.internal_tables AS it
JOIN sys.service_queues  AS  q ON it.parent_id = q.object_id
WHERE it.internal_type_desc = 'QUEUE_MESSAGES';
GO

I.Retourner les métadonnées des tables internes pour tous les services Service Broker

SELECT * 
FROM tempdb.sys.internal_tables 
WHERE internal_type_desc = 'SERVICE_BROKER_MAP';
GO

Voir aussi

Référence

Affichages catalogue (Transact-SQL)

Vues de catalogue d'objets (Transact-SQL)