将大量数据导出到Oracle中的表中的平面文件

时间:2013-04-01 13:05:26

标签: sql oracle batch-file plsql

我正在使用Oracle 11g。我的要求是比较两个不同数据库的数据。每个数据库中有大约350个表,在这350个表中,大约40个表有超过100万个记录。为了进行数据比较,我编写了一个perl脚本来比较使用hash和使用少量文件进行测试。另外,尝试使用unix awk命令检查性能,并在unix解决方案上询问此论坛,并获得了极好的帮助。

现在我的问题是找出从表格到文件中提取数据的最佳方法 两个db都具有相同数量的表,并且每个表在两个db中都具有相同的列数,即两个db中的布局完全相同。
我认为和搜索的选项是 1)使用sqlloader - 我认为在这种情况下性能会很差 2)使用数据泵 - 不确定我是否可以通过sql使用数据泵提取少量列并加载到文本文件中 3)使用批量收集 - 与上述相同。是否可以从每个表组和列中提取每个表。如果是的话,怎么办呢。还有什么表现。
4)sqlplus或其他任何东西。我无法在我的机器上下载任何软件。

可以轻松完成基本sql,用于从每个表中为两个db选择列集。我正在寻找将数据导出到平面文件的最佳方法 请建议

3 个答案:

答案 0 :(得分:0)

您可以使用DBMS_COMPARISON在数据库中执行此操作。

http://docs.oracle.com/cd/E11882_01/appdev.112/e25788/d_comparison.htm#CHDHEFFJ

答案 1 :(得分:0)

最便宜的基本方法(对于开发人员来说肯定)是比较事物集而不是文件的字符串评估。没有什么能比数据库本身更快地(和更少的代码)比较事物集。使用数据库链接以及明智地使用MINUS和INTERSECT运营商是实现这一目标的非常有力的手段。

答案 2 :(得分:0)

尝试使用以下SQL,这应该是最快的方法,因为您将在数据库中工作。通过其他数据库中的DB链接访问该表。

选择* 从 ( (从Table_In_Schema1中选择*   减去   从Table_In_Schema2中选择*) 联合所有 (从Table_In_Schema2中选择*   减去   从Table_In_Schema1中选择*) )