-
DBA可能会因为某些操作将一些会话强行通过DB工具将会话kill,而缓存中的连接并不知道这种变化,当5
在实际应用中,比如DBA可能会因为某些操作将一些会话强行通过DB工具将会话kill,而缓存中的连接并不知道这种变化,当客户端获取到该连接时,也不能正常的进行操作,请问可以通过哪种手段来判断该连接是有效的呢?经过测试,Connection接口好象并没有提供哪个方法来完成这个工作,isClosed()并不能处理这个问题。如下代码:
//在这之前,有有数据库操作,conn连接正常
//接下来,我禁用网络连接,然后再启用连接
A:{
pstmt = conn.prepareStatement(sqlDelete);//执行到这时,没报错,可此时连接的TCP/IP SOCKETS 好像已经断开 }
for (int j = 0; j < ls.size(); j++) {
pstmt.setInt(1, Integer.parseInt(s.getSid()));
pstmt.addBatch();
}
B:{
pstmt.executeBatch();
}
//在此处一执行,就报错 ERROR - A communication error has been detected. Communication protocol being used: T4Agent.sendRequest(). Communication API being used: OutputStream.flush(). Location where the error was detected: Connection reset by peer: socket write error. Communication function detecting the error: *. Protocol specific error codes(s) TCP/IP SOCKETS
如何使程序在执行代码块A之前就已经知道连接的socket断开,我在A块之前加上
try {
if(conn==null){
conn=EntityManager.getConnection();
}else{
if(conn.isClosed()==true){
conn=EntityManager.getConnection();
}
}
} catch (Exception e) {
// TODO: handle exception
log.info(e);
}
这段代码不能解决问题.请大家帮忙2008年8月28日 10:19
目前还没有答案
相关推荐
通常情况下,当使用`ALTER SYSTEM KILL`命令杀死一个会话后,该会话将自动释放。然而,在某些复杂场景下,可能需要手动干预,如重新启动数据库实例或使用更高级的DBA权限进行清理。 ### 四、总结与预防策略 处理...
本文将深入探讨两个SQL查询语句,它们分别用于检查数据库表和pkg包是否被锁定,以及如何通过这些查询来识别并解决可能存在的锁定问题。 ### 检查数据库表是否被锁定 第一个SQL查询语句主要用于检查数据库中的表...
通过监控工具如Oracle的AWR报告,可以识别出系统中的主要等待事件,并据此采取针对性的优化措施。 ### ITL死锁解决 ITL死锁通常发生在两个事务互相等待对方释放资源时。使用`DBA_HIST_SYS等待视图`或`V$SESSION_...
根据提供的文件信息,我们可以整理出以下几个关键的知识点: ### 1. Oracle系统参数调整 ...这些知识点对于理解和操作Oracle数据库具有重要意义,特别是对于数据库管理员(DBA)来说更是必不可少的基础技能。
通过这条命令可以终止特定的会话。 ### 数据库缓存与配置 1. **数据库对象缓存查询:** - `SELECT * FROM V$DB_OBJECT_CACHE WHERE name LIKE '%JSD%' AND LOCKS != '0';` - `SELECT * FROM V$ACCESS WHERE ...
- **设置**:通过`DB_CREATE_FILE_DEST`等参数配置。 - **监控**:使用`V$UNDOSTAT`等视图查看状态。 50. **Oracle数据库的压缩技术**: - **高级压缩**:提高压缩比率,降低存储成本。 - **LOB压缩**:针对大...
此命令查找连接没有被及时释放而导致的高 CPU 占用情况,其中 `spid` 大于50表示用户进程,`status` 为 `sleeping` 表示进程处于休眠状态,`last_batch` 和 `login_time` 用于判断会话是否长时间未进行任何操作。...