本文从计算机技术层面上讨论如何采集和分析被审计单位的海量数据。根据实际参与审计项目的经验,对采集海量数据到分析海量数据的过程,以及相关技术细节作了较为详实的论述。本文所关注的海量数据是指由被审计单位提供的大量业务数据,数据格式表现为各种大型关系型数据库的导出文件。本文介绍的案例基于ORACLE,同时兼顾DB2、SQLSERVER等系统。 一、审前技术准备阶段 面对被审计单位的信息系统,审计人员必须首先通过多种方式和途径了解被审计单位的业务流程。只有熟悉被审计单位的业务流程,才能更好地理解信息系统的设计架构、操作流程以及与业务流程相关的核心数据表。一般可以通过与被审计单位业务人员访谈了解业务流程,请信息系统人员介绍系统情况了解业务流程的技术实现,还可以通过查阅被审计单位提供的信息系统相关技术文档来深入理解技术实现细节。业务流程可通过系统需求说明书来了解,信息系统架构可通过系统设计方案说明书、总体设计说明书来了解,操作流程可通过系统的用户手册来了解,系统核心数据表可通过数据库设计文档来了解。最终的目的是在数据采集阶段知道业务流程产生哪些数据,审计过程中需要哪些数据,被审计单位能够提供哪些数据。 在人力资源方面,审计小组需要配备熟悉被审计单位行业的专家能手及掌握计算机技术的审计人员。这两类人员相互协同配合,才能较好地发挥审计小组各成员所长,体现综合优势。 在软硬件设备方面,必须要作相应的配备。硬件主要包括高性能的数据服务器、高速网络设备、存储海量数据的移动存储设备比如TB级别的移动硬盘。软件主要包括操作系统软件、数据库软件等。为了实现多人协同处理分析,可采用千兆交换技术组建一个现场审计局域网,使审计人员客户端PC机访问数据服务器。 在获取数据阶段,被审计单位出于保护安全生产的考虑,审计人员考虑出现影响被审计单位的正常生产的风险,同时为保证数据的不失真,一般由被审计单位提供关系数据库逻辑导出文件,不考虑直接连接生产系统数据服务器采集。ORACLE数据一般使用dump格式,SQLSERVER一般使用MDF或备份导出格式,DB2一般提供IXF文件格式。 在审计人员恢复数据时,必须注意使用与被审计单位相互兼容的数据库软件版本,确保数据能恢复,不失真。 二、数据导入阶段 海量数据存储设计的合理性可直接影响到审计小组的数据分析效率。 首先要合理规划存储空间。一般原则是将海量数据分散存储在不同的物理磁盘上可以缩短数据的读取时间,从而提高效率。例如,在数据分析中要用到的多个关键性的业务类的主表,可能达到上亿条记录数。在设计这些表的存储时,需要将表空间对应的数据文件放在不同物理磁盘上或者磁盘阵列上,需要将索引数据存储、临时表空间等都分开存放。不同的数据存放于不同的磁盘,可以避免产生I/O冲突,提高查询性能。 在实际操作数据导入时,要注意以下几个问题: 1.要求被审计单位提供导出的原始数据用户信息,避免数据导入时发生错误。 2.导入海量数据的逻辑导出文件时,要注意关闭目标表上的索引和约束。在数据导入成功后,可根据审计分析的实际需要创建相关的索引。 3.导入海量数据的逻辑导出文件时,要注意关闭目标表的事务日志记录功能。 4.导入数据时,注意导出命令与导入命令的匹配。如在ORACLE中,对于使用exp命令导出的dump文件,需要采用imp命令导入。同样对于数据泵导出命令expdp,应采用数据泵导入命令impdp。 对于多个dump文件,可启动多个进程并行导入。 对于被审计单位提供的SQLSERVER的mdf文件,导入到相应的SQLSERVER数据库中则相对简单。在SQLSERVER的企业管理器中,通过鼠标右键数据库,通过“附加”功能就可将MDF文件导入即可。对于BAK备份文件,只要通过“还原”功能即可导入数据。 在海量数据的实际导入过程中,可能遇到各种问题,均需要根据提示的错误信息,找出问题根源,一一排查,只有解决后才能顺利导入数据。 三、数据处理阶段 1.数据预处理。在开始数据分析之前,对于导入的审计数据必须先进行预处理。主要是做好相关表中的字段映射。比如某个表中字段中的值需要修改到审计人员约定的另一个约定值,便于直观查阅等。例如某社保系统的人员信息,有个字段为参保状态,原系统的数值为0,1,2。经审计人员与被审计单位核对后,0表示正常参保,1表示终止参保,2表示转移至外省市。那么通过修改这个字段数值,均可映射对应的汉字解释。数据映射阶段的工作只要编写对应的SQL语句就可解决,只不过要注意WHERE子句的条件约束。 对于含有多个年度的超大数据表,可将其拆分为不同的年度数据表。比如某市医保系统中的个人支付信息2009-2011年度的记录超过上亿条记录,在审计中可将该表的拆分为三个不同年度的个人支付表,如个人支付表2009、个人支付表_2010、个人支付表_2011。在数据分析阶段,根据年度可在对应的年度个人支付表中进行查询分析。