web-dev-qa-db-fra.com

Comment effacer une file d'attente dans Oracle AQ

J'ai testé Oracle AQ pour la première fois. J'ai réussi à créer 2000 lignes d'inserts de test dans la file d'attente que j'ai créée.

Maintenant, j'aimerais les effacer. Comme je m'enseignais moi-même, j'ai fixé le délai d'expiration à un mois. Je ne peux pas attendre aussi longtemps. Et je ne pense pas que je devrais simplement les supprimer de la table de file d'attente.

Quelle est la meilleure façon de procéder?

20
jeph perro

Vous pouvez utiliser le DBMS_aqadm.purge_queue_table procédure.


SOLUTION

Le SQL ressemble à ceci:

-- purge queue
DECLARE
 po_t dbms_aqadm.aq$_purge_options_t;
BEGIN
  dbms_aqadm.purge_queue_table('MY_QUEUE_TABLE', NULL, po_t);
END;
25
erbsock

Faites juste une suppression sur la table de file d'attente.

Tant pis, je viens de faire une vérification et ce n'est pas vrai :

Oracle Streams AQ ne prend pas en charge les opérations du langage de manipulation de données (DML) sur les tables de files d'attente ou les tables organisées par index (IOT) associées, le cas échéant. Le seul moyen pris en charge pour modifier les tables de file d'attente est via les API fournies. Les tables de file d'attente et les IOT peuvent devenir incohérents et donc effectivement ruinés, si des opérations DML y sont effectuées.


Vous devrez donc créer une petite routine PL/SQL pour retirer les éléments.

Utilisez le dbms_aq paquet. Vérifiez l'exemple de la documentation: Dequeuing Messages . Faites défiler un peu et il y a un exemple complet.

2
JOTN