看看下面两条语句: 
Oracle数据库1、 
select * from c_bak_board where rowid = 'AAAN0XAAFAAAD/eABB' 
2、 
delete from c_bak_board where rowid = 'AAAN0XAAFAAAD/eABB' 上面第一条sql语句可以查出记录,但是执行第二条语句试图删除这条记录是数据库就一直没有响应,也不报异常,我只得手动把操作取消,数据仍然没有删除。 今天上午执行删除操作的时候还是正常的,下午就不行了,有谁知道这是什么原因啊?rowid的使用有什么限制吗?还有个问题,我上csdn论坛不是很久,前面提过一两个问题,但是我找不到在哪里可以结贴,只找到一个“无满意结贴”,所以我很想给回答的好的人分数但不知道怎么给,请在回答该问题时顺便教我一下怎么给分结贴,谢谢!

解决方案 »

  1.   

    可以删除的,执行sql后需要commit
    做删除操作的时候一般不用rowid来做条件管理帖子,在回答好的人后面写上分数就可以了
      

  2.   

    之前也是可以的,我用rowid in(),括号中间有100多个rowid都可以删除记录,今天项目经理将原来的记录清空有新导入了一万多条记录后就不行了,程序里的设定都是自动commit的,用sqlplus的话执行到delete那句时就一直停在那里了。
      

  3.   

    这不是rowid的问题。可能是要删除的这行记录或者整个表被锁住了。
      

  4.   

    select * from v$locked_object;alter system kill session 'SID,SERIAL#';
      

  5.   

    select   *   from   v$locked_object 这句可以执行而且能查出数据alter   system   kill   session   'SID,SERIAL#' 这句不能执行:ORA-00026: missing or invalid session ID 什么原因呢?
      

  6.   

    假如,在别的会话中,运行了这样的语句:select   *   from   c_bak_board   where   rowid   =   'AAAN0XAAFAAAD/eABB'  for update 或者:delete   from   c_bak_board   where   rowid   =   'AAAN0XAAFAAAD/eABB'   
    那么,这一行数据就被锁住了,直到提交了commit或者rollback。如果你在另外一个会话中,再对这行数据进行修改或者删除,那么就会阻塞,一直挂在那里。解决的方法,可以在第一个会话中进行提交事务;或者干脆将第一个会话杀掉。
      

  7.   

    alter       system       kill       session       'SID,SERIAL#'   这句不能执行:ORA-00026:   missing   or   invalid   session   ID   什么原因呢?-----------------------------------alter       system       kill       session       'SID,SERIAL#'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