sql >> Database >  >> RDS >> Oracle

Oracle Data Change Notification Time-out en workflow

De records die u heeft bewaard in user_change_notification_regs tabel moet expliciet worden verwijderd omdat DBMS dat niet bijhoudt 'De JDBC-verbinding die deze verbinding heeft voorbereid, is nog steeds in leven' waarvoor een hartslagmechanisme nodig is. Daarom moet u, wanneer uw server opnieuw opstart, deze records expliciet verwijderen (afmelden). Hier is een voorbeeld.

try (Connection conn = ConnManager.getConnection();) {
         if (conn.isWrapperFor(OracleConnection.class)) {

                try (OracleConnection oracleConnection = conn.unwrap(OracleConnection.class);
                        Statement stmt = oracleConnection.createStatement()) {
                    ResultSet rs = stmt.executeQuery("select regid,callback from USER_CHANGE_NOTIFICATION_REGS");

                    while (rs.next()) {
                        long regid = rs.getLong(1);
                        String callback = rs.getString(2);
                        ((OracleConnection) stmt.getConnection()).unregisterDatabaseChangeNotification(regid, callback);
                    }
                }
            }
        } catch (SQLException ex) {
            Logger.getLogger(TableBase.class.getName()).log(Level.SEVERE, null, ex);
        } 

U kunt deze code eenvoudig in een statisch blok van een klasse of een initialisatiemethode plaatsen die slechts één keer wordt uitgevoerd. Als u een time-out instelt voor de luisteraar, schakelt het stuurprogramma van de oracle server-side het hartslagmechanisme voor uw verbinding in, wat de prestaties van de toepassing enigszins zou kunnen verminderen.



  1. MySQL Full Text Search met utf8 (Perzisch/Arabisch)

  2. Maak een nieuwe MySQL-database met Workbench

  3. Python-mysql installeren met mysql van wamp

  4. Aankondiging van ClusterControl 1.7.4:Cluster-naar-cluster replicatie - Ultiem noodherstel