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

时间: 2024-09-29 20:01:13

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

Oracle数据库错误大全

ORA-00001: 违反唯一约束条件 (.)ORA-00017: 请求会话以设置跟踪事件ORA-00018: 超出最大会话数ORA-00019: 超出最大会话许可数ORA-00020: 超出最大进程数 ()ORA-00021: 会话附属于其它某些进程:无法转换会话ORA-00022: 无效的会话 ID:访问被拒绝ORA-00023: 会话引用进程私用内存:无法分离会话ORA-00024: 单一进程模式下不允许从多个进程注册ORA-00025: 无法分配ORA-00026: 丢失或无效的会话 I

总结:整理 oracle异常错误处理 . (转载)

5.1 异常处理概念 5.1.1 预定义的异常处理 5.1.2 非预定义的异常处理 5.1.3 用户自定义的异常处理 5.1.4 用户定义的异常处理 5.2 异常错误传播 5.2.1 在执行部分引发异常错误 5.2.2 在声明部分引发异常错误 5.3 异常错误处理编程 5.4 在 PL/SQL 中使用 SQLCODE, SQLERRM异常处理函数 即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件.一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复.任何ORACLE错误

Oracle DML容错处理(1)

Oracle dml操作过程中可能出现键重复或者数据类型不一致等问题,一般进行数据处理时候需要对这些可能出现的错误提前考虑,避免更新失败.Oralce给出了一些其他解决方案,以在不同场景下使用. 1.ignore_row_on_dupkey_index HINT Oracle 11.2.0.1 版本中心加入的3个提示CHANGE_DUPKEY_ERROR_INDEX, IGNORE_ROW_ON_DUPKEY_INDEX, RETRY_ON_ROW_CHANGE,与其他提示不同,特别之处在于存在

Oracle 用户验证日志

1.sysdba/sysoper 权限用户验证日志;2.非sysdba/sysoper 权限用户验证日志;3.关于sqlcode; 1.sysdba/sysoper 权限用户验证日志:在数据库设置了参数 audit_sys_operations=true 的情况下,系统会根据 audit_trail 参数的设置记录 sysdba/sysoper 权限用户日志到 audit_file_dest 参数设置的目录下,记录日志的内容包括(数据库启动操作.登录验证信息.DML操作),其它非 sysdba/

【转】oracle异常错误处理

5.1 异常处理概念 5.1.1 预定义的异常处理 5.1.2 非预定义的异常处理 5.1.3 用户自定义的异常处理 5.1.4  用户定义的异常处理 5.2 异常错误传播 5.2.1 在执行部分引发异常错误 5.2.2 在声明部分引发异常错误 5.3 异常错误处理编程 5.4  在 PL/SQL 中使用 SQLCODE, SQLERRM异常处理函数 即使是写得最好的PL/SQL程序也会遇到错误或未预料到的事件.一个优秀的程序都应该能够正确处理各种出错情况,并尽可能从错误中恢复.任何ORACLE

Oracle 联机重做日志文件(ONLINE LOG FILE)

--========================================= -- Oracle 联机重做日志文件(ONLINE LOG FILE) --========================================= 一.Oracle中的几类日志文件 Redo log files      -->联机重做日志 Archive log files   -->归档日志 Alert log files     -->告警日志 Trace files        

Oracle 归档错误案例

Oracle 归档错误案例 系统环境: 操作系统: RedHat EL55 Oracle :   Oracle 11.2.0.1.0 案例:    客户数据库服务器的归档日志空间被塞满,未发现:DBA在发现日志切换被hang后,强制关了库,导致实例启动失败...... 错误现象: 在做日志归档时,数据库被hang...... 16:56:02 [email protected] prod>alter system switch logfile; 告警日志: ORACLE Instance pro

Linux查询错误日志

-- 1错误日志目录一般在 /usr/oracle/app/diag/rdbms/orcl/orcl/trace 根据PID模糊查询对应的错误日志 find -name "*ora*3159*.trc" more orcl_ora_3159.trc --  2 查询归档日志 select * from v$recovery_file_dest; -- 3 删除归档日志