我试图从SQL Server导出到Oracle,该表由一个ID和一个存储为nvarchar(max)的非常长的XML字符串组成。无法使用SQL Loader将LOB导入到Oracle
SQL Table -- CREATE TABLE MyStuff (MyID int, MyText nvarchar(max))
Oracle Table -- CREATE TABLE MyStuffImported (MyID int, MyText NCLOB)
我使用SQL Server bcp实用工具导出到文本文件(MyStuff.bcp),然后我通过SQL装载机导入到Oracle。但SQL加载程序失败并显示以下消息:“数据文件中的物理记录(MyStuff.bcp)比最大值(1048576)”长,并且0记录被导入。
我不确定确切的问题是什么。最明显的可能性是MyText比最大值1048576长,而且确实有些记录是,但不是全部,所以为什么至少有一些记录没有被导入?有没有办法解决这个限制?
另一种可能性是我在某些讨论板上读到的,在MyText中有Oracle无法处理的换行符。我希望我已经解决了这个问题,(1)从SQL导出时删除\ r和\ n,以及(2)在SQL Loader控制文件的记录分隔符中使用\ n(请参阅下面的完整文件) 。我是否做了不正确的事情,或者没有处理所有案件?
这是我的SQL Loader控制文件的文本。请注意,我使用\作为分隔符,这看起来很奇怪,但它是MyText字段中未使用的唯一字符。因此你会看到\\
,因为我正在逃避它。
LOAD DATA
INFILE "MyStuff.bcp" "str '\\\n'"
APPEND INTO TABLE MyStuffImported
(
MyID INTEGER EXTERNAL TERMINATED BY "\\",
MyText CHAR TERMINATED BY "\\"
)
有什么建议吗?也许有更好的方法通过SQL Loader导入NCLOB?
我发现设置sqlldr的READSIZE和BINDSIZE PARAMS我可以改变最大限制1048576,但现在我得到一个不同的问题。这一次日志文件显示“记录1:被拒绝 - 表MYSTUFFIMPORTED,MYTEXT列上的错误,数据文件中的字段超过最大长度”。 MYTEXT是一个nclob,记录1中的文本长度是32kb,远低于我的新限制。我甚至设置ROWS = 1,但没有运气...... – Keith 2009-10-02 01:06:03