当你的SQL语句很长(估计是2048个字节)并写成一行时, 用SQL*Plus去运行这个角本时, 就会出现这个错误. 原因是SQL*Plus中用一个有最大行长度限制的单行缓冲区去读取一行, 当读到的一行比这个单行缓冲区长时就出问题, 整成多行就没有问题. 每读入一行就将这一行的SQL拼接到更大的(如64K)SQL缓冲区中.
这种Overflow的方法就是一开始黑客用的攻击手段, 想出来的对册是在内核的代码及程序中, 一律改成有长度限制的函数调用, 这样一改后, 通过这种方法攻击的成功率就降低很多了.
遇到这个问题后, 突然记起我的AUL/MyDUL工具也遇到过, 它的行缓冲区是1024, 当时有一个外国人去恢复表时, 因为表的定段太多了, 在指定列的类型后, 这个UNLOAD命令长得刚好超出了1024个字节, 也是想了好久才想到的. 后来建议将一行折成两行就没事了.
正在手工将这个SQL折成多行运行呢!
留言 (1)
"Overflow的方法就是一开始黑客用的攻击手段"
没有看懂..., 帮忙给解释一下.
Posted by 木匠 | Aug 9, 2007 1:42 PM