Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Przekroczenie limitu czasu powiadomienia o zmianie danych Oracle i przepływ pracy

Rekordy, które utrwaliłeś w user_change_notification_regs tabela musi zostać wyraźnie usunięta, ponieważ DBMS nie śledzi tego 'Połączenie JDBC, które przygotowało to połączenie, jest nadal aktywne' co wymaga mechanizmu bicia serca. Dlatego po ponownym uruchomieniu serwera musisz jawnie usunąć (wyrejestrować) te rekordy. Oto przykład.

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

Możesz po prostu umieścić ten kod w statycznym bloku klasy lub metody inicjującej, która zostanie wykonana tylko raz. Jeśli ustawisz limit czasu dla słuchacza, sterownik Oracle po stronie serwera włączy mechanizm bicia serca dla Twojego połączenia, co może nieznacznie obniżyć wydajność aplikacji.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Typ tabeli w przykładzie procedury składowanej Oracle

  2. ORA-00984:kolumna nie jest tutaj dozwolona

  3. Oracle 11 SQL:Podziel 1 wiersz na x wierszy i wstaw nową kolumnę

  4. Dobra praktyka otwierania/zamykania połączeń w aplikacji asp.net?

  5. Nie można SUM(TO_NUMBER(pole varchar2)) :ORA 01722 [ORACLE]