ORACLE SPOOL过程中两个至关重要的参数设置(原创)
在编程实现 Oracle SPOOL -----> Sqlldr进行数据迁移的时候,发现了两个奇怪的问题:
1、源表中数值型字段到了目的表中值都一样,而实际在字段在源表中是主键,查看该字段在目的表中的值似乎都导成了源表中另外一个字段的值;
2、源表的数据导到目的表中,很多字段的值都丢了
于是从源表,抽数据的视图,目的表逐个字段查了一遍,没发现问题,程序也没问题,sqlldr本身也不会将数据重复插入。那么,问题在哪呢?经过一段时间的困惑后,终于发现问题在于SPOOL过程中的两个参数设置有问题。
第一个参数就是linesize,这直接决定了导出来的每行记录的长度,原来设置为500,也就是500个字符。而源表中字段很多,这样直接导致了SPOOL过程中只导出了一部分字段的值,这就会出现上面的问题2种所描述的现象;
第二个参数就是 numwidth ,也就是数值型字段的长度,原来设置为12,而源表和目的表的最大数值长度都是20,这样导出来的数据就只能是前面的12位,所以出现了问题一中所描述的现象。
大家以后如果采用这种方法进行数据迁移,请务必特别留心这两个参数的设置,免得再走很多弯路。
(如果转载本文请注明出处,或者加上本文链接,算是对我的一点点鼓励吧 :) )