ORACLE 错误日志表的用法

具体使用该方法一般包括三个步骤:
1 创建错误日志表,共有二种方法
  法一:利用DBMS_ERRLOG.create_error_log函数;
  EXEC DBMS_ERRLOG.create_error_log(dml_table_name => 'A')
  创建出来错误日志表名为err$_a,即创建的error表以err$_开头,加上表名,我们也可指定错误日志表名
  DBMS_ERRLOG.create_error_log(dml_table_name => 'A',err_log_table_name => 'A_LOG');
  法二:手工创建错误日志表
  但需要注意的是手工创建的错误日志表结构需要满足oracle规定,否则会报错.
2 执行带 error logging参数的DML语句,其insert语法结构如下其实我也没有找到update或者delete相关语法^_^)
        insert_into_clause
        { values_clause [ returning_clause ]
        | subquery
        }
        [ error_logging_clause ]
3 查询错误日志表,和一般的select语句一样.

下边我拿insert操作做测试用例

--创建测试表
CREATE TABLE a
AS
SELECT        ROWNUM id,rownum+1 VALUE
FROM all_objects
WHERE        rownum<3;

--创建唯一性索引
CREATE UNIQUE INDEX unq_a ON a(id);

--利用系统包来创建相应error log表
EXEC DBMS_ERRLOG.create_error_log(dml_table_name => 'A',err_log_table_name => 'A_LOG');
PL/SQL procedure successfully completed.

SQL> desc A_LOG
Name                  Null?    Type
--------------------- -------- -----------------
ORA_ERR_NUMBER$                NUMBER         --错误记录数
ORA_ERR_MESG$                  VARCHAR2(2000) --错误信息
ORA_ERR_ROWID$                 ROWID          --错误记录的rowid(仅对update或delete)
ORA_ERR_OPTYP$                 VARCHAR2(2)    --操作类型(I-INSERT,U-UPDATE,D-DELETE)
ORA_ERR_TAG$                   VARCHAR2(2000) --自定义标志说明
ID                             VARCHAR2(4000) --原表字段
VALUE                          VARCHAR2(4000) --原表字段
其中前五个字段是固定的,后边字段根据原表确定.


请注意:原表和对应error log表的字段类型是不完全匹配的,其转换规则如下:
NUMBER                        VARCHAR2(4000)
CHAR/VARCHAR2(n)        VARCHAR2(4000)
NCHAR/NVARCHAR2(n)        NVARCHAR2(4000)
DATE/TIMESTAMP                VARCHAR2(4000)
RAW                        RAW(2000)
ROWID                        UROWID
LONG/LOB                不支持
自定义类型                不支持

--插入数据,rownum<3的记录违反约束,ROWNUM=3的记录正常插入
SQL> INSERT     INTO a
  2  SELECT     ROWNUM id, rownum+1 VALUE
  3  FROM       all_objects
  4  WHERE      rownum<4
  5  LOG ERRORS INTO A_LOG REJECT LIMIT UNLIMITED
  6  ;
1 ROWS created.

--请注意:此处为UNLIMITED,即不限制错误记录的条数,默认为0,即有错误记录就停止整个事务并回滚,我们也可人为设置一个数目,
--假设为20,即插入时错误记录数超过20则停止整个事务并回滚~

 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值