今天用SQLLDR装载数据, 没有足够的注意, 管应用程序的人说, 我们装载的数据不对, 后面多了一个空格. 过了好一会儿我们才查到原因, 居 然是因为Windows和Linux/Unix的文本编辑器中对换行的不同处理, 在Windows中是用0x0d(13),0x0a(10)两个字符来表示的, 而Linux/Unix中只用一个字符0x0a (10)来表示. 将Windows上编辑好的文本文件以Binary方式FTP上去(或以SCP拷上去)后, 用Linux/Unix下的SQLLDR装载, 因此装载进去的数据中就多了一个字符, 如下所示:
SQL> SELECT DUMP(COL1) FROM T_TEST WHERE ROWNUM < 10;
DUMP(COL1)
----------------------------------------------------
Typ=1 Len=4: 35,32,50,13
Typ=1 Len=3: 35,49,13
Typ=1 Len=9: 45,68,69,76,69,84,69,45,13
......
在实际的应用中, 就装载数据本身的技术而言是很简单的, 不过如果由于数据装载引起了应用服务器逻辑上的错误, 后果也是很严重的. 还好 这次发现的及时, 没有造成什么重要问题.
又一次证明DBA细心, 考虑周到是很重要的习惯.