sys.dm_db_objects_disabled_on_compatibility_level_change (Transact-SQL)

Répertorie les index et les contraintes qui seront désactivés suite à la modification du niveau de compatibilité.

Les index et les contraintes qui contiennent des colonnes calculées persistantes dont les expressions utilisent des types définis par l'utilisateur spatiaux sont désactivés après une mise à niveau ou une modification du niveau de compatibilité. Utilisez cette fonction de gestion dynamique pour déterminer l'impact d'un changement de niveau de compatibilité.

Icône Lien de rubrique Conventions de la syntaxe Transact-SQL

Syntaxe

sys.dm_db_objects_disabled_on_compatibility_level_change ( compatibility_level ) 

Arguments

  • compatibility_level
    int qui identifie le niveau de compatibilité que vous envisagez de définir.

Table retournée

Nom de colonne

Type de données

Description

classe

int

1 = contraintes

7 = index et segments

class_desc

nvarchar(60)

OBJECT ou COLUMN pour les contraintes

INDEX pour les index et les segments

major_id

int

OBJECT ID des contraintes

OBJECT ID de la table qui contient des index et des segments

minor_id

int

NULL pour les contraintes

Index_id pour les index et les segments

dependency

nvarchar(60)

Description de la dépendance qui provoque la désactivation de la contrainte ou de l'index. Les mêmes valeurs sont également utilisées dans les avertissements générés pendant la mise à niveau. En voici quelques exemples :

  • « space » pour un type intrinsèque

  • « geometry » pour un type défini par l'utilisateur système

  • « geography::Parse » pour une méthode d'un type défini par l'utilisateur système

Remarques d'ordre général

Les colonnes calculées persistantes qui utilisent des fonctions intrinsèques sont désactivées lorsque le niveau de compatibilité est modifié. En outre, les colonnes calculées persistantes qui utilisent une méthode de type geometry ou geography sont désactivées lorsqu'une base de données est mise à niveau.

Quelles sont les fonctions qui provoquent la désactivation des colonnes calculées persistantes ?

Lorsque les fonctions suivantes sont utilisées dans l'expression d'une colonne calculée persistante, elles entraînent la désactivation des index et des contraintes qui font référence à ces colonnes lorsque le niveau de compatibilité est modifié de 80 à 90 :

  • IsNumeric

Lorsque les fonctions suivantes sont utilisées dans l'expression d'une colonne calculée persistante, elles entraînent la désactivation des index et des contraintes qui font référence à ces colonnes lorsque le niveau de compatibilité est modifié de 100 à 110 :

  • Soundex

  • Geography:: GeomFromGML

  • Geography:: STGeomFromText

  • Geography:: STLineFromText

  • Geography:: STPolyFromText

  • Geography:: STMPointFromText

  • Geography:: STMLineFromText

  • Geography:: STMPolyFromText

  • Geography:: STGeomCollFromText

  • Geography:: STGeomFromWKB

  • Geography:: STLineFromWKB

  • Geography:: STPolyFromWKB

  • Geography:: STMPointFromWKB

  • Geography:: STMLineFromWKB

  • Geography:: STMPolyFromWKB

  • Geography:: STUnion

  • Geography:: STIntersection

  • Geography:: STDifference

  • Geography:: STSymDifference

  • Geography:: STBuffer

  • Geography:: BufferWithTolerance

  • Geography:: Parse

  • Geography:: Reduce

Quel est le comportement des objets désactivés ?

Index

Si l'index cluster est désactivé, ou si un index non cluster est forcé, l'erreur suivante est levée : « Le processeur de requêtes ne peut pas créer de plan car l'index '%.*ls' sur la table ou la vue '%.*ls' est désactivé. » Pour réactiver ces objets, reconstruisez les index après la mise à niveau en appelant ALTER INDEX ON… REBUILD.

Segments

Si une table avec un segment désactivé est utilisée, l'erreur suivante est déclenchée. Pour réactiver ces objets, reconstruisez après la mise à niveau en appelant ALTER INDEX ALL ON… REBUILD.

// ErrorNumber: 8674
// ErrorSeverity: EX_USER
// ErrorFormat: The query processor is unable to produce a plan because the table or view '%.*ls' is disabled.
// ErrorCause: The table has a disabled heap. 
// ErrorCorrectiveAction: Rebuild the disabled heap to enable it. 
// ErrorInserts: table or view name 
// ErrorOwner: mtintor 
// ErrorFirstProduct: SQL11

Si vous essayez de reconstruire le segment lors d'une opération en ligne, l'erreur suivante est déclenchée :

// ErrorNumber: TBD 
// ErrorSeverity: EX_USER 
// ErrorFormat: Cannot rebuild table '%.*ls' online because it is disabled. 
// ErrorInserts: table name 
// ErrorCause: Table cannot be rebuilt online if it is disabled. 
// ErrorCorrectiveAction: Rebuild the disabled table offline. 
// ErrorExecImpact: TRANSACTION_ABORT 
// ErrorBlameComponent: User 
// ErrorProbability: Low 
// ErrorStateBefore: ONLINE 
// ErrorStateAfter: ONLINE 
// ErrorFirstProduct: SQL11 

Contraintes de validation et clés étrangères

Les contraintes de validation et les clés étrangères désactivées ne déclenchent pas d'erreur. Toutefois, les contraintes ne sont pas appliquées lorsque des lignes sont modifiées. Pour réactiver ces objets, vérifiez les contraintes après la mise à niveau en appelant la CHECK CONSTRAINT ALTER TABLE….

Colonnes calculées persistantes

Comme il est impossible de désactiver une colonne unique, la table entière est désactivée grâce à la désactivation de l'index cluster ou du segment.

Sécurité

Autorisations

Requiert l'autorisation VIEW DATABASE STATE.

Exemple

L'exemple suivant illustre une requête sur sys.dm_db_objects_disabled_on_compatibility_level_change pour trouver les objets affectés par la modification du niveau de compatibilité à 110.

SELECT * FROM sys.dm_db_objects_disabled_on_compatibility_level_change(110);
GO