oracle 11g中部分存储过程,出现4个表连接时,即使没有数据,也会出现死锁,无法查询到数据。在使用临时表讲连接次数减少后,性能提高!!!!!!!各位专家是否有其他解决方法。还有一个问题是oracle中的临时表在有多表连接时,空间增长过快,除了删除临时表从新建立新新临时表空间,还有其他比较好的解决方法。!!!!!!急急急。

解决方案 »

  1.   

    写一个 package,里面包含一系列的procedure
    处理如下事务:
    1.建临时表1
    2.建临时表2

    n-2.查询你要的结果并保存在临时表final
    n-1.将final表数据传出,视需求而定,比如我们项目是依照final表数据使用sqr产生pdf文件,或者导出成txt文件和xls文件
    n.drop所有临时表写一个公共的main procedure,while循环处理一系列事务,任意环节出错则将该环节循环数i记录在一个专门的表compl_parm,下次运行时候直接读出,以此获得restart能力。
      

  2.   


    不需要没次删除。会话结束,数据自动会消失。出现4个表连接时,即使没有数据,也会出现死锁
    出现是检查一下v$lock和v$locked_objects表,看看有什么对象。你这里的多表连接指的什么?
      

  3.   

    就是使用自然连接,比如 select * from a,b,c,d where a.id = b.id and c.id = d.id.即使4个表中都没有数据,执行时20分钟都无法查询出数据。在使用会话临时表处理后,速度大幅提升。
      

  4.   

    四张表,三个条件,如果数据量再大点,肯定有大量的笛卡尔积。
    你的过程里面是不是有其他的SQL会将表锁死。select b.owner,b.object_name,a.SESSION_ID,a.LOCKED_MODE,a.OS_USER_NAME
    from v$locked_object a,dba_objects b
    where a.OBJECT_ID=b.object_id使用这个来看看锁死的信息。然后KILL掉。
    临时表是不需要删除的,一个SESSION完结后自动清空。
      

  5.   

    11.6还是11.7?什么平台?另外.trace是啥结果?
      

  6.   

    从执行计划分析。Oracle查询会出现死锁还是第一次听到,是查询超时?