Welcome 微信登录

首页 / 数据库 / MySQL / Oracle DML错误日志笔记

DML错误日志是Oracle 10gR2引入的一个类似于SQL*Loader的错误日志功能。它的基本原理是把任何可能导致语句失败的记录转移,放到一张错误日志表中。具体使用如下:1、使用DBMS_ERRLOG.CREATE_ERROR_LOG来创建错误日志表--原表my_test表结构desc my_test Name Type       Nullable Default Comments------ ------------ -------- ------- --------SID    NUMBER                                NAME VARCHAR2(20) Y                        GENDER INTEGER      Y                        AGE    NUMBER     Y                        HOBBY  VARCHAR2(20) Y    --执行下面的语句,生成错误日志表execute dbms_errlog.create_error_log("my_test","my_test_bad"); PL/SQL procedure successfully completed. --生成的错误日志表my_test_bad结构desc my_test_badName            Type         Nullable Default Comments--------------- -------------- -------- ------- --------ORA_ERR_NUMBER$ NUMBER       Y                        ORA_ERR_MESG$ VARCHAR2(2000) Y                        ORA_ERR_ROWID$  UROWID(4000) Y                        ORA_ERR_OPTYP$  VARCHAR2(2)    Y                        ORA_ERR_TAG$    VARCHAR2(2000) Y                        SID           VARCHAR2(4000) Y                        NAME            VARCHAR2(4000) Y                        GENDER          VARCHAR2(4000) Y                        AGE           VARCHAR2(4000) Y                        HOBBY         VARCHAR2(4000) Y    其中ORA_ERR_TAG$这个字段可以存放用户自定义的数据2、在insert语句中使用my_test_bad错误日志表insert into my_test  (sid,name,gender,age,hobby)  values (12,"joy",2,"age","book,football,run")  log errors into my_test_bad;insert into my_test(sid,name,gender,age,hobby)values (12,"joy",2,"age","book,football,run")log errors into my_test_badORA-01722: 无效数字 SQL> select * from my_test_bad;--(结果不规范,用图展示) update,delete,merge语句都可以在后面声明错误日志,方法相同。如:
update my_test set age = "yyy" where sid = 12 log errors into my_test_bad;注意事项:log errors子句不引起隐式提交,也就是说,即使回滚了失误,错误信息还是会保存在错误日志表中。更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址