Bon temps!Délai de notification des modifications de données Oracle et flux de travail
Nous avons la fonction Oracle DCN configurée dans notre application Java. Tout fonctionne bien, mais il y a quelques problèmes sur l'arrêt de l'application. Si l'application est arrêtée de manière inattendue (par exemple, un processus Tomcat est arrêté via la commande kill -9
), les abonnés DCN sont laissés pendu dans un DB (select * from user_change_notification_regs;
). En outre, je peux voir que chaque abonné a un timeout 4294967295-second
.
Alors quelqu'un pourrait, s'il vous plaît, suggérer:
1. comment configurer le délai d'attente pour un abonné;
2. Pourquoi les abonnés restent-ils pendus même après que toutes les connexions JDBC sont arrêtées? Eh bien, s'il n'y a pas de correspondance entre une connexion JDBC et un abonnement DCN, comment Oracle enverra-t-il DCN à une application java lorsque la dernière sera finalement lancée (y a-t-il des opérations ping d'Oracle vers une application? un abonnement durable dans JMS)?
MISE À JOUR: J'ai trouvé une réponse au premier point . Il y a le paramètre OracleConnection.NTF_TIMEOUT
qui pourrait être réglé pour un DatabaseChangeRegistration
:
Properties properties = new Properties();
properties.setProperty(OracleConnection.DCN_NOTIFY_ROWIDS, "true");
properties.setProperty(OracleConnection.DCN_BEST_EFFORT, "true");
properties.setProperty(OracleConnection.NTF_TIMEOUT, "3600");
DatabaseChangeRegistration databaseChangeRegistration = oracleConnection.registerDatabaseChangeNotification(properties);