實時監控儲存過程中應用的日誌資訊
幾年前開發人員問我,要怎樣解決儲存過程在執行過程中,能實時看到日誌生
成,因為無論採用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- python監控伺服器應用日誌,推送釘釘機器人,實時關注日誌異常Python伺服器應用日誌機器人
- 黑盒監控、日誌監控
- Sqlserver中的儲存過程SQLServer儲存過程
- zabbix應用教程:基於Nginx頁面響應的日誌監控用例Nginx
- 面對海量的監控影片資料應該如何儲存?
- Sql儲存過程分頁--臨時表儲存SQL儲存過程
- Data Guard備庫日誌的實時應用與非實時應用
- jsp中呼叫儲存過程JS儲存過程
- PL/SQL中動態掉用儲存過程SQL儲存過程
- 使用kibana視覺化報表實時監控你的應用程式,從日誌中找出問題,解決問題視覺化
- mssql 儲存過程呼叫另一個儲存過程中的結果的方法分享SQL儲存過程
- 資料庫儲存過程資料庫儲存過程
- Docker應用容器日誌資訊收集Docker
- 日誌監控實踐 - 監控Agent整合Lua引擎實現多維度日誌採集
- 監控採集上報和儲存監控資料策略
- 用flashback恢復儲存過程儲存過程
- Mysql事件監控日誌MySql事件
- 使用儲存過程(PL/SQL)向資料庫中儲存BLOB物件儲存過程SQL資料庫物件
- oracle的儲存過程Oracle儲存過程
- 【SqlServer】清除過期資料的儲存過程SQLServer儲存過程
- 應用儲存過程執行報錯解決方案儲存過程
- vertica 如何實現儲存過程?儲存過程
- 實時流處理與分散式儲存過程中對檔案的操作分散式儲存過程
- AIGC資訊保安-在應用系統中安全防範過程實踐應用AIGC
- Kubernetes Ingress 日誌分析與監控的最佳實踐
- 騰訊 SNG 監控資料的創新應用
- Oracle儲存過程乾貨(一):儲存過程基礎Oracle儲存過程
- SQL 儲存過程裡呼叫另一個儲存過程SQL儲存過程
- MySql資料庫——儲存過程MySql資料庫儲存過程
- 小程式日誌監控工具
- 03-Loki 日誌監控Loki
- 儲存過程與儲存函式儲存過程儲存函式
- 儲存過程——異常捕獲&列印異常資訊儲存過程
- MySQL的寫入資料儲存過程MySql儲存過程
- 安防監控如何儲存?
- SQLSERVER儲存過程SQLServer儲存過程
- 呼叫儲存過程儲存過程
- mysql 儲存過程MySql儲存過程
- unidac儲存過程儲存過程