SQLULDR2,全世界都在用的超快Oracle文本导出工具,轻松高效地进行大数据迁移!

Oracle提供了高效的文本装载工具(sqlldr)来装载格式化文本文件(如CSV文件)里的数据到Oracle中,却不提供一个文本导出工具来做不同数据库之间的数据交换。特别是在各种大数据技术(Hadoop/Greenplum等)兴起的年代,文件文件是最好的数据交搞方式,看来是必须得自己写程序或脚本来做这个工具了。SQLULDR2就是为此目的而用OCI接口编写的高效工具,并且已经被全世界的Oracle DBA使用超过10年了。

Oracle占据了绝大部份传统应用,而MySQL则占据了新应用领域,一般来讲DBA需要同时管理和操作这两种数据库了,因此会从Oracle和MySQL中导出数据进行交换。为了少记几个参数,又编写了MySQLULDR2来支持MySQL数据库,这两个工具有相同的命令行参数(以后也许会整合成一个),以方便大家使用。

下面是一个使用SQLULDR2工具从Oracle数据库中导出数据的例子:

$ sqluldr2 test/test query="select * from tab" file=tab.txt
           0 rows exported at 2016-01-28 22:10:22, size 0 MB.
           6 rows exported at 2016-01-28 22:10:22, size 0 MB.
         output file tab.txt closed at 6 rows, size 0 MB.

命令行中的”test/test”表示用户名和口令,选项“query”用来指定查询要导出的数据的SQL语句,而“file”选项则指定保存数据的文件名,这三个是必要的选项。你可以来看一下导出的文件的内容,默认使用逗号来分隔字段,而用换行符来分隔不同的记录。

$ cat tab.txt
ACT_RU_TASK,TABLE,
HPISLEM,TABLE,
TEST1,TABLE,
T_TEST,TABLE,
T_TEST2,TABLE,
VIEWTEST,TABLE,

这个工具到底有多快?让我们来测试一张有几百万行记录的大表(在台式机上测试)的情况:

$ sqluldr2 test/test query=t_test file=/dev/null
           0 rows exported at 2016-01-28 22:15:30, size 0 MB.
     1000000 rows exported at 2016-01-28 22:15:30, size 12 MB.
     2000000 rows exported at 2016-01-28 22:15:31, size 28 MB.
     2793168 rows exported at 2016-01-28 22:15:31, size 42 MB.
         output file /dev/null closed at 2793168 rows, size 42 MB.

两秒钟导出了将近280万行记录,虽然测试表只有两个字段,速度也是非常惊人了。如果你要导出整个表,可以直接在“query”上指定表名,工具会自动扩展成完整的“select * from …”命令。这里还有一些其他的配置或功能你可能会有兴趣了解。

  1. 可以自定义字段分隔符和记录分隔符,请自行选择不会在字段值中出事的字符串。
  2. 可以启用压缩功能,只要输出文件以“.gz”结尾就会开启压缩功能。
  3. 将数据导出成Insert语句,可以支持MySQL的批量插入格式。
  4. 可以自动生成sqlldr工具能识别的控制文件,方便用来将数据导入到其他Oracle数据库。
  5. 可以并行导出大表,在节约导出时间。
  6. 可以使用加密功能,以增强数据传输的安全性。

SQLULDR2开发于10年以前,到现在已经有数不清的生产环境应用,全球累计下载量超过20000次。如果你有很好的功能需求,我们还可以对工具进行改进;如果你在使用上遇到困难,平民软件也可以提供商业技术支持。