sql >> データベース >  >> RDS >> Oracle

Oracleデータ変更通知のタイムアウトとワークフロー

    user_change_notification_regsに永続化したレコード DBMSはその「この接続を準備したJDBC接続はまだ生きています」を追跡しないため、テーブルを明示的に削除する必要があります。 ハートビートメカニズムが必要です。したがって、サーバーを再起動するときに、これらのレコードを明示的に削除(登録解除)する必要があります。これが例です。

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

    このコードは、クラスの静的ブロックまたは1回だけ実行される初期化メソッドに配置するだけです。リスナーにタイムアウトを設定すると、Oracleサーバー側のドライバーが接続のハートビートメカニズムを有効にし、アプリケーションのパフォーマンスをわずかに低下させる可能性があります。



    1. phpMyAdminでのインポートと同等のプログラム

    2. エラーSystem.Data.OracleClientは、セットアップのインストール時にOracleクライアントソフトウェアバージョン8.1.7以降を必要とします

    3. PKを参照する外部キーにはNOTNULL制約が必要ですか?

    4. 挿入または更新時に完全なMySQLクエリ文字列を取得する