sql >> Databáze >  >> RDS >> Oracle

Časový limit upozornění na změnu dat Oracle a pracovní postup

Záznamy, které jste uchovali v user_change_notification_regs tabulka musí být explicitně odstraněna, protože DBMS nesleduje toto 'Připojení JDBC, které připravilo toto připojení, je stále živé' což vyžaduje mechanismus srdečního tepu. Proto, když se váš server restartuje, musíte tyto záznamy explicitně smazat (zrušit registraci). Zde je příklad.

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

Tento kód můžete jednoduše vložit do statického bloku třídy nebo inicializační metody, která bude provedena pouze jednou. Pokud nastavíte časový limit pro posluchač, ovladač na straně serveru Oracle aktivuje mechanismus srdečního tepu pro vaše připojení, což může mírně snížit výkon aplikace.



  1. Vytvořte a použijte dočasnou tabulku ve vnořených dotazech

  2. Povolit, aby číslo začínalo nulou, když je uloženo v poli mysql integer

  3. PŘEVOD MySQL dotazu na SQL Server (MSSQL / SQLSRV) (S DISTINCT)

  4. UPDATE/DELETE v mysql a získat seznam dotčených ID řádků?