Exemple : Liste de toutes les instructions DDL validées à l'aide du moniteur d'événements de l'historique des modifications

Vous pouvez utiliser le moniteur d'événements de l'historique des modifications pour dresser rapidement la liste de toutes les instructions DDL validées exécutées afin de déterminer si les modifications apportées peuvent avoir un impact sur votre charge de travail.

Scénario

Dans cet exemple, l'administrateur de la base de données (DBA) remarque qu'une dégradation des performances d'un certain nombre de requêtes s'est produite au cours des dernières 24 heures. L'administrateur de bases de données utilise le moniteur d'événements de l'historique des modifications pour examiner rapidement les DDL exécutés au cours de cette période, afin de déterminer si des modifications ont été apportées qui pourraient avoir un impact significatif sur la charge de travail (par exemple, des index qui ont été supprimés). L'administrateur de bases de données a précédemment créé un moniteur d'événements d'historique des modifications appelé CHGHIST, qui est utilisé pour suivre les instructions DDL. L'administrateur de bases de données exécute la commande suivante pour répertorier toutes les instructions DDL validées capturées par le moniteur d'événements de l'historique des modifications au cours des dernières 24 heures. L'instruction émise exclut les instructions qui ont été annulées, soit par une instruction ROLLBACK, soit par une instruction ROLLBACK TO SAVEPOINT.
Notez que le moniteur d'événements de l'historique des modifications enregistre les événements DDL lorsque le DDL est exécuté. Le fait que le DDL entraîne une modification de la base de données dépend de la validation du DDL.
WITH savepoint_rollbacks (global_tran_id, local_tran_id, savepoint_id) AS
   (SELECT DISTINCT T.global_transaction_id, T.local_transaction_id, T.savepoint_id
      FROM DDLSTMTEXEC_CHGHIST as D, TXNCOMPLETION_CHGHIST as T
      WHERE T.txn_completion_status='S' AND
            D.savepoint_id >= T.savepoint_id AND
            D.event_timestamp <= T.event_timestamp)
   SELECT VARCHAR(D.STMT_TEXT, 70) AS STMT_TEXT FROM DDLSTMTEXEC_CHGHIST as D,
            TXNCOMPLETION_CHGHIST as T
      WHERE D.global_transaction_id = T.global_transaction_id AND
            D.local_transaction_id = T.local_transaction_id AND
            T.txn_completion_status = 'C' AND
            (D.global_transaction_id, D.local_transaction_id, D.savepoint_id)
   NOT IN (SELECT * FROM savepoint_rollbacks) AND
            D.EVENT_TIMESTAMP > CURRENT TIMESTAMP - 24 HOURS;

STMT_TEXT
----------------------------------------------------------------------
CREATE INDEX I1 ON T1 (ONE)

1 record(s) selected.