大中型数据库数据导入中存在的部分问题及对策

时间:2007-10-09 07:15:40  来源:不详  作者:不详

  (1)审计背景

  审计署南京办在对某省农村卫生资金的调查中,在审计准备阶段,针对特定的审计目标,选取对审计实施过程中有用的数据表,来方便审计实施过程中数据的处理和分析。被审计单位的数据后台环境是windows版本的oracle,前台是用友8.0,数据量中等,由于所使用的审计数据采集软件没有对应用友8.0的接口,并且客观上也不允许直接连上后台数据库采集数据,因此我们只能使用数据库特定数据导出工具。

  (2)采集的过程与使用的技术方法

  为了减少数据采集过程中对被审计对象系统产生的风险,我们使用了oracle中的spool缓冲池技术,这种技术可以实现直接从后台数据库导出数据,导出数据的格式为文本文件。我们通常按照以下步骤来使用这种技术:

  1. 打开oracle pl/sql窗口,在其中输入缓冲开始命令,并指定处理完输出的路径与文件名。

  2. 在命令行中输入sql查询。

  3. 在命令行中输入缓冲结果命令。

  我们可以参照一个范例来详细介绍如何使用该技术,例如我们要将oracle数据库中customer表中所有的数据导入d盘的customer.txt中,我们可以采取以下步骤来实现我们的目的。

  1. spool d:customer.txt;

  2. select * from customer;

  3. spool off;

  这样系统就将执行查询进入缓冲池中的结果都输出到customer.txt文件中,文件的列分隔符为tab键,行分隔符为回车换行,然后我们使用审计数据采集软件中已成熟的文本文件导入工具可以很方便的导入customer.txt中的数据。

  二. 自力更生开发数据清洗工具

  (1)审计背景

  审计署南京办在对某商业银行审计中,在审计准备阶段,针对特定的审计目标,分析银行数据的特点,选取对审计实施过程中有用的字段,方便审计实施过程中数据的处理和分析。面对银行的大容量数据,审计组决定将该银行自行开发的cms信贷管理信息系统和abis信息系统的后台数据,导入sql server数据库进行整理和分析。

  (2)出现的问题

  该商业银行根据上级要求提供了txt格式的winrar压缩数据文件,审计组在本地机上进行了解压缩,然后导入sql server数据库,在导入过程中,由于该商业银行所使用的数据库有两套,分别是sybase和db2,相对应的操作系统是aix和as400,机器架构都不是x86的,所以提供的数据文件格式和分隔符都存在不规范的现象,给实际导入工作带来了不小的难度。

  我们通常采用dts和使用dts技术的衍生工具来导入数据。dts作为一个将文本文件高速装载进sql server数据库中的工具,提供了一种图形化的数据导入方式。但是我们发现在本次数据导入过程中,当以双引号为文本限定符,以逗号作为列分隔符,以回车换行作为行分隔符时,某些大文本数据格式中有多余的换行或双引号等字符,致使导入数据格式不正确,数据会在导入过程中出错,一些出错的情况如下图所示:图1至图4是一些出错的原因,图5与图6是导入数据过程中dts产生的错误。

图1 出现不合规双引号

图2出现不合规换行符

图3出现不合规换页符

图4出现不合规文本结束符

图5 格式不正确

图6 导入失败

  (3)处理方法

  由于导入数据记录数量很大,其中出错情况分布没有规律并且数目也很多,如果采取手工替换的方式会极大的浪费人力和时间,因此审计人员决定根据该银行的数据特征,开发出适合该银行数据特征的数据清洗工具abcdct。下面我们分步骤讨论开发设计思路:

  1. 指定源文件,并选取目标文件。

  2. 预读文件,确定一行记录中各文本限定符(即双引号)的具体位置,写入位置数组,确定每行记录的总字符数。

  3. 从源文件中读取一行字符串,程序扫描该字符串,如果发现有双引号不在位置数组中,则该双引号为非法的双引号,替换该双引号,并清除不合要求的字符,即回车符(0x0d)、换行符(0x0a)、分页符(0x0c)、制表符(0x09)和文本结束字符(0x00),我们采取的可行办法是将这些非法的字符用空格(0x20)来代替。

  4. 将清洗完的字符串写入目标文件。

  软件设计流程图如下:

图7 流程图

  (4)软件运行界面

  软件运行时的界面与显示结果的界面如下图所示。

共4页: 上一页 1 [2] [3] [4] 下一页

文章评论

共有 0位无忧审计爱好者发表了评论 查看完整内容