数据导入的问题汇总

上传人:第*** 文档编号:32641538 上传时间:2018-02-12 格式:DOC 页数:11 大小:172.50KB
返回 下载 相关 举报
数据导入的问题汇总_第1页
第1页 / 共11页
数据导入的问题汇总_第2页
第2页 / 共11页
数据导入的问题汇总_第3页
第3页 / 共11页
数据导入的问题汇总_第4页
第4页 / 共11页
数据导入的问题汇总_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《数据导入的问题汇总》由会员分享,可在线阅读,更多相关《数据导入的问题汇总(11页珍藏版)》请在金锄头文库上搜索。

1、数据导入的问题汇总从 6 月 28 号第一次向数据库导入黑龙江数据,到现在 7 月 20 号对数据库的导入,出现了一些问题,一部分是数据本身的问题,比如说插入的列值过大;一部分是属于程序本身的问题。以下是测试时操作数据库发生的一些问题:(一)执行 SQL*Loader 时出现的错误1. 导入的*.csv 文件中数据不正确a. 列后面添加大量空格,导致列值过大无法导入数据库如下图,项目名称和项目类型数据库定义的字符串程度是 30 和 20,而事实上导入的字符串程度是 57 和 23,当然会出现列值过大的问题b. 列值错位L 列的值占了两个列,M 列为空,导致后面的列值错误。c. 列值违反唯一约束

2、数据库定义的是某列是主键,键值是不可以重复的,而导入的相应的列值出现重复。d. 列值的类型不符合如下图 B 列对应的是资产编号,误填了其他列值。以上列举的只是几个典型的例子。具体的需执行 SQL*Loader 文件后查看日志文件。(二)追加地市盘点工单的时,追加的效率很低,而且部分数据没有导入。针对这个问题,统计抽取部分数据追加的时间和结果,如下表:地市名称 增量 数据导入前ets_item_info的 count 值数据导入后ets_item_info的 count 值所需时间 备注大庆(31974) 0 0 31974 5 分钟 完整导入数据哈尔滨(106438) 106438 31974

3、 34516 3 小时 数据没有导完,实际导入2542 条数据齐齐哈尔 44447 34516 68975 近 2 个小时 数据没有完全导入从上表可以看出两个很明显的问题,一个是追加效率很低,一个是数据没有完全导入。针对这两个问题,做了如下考虑:1. 可能的是数据太多没有执行完毕,于是采取了逐步增量(追加数据由少到多)的方式去证实这一猜测。下表是统计的结果。地市名称 增量 数据导入前ets_item_info的 count 值数据导入后ets_item_info的 count 值所需时间 备注大庆 50 0 50 30 秒内哈尔滨 100 50 150 30 秒内齐齐哈尔 150 150 30

4、0 30 秒内大兴安岭 500 300 800 30 秒内佳木斯 2000 800 2800 一分钟以内七台河(12790)牡丹江(31620)省本部(14858)绥化(28572)87850 2800 62930 两个小时整 数据没有导完,正确导入完成应该是 90650 条伊春(10) 数据上表的数据反映了一个问题,当数据导入的量过大的时候,确实存在部分数据没有导入成功,而且效率也很低。这个问题不得不让操作者考虑,是什么原因让这些数据没有导入成功呢?于是引申出以下 2、3、4 的可能。2. 执行某一条资产的时候,因不满足条件故被滤掉。方案一:取一条 ets_item_info 表没有的 et

5、s_fa_assets 表有的资产,而且是日志表ams_item_job_log 没有出错的资产,把这条资产的 tag_number 拿到程序中运行,看是否成功向 ets_item_info 表导入数据。操作步骤:a. 取出一条上述的资产,select * from ets_fa_assets a where a.tag_number not in (select b.barcode from ets_item_info b where a.tag_munber=b.barcode) and townum 0;IF L_TMP_COUNT = 1 THENL_NEED_SCAN := FALS

6、E;END IF;END IF;RETURN L_NEED_SCAN;通过查询步骤一返回Y,则到步骤三,步骤三返回 0,则检查结果返回 true。e. 执行这一条资产 init_data_pkg.syn_item_info ,操作成功。方案二: 追加。既然没有导入的那部分数据里可以单条导入,那么就可以试着不执行SQL*Loader 文件,在部分数据没有导入完成的情况下直接追加。看是否能继续向ets_item_info 表成功添加数据。下面是追加记录:操作步骤:将 SQL*Loader 文件全部执行,然后在 PL/SQL 中执行 init_data_pkg. IMP_NEW_ASSETS_FRO

7、M_FA ,记录总数。第几次追加追加前数量(ets_item_info)追加后数量增量 消耗时间 Ets_fa_assets的数量1 63115 64379 1264 30 分钟 906502 64379 69004 4628 2 个小时 906503 69004 74765 5761 5 个小时 90650总结 三次追加都有向数据库添加一些数据,但是一次不会全部添加方案案三: 验证错误的资产。每添加一条资产,都会向表 ams_item_job_log 写日志,日志里有如下四种提示信息:. 本条资产同步成功 1.SYN_SYSTEM_ITEM: ORA-00001: 违反唯一约束条件 2(SI

8、NOEAM_APPEND.ETS_SYSTEM_ITEM_UK). 找不到对应区县代码,不能创建地点,本条资产跳 3. 不能找到地点,本条资产跳过 4操作步骤: 和 是导入成功后的提示不作考虑。验证 , 正是找不到区县代码,从而 1 2 3 4不能创建地点,因此找不到地点。a. 在日志文件里取出一条提示 的资产在 CURSOR ASS_INFO_REC 的查询语句中执行,返回一条 3记录。b. 找到对应 的代码 4INTO L_COUNTY_COUNT -创建地点时需要获取区县代码FROM ETS_COUNTY EC, AMS_COST_DEPT_MATCH ACDMWHERE EC.COUN

9、TY_CODE_MIS = ACDM.COST_CENTER_CODEAND ACDM.COMPANY_CODE = EC.COMPANY_CODEAND ACDM.COST_CENTER_CODE = P_ASS_REC.COST_CODEAND ACDM.COMPANY_CODE = P_ASS_REC.COMPANY_CODEAND ROWNUM set serveroutput onSQL exec INIT_DATA_PKG .IMP_NEW_ASSETS_FROM_FAf. e 执行完后输出 1、22,查看日志,记录 e 执行完毕的最后一条资产的下一个资产tag_numberg.

10、第二次执行 SQL set serveroutput onSQL exec INIT_DATA_PKG .IMP_NEW_ASSETS_FROM_FA结果与结论: g 执行完毕,结果输出 1、22,证明程序正常想表 ets_item_info 添加了数据。但是查看日志,第二次执行的完毕后,表 ams_item_job_log 显示的第一条数据和步骤 e 记录的是相同的一条资产,说明问题 3 的假设不成立。4. 程序有问题。以上的结论不得不让操作者再吃考虑程序不完善,具体操作和测试见下(三) 。(三)更新程序后,对数据的测试。程序更新后,为了找出以上残留的问题,缩小问题的范围,准确的定位一部分数

11、据没有导入的原因,重建一个用户,分批分量导入数据。下表是测试的具体数据。地市名称 增量 导入前assets_fa_info的 count 值导入后ets_item_info的 count 值所需时间(分钟)日志错误提示数量(条)数据说明牡丹江 +10000 107509 107506 6 3 取牡丹江 10000条数据牡丹江 +10000 117509 117505 7 4牡丹江 +11620 129129 129124 9 5 取牡丹江剩余的资产齐齐哈尔 +44447 173576 173571 10 5 齐齐哈尔整个地市的数据大兴安岭 +10510工程公司 +882黑河 +20901鸡西

12、+20453佳木斯 +34723七台河 +12790省本部 +14858伊春 +785318041 318021 19 20 黑龙江数据其它地市的数据全部导入备注 导入后缺少的少部分数据在日志表 ams_item_job_log 中可以找到,而且日志文件没有“SYN_SYSTEM_ITEM: ORA-00001: 违反唯一约束条件 (SINOEAM_APPEND.ETS_SYSTEM_ITEM_UK)”这样的提示信息。总结 根据上面的显示,导入数据正常,数目完整,花费时间较短。证明程序更新之后数据导入完全正确。对照更新前的程序,仅发现有一个地方做了修改,如下图:更新前的程序更新后的程序更新程序

13、之后会加快导入速度,而且导入数据完整,这到底是为什呢?下面就来分解一下:BEGINP_ITEM_CATEGORY := OTHERS;IF P_ASS_REC.ITEM_CODE IS NULL THEN 1SELECT COUNT(1)INTO L_ITEM_COUNTFROM ETS_SYSTEM_ITEM ESIWHERE ESI.ITEM_CATEGORY = TRIM(P_ASS_REC.ITEM_CATEGORY) 7AND ESI.ITEM_NAME = TRIM(P_ASS_REC.ITEM_NAME) AND NVL(ESI.ITEM_SPEC, 1) = NVL(TRIM(

14、P_ASS_REC.ITEM_SPEC), 1);IF L_ITEM_COUNT = 1 THEN 2SELECT ESI.ITEM_CODEINTO P_ASS_REC.ITEM_CODEFROM ETS_SYSTEM_ITEM ESIWHERE ESI.ITEM_CATEGORY = TRIM(P_ASS_REC.ITEM_CATEGORY)AND ESI.ITEM_NAME = TRIM(P_ASS_REC.ITEM_NAME)AND NVL(ESI.ITEM_SPEC, 1) =NVL(TRIM(P_ASS_REC.ITEM_SPEC), 1);ELSE 3P_ITEM_CATEGOR

15、Y := GET_ITEM_CATEGORY(P_ASS_REC.FA_CATEGORY_CODE); 8SELECT ETS_SYSTEM_ITEM_S.NEXTVALINTO P_ASS_REC.ITEM_CODEFROM DUAL;INSERT INTO ETS_SYSTEM_ITEM(ITEM_CODE,ITEM_CATEGORY,ITEM_NAME,ITEM_SPEC,ITEM_UNIT,MASTER_ORGANIZATION_ID,YEARS,IS_TMP_CODE,CREATION_DATE,CREATED_BY,LAST_UPDATE_DATE,LAST_UPDATE_BY,M

16、EMO)VALUES(P_ASS_REC.ITEM_CODE,P_ITEM_CATEGORY,TRIM(P_ASS_REC.ITEM_NAME),TRIM(P_ASS_REC.ITEM_SPEC),P_ASS_REC.ITEM_UNIT,OU_FA_IMPORT_SN_PKG.G_PROVINCE_OU_ID,P_ASS_REC.YEARS,N,SYSDATE,0,SYSDATE,0,OU_FA_IMPORT_SN_PKG.G_ITEM_CODE_MEMO);END IF;END IF;FUNCTION GET_ITEM_CATEGORY(P_ASS_REC IN OU_FA_IMPORT_SN_PKG.G_ASS_INFO)RETURN VARCHAR2 ISITEM_CATEGORY VARCHAR2(20);P_COUNT NUMBER := 0;BEGINSELECT COUNT(1) 4INTO P_COUN

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 中学教育 > 职业教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号