如果 VPN 用于数据库会话,如何杀死 Firebird (2.1) attachment/connection

How to kill Firebird (2.1) attachment/connection if VPN was used for database session

我正在使用 VPN(Endpoint Security、Check Point)从我计算机上的 IBExpert 建立到 Firebird 2.1 数据库的连接。有时我只是忘记断开与数据库的连接,我只 cancel/disonnect VPN 会话。

当我再次连接到 VPN 和数据库时,我可以在 mon$attachments 中看到之前的 connection/attachment 仍然存在并且其未解决的事务导致死锁错误(属于之前的附件- 这可以通过死锁错误的错误消息中报告的交易号来准确验证。

所以 - VPN 有时会保留会话,而这些 VPN 会话会保留 Firebird 附件。

有什么方法可以(使用 SYSDBA 连接)结束当前 Firebird 会话中的那些其他 Firebird 附件?

我已联系 VPN 管理员取消 VPN 会话,但这需要时间。数据库关闭是不可能的 - 数据库处于生产模式。因此,使用 SQL 结束 Firebird 附件是我唯一的选择 - 如果存在这样的选项?

在 Firebird 2.5 及更高版本中,您可以从 MON$ATTACHMENTS 中删除连接以终止连接。据我所知,Firebird 2.1 中的监控表不支持此功能。

鉴于 Firebird 2.5 甚至是 end-of-life,而 Firebird 2.1 自 2014 年以来一直是 end-of-life,您真的应该考虑更新。

通常,Firebird 使用 SO_KEEPALIVE 套接字选项来检测死连接,但这可能需要很长时间(取决于您的 OS 配置)。另一种可能是将 firebird.conf 中的 dummy_packet_interval 配置为 non-zero 值(该值是秒,因此将其设置为合理的(读取,不要太低)值)。