提交前加锁,后插那个插不成功。提示用nowait。一般前面那个commit,rollback之后就可以了。特殊情况也可以kill session了事。

解决方案 »

  1.   

    commit,rollback之后锁就会自动取消的,一般不建议通过kill session来处理,加锁应该在提交前,另外你所说的插入的数据只在客户端的内存当中,好象没听到过这样的说法的,呵呵,如果是没加锁,那么a对表执行了一条插入数据的语句,但是并没有提交,b是可以执行了插入语句的
      

  2.   

    还有一个疑问就是,我用system用户向表customer中插入数据后并没有执行commit,a和b用户也能看到插入的数据阿,为什么分别用a和b用户登陆插入数据后必须执行commit后才能彼此看到对方插入的数据呢,而且如果不执行commit那么下次登陆后插入的数据就会丢失?
      

  3.   

    所有客户端做的DML操作都是交给服务器上的相应服务器进程执行的,执行DML后,就会加上相应的锁,在提交或回滚后释放锁。因此insert后虽然没有提交,但数据库服务器已执行,UNDOLOG和回滚段中都记载了,DB buffer中也有数据了,如果长时间没提交,有可能数据文件上也会写入了。
    如果在A和B会话中都往同一张表中插入主关键字相同的记录(均未提交),在oracle中后执行的会话被锁。如果插入的主关键字不同,则都能执行。
    "用system用户向表customer中插入数据后并没有执行commit,a和b用户也能看到插入的数据",是在相
    同的客户端上吗?是否被设置为自动提交了。
      

  4.   

    我们没有做任何设置阿,我实在自己的电脑上打开了三个ms-dos窗口,其中两个位a和b用户的登陆界面,而且a和b插入的数据时不同的。
      

  5.   

    在oracle中,执行DDL语句会自动提交未提交的事务
      

  6.   

    “执行DDL语句会自动提交未提交的事务”是指提交本会话的未提交的事务,其他session是不受影响的。