zoukankan      html  css  js  c++  java
  • 监控和审计 Oracle 数据库错误

    这个方法在开发数据库期间可能没什么用,但是在产品环境中你可能尝试查看和跟踪数据库的错误信息。

    首先我们创建一个表来存储错误信息,必须确保每个人都有访问这个表的权限

    01 CREATE TABLE error_log (
    02   server_error VARCHAR2(100),
    03   osuser VARCHAR2(30),
    04   username VARCHAR2(30),
    05   machine VARCHAR2(64),
    06   process VARCHAR2(24),
    07   program VARCHAR2(48),
    08   stmt VARCHAR2(4000),
    09   msg VARCHAR2(4000),
    10   date_created DATE 
    11 )

    然后创建如下触发器,触发条件:"AFTER SERVERERROR ON DATABASE":

    01 CREATE OR REPLACE
    02 TRIGGER error_log_trigger
    03     AFTER SERVERERROR ON DATABASE
    04 DECLARE
    05     username_  error_log.username%TYPE;
    06     osuser_    error_log.osuser%TYPE;
    07     machine_   error_log.machine%TYPE;
    08     process_   error_log.process%TYPE;
    09     program_   error_log.program%TYPE;
    10   stmt_      VARCHAR2(4000);
    11   msg_       VARCHAR2(4000);
    12   sql_text_  ora_name_list_t;
    13 BEGIN
    14   
    15   FOR i IN 1..NVL(ora_sql_txt(sql_text_), 0) LOOP 
    16     stmt_ := SUBSTR(stmt_ || sql_text_(i) ,1,4000);
    17   END LOOP;
    18   
    19   FOR i IN 1..ora_server_error_depth LOOP
    20     msg_ := SUBSTR(msg_ || ora_server_error_msg(i) ,1,4000);
    21   END LOOP;
    22   
    23   SELECT osuser, username, machine, process, program
    24   INTO   osuser_, username_, machine_, process_, program_
    25   FROM   sys.v_$session
    26   WHERE  audsid = USERENV('SESSIONID');
    27   
    28   INSERT INTO error_log VALUES (dbms_standard.server_error(1), osuser_, username_, machine_, process_, program_, stmt_, msg_, SYSDATE);
    29 END;

    等一等,可能表里就有错误信息了:)

  • 相关阅读:
    OpenCV之设计模式
    ca
    BMP结构详解
    Lucas–Kanade光流算法学习
    卡尔曼
    hash+链表
    文件操作
    查找
    fseek效率
    大家都说3C直连网络,3C网络是指什么呢?
  • 原文地址:https://www.cnblogs.com/shihao/p/2804349.html
Copyright © 2011-2022 走看看