从oracle迁移数据到GreenPlum

当Oracle处理大规模数据时遇到性能瓶颈,选择GreenPlum作为替代方案。本文介绍了使用sqluldr2导出Oracle数据,通过gpfdist和GreenPlum的外部表进行数据加载和导入的步骤,包括解决0x00和分隔符问题。
摘要由CSDN通过智能技术生成

在面对海量数据的时候,oracle还是有一些限制,比如在单表10亿量级的查询等操作上,就算物理机器的内存已经设置很大,但是实际的效果也不尽人意,在这个时候,GP是可选方案之一。
我们这里没有采用软件从oracle到greenplum,如果使用软件自动设置的话,请自行搜索ora2pg的相关操作,这里采用的方案是使用sqluldr2来导出数据,然后通过greenplum的外部表用gpfdist来实现数据的加载和导入。

1.使用sqluldr2导出oracle数据
此工具是淘宝DBA开发的,后来部分功能收费了,但是基本功能还是可以使用的,地址http://www.anysql.net/tools/sqluldr2-non-free-features.html
复制sqluldr2_linux32_10204.bin(64位系统用sqluldr2_linux64_10204.bin)到$ORACLE_HOME的bin目录,重命名为sqluldr2.bin
使用实例:

-bash-3.2$ sqluldr2.bin USER=userid/keyword@db_name sql=get_tables.sql head=no FILE=/oracle/oradata/backup/stock.csv

-bash-3.2$ sqluldr2.bin USER=username/pwd@orcl query="select * from tb_idm_itg_his_cl " field=0x09 file=/home/oracle/cl.txt
0x09是tab 
0x07是|
注意:数据中不能存在0x00,需要替换sed -i "s/\x00//g;/''/g" tablename.txt

这里需要说明的是虽然sqluldr2支持很多的分隔符,我们的第一感觉就是用tab作为分割符,但是在实际使用的过程中,0x09的配置会导致在后面greenplum读取外部表的时候报一些很奇怪的错误,下面给出实际使用的方式:

sqluldr2.bin USER=username/pwd@orcl query="select * from tb_idm_itg_his_cl " field=^ file=/home/oracle/cl.txt

导出277M数据用时14s,性能还是很不错的。然后将导出的数据scp到greenplum机器

2.在greenplum中开始gpfdist服务

gpfdist -d /home/greenplum-4.3/ext_files -p 8081 &
也可以-l指定log地址 -d是指load目录

开启gpfdist服务后,我们需要处理下文件,因为在创建外部表读取的时候出出现0x00错误,因为greenplum需要文件中不能出现0x0这样的数据。
(1)invalid byte sequence for encoding “UTF8”: 0x00 :原因两种一种字符存在0x00一种数据中有不可见字符如char(0)
前者:set id1_value=replace(id1_value,’0x00’,00)
后者:set id1_value=replace(id1_value,chr(0),null)

(2)ERROR: missing data for column :因为导出数据的时候使用了0x09的tab分隔符,换成^就没问题

sed -i "s/\x00//g;/''/g" tb_
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值