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

发表于:2007-4-16 16:18

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:不详    来源:cnaudit

随着计算机审计技术的不断发展,数据导入技术的水平已跃上一个新的台阶,体现出快速、高效和通用的特点。但是伴随审计对象的数据库系统趋于集中性、大型性和异构性,在一些实际工作中,已有的数据导入软件并不能完全有效的导入数据,本文针对一些数据导入过程中存在的问题进行分析并提出处理的方法。

  一. 利用数据库特定数据导出工具

  (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)软件运行界面

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

图8 运行界面图

图9 运行结果图

  (5)结论

  审计人员通过使用abcdct只花费了两周就完成了以往手工纠错需一个多月时间完成的任务,极大的提高了工作效率。但是在使用的过程中也发现存在一些不足:通用性不够,只能清洗以双引号为文本限定符,以逗号作为列分隔符,以回车换行作为行分隔符的文本文件;没有使用多线程技术提升清洗的效率;由于设计时假定分隔符的位置是固定的,因此对字段不定长的文本不能适用,这就需要在以上方面对软件做进一步的改进。

  综上所述,针对不同的审计数据环境,我们采用了两种方法来完成数据导入的任务,一种是利用已有的几种技术结合起来的方法,一种是根据客观实际的需要来自主解决的方法。我们可以看到,由于各部门信息化的程度和实施角度的差异,导致了数据环境也千变万化,存储方式的不同,平台的异构性,数据库系统的差异,多种多样,指望借助一种通用的方法来解决所有的数据导入问题是行不通的,就需要我们根据审计对象数据特点,因地制宜的解决数据导入问题。

《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号