2012-08-23 3 views
0

J'utilise oracle.jdbc.dcn.DatabaseChangeListener pour enregistrer des insertions/mises à jour/suppressions dans une table. Pour les inserts, je peux garder une trace des rowids. Cependant, j'ai un problème avec les mises à jour et les suppressions.Détection des modifications à l'aide de la notification de modification de la base de données Oracle

Pour les mises à jour, je cherche un moyen de trouver la valeur de la ligne/colonne avant que la mise à jour soit faite.

Pour les suppressions, j'obtiens le rowid qui a été supprimé, mais c'est tout ce que j'ai. Je voudrais une sorte de capacité de suivre quelle ligne a été supprimée.

Je définis les propriétés à l'aide de oracle.jdbc.OracleConnection.

Properties changeNotifProps = new Properties(); 
changeNotifProps.put(OracleConnection.DCN_IGNORE_DELETEOP,"false");    
changeNotifProps.put(OracleConnection.DCN_IGNORE_INSERTOP, "false"); 
changeNotifProps.put(OracleConnection.DCN_IGNORE_UPDATEOP , "false"); 
changeNotifProps.put(OracleConnection.DCN_NOTIFY_CHANGELAG , "0"); 
changeNotifProps.put(OracleConnection.DCN_NOTIFY_ROWIDS , "true"); 
changeNotifProps.put(OracleConnection.NTF_LOCAL_HOST , <hostname>); 
changeNotifProps.put(OracleConnection.NTF_LOCAL_TCP_PORT , "7115"); 
return changeNotifProps; 

Existe-t-il une sorte de propriété que je peux définir pour détecter la valeur précédente des lignes?

EDIT: J'ai oublié de mentionner que je le fais sur des centaines de tables. Je ne peux pas ajouter de triggers/tables pour enregistrer le changement. J'ai besoin d'enregistrer tous les changements dans la JVM.

Répondre

1

Créez une table d'audit et utilisez un déclencheur AFTER INSERT UPDATE DELETE pour la remplir. J'aime enregistrer la clé (vous pouvez enregistrer le ROWID ici), l'heure et la date, l'utilisateur, le verbe SQL (INSERT, UPDATE, DELETE) et les valeurs appropriées (utiliser les nouvelles valeurs sur INSERT et UPDATE, utiliser l'OLD valeurs lors de la journalisation d'un DELETE). Compte tenu de cela, vous devriez être en mesure de récupérer vos valeurs de la table d'audit.

Partagez et appréciez.

Questions connexes