现在做作数据迁移的工作,用pl sql完成的代码,在数千条数据的测试环境已测试通过。但是,在实际生产环境中,当数据量超过2、3万,就会出现程序不能退出的问题,但是,查目标表,则显示数据已全部导入。
  经过调试后,发现只要是游标嵌套,或是在游标循环内使用了count(*)、sum()等聚合函数,都会导致程序不能退出。初步估计是在大数据量下系统资源不够造成的,但不是很确定。
  还有,为了避免在一个游标内部再嵌套调用游标,我将嵌套游标放在一个函数中完成,但还是出现不能退出的问题。
  欢迎大家谈谈这方面的经验,特别是大数据量操作要注意的问题。

解决方案 »

  1.   

    v$session_wait看看系统当时有什么等待?v$lock,v$locked_object看看有什么锁
      

  2.   

    没看到有锁,而且数据导入都执行完了,select目标表都可以查到导入的数据,但是pl sql就是不退出。
      

  3.   

    这个正常,我也遇到过!你可以试着加大PL/SQL的内存大小
      

  4.   

    是不是存在循环内部的游标
    如果有的耍,即使把内部的游标换乘函数,应该也解决不了问题。
    好像和oracle的配置有关系。
    看看init.ora里的配置信息。
      

  5.   

    在oem中看看session也许可以找到端倪。
      

  6.   

    feixzmm(翅兮) ( ) :
    你是说用trace跟踪吗?
      

  7.   

    yaozw_mountain(山林) ( ) :
    你说的:增大全局内存块和排序缓存的内存大小
    是不是修改服务器端的配置啊?这些怎么修改啊?还有,
    wyc2000(工人) ( ):
    你说的增加pl sql 的内存
    应该是增加client端的pl sql 内存吧?怎么改?
      

  8.   

    数据都已经导入的,就是执行到exit命令时就不往下执行了。这时候强行断开也是可以退出的,但就是必须要人工介入,我们要依次执行多个类似的程序,如果中间某个程序不能退出的话,后面的程序都不能自动执行了。我现在是把类似上面说的可能引起不能正常退出的sql 都做了修改,暂时绕开了这些问题。但这些问题仍然存在,还想有个结果。
    我先试试用trace跟踪一下,看能得到什么结果。
    再次感谢各位的关注,希望对大家也能有所帮助。