oracle通过DBLINK分批取数据(100分)

shunkunl 2011-11-19 08:41:20
如题,通过DBLINK远程数据库取数据到本地数据库,由于远程表的数据量太大,接近1亿;因此,导到本地数据库,有时会出现回滚段不足异常
---------------------------------
以下方法验证不可行:
1.通过最笨的方法,rownum来分批取数据。经验证,当所取数据量达1000W左右,就跑不动了,所以也不可行。
2.根据远程数据库的分区,取数据。这种方法本地数据库是可行,但通过DBLINK会忽略分区,所以不可行。
3.在远程数据库中根据分区建立多个视图,再通过DBLINK,将视图导到本地库中,本方法可行,但是远程数据表
是动态生成,不可能每次都去手工建立视图。也就是说,不要去操作远程库数据库,尽量在本地数据库操作。



请教大虾,有没有好的方法可以解决这个问题?
...全文
697 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cosio 2011-11-21
  • 打赏
  • 举报
回复
在程序端做处理就好了!
shunkunl 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 blueskywide 的回复:]
如果实时性不是很强的话,可以每天或每周做一次:
1.exp本地库至date1.dmp;
2.在异地建立表空间和数据库等授权后,将date1.dmp数据imp导入。

如果考虑其可重复性,可在异地导入前,将前期数据删除后再实施导入。
[/Quote]
这是由程序定时调用存储过程,来导数据的。所以没办法手工去做这些操作
BlueskyWide 2011-11-21
  • 打赏
  • 举报
回复
如果实时性不是很强的话,可以每天或每周做一次:
1.exp本地库至date1.dmp;
2.在异地建立表空间和数据库等授权后,将date1.dmp数据imp导入。

如果考虑其可重复性,可在异地导入前,将前期数据删除后再实施导入。
shunkunl 2011-11-21
  • 打赏
  • 举报
回复

 select count(1) into v_max_rownum from ct_intf_sf.bus26003_11090001a@ct_intf_online;
while v_cur_rownum < v_max_rownum loop
insert /*+append parallel(4)*/
into audi.total_bus26003_sf nologging
(twi_id,
tbw_id,
ck_state,
state,
file_row,
file_name,
field1,
field2,
field3,
field16)
select audi.seq_total_bus26003_sf.nextval,
'353',
'S',
'N',
null,
null,
nvl(cust_id,'null'),
nvl(cert_type,'null') ,
nvl(state ,'null'),
nvl(cert_number,'null')
from (select rownum num,a.* from ct_intf_sf.bus26003_11090001a@ct_intf_online a
where rownum <=v_cur_rownum+1000000) b where b.num>v_cur_rownum;
commit;
v_cur_rownum := v_cur_rownum + incr_num;
end loop;

这是我写的存储过程
shunkunl 2011-11-21
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ulihss 的回复:]
我以前是这样做的
用循环一次取100万条记录。
第一:用循环批量查询出100万条记录。
第二:把记录插入到本地表中。
第三:提交事务。
[/Quote]
我也是100万提交一次,但是当rownum达到1000万左右时,速度就相当慢
Kobayashi 2011-11-21
  • 打赏
  • 举报
回复
我以前是这样做的
用循环一次取100万条记录。
第一:用循环批量查询出100万条记录。
第二:把记录插入到本地表中。
第三:提交事务。
forgetsam 2011-11-20
  • 打赏
  • 举报
回复
直接把表空间文件传过来,当作外部表或者热备表空间。
shunkunl 2011-11-19
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 likgui 的回复:]
这么大数据量,dblink不可行,最好先导到数据库服务器,再传过来导进去比较可行。
[/Quote]
能否再详细点,不是很明白..
likgui 2011-11-19
  • 打赏
  • 举报
回复
这么大数据量,dblink不可行,最好先导到数据库服务器,再传过来导进去比较可行。

3,491

社区成员

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

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