获取导致导入失败的数据
上一篇 / 下一篇 2008-05-07 21:38:10 / 个人分类:ORACLE
前不久从一个数据库执行导出操作时报错,通过直接路径方式跳过后,导入时候再次报错。推测是由于源数据库出现的异常导致表中数据超过表定义的精度。
由于源数据库中错误记录已经被删除,因此只能想办法从导出的dmp文件中获取错误的记录。
导出、导入过程的描述可以参考:
EXP在9R2上导出时报错ORA-3113和ORA-24324:http://yangtingkun.itpub.net/post/468/460647
EXP在9R2上导出时报错ORA-3113和ORA-24324(二):http://yangtingkun.itpub.net/post/468/460831
导入时报错如下:
$ imp test/test file=jg080424.dmp tables=shgov_order buffer=2048000 ignore=y
Import: Release 9.2.0.4.0 - Production on星期三5月7 23:12:20 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
J?2QuULi*q0连接到: Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit ProductionITPUB个人空间.|5D$h&`H{
With the Partitioning, OLAP and Oracle Data Mining options
FDN$_P,C%no~:U0JServer Release 9.2.0.4.0 - Production
经由常规路径导出由EXPORT:V09.02.00创建的文件
警告:此对象由SHGOV导出,而不是当前用户
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR字符集中的导入ITPUB个人空间3py(q;\(z0d
.正在将SHGOV的对象导入到TEST
SxR*tL9n[.fS0. .正在导入表 "SHGOV_ORDER"ITPUB个人空间C"K2G{Z+ES
K
IMP-00058:遇到ORACLE错误1438ITPUB个人空间!ChiJ'L+T'[d
tc
ORA-01438:值大于此列指定的允许精确度
g*ZA.eh
Feq(~0IMP-00028:上一个表的部分导入已回退:回退31322行ITPUB个人空间9\9g Wk A`$upO
IMP-00009:导出文件异常结束ITPUB个人空间_}H z$eh#}:z7b
成功终止导入,但出现警告。
根据这个错误,是无法判断问题到底出现在哪一列上,也看不到导致错误数据。不过由于导出过程中出现了1438错误,因此首先相当的方法是利用系统错误触发器获取插入失败记录的SQL语句。
$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on星期三5月7 22:54:26 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
M$u\tJ ]-Wxz
lA0{0连接到:
fx)x9~i0Oracle9i Enterprise Edition Release 9.2.0.4.0 - 64bit ProductionITPUB个人空间jUl#bV&x\t,j_
With the Partitioning, OLAP and Oracle Data Mining optionsITPUB个人空间E2[Nw0p'\;g X
JServer Release 9.2.0.4.0 - Production
SQL> CREATE TABLE T_LOG (EXECUTE_DATE DATE, SQL_STATMENT CLOB);
表已创建。
SQL> CREATE OR REPLACE TRIGGER FIND_ERR_SQL AFTER SERVERERROR ON DATABASE
i6?2CG*kP f0 2 DECLARE
!Ug;|;wQR5T0 3 V_SQL_OUT ORA_NAME_LIST_T;ITPUB个人空间D!v,?"kUN7|&uE
4 V_NUM NUMBER;
6N"BIB`eh0 5 V_SQL_STATMENT VARCHAR2(32767);