監控批量操作進度
在使用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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- xhr fetch 監控響應進度
- 如何監控工程專案進度?
- 使用 iotop 監控哪些程式在進行I/O操作
- 如何做好專案進度監控與跟蹤
- 橋樑保護與監控-開發進度(一)
- Zabbix監控使用進階
- 業務流程監控:讓多維度監控有了靈魂
- Zabbix監控阿里雲SLB操作指引阿里
- 一種對雲主機進行效能監控的監控系統及其監控方法
- 如何進行監控設計?
- win10 cpu溫度監控怎麼用_如何使用win10 cpu溫度監控Win10
- 利用v$session_longops監控長操作SessionGo
- TG Pro for Mac(溫度監控軟體)Mac
- 分散式監控系統Zabbix3.4-針對MongoDB效能監控操作筆記分散式MongoDB筆記
- 前端監控進階篇 — Sentry 監控 Next.js 專案實踐前端JS
- SpringBoot整合Actuator進行健康監控Spring Boot
- 專案管理必備——使用燃盡圖監控專案整體進度專案管理
- 如何進行網站的真實使用者監控(RUM)?怎麼進入監控網站網站
- 監控Ubuntu Linux中的CPU/GPU 溫度UbuntuLinuxGPU
- 在 Linux 上監控 CPU 和 GPU 溫度LinuxGPU
- Mybatis批量操作demoMyBatis
- 【Zabbix】如何使用Zabbix進行IPMI監控?
- IT監控(進階篇):運維監控系統手把手部署教學運維
- Sentinel進化指南:dashbaord改造,叢集流控,監控持久化持久化
- 黑盒監控、日誌監控
- 6.prometheus監控--監控dockerPrometheusDocker
- TiDB監控實現--存活監控TiDB
- springboot中加入druid對sql進行監控Spring BootUISQL
- 在Linux中,如何進行磁碟效能監控?Linux
- 進行Linux效能監控的命令介紹Linux
- Docker進階-容器監控cAdvisor+InfluxDB+GranfanaDockerUX
- Node效能如何進行監控以及優化?優化
- 虛擬網路監控進階之路-DeepFlow
- 監控
- 聊聊前端監控——錯誤監控篇前端
- TG Pro for Mac - 專業Mac硬體溫度監控Mac
- 使用Powershell對目標進行螢幕監控
- 在Linux中,如何進行系統效能監控?Linux
- 在Linux中,如何進行硬體效能監控?Linux