[20121214]資料庫錯誤記錄.txt
[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,在需要的時候開啟。
--自己參照許多文件,寫了一個檢測資料庫錯誤的例子:
--以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,在需要的時候開啟。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/267265/viewspace-751101/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 假資料填充錯誤記錄
- Kafka錯誤記錄Kafka
- 記錄錯誤並繼續執行:錯誤事件記錄子句 --轉事件
- C++錯誤記錄C++
- SpringMVC錯誤記錄SpringMVC
- [20181219]記錄自己工作中的錯誤.txt
- 資料庫資料跟蹤記錄資料庫
- 用觸發器返回錯誤提示,糾正錯誤資料錄入觸發器
- SQL Server DACPAC資料庫部署錯誤SQLServer資料庫
- 資料庫ORA-0060錯誤資料庫
- 錯誤記錄:apache預設網頁訪問錯誤Apache網頁
- JS錯誤記錄 – dom操作 – 排序JS排序
- virtualbox 錯誤解決記錄
- 20201215]記錄工作中的錯誤.txt
- 記錄一次根據錯誤資訊無法定位錯誤的錯誤
- [20170412]bbed隱藏資料記錄.txt
- 記錄資料庫所有ddl操作資料庫
- 用SQL Server資料庫處理資料層錯誤SQLServer資料庫
- 【mysql】【Sequelize】【錯誤記錄】update修改資料後,不返回資料(其實就是mysql不支援)MySql
- 資料庫新手常犯的 5 個錯誤資料庫
- 資料庫人員:常見錯誤(轉)資料庫
- 網站連線資料庫配置錯誤網站資料庫
- 網站提示資料庫連線錯誤網站資料庫
- 資料庫mysql學習筆記記錄資料庫MySql筆記
- 阿里雲資料庫連線資料庫錯誤:如何解決?阿里資料庫
- MongoDB的一次錯誤記錄MongoDB
- 錯誤記錄(八)could not initialize proxy - no SessionSession
- postgresal使用錯誤解決 (記錄篇)
- Qt 錯誤記錄registered using qRegisterMetaType().QT
- ORA-01653錯誤是Oracle資料庫中常見的錯誤Oracle資料庫
- [20140624]bbed修改資料記錄.txt
- 為VNPY增加資料庫記錄交易資料功能資料庫
- 調整資料庫的資料檔案記錄資料庫
- cmdb 查詢資料庫操作記錄資料庫
- SQL Server 資料庫基本記錄(一)SQLServer資料庫
- SQL Server 資料庫基本記錄(二)SQLServer資料庫
- SQL Server 資料庫基本記錄(三)SQLServer資料庫
- 使用SQLServerAudit記錄資料庫變更SQLServer資料庫