qq_32174455 2019-06-10 15:32 采纳率: 0%
浏览 244

使用spool抽取oracle数据时,只能抽取少量数据

       最近在工作中需要使用spool对远程oracle数据库进行表数据的抽取;
但是在实际工作中发现spool只能抽取到十几条数据(表中的数据量为千万级);
查询的数据量一多就直接卡住;
spool相关语句:
图片说明
然后对sql进行分析,字段是共64个,发现当限制rownum<20时,数据根本查询不出来。但是如果限制rownum<10,数据就可以查询出来的,spool也能够抽取到相关数据;
同样如果减少查询的列数也是可以查询到并抽取出来(rownum<20行的情况)
       鉴于该情况怀疑时oracle的临时表空间小;为了验证该想法,本人对该表作排序查询,发现报错;
图片说明
报错信息:ORA-01652: unable to extend temp segment by 32 in tablespace TEMP
意思是指temp表空间无法自动扩展temp段。这种问题一般有两种原因:一是临时表空间空间太小,二是不能自动扩展。
然后查询临时表空间的使用情况:图片说明
结果显示,临时表空间可使用有3.9G;
现本人困惑的有:
1、同一个sql,为什么限制rownum数不同会存在这种情况;10条能查询处来,而20条却查询不出来;
2、究竟是否是因为临时表空间过小?? 还是说时其它因素导致的??

  • 写回答

1条回答 默认 最新

  • 憧憬blog 2023-03-15 06:45
    关注

    1、同一个SQL,限制rownum数不同的原因可能是因为查询出来的结果集大小不同。当限制rownum<20时,查询出来的结果集较大,可能导致相关操作如排序、导出等耗费的系统资源过多,从而直接卡住。而限制rownum<10则查询结果集较小,操作所需系统资源较少,所以能够正常进行。

    2、临时表空间过小可能会导致抽取数据失败的情况。因为当抽取数据时,可能需要使用一定量的临时表空间来进行处理,如果临时表空间不足,则会出现无法继续处理数据的情况。但是临时表空间的使用情况显示可使用有3.9G,可能空间已经足够,所以还需要对其他因素进行排查,如是否存在性能瓶颈、资源限制等等。

    评论

报告相同问题?

悬赏问题

  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 对于相关问题的求解与代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料