分享

如何把海量数据从 Oracle 导入到 Mongodb

 comeonwyj 2020-05-05

一、背景

因为业务需求,现在需要把 Oracle 中几千万的数据转移到 Mongodb,如果通过 PL/SQL Develop 导出,速度会比较慢,而且也很占用带宽。发现一款软件 sqluldr2 数据导出速度非常快,我们后面演示通过 sqluldr2 数据导出。

整体思路

把oracle中的数据导入到csv格式,然后在mongodb中使用mongoimport工具导入到mongo数据库中。

二、安装工具

程序放在 oracle 的家目录,第一次执行的时候会报错,它回去寻找libclntsh.so这个库文件,这个文件没有在库的环境变量里面,我们可以在oracle的安装目录里面找到,然后我们做个软连接就可以了。

ln -s /u01/oracle/11.0.2.4/lib/libclntsh.so /usr/lib64

1、要导出的数据由query控制

query参数如果整表导出,可以直接写表名,如果需要查询运算和where条件,query=“sql文本”,也可以把复杂sql写入到文本中由query调用。

2、分隔符设置

默认是逗号分隔符,通过field参数指定分隔符。

sqluldr2 testuser/testuser query=chen.tt1 field=";"

3、大数据量操作

对于大表可以输出到多个文件中,指定行数分割或者按照文件大小分割,例如:

sqluldr2 testuser/testuser@orcl query="select * from test_table2" file=test_table2_%B.txt batch=yes rows=500000

1、本地执行方式

users参数可以省略不写,和expdp username/passwd 方式一样。

export ORACLE_SID=orcl
sqluldr2 testuser/testuser  query="select * from test" file=test_table1.txt

2、tns方式

sqluldr2 user=testuser/testuser@orcl  query="select * from test" file=test_table1.txt

3、简易连接

sqluldr2 user=testuser/testuser@x.x.x.x:1521/orcl  query="select * from test" file=test_table1.txt
严格按照要求写语句,等号两边不能有空格。
四、实例
[oracle@cookie ~]$ ./sqluldr2linux64.bin user=gather/gapass@orcl query="dmp_user_center" head=yes file=/home/oracle/dmp.csv
1、我是整表导出,所以query只填写了表名。
2、head=yes 保留了表头。
3、可以看到速度很快,一千万的数据一分钟就导出来了,如果是新机器,我相信速度会更加快很多。

五、Mongodb数据导入

[root@mbasic ~]# mongoimport -udmp -p dmp --db dmp --collection dmp_user_center --type csv --headerline --ignoreBlanks --file dmp.csv

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多