DBAtlas · Atlas d'exploitation des bases de données

Verrouiller et déverrouiller les statistiques d'une table/d'un schéma

OracleStatistiques

Commande

-- Lock (the auto stats job and normal GATHER calls no longer touch them):
EXEC DBMS_STATS.LOCK_TABLE_STATS(ownname => 'CUSTOMER_APP', tabname => 'ORDERS');
EXEC DBMS_STATS.LOCK_SCHEMA_STATS(ownname => 'CUSTOMER_APP');
-- A single partition only: DBMS_STATS.LOCK_PARTITION_STATS('CUSTOMER_APP', 'SALE_PART', 'P2026_H1');

-- Locked objects:
SELECT owner, table_name, partition_name, stattype_locked
FROM   dba_tab_statistics
WHERE  owner = 'CUSTOMER_APP' AND stattype_locked IS NOT NULL;

-- Deliberate gathering while locked (instead of ORA-20005):
EXEC DBMS_STATS.GATHER_TABLE_STATS('CUSTOMER_APP', 'ORDERS', force => TRUE);

-- Unlock:
EXEC DBMS_STATS.UNLOCK_SCHEMA_STATS(ownname => 'CUSTOMER_APP');
EXEC DBMS_STATS.UNLOCK_TABLE_STATS(ownname => 'CUSTOMER_APP', tabname => 'ORDERS');

Ce que fait la commande

Verrouille les statistiques contre toute modification ; la tâche automatique ignore les objets verrouillés et un appel GATHER au niveau table lève ORA-20005. force=>TRUE collecte sans supprimer le verrou.

Quand l'utiliser

Pour conserver des statistiques représentatives sur les tables de staging/volatiles vidées et remplies dans la journée, protéger les plans d'une table critique contre les changements de statistiques, ou préserver les valeurs définies avec DBMS_STATS.SET_TABLE_STATS.

Attention

Aucune licence requise. Les statistiques verrouillées s'écartent de la réalité avec le temps et causent des erreurs de cardinalité ; listez régulièrement les objets verrouillés. Un verrou de schéma ne couvre pas les tables ajoutées ultérieurement au schéma. Sur une table verrouillée, CREATE/REBUILD INDEX ne collecte pas non plus automatiquement les statistiques d'index.

Ouvrir dans DBAtlas →

Voir aussi