我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

一、背景

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

整体思路

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

下载地址

官方下载:http://×××w.anysql.net/software/sqluldr.zip
官方下载:http://×××w.onexsoft.com/zh/download

二、安装工具

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

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

二、工具参数

  • 切换到oracle用户执行工具
SQL*UnLoader: Fast Oracle Text Unloader (GZIP, Parallel), Release 4.0.1
(@) Copyright Lou Fangxin (AnySQL.net) 2004 - 2010, all rights reserved.

License: Free for non-commercial useage, else 100 USD per server.

Usage: SQLULDR2 keyword=value [,keyword=value,...]

Valid Keywords:
  user    = username/password@tnsname  
  sql     = SQL file name  
  query   = select statement  
  field   = separator string between fields  
  record  = separator string between records  
  rows    = print progress for every given rows (default, 1000000)   
  file    = output file name(default: uldrdata.txt)  
  log     = log file name, prefix with + to append mode  
  fast    = auto tuning the session level parameters(YES)  
  text    = output type (MYSQL, CSV, MYSQLINS, ORACLEINS, FORM, SEARCH).  
  charset = character set name of the target database.  
  ncharset= national character set name of the target database.  
  parfile = read command option from parameter file   
  read    = set DB_FILE_MULTIBLOCK_READ_COUNT at session level  
  sort    = set SORT_AREA_SIZE at session level (UNIT:MB)   
  hash    = set HASH_AREA_SIZE at session level (UNIT:MB)   
  array   = array fetch size  
  head    = print row header(Yes|No)  
  batch   = save to new file for every rows batch (Yes/No)  
  size    = maximum output file piece size (UNIB:MB)  
  serial  = set _serial_direct_read to TRUE at session level  
  trace   = set event 10046 to given level at session level  
  table   = table name in the sqlldr control file  
  control = sqlldr control file and path.  
  mode    = sqlldr option, INSERT or APPEND or REPLACE or TRUNCATE   
  buffer  = sqlldr READSIZE and BINDSIZE, default 16 (MB)  
  long    = maximum long field size  
  width   = customized max column width (w1:w2:...)   
  quote   = optional quote string   
  data    = disable real data unload (NO, OFF)   
  alter   = alter session SQLs to be execute before unload   
  safe    = use large buffer to avoid ORA-24345 error (Yes|No)   
  crypt   = encrypted user information only (Yes|No)   
  sedf/t  = enable character translation function   
  null    = replace null with given value   
  escape  = escape character for special characters  
  escf/t  = escape from/to characters list   
  format  = MYSQL: MySQL Insert SQLs, SQL: Insert SQLs.  
  exec    = the command to execute the SQLs.  
  prehead = column name prefix for head line.  
  rowpre  = row prefix string for each line.  
  rowsuf  = row sufix string for each line.  
  colsep  = separator string between column name and value.  
  presql  = SQL or scripts to be executed before data unload.  
  postsql = SQL or scripts to be executed after data unload.  
  lob     = extract lob values to single file (FILE).  
  lobdir  = subdirectory count to store lob files .  
  split   = table name for automatically parallelization.  
  degree  = parallelize data copy degree (2-128).  

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用户下面,执行下面命令。

[oracle@cookie ~]$ ./sqluldr2linux64.bin user=gather/gapass@orcl query="dmp_user_center" head=yes file=/home/oracle/dmp.csv       
           0 rows exported at 2018-10-09 14:40:27, size 0 MB.
     1000000 rows exported at 2018-10-09 14:40:36, size 80 MB.
     2000000 rows exported at 2018-10-09 14:40:43, size 144 MB.
     3000000 rows exported at 2018-10-09 14:40:50, size 212 MB.
     4000000 rows exported at 2018-10-09 14:40:57, size 276 MB.
     5000000 rows exported at 2018-10-09 14:41:04, size 340 MB.
     6000000 rows exported at 2018-10-09 14:41:11, size 404 MB.
     7000000 rows exported at 2018-10-09 14:41:18, size 460 MB.
     8000000 rows exported at 2018-10-09 14:41:25, size 504 MB.
     9000000 rows exported at 2018-10-09 14:41:31, size 548 MB.
     9403362 rows exported at 2018-10-09 14:41:34, size 568 MB.
         output file /home/oracle/dmp.csv closed at 9403362 rows, size 568 MB.

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    
2018-10-09T14:49:13.580+0800    connected to: localhost
2018-10-09T14:49:16.551+0800    [........................] dmp.dmp_user_center  5.9 MB/568.5 MB (1.0%)
2018-10-09T14:49:19.551+0800    [........................] dmp.dmp_user_center  11.7 MB/568.5 MB (2.1%)
2018-10-09T14:49:22.551+0800    [........................] dmp.dmp_user_center  17.7 MB/568.5 MB (3.1%)
2018-10-09T14:49:25.551+0800    [........................] dmp.dmp_user_center  23.4 MB/568.5 MB (4.1%)
2018-10-09T14:49:28.551+0800    [#.......................] dmp.dmp_user_center  29.1 MB/568.5 MB (5.1%)
2018-10-09T14:49:31.551+0800    [#.......................] dmp.dmp_user_center  35.0 MB/568.5 MB (6.2%)

2018-10-09T14:54:49.551+0800    [#######################.] dmp.dmp_user_center  563.0 MB/568.5 MB (99.0%)
2018-10-09T14:54:52.551+0800    [#######################.] dmp.dmp_user_center  567.4 MB/568.5 MB (99.8%)
2018-10-09T14:54:53.447+0800    [########################] dmp.dmp_user_center  568.5 MB/568.5 MB (100.0%)
2018-10-09T14:54:53.447+0800    imported 9403362 documents

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

如何把数据库导入到php页面

要将数据库导入到PHP页面,可以使用以下步骤:1. 创建数据库连接:使用PHP的mysqli或PDO扩展连接到数据库。提供数据库主机名、用户名、密码和数据库名称等连接参数。例子(使用mysqli):```php$servername = "
2023-08-14

如何把数据导入pycharm

在PyCharm中导入数据,可以按照以下步骤进行操作:1. 打开PyCharm并创建一个新的项目。2. 将数据文件复制到项目文件夹中,以便在PyCharm中访问。3. 在PyCharm的项目窗口中,右键单击项目文件夹,选择“New”->“P
2023-08-09

mongodb如何导入数据库

要导入数据库到MongoDB,可以使用以下几种方法:使用mongorestore命令:可以使用mongorestore命令来从备份文件中恢复数据库。可以执行以下命令:mongorestore --db
mongodb如何导入数据库
2024-04-09

MongoDB中如何导入数据

MongoDB中可以使用以下几种方法导入数据:1. 使用mongoimport命令:mongoimport命令可以从CSV、JSON、TSV等格式的文件中导入数据到MongoDB中。例如,要将一个名为data.json的JSON文件导入到名
2023-09-06

mongodb如何导入或导出数据库

MongoDB提供了多种方法来导入或导出数据库。使用mongodump和mongorestore命令行工具:mongodump用于将整个数据库或指定集合导出到一个二进制文件中。mongorestore用于从二进制文件中恢复数据库或集合。示
2023-10-27

在MongoDB中如何导出和导入数据

要在MongoDB中导出数据,可以使用mongoexport命令。下面是一个示例:mongoexport --db --collection --out 要在MongoDB中导入数据,可以
在MongoDB中如何导出和导入数据
2024-04-20

MongoDB如何高效读写海量数据

本文小编为大家详细介绍“MongoDB如何高效读写海量数据”,内容详细,步骤清晰,细节处理妥当,希望这篇“MongoDB如何高效读写海量数据”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。MongoDB 简介高性能
2023-06-29

oracle导出数据到文本、从文本导入数据的详细步骤

经常有需求向表中导入大量的数据,使用insert不靠谱,太慢了,oracle提供了sqlldr的工具也有时需要讲数据导入到文本,oracle的spool可以轻松实现oracle导出数据到txt、txt导入数据到oracle一、导出数据到
2023-05-01

如何使用MongoDB实现数据的批量导入、导出功能

如何使用MongoDB实现数据的批量导入、导出功能MongoDB是一种NoSQL数据库,作为一种非关系型数据库,其在数据存储和查询上有着很大的灵活性和性能优势。对于需要批量导入和导出数据的应用场景,MongoDB也提供了相应的工具和接口。本
2023-10-22

编程热搜

目录