監控批量操作進度
在使用PL/SQL實現批量資料處理時,通常使用DBMS_OUTPUT.put_line('step a')實現;但由於該函式並不能實時輸出(在整個PL/SQL程式碼執行結束後才輸出),無法實現進度監控的效果。
這裡摘錄楊廷琨在《OracleDBA手記3》上的方法:
1,使用自治事務將進度插入日誌表,通過查詢日誌表獲取進度
create or replace procedure p_log(p_str in varchar2) as
pragma autonomous_transaction;
begin
insert into log values(sysdate,p_str);
commit;
end;
/
2,使用dbms_application_info.set_action('step a')實現,通過查詢v$session.action獲取進度
begin
dbms_application_info.set_action('step a');
end;
/
3,使用dbms_application_info.set_session_longops()實現,通過查詢v$session_longops獲取進度
set serveroutput on;
DECLARE
--異常
array_dml_errors EXCEPTION;
PRAGMA EXCEPTION_INIT(array_dml_errors, -24381);
--v$session_longops
l_rindex BINARY_INTEGER;
l_slno BINARY_INTEGER;
--error
l_errors NUMBER;
l_index NUMBER;
BEGIN
dbms_output.enable(NULL);
dbms_output.put_line('---Begin update users_chnl.sec_id');
l_rindex := dbms_application_info.set_session_longops_nohint;
dbms_application_info.set_session_longops(rindex => l_rindex,
slno => l_slno,
op_name => 'update table_a',
sofar => l_batch *
con_row_limit);
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(dbms_utility.format_error_stack);
CLOSE cur;
END;
/
4,使用dbms_pipe.send_message傳送進度資訊,通過dbms_pipe.receive_message讀取進度
--監控程式
declare
v_return number;
v_str varchar2(32767);
begin
v_return := dbms_pipe.create_pipe('p_test');
while(v_return = 0) loop
v_return := dbms_pipe.receive_message('p_test',1);
if v_return = 0 then
dbms_pipe.unpack_message(v_str);
p_log(v_str); --自治事務
end if;
end loop;
v_return := dbms_pipe.remove_pipe('p_test');
end;
/
--批量操作
declare
v_str varchar2(4000) := 'STEP BEGIN';
v_return number;
begin
dbms_pipe.pack_message(v_str);
v_return := dbms_pipe.send_message('p_test');
dbms_lock.sleep(60);
v_return := dbms_pipe.send_message('p_test');
dbms_lock.sleep(60);
v_return := dbms_pipe.send_message('p_test');
end;
/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/18922393/viewspace-709035/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 批量監控
- 如何監控工程專案進度?
- cacti批量新增監控
- 對table的操作進行監控
- Linux下使用pv監控進度Linux
- xhr fetch 監控響應進度
- nagios批量新增監控iOS
- 11gR2批量操作EM效能監控報表集
- 橋樑保護與監控-開發進度(一)
- 如何做好專案進度監控與跟蹤
- 利用掙值法監控專案成本和進度
- 使用 iotop 監控哪些程式在進行I/O操作
- 使用shell批量監控磁碟壞塊(二)
- 使用shell批量監控磁碟壞塊(一)
- oracle rman備份驗證和備份進度監控Oracle
- 監控資料備份恢復完成進度(EXPDP/IMPDP/RMAN)
- 使用v$session_longops來監控rman備份進度SessionGo
- 業務流程監控:讓多維度監控有了靈魂
- Zabbix監控使用進階
- oracle rman備份驗證和備份/恢復進度監控Oracle
- 如何有效使用Project(2)——進度計劃的執行與監控Project
- win10 cpu溫度監控怎麼用_如何使用win10 cpu溫度監控Win10
- 如何批量實現遠端視訊監控?不改路由設定、一次操作全部搞定!路由
- 一種對雲主機進行效能監控的監控系統及其監控方法
- Process Monitor監控目錄 - 監控檔案被哪個程式操作了
- TG Pro for Mac(溫度監控軟體)Mac
- 專案管理必備——使用燃盡圖監控專案整體進度專案管理
- 分散式監控系統Zabbix-批量新增聚合圖形分散式
- 批量監控主機方法2-使用rhost來實現
- 批量監控主機方法3-使用ftp來實現FTP
- Zabbix監控阿里雲SLB操作指引阿里
- bulk_collect結合dbms_application_info監控資料處理進度APP
- 分散式監控系統Zabbix3.4-針對MongoDB效能監控操作筆記分散式MongoDB筆記
- mybatis批量操作MyBatis
- ORACLE批量操作Oracle
- 利用v$session_longops監控長操作SessionGo
- STANDBY中NOLOGGING操作的監控
- 【Zabbix】如何使用Zabbix進行IPMI監控?