sql >> Database teknologi >  >> RDS >> Oracle

Oracle Data Change Notification Timeout og Workflow

De registreringer, du har bevaret i user_change_notification_regs tabel skal slettes eksplicit, da DBMS ikke holder styr på den 'JDBC-forbindelsen, som forberedte denne forbindelse, er stadig i live' som kræver en hjerteslagsmekanisme. Når din server genstarter, skal du derfor udtrykkeligt slette (afregistrere) disse poster. Her er et eksempel.

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);
        } 

Du kan simpelthen sætte denne kode i en statisk blok af en klasse eller en initialiseringsmetode, som kun vil blive udført én gang. Hvis du indstiller en timeout for lytteren, aktiverer oracle server side driver hjerteslagsmekanismen for din forbindelse, hvilket kan reducere applikationens ydeevne en smule.



  1. SQL Group By med en Order By

  2. FORALL erklæring med INDICES-OF bundet klausul i Oracle-databasen

  3. Beregning af InnoDB-bufferpoolstørrelse til din MySQL-server

  4. Sådan opdaterer du id-kolonnen fra 1 igen