[20121214]数据库错误记录.txt

简介: [20121214]数据库错误记录.txt--自己参照许多文档,写了一个检测数据库错误的例子:--以sys用户登录,建立表CREATE TABLE SYS.ERROR_LOG(  IP_ADDRESS       VARCHAR2(30 BYTE),  USER...
[20121214]数据库错误记录.txt

--自己参照许多文档,写了一个检测数据库错误的例子:
--以sys用户登录,建立表
CREATE TABLE SYS.ERROR_LOG
(
  IP_ADDRESS       VARCHAR2(30 BYTE),
  USERNAME         VARCHAR2(30 BYTE),
  INSTANCE_NUMBER  NUMBER(2),
  THEDATE          DATE,
  ERRORMSG         VARCHAR2(4000 BYTE),
  OTHERMSG         VARCHAR2(4000 BYTE),
  SQLSTMT          VARCHAR2(4000 BYTE)
) TABLESPACE TOOLS; ;

--最好放在单独建立一个表空间,不要与system表空间在一起。

/* Formatted on 2012/12/14 09:27 (Formatter Plus v4.8.8) */
--
-- LOG_ERRORS  (Trigger)
--
--  Dependencies:
--   STANDARD (Package)
--   DBMS_STANDARD (Package)
--   INSTANCE_NUM (Function)
--   ORA_INSTANCE_NUM (Synonym)
--   LOGIN_USER (Function)
--   ORA_LOGIN_USER (Synonym)
--   ORA_SQL_TXT (Synonym)
--   ORA_SERVER_ERROR_MSG (Synonym)
--   ORA_SERVER_ERROR_DEPTH (Synonym)
--   ORA_SERVER_ERROR_DEPTH ()
--   ERROR_LOG (Table)
--   ORA_SERVER_ERROR_MSG ()
--   ORA_SQL_TXT ()
--   ORA_INSTANCE_NUM ()
--   ORA_LOGIN_USER ()
--   V$SESSION (View)
--   V$MYSTAT (View)
--
CREATE OR REPLACE TRIGGER SYS.log_errors
   AFTER SERVERERROR ON DATABASE
DECLARE
   sqltext       ora_name_list_t;
   errmsg        VARCHAR2 (4000) := NULL;
   errstmt       VARCHAR2 (4000) := NULL;
   errothermsg   VARCHAR2 (4000) := NULL;
BEGIN
   IF ( -- NOT is_servererror (904)
-- AND NOT is_servererror (942)
--  AND NOT is_servererror (937)
--  AND NOT is_servererror (1002)
--  AND NOT is_servererror (1003)
--  AND
       NOT is_servererror (942) AND NOT is_servererror (1407)
--       AND NOT is_servererror (1430)
--       AND NOT is_servererror (54)
--       AND NOT is_servererror (6550)
-- AND NOT is_servererror (936)
      )
   THEN
      FOR DEPTH IN 1 .. ora_server_error_depth
      LOOP
         errmsg := errmsg || ora_server_error_msg (DEPTH);
      END LOOP;

      FOR cntr IN 1 .. ora_sql_txt (sqltext)
      LOOP
         errstmt := errstmt || sqltext (cntr);
      END LOOP;

      SELECT 'sid:' || SID || ' SERIAL#: ' || serial# || ' terminal:' || terminal || ' program:' || program || ' module:'
             || module
        INTO errothermsg
        FROM v$session
       WHERE SID = (SELECT SID
                      FROM v$mystat
                     WHERE ROWNUM = 1);

      INSERT INTO error_log
                  (ip_address, username, instance_number, thedate, errormsg, othermsg,
                   sqlstmt
                  )
           VALUES (SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), ora_login_user, ora_instance_num, SYSDATE, errmsg, errothermsg,
                   errstmt
                  );
   END IF;
END;
/

--ALTER TRIGGER SYS.LOG_ERRORS DISABLE;

--如果一些错误不想监测,加入NOT is_servererror (XXX),XXX表示错误号。
--也可以disable,在需要的时候打开。



目录
相关文章
|
4月前
|
存储 JSON 关系型数据库
Pandas载入txt、csv、Excel、JSON、数据库文件讲解及实战(超详细 附源码)
Pandas载入txt、csv、Excel、JSON、数据库文件讲解及实战(超详细 附源码)
64 0
|
1月前
|
SQL Java 数据库连接
springboot解析txt文件顺便加到数据库中(nohup文件)
springboot解析txt文件顺便加到数据库中(nohup文件)
112 1
|
测试技术 数据库 Windows
[20180606]如何dump数据库里面的汉字.txt
[20180606]如何dump数据库里面的汉字.txt --//链接http://www.itpub.net/thread-2102613-1-2.html的问题. 比如: col 41: [42] e6 97 a0 e5 90 88 e5 90 8c e4...
1108 0
|
SQL 测试技术 数据库
[20180529]克隆数据库与dblinks注意.txt
[20180529]克隆数据库与dblinks注意.txt --//在做数据库克隆,一般情况下给开发做测试,要注意一个细节问题,就是数据库内建立的dblink. --//有可能导致一些异常情况,特别是国内环境生产数据库与测试数据库没有分开的情况下,很有可能导致 --//无意中窜改生产系统的数据.
1135 0
|
关系型数据库 数据库 数据库管理
[20150308]热备份和数据库检查点.txt
[20150308]热备份和数据库检查点.txt --今天看书,提到在热备份前,会做了一个数据文件检查点操作. --实际上这个很好理解: 开始热备份时候,做了一个数据文件检查点操作,因为热备份时备份要产生的日志很大,数据库必须要知道那个时候开始,做这项工作。
889 0

热门文章

最新文章