Oracle 有没有办法将包含大CLOB条目的表导出到平面文件?
我正在尝试从包含CLOB数据的Oracle 10g数据库导出表。有些条目由大型文本字段组成,在我的例子中,具体地说是xml文件。当试图将这样的表导出到平面文件时,CLOB中的数据会被截断约4000字节 我一直尝试使用的导出表的方法是SQL Developer中的“导出数据库”工具,该工具使用不同的设置导出为多种平面文件格式(csv、tsv、dsv文件…)。但是,似乎有一些缓冲区(或类似缓冲区)限制了数据大小并截断了所有测试格式的数据 有人知道这是不是真的吗?我还没有找到任何这样的设置(至少现在还没有)。或者该方法是否能够导出此类数据 作为参考,它成功地导出了我最大的表(不包括CLOB),大约有300行,结果文件大小约为12GB 此导出的原因是将数据移动到MSSQL数据库,并使用批量插入方法将其导入该数据库。在Oracle和MSSQL中,数据库模式结构是相同的(由我们使用的支持两种DB系统的应用程序(Teamcenter)创建) 任何提示/建议都是受欢迎的,如果有其他方式需要调查,建议是最受欢迎的 编辑(2020年3月17日)-对于处于相同情况的其他人:Oracle 有没有办法将包含大CLOB条目的表导出到平面文件?,oracle,export,oracle-sqldeveloper,Oracle,Export,Oracle Sqldeveloper,我正在尝试从包含CLOB数据的Oracle 10g数据库导出表。有些条目由大型文本字段组成,在我的例子中,具体地说是xml文件。当试图将这样的表导出到平面文件时,CLOB中的数据会被截断约4000字节 我一直尝试使用的导出表的方法是SQL Developer中的“导出数据库”工具,该工具使用不同的设置导出为多种平面文件格式(csv、tsv、dsv文件…)。但是,似乎有一些缓冲区(或类似缓冲区)限制了数据大小并截断了所有测试格式的数据 有人知道这是不是真的吗?我还没有找到任何这样的设置(至少现在还
根据@MT0的良好反馈,将我的解决方案发布为答案(最好迟一点,不要)最新版本的SQL Developer应以可转换为SQL Server的方式导出数据。我有一个表T,其中一行包含一个大clob,当我要求SQLDeveloper将其导出为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可以理解的东西?我设法解决了这个问题,方法是将表导出为xml格式,并将该文件转换为.tsv文件,然后使用一个小脚本导入MSSQL。Had必须跟踪.tsv文件中的字段终止符和行终止符,因为MSSQL中的大容量INSERT语句更喜欢这些参数,并且它们需要保持一致。以下是内容。如果数据库结构相同,请尝试使用数据泵的最小代码进行数据库链接。问题可能不是文件的总大小,而是在导出期间,
CLOB
正在转换为VARCHAR2
,并且VARCHAR2
的限制为4000字节。一种方法是从Oracle内部创建到MSSQL数据库的数据库链接(反之亦然),并绕过SQL Developer的导出,将数据推(或拉)到该链接上。@MT0;关于VARCHAR2转换,您可能是对的。我对导出格式做了更多的研究,将数据导出到.xml文件对于导出(我无法解释原因),然后将其转换为.tsv文件以导入MSSQL来说似乎效果不错。有点麻烦,但需要这种方法的表格不太多。@eak很高兴你解决了它,但请不要将答案编辑到你的问题中。相反,你应该为你自己的问题创建一个新的答案,并在其中包含你的解决方案。您甚至可以接受自己的答案作为首选解决方案。在我的测试中,export as insert语句实际上删除了包含CLOB数据的列。可能需要更多的调查,但我现在使用xml导出解决了这个问题。(Y)