背景:
今天在处理SQL Server一个同步链的问题,源头目的端比较数据,最后产生了一个300MB的文件,在windows下根本没办法打开。而且就算可以打开,也需要在每1000条命令后,等待10秒钟,避免出现同步链的压力异常增大。
那么当前最主要的两个问题是:
1.将大的比对结果的文件拆成小的文件,这样才可以在windows下打开
2.在每1000行命令后面添加waitfor delay '00:00:10'
解决过程:
最开始尝试在windows环境下完成上面的工作,但是一直不得其领,最后只得在Linux下进行解决。
1.将大的结果文件(q.sql)拆成小文件,比如将每10W行命令放入到一个新的命令:
采用的命令为:split -l 100000 q.sql q_new
这样就可以将大文件q.sql拆成多个小文件,类似的命令为q_newaa,q_newab,q_newac,在每个小文件(除最后一个外)中都包含10W行记录
2.在每个小文件中,每1000行后面添加waitfor delay '00:00:10',可以采用下面的命令实现,以单个文件为例
sed "0~1000 s/$/\nwaitfor delay '00:00:10'/g" q_newaa>q_newaa_new
这样在小文件中的每1000行后面就会新加一行 waitfor delay '00:00:10'
当然,我们在正式作业的时候,最好是先将上面的第二步应用到大文件,之后再进行拆分。之后再循环执行这些小文件,这样就可以实现最初的目的了。