sql脚本长度限制及linux下文件切分

   无意翻出以前笔记,切分sql文件,每10万条加一个commit。半天都想不起来应用的场景,能想起来的再加上查的资料记录一下。

 

   在Oracle数据库中,频繁的commit会引起大量Redo Log的物理I/O,会极大的限制数据库的性能。因此,为提高数据库性能,尽可能的批量提交。

 

   Could not execute JDBC batch update,最后发现原因是SQL语句长度大于1M,mysql通讯的数据包大小设置是1M,这就造成sql语句执行失败。

           把mysql的配置文件(my.ini)中的max_allowed_packet = 6M变大,就可以顺利执行。

 

           Oracle IN 子句中的LIST个数最长为1000,超过该数目将报错,这里可转用一个临时表来解决。单条sql语句长度和mysql一样,也有长度的限制。

 

           使用split命令可以完成文件的切分。

   1)将文件splitTest.txt分割成多个文件,分割后的每个文件大小为10M。命令:

$ split -b 20m splitTest.txt
$ ls
splitTest.txt  xaa  xab  xac

    2)将文件splitTest.txt分割成多个文件,分割后的每个文件大小为10M。指定分割后的文件前缀位split,命令:

$ split -b 20m splitTest.txt  split
$ ls
splitaa  splitab  splitac  splitTest.txt

         3)将文件splitTest.txt分割成多个文件,每个文件50万行。命令:

$ split -l 500000 splitTest.txt  split
$ ls
splitaa  splitab  splitac  splitad  splitTest.txt

         4)将文件splitTest.txt分割成多个文件,每个文件50万行。指定分割后的文件后缀为数字,数字位数为3位,命令:

$ split -l 500000 -d -a 3 splitTest.txt  split
$ lssplit000 split001 split002 split003 splitTest.txt

  可以使用cat命令将切分后的文件合并成新的文件:

$ cat split0* > original.txt

 

  用head -n 1,100 >>xx.txt 应该也可以分割,记不太清了。

posted on 2018-10-10 22:43  lnlvinso  阅读(978)  评论(0编辑  收藏  举报