我正在尝试从包含CLOB数据的Oracle 10g数据库中导出表。一些条目包含大文本字段,或者在我的情况下特别是xml文件。尝试将此类表导出到平面文件时,CLOB中的数据被截断为〜4000字节。
我一直试图导出表的方法是SQL Developer中的“导出数据库”工具,可导出为具有不同设置的多种平面文件格式(csv,tsv,dsv文件..)。但是,似乎有一些缓冲区(或类似缓冲区)限制了所有测试格式的数据大小并截断了数据。
有人知道这是真的吗?我还没有找到任何这样的设置(至少)。还是这种方法甚至能够导出此类数据?
作为参考,它成功导出了大约300磨行的最大表(不包括CLOB),并且文件大小约为12 GB。
进行此导出的原因是将数据移至MSSQL数据库,然后使用BULK INSERT方法将其导入。在Oracle和MSSQL中,数据库架构结构都是相同的(由我们使用的应用程序(Teamcenter)创建,该应用程序同时支持两个DB系统。)
欢迎任何提示/建议,如果还有其他方法值得研究,则欢迎提出建议。
编辑(2019年4月8日)-对于处于相同情况的其他人:
我设法通过将表导出为xml格式并将该文件转换为.tsv文件以使用小脚本导入到MSSQL的方法来解决了该问题。必须跟踪.tsv文件中的字段终止符和行终止符,因为MSSQL中的BULK INSERT语句更喜欢这些参数,并且它们必须保持一致。
答案 0 :(得分:1)
最新版本的SQL Developer应该以一种可转换为SQL Server的方式导出数据。我有一个表T,其中的单行包含一个很大的Clob,当我要求SQL Developer将其导出为insert语句时,结果文件看起来像
Insert into EXPORT_TABLE (X,Y) values (1,
TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
|| TO_CLOB('lots of chars...')
...
...
);
我不了解SQL Server,但我想那可以转换成SQL Server可以理解的东西吗?
答案 1 :(得分:0)
我设法通过将表导出为xml格式并将该文件转换为.tsv文件以使用小脚本导入到MSSQL的方法来解决了该问题。必须跟踪.tsv文件中的字段终止符和行终止符,因为MSSQL中的BULK INSERT语句更喜欢这些参数,并且它们必须保持一致。