首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

DML Error Logging 特性

最近的项目中发现处理DML Error 时,逐条逐条处理1千多条的数据从临时表 insert 到正式表需要差不多1分钟的时间,性能相当低下,而Oracle 10g中的DML error logging对于DML异常处理性能卓著。原本打算写篇关于这个特性的文章,正好有经典篇章,于是乎,索性翻译供大家参考,有不尽完美之处,请大家拍砖。 缺省情况下,一个DML命令失败的时候,在侦测到错误之前,不论成功处理了多少条记录,都将将使得整个语句回滚。在使用DML error log之前,针对单行处理首选的办法是使用批量SQL FORALL 的SAVE EXCEPTIONS子句。而在Oracle 10g R2时,DML error log特性使得该问题得以解决。通过为大多数INSERT,UPDATE,MERGE,DELETE语句添加适当的LOG ERRORS子句,不论处理过程中是否出现错误,都可以使整个语句成功执行。这篇文章描述了DML ERROR LOGGING操作特性,并针对每一种情形给出示例。 一、语法 对于INSERT, UPDATE, MERGE 以及 DELETE 语句都使用相同的语法 LOG ERRORS [INTO [schema.]table] [('simple_expression')] [REJECT LIMIT integer|UNLIMITED] 可选的INTO子句允许指定error logging table 的名字。如果省略它,则记录日志的表名的将以"ERR$_"前缀加上基表名来表示。 simple_expression表达式可以用于指定一个标记,更方便去判断错误。simple_expression能够为一个字符串或任意能转换成字符串的函数 REJECT LIMIT 通常用于判断当前语句所允许出现的最大错误数。缺省值是0,最大值则是使用UNLIMITED关键字。对于并行DML操作而言,REJECT LIMIT 会应用到每个并行服务器。 二、使用限制 下列情形使得DML error logging 特性失效 延迟约束特性 Direct-path INSERT 或MERGE 引起违反唯一约束或唯一索引 UPDATE 或 MERGE 引起违反唯一约束或唯一索引 除此之外,对于LONG,LOB,以及对象类型也不被支持。即使是一个包含这些列的表被作为错误日志记录目标表。 三、示例 下面的代码创建表并填充数据用于演示。

02

ORA-39126 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS]错误

--======================================================= -- ORA-39126 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS]错误 --======================================================= 在Oracle11g中使用impdp导入时,碰到了下列错误:ORA-39126 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS]中 Worker 发生意外致命错误 如下: impdp system/passwd directory=data_pump_dir dumpfile=nmg350627.DMP schemas=hohhot remap_schema=hohhot:hohhotnmg logfile=imp0701.log Import: Release 11.2.0.1.0 - Production on 星期五 7月 1 16:10:51 2011 Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved. ;;; 连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production With the Partitioning, OLAP, Data Mining and Real Application Testing options 已成功加载/卸载了主表 "HOHHOTNMG"."SYS_IMPORT_SCHEMA_01" 启动 "SYSTEM"."SYS_IMPORT_SCHEMA_01":  system/******** directory=data_pump_dir dumpfile=nmg350627.DMP     schemas=hohhot remap_schema=hohhot:hohhotnmg logfile=imp0701.log 处理对象类型 SCHEMA_EXPORT/USER 处理对象类型 SCHEMA_EXPORT/SYSTEM_GRANT 处理对象类型 SCHEMA_EXPORT/ROLE_GRANT 处理对象类型 SCHEMA_EXPORT/DEFAULT_ROLE 处理对象类型 SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA 处理对象类型 SCHEMA_EXPORT/TYPE/TYPE_SPEC 处理对象类型 SCHEMA_EXPORT/SEQUENCE/SEQUENCE 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE 处理对象类型 SCHEMA_EXPORT/TABLE/TABLE_DATA . . 导入了 "HOHHOTNMG"."TAPP_RESOURCE"                 26.30 MB    1408 行 . . 导入了 "HOHHOTNMG"."TAPP_INFO_FILE"                17.67 MB      94 行 . . 导入了 "HOHHOTNMG"."TAPP_SCHEMA_BUTTON"            6.484 MB     782 行 . . 导入了 "HOHHOTNMG"."TAPP_FINDEXQUEUE"              400.4 KB     183 行 . . 导入了 "HOHHOTNMG"."TAPP_ROLE_OBJ_PRIV"            4.430 MB   36574 行                        ........... 处理对象类型 SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS ORA-39126: 在 KUPW$WORKER.PUT_DDLS [TABLE_STATISTICS] 中 Worker 发生意外致命错误 ORA-06502: PL/SQL: 数字或值错误 LPX-00225: end-element tag "HIST_GRAM_LIST_ITEM" does not match start-element tag "EPVALUE" ORA-06512: 在 "SYS.DBMS_SYS_ERROR", line 95 ORA-06512: 在 "SYS.KUPW$WORKER", line 8165 ----- PL/SQL Call Stack -----   object      li

04
领券