一.导读
在用SQLPlus进行数据迁移时,由于旧系统单个字段有超过5万字节的数据,在导出过程中遇到了数据被截取。于是便有了本文的分析。
二.要点解析
1.SQLPlus中LONG参数的含义?
2.SQLPlus中LONGCHUNKSIZE参数的含义?
3.SQLPlus中LINESIZE参数的含义?
三.实验环境
Oracle 11g Release 2 (11.2)
四.详细解析
1.SQLPlus中LONG参数的含义?
关于LONG这个参数,官方文档解释最大是2,000,000,000 bytes,如果结果集的类型是 LONG, BLOB, BFILE, CLOB, NCLOB , XMLType这些类型,可以通过设置LONG参数来调整获取数据的长度。
2.SQLPlus中LONGCHUNKSIZE参数的含义?
LONGCHUNKSIZE这个参数是跟LONG参数配合使用,大小是依赖于系统。原则要比LONG参数设置的小,这个参数设置好后,在获取数据时会一点点获取,直到数据获取完毕或者到达了LONG参数设置的峰值。
3.SQLPlus中LINESIZE参数的含义?
关于LINESIZE参数的设置,主要是控制SQLPlus显示效果,而LONG和LONGCHUNKSIZE是控制获取数据时截取的大小。所以如果这三个参数设置不恰当都会导致数据显示不完全。LINESIZE的最大显示从官方的文档来看,也是依赖于系统的。但是文档里面有个total row width参数,最大设置是32,767 characters。所以从分析的角度来看,即使LINESIZE显示是依赖于系统,最终也会受到total row width参数的制约。
五.使用方法
例:数据有123456789共9个字节
(1).如果设置set longchunksize 4
显示的效果为:
(2).如果设置set longchunksize 8
显示的效果为:
12345678
(3). 如果设置set longchunksize 4 、set long 10、set linesize 2。虽然longchunksize设置成4,但是linesize设置成2已经制约了。
显示的效果为:
六.参考文献
https://docs.oracle.com/cd/E11882_01/server.112/e16604/apa.htm#SQPUG141
https://docs.oracle.com/cd/E11882_01/server.112/e16604.pdf