分区表数据处理问题

qq_39780772 2018-09-05 10:40:55
现有a分区表的数据约2千万条记录,大概24g,需要插入到b分区表中。temp表空间才2g大小,试过直接并行插入数据,脚本如下:
insert /*+parallel(b,8) append nologging */ into b select /*+paralel(a,8)*/ * from a(par_db_20160301)a,执行过程中提示无法通过128(在表空间TEMP中)扩展temp段
现在通过循环插入的方式进行操作,但是时间耗时太久,请问有什么方法改进,循环插入的脚本如下

declare cursor mycursor is SELECT ROWID FROM aa order by rowid;
type rowid_table_type is table of rowid index by pls_integer;
v_rowid rowid_table_type;
BEGIN
open mycursor;
loop
fetch mycursor bulk collect into v_rowid limit 5000;
exit when v_rowid.count=0;
forall i in v_rowid.first..v_rowid.last
insert into cc (deptno,dname,loc) select * from aa t;
commit;
end loop;
close mycursor;
END;


我想要达到的效果是,并行,每插入n条记录后提交一次。
...全文
226 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
minsic78 2018-09-07
  • 打赏
  • 举报
回复
引用 3 楼 qq_39780772 的回复:
[quote=引用 1 楼 minsic78 的回复:]
临时表空间不够就扩临时表空间~

不能扩临时表空间[/quote]
不能扩是因为文件系统空间问题?还是规范问题?如果无空间问题,贵司也没有各种作茧自缚的规范,那么就应该扩,更何况临时表空间扩了之后,收缩也很方便,如果是个测试开发库,而且是一次性的数据导入,那么更要扩。另外:在你的场景中,临时表空间爆掉应该是更新索引导致的,而不是单纯的数据插入,数据插入本身是不需要临时表空间的。
qq_39780772 2018-09-07
  • 打赏
  • 举报
回复
,谢谢大佬指点
  • 打赏
  • 举报
回复
impdp有一个参数table_exit_action 可以是append truncate skip 和replace
qq_39780772 2018-09-07
  • 打赏
  • 举报
回复
管理表空间的部门不给扩。谢谢你的指导
qq_39780772 2018-09-06
  • 打赏
  • 举报
回复
引用 2 楼 baidu_36457652 的回复:
limit 每次50000呢。
或者用impdp或者imp导呢
现在的做法就是limit50000,耗时20小时,所以想找其他方法,impdp会不会覆盖b表的其他数据
qq_39780772 2018-09-06
  • 打赏
  • 举报
回复
引用 1 楼 minsic78 的回复:
临时表空间不够就扩临时表空间~

不能扩临时表空间
  • 打赏
  • 举报
回复
limit 每次50000呢。
或者用impdp或者imp导呢
minsic78 2018-09-05
  • 打赏
  • 举报
回复
临时表空间不够就扩临时表空间~

1,617

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 非技术区
社区管理员
  • 非技术区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧