我在客户端执行了"select * from abc for update"后,没有执行"commit",表被系统锁定,不能更新.因为客户端用户只分配了"查询,更新"权限,其他权限都没有.请问服务端不作任何处理,系统能否自动解锁呢?如果能解,一般在多长时间后解锁呢?谢谢!

解决方案 »

  1.   

    不会解锁的除非你commit or rollback
      

  2.   

    找你的系统管理员,终止掉你之前的session,就可以了。会rollback回来。
    你有管理者权限的话,通过客户端,一样可以做到的。
      

  3.   

    1.找出谁锁定了什么
    Select v2.username,v2.sid,v2.serial#,v2.logon_time From v$locked_object v1,v$session v2 Where v1.session_id=v2.sid order by v2.logon_time2.结束掉这个session
    alter   system   kill   session   'sid,serial#';
      

  4.   

    Enterprise Manager console图形界面中就有“锁”一项可以看到会话、及客户端名称等信息,结束就行了
      

  5.   

    查了一下 关于select/insert/delete/update ... for update 
    ----------
    该语句会自动获取行级锁,在你SELECT的记录中放置排他锁,只是符合SELECT条件的行才被锁定,在你未释放锁(COMMIT   or   ROLLBACK)之前其它用户不能进行更新操作,可以执行更新之外的其它操作。
      

  6.   

    结束客户端进程进程,SMON会自动回收资源,包括锁。
      

  7.   

    进程如果被kill掉,那么先看看哪个进程持有锁,如果是pmon,smon之类的,那么不要kill了,
    查查原因再说.
      

  8.   

    不会解锁的 除非你commit   ,   rollback,结束进程,重启服务器
      

  9.   

    恐怕LZ现在的情况,要么想办法结束掉之前自己的进程,要么就是楼上提出的Restart。
    赫赫。
    重启Oracle服务,有点狠。赫赫。
      

  10.   

    客户端中断连接,oracle会隐式地执行rollback,
    客户端退出sql*plus ,oracle 会隐式地执行commit;
      

  11.   

    客户端退出sql*plus,Oracle会隐式地执行rollback,不是commit;
    当然,你把自己的sql*plus的autocommit设置为true,执行一些UPDATE,DELETE等语句的时候,会自动commit.客户端中断连接,在使用连接池的时候,不会立刻rollback,只有连接池中,这个连接要被释放资源的时候,才会rollback。
      

  12.   

    学习。
    用客户端时候,定时手动commit已经成习惯. 呵呵客户端退出也手动一下,不厌其烦,呵呵。 重启Oracle服务?狠,那是会出人命滴。呵呵。
      

  13.   

    最好先做rollback重新启动除非是在所有办法都不能实现的情况下,迫不得以才那样做
      

  14.   

    可以考虑用企业管理器
    如果没有权限的话 只能杀进程拉
    客户 不可能用sqlplus 人家看到的是封装后的界面