首页 > 代码库 > oracle DML错误日志(笔记)

oracle DML错误日志(笔记)

DML错误日志是oracle10gR2引入的一个类似于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_bad ORA-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 DML错误日志(笔记)