前言一、失败的尝试
1.用sql developer直接导成insert文件比较2.用sql developer直接导成csv文件3.导出数据时用rownum 二、成功方案三、注意:
前言 比较存入同一张表的两个批次的数据。
批次号和登记时间列不需要比较。
数据记录百万级以上。
数据库是oracle数据库,连接工具sql developer。
没有专业的比较工具。
一、失败的尝试 1.用sql developer直接导成insert文件比较
文件太大。
2.用sql developer直接导成csv文件 比方案一生成的文件小,但是还是有10G以上。
用本地IDEA比较直接内存溢出。
上传服务器比较上传失败。
查询数据时,除用批次号做匹配条件外,再加上rownum <10000,并按列排序。但是查询出来的数据并不一致。不知道rownum是否不能和其他条件并用或者不能和order by并用。
二、成功方案假设该表有ABCDEFGH列。
select A,B,C from 表名 where 批次号='……' order by A,B,C,D,E,F,G,H
分别将两个批次的查询结果导出成csv文件,上传linux服务器用diff比较。
然后再执行下面命令
select D,E,F,G,H from 表名 where 批次号='……' order by A,B,C,D,E,F,G,H
再将生成的文件送上服务器用diff比较。
三、注意: 不知道是不是上传服务器大小做了什么限制,我将批次1生成的文件上传服务器后再上传批次2的文件时就出错。将查询列的字段减小后,文件变得更小后就可以上传。
所以不要以为第一个文件能上传成功,第二个文件就一定可以上传成功。可以先用distinct看下有没有列是同一个值的,如果有的话这些列就人工检查下,不要select成文件比较了,在数据量大的时候少比较一列能使文件大小缩小很多。