實時監控儲存過程中應用的日誌資訊
幾年前開發人員問我,要怎樣解決儲存過程在執行過程中,能實時看到日誌生
成,因為無論採用DBMS_OUTPUT還是dbms_system.ksdwrt,只能在儲存過程執
行完成之後才生成日誌資訊。這個問題一直困擾了我多年,但很幸運能看到一位韓
國的資料庫專家Dion Cho部落格中提供的指令碼,解決了這個困擾多年的問題。
以下具體的指令碼:
1、建立包
create or replace package pkg_log
as
type log_array is table of varchar2(4000);
procedure log(message in varchar2);
procedure flush;
function get_log return log_array pipelined;
end;
/
create or replace package body pkg_log
as
procedure log(message in varchar2) is
v_status number;
begin
dbms_pipe.pack_message(sysdate || ', ' || message);
v_status := dbms_pipe.send_message('log');
end log;
procedure flush is
v_status number;
begin
dbms_pipe.pack_message('$$END$$');
v_status := dbms_pipe.send_message('log');
end;
function get_log return log_array pipelined is
v_status number;
v_message varchar2(4000);
begin
while true loop
v_status := dbms_pipe.receive_message('log');
if v_status = 0 then
dbms_pipe.unpack_message(v_message);
if v_message = '$$END$$' then
return;
end if;
pipe row(v_message);
pipe row('');
end if;
end loop;
return;
end get_log;
end;
/
2、測試
-- session #1
begin
for idx in 1 .. 10 loop
pkg_log.log(idx || 'th insertion');
dbms_lock.sleep(1);
end loop;
pkg_log.flush;
end;
/
-- session #2
set array 2
set pages 100
select * from table(pkg_log.get_log);
成,因為無論採用DBMS_OUTPUT還是dbms_system.ksdwrt,只能在儲存過程執
行完成之後才生成日誌資訊。這個問題一直困擾了我多年,但很幸運能看到一位韓
國的資料庫專家Dion Cho部落格中提供的指令碼,解決了這個困擾多年的問題。
以下具體的指令碼:
1、建立包
create or replace package pkg_log
as
type log_array is table of varchar2(4000);
procedure log(message in varchar2);
procedure flush;
function get_log return log_array pipelined;
end;
/
create or replace package body pkg_log
as
procedure log(message in varchar2) is
v_status number;
begin
dbms_pipe.pack_message(sysdate || ', ' || message);
v_status := dbms_pipe.send_message('log');
end log;
procedure flush is
v_status number;
begin
dbms_pipe.pack_message('$$END$$');
v_status := dbms_pipe.send_message('log');
end;
function get_log return log_array pipelined is
v_status number;
v_message varchar2(4000);
begin
while true loop
v_status := dbms_pipe.receive_message('log');
if v_status = 0 then
dbms_pipe.unpack_message(v_message);
if v_message = '$$END$$' then
return;
end if;
pipe row(v_message);
pipe row('');
end if;
end loop;
return;
end get_log;
end;
/
2、測試
-- session #1
begin
for idx in 1 .. 10 loop
pkg_log.log(idx || 'th insertion');
dbms_lock.sleep(1);
end loop;
pkg_log.flush;
end;
/
-- session #2
set array 2
set pages 100
select * from table(pkg_log.get_log);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/354732/viewspace-624007/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- ORACLE監控系統錯誤日誌過程Oracle
- 在儲存過程A中呼叫儲存過程B的結果儲存過程
- 日誌監控
- python監控伺服器應用日誌,推送釘釘機器人,實時關注日誌異常Python伺服器應用日誌機器人
- Sqlserver中的儲存過程SQLServer儲存過程
- java獲取redis的日誌資訊和動態監控資訊JavaRedis
- 實戰儲存過程排程過程儲存過程
- 儲存過程中巢狀儲存過程的變數執行方式儲存過程巢狀變數
- 用zabbix監控oracle dg從庫是否應用日誌的指令碼Oracle應用日誌指令碼
- Data Guard備庫日誌的實時應用與非實時應用
- SQL Server中建立儲存過程時,with recompoile的作用SQLServer儲存過程
- 查詢儲存過程報錯資訊儲存過程
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- PB中呼叫儲存過程儲存過程
- 儲存過程中拼接字串儲存過程字串
- java中呼叫儲存過程Java儲存過程
- ElasticSearch實戰-日誌監控平臺Elasticsearch
- 儲存過程編譯時卡死儲存過程編譯
- Mybatis中運用小技巧(三)儲存過程的運用MyBatis儲存過程
- 安裝過程中長時間無反應,日誌中報Caught UnknownHostExceptionException
- PL/SQL中動態掉用儲存過程SQL儲存過程
- 儲存過程獲取表被引用的資訊儲存過程
- SQL Server 儲存過程的運用SQLServer儲存過程
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- ORACLE儲存過程中建立子過程的測試!Oracle儲存過程
- oracle儲存過程中的陣列Oracle儲存過程陣列
- 幾個實用SQL Server取儲存過程SQLServer儲存過程
- Mysql事件監控日誌MySql事件
- 使用kibana視覺化報表實時監控你的應用程式,從日誌中找出問題,解決問題視覺化
- 從sybase的儲存過程轉向oracle的儲存過程儲存過程Oracle
- 日誌監控實踐 - 監控Agent整合Lua引擎實現多維度日誌採集
- ELK 5.0.1+Filebeat5.0.1實時監控MongoDB日誌並使用正則解析mongodb日誌MongoDB
- MySQL儲存過程詳解 mysql 儲存過程MySql儲存過程
- 儲存過程儲存過程
- 用flashback恢復儲存過程儲存過程
- 用PHP呼叫MySQL儲存過程PHPMySql儲存過程
- 用java呼叫oracle儲存過程JavaOracle儲存過程
- 實時流處理與分散式儲存過程中對檔案的操作分散式儲存過程