可以通过alter system kill session ‘sid,serial#’来杀掉会话 SELECT /*+ rule */ s.username, decode(l.type,'TM','TABLE LOCK', 'TX','ROW LOCK', NULL) LOCK_LEVEL, o.owner,o.object_name,o.object_type, s.sid,s.serial#,s.terminal,s.machine,s.program,s.osuser FROM v$session s,v$lock l,dba_objects o WHERE l.sid = s.sid AND l.id1 = o.object_id(+) AND s.username is NOT NULL
解决方案 »
- 索引的pctfree疑问
- 关于insert into的问题
- 删除用户没反应,强行结束后,再删除也不行.加 cascade也不行.其他用户也是一样.环境:AIX5.2,ORACLE 9i ,ERP TIPTOP
- BLOB 转string
- 安装11gR2 Grid 时出错。
- 在Oracle中,能不能同时执行多条alter.
- 那请问Enterprice Manager Console和DBA studio有什么区别呢?
- 连接出现 maximun number of processes(59) exceeded???
- 触发器的设计,字段内容为特殊字符时(比如:+ 〉/),可以处理吗?
- Oracle中的(+)语法
- 如何创建一个用户只能以normal模式登陆,不能以sysdba和sysoper登陆OEM
- sql语句问题,在线~~
Oracle的select根本不会影响其它同时的对同一个表的修改操作(除非你用select ... for update),Oracle的回退段实现了这个功能。
Sql server没有回退段,只好在select的过程中也锁表。
我想用下面的方法来避免执行update语句时被锁住
DataBase db=new DataBase();
Connection conn=null;
Statement stmt=null;
int intTemp=0;
boolean blnTemp=false;
try{
conn=db.getConn();
blnTemp=conn.getAutoCommit();
conn.setAutoCommit(false);
stmt=conn.createStatement();
intTemp=stmt.executeUpdate(strSQL);
if(intTemp>0){
stmt.execute("commit");
}else{
stmt.execute("rollback");
}
stmt.close();
conn.setAutoCommit(blnTemp);
conn.close();
}catch(Exception e){
return -1;
}finally{
try{
stmt.close();
}catch(Exception e){}
try{
conn.close();
}catch(Exception e){}
}这样写是不是可避免在执行update语句时可能存在的被锁定?
还有就是如果我把stmt.execute("commit")换成conn.commit();把 stmt.execute("rollback");换成conn.rollback();两者会有什么不同吗?
自动解锁
job+procedure