最近在工作中需要使用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、究竟是否是因为临时表空间过小?? 还是说时其它因素导致的??
使用spool抽取oracle数据时,只能抽取少量数据
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
1条回答 默认 最新
- 憧憬blog 2023-03-15 06:45关注
1、同一个SQL,限制rownum数不同的原因可能是因为查询出来的结果集大小不同。当限制rownum<20时,查询出来的结果集较大,可能导致相关操作如排序、导出等耗费的系统资源过多,从而直接卡住。而限制rownum<10则查询结果集较小,操作所需系统资源较少,所以能够正常进行。
2、临时表空间过小可能会导致抽取数据失败的情况。因为当抽取数据时,可能需要使用一定量的临时表空间来进行处理,如果临时表空间不足,则会出现无法继续处理数据的情况。但是临时表空间的使用情况显示可使用有3.9G,可能空间已经足够,所以还需要对其他因素进行排查,如是否存在性能瓶颈、资源限制等等。
解决 无用评论 打赏 举报