Oracle DML错误日志笔记

2015-02-02 13:38:06 · 作者: · 浏览: 19

具体使用如下:


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_bad


Name? ? ? ? ? ? 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子句不引起隐式提交,也就是说,即使回滚了失误,错误信息还是会保存在错误日志表中。