5,当A用户去执行P过程时[P过程没执行完],C用户去编译P过程,会出现什么问题
用一个例子重现该问题,并找到解决方法

解决方案 »

  1.   

    以sys用户登入:
    SQL> conn / as sysdba
    已连接。
    SQL> create or replace procedure P
      2  is
      3  begin
      4  dbms_output.put_line('helloworld');
      5  dbms_lock.sleep(300);
      6  end;
      7  /过程已创建。
    SQL> grant execute on P to scott;授权成功。SQL> commit;提交完成。SQL> exec P
    此时P会话被锁住,C用户无法编译过程P
    select owner,name,type,locks,pins from V$DB_OBJECT_CACHE where owner='SYS' AND LOCKS!=0 AND NAME='P'以scott用户登入:
    SQL> conn scott/tiger
    已连接。
    SQL> exec sys.P3)300秒过去了 后
    SQL> exec PPL/SQL 过程已成功完成。SQL> exec sys.PPL/SQL 过程已成功完成。
      

  2.   

    去了解一下oracle并发机制自己测试一下看效果