在oracle執行作業系統命令
在oracle 8i中,往往會出現要在儲存過程中執行作業系統命令的情況.一般來說,利用oracle enterprise manager設定作業時可以達到這個目的.但是由於oem在設定作業缺乏靈活性,設定的作業的引數是固定的.在實際應用當中往往需要在sql語句當中執行需要隨時執行作業系統命令.oracle 8i沒有直接執行os命令的語句,我們可以利用dbms_pipe程式包實現這一要求.
dbms_pipe通過建立管道,可以讓至少兩個程序進行通訊.oracle的管道與作業系統的管道在概念上有相同的地方,但是在實現機制不同.
下面介紹實現具體步驟:
1 建立乙個程式包,姑且起名叫daemon,sql語句如下:
/*建立daemon程式包*/
create or replace package body daemon as
/*execute_system是實現執行os命令的函式*/
function execute_system(***mand varchar2,
timeout number default 10)
return number is
通過sql*plus執行以上語句,將為當前使用者建立daemon程式包.
2 建立在os上執行的守護程序,監聽由上面的daemon程式包發來的要求執行os命令的語句.以下pro*c的**,必須由pro*c先進行預編譯.
#include
#include
exec sql include sqlca;
exec sql begin declare section;
char *uid = "scott/tiger";/*在這個地方改為你自己訪問的使用者,密碼,服務名*/
int status;
varchar ***mand[20];
varchar value[2000];
varchar return_name[30];
exec sql end declare section;
void
connect_error()
void
sql_error()
main()
else if (!strcmp((char *) ***mand.arr, "system")) }
else }
else }
exec sql ***mit work release;
exit(0);
} 以上**起名為daemon.pc,用proc預編譯:
proc iname=daemon.pc userid=使用者名稱/密碼@服務名 sqlcheck=semantics
得到daemon.c,在用c進行編譯,注意在nt上要把orasql8.lib加上,否則編譯通過,連線沒法通過.
3 在伺服器上執行daemon.exe
4 在sqlplus執行測試語句:
sql> variable rv number
sql> execute :rv := daemon.execute_system('ls -la');
pl/sql 過程已成功完成。
sql> execute :rv := daemon.execute_system('dir');
pl/sql 過程已成功完成。
sql>
dbms_pipe的用法見oracle的文件.
作業系統執行環境
程式的執行 完成與體系結構相關的工作 重點 作業系統必須了解和適配硬體 完成應用程式所需的共性任務,提供各種基礎服務 效能,安全,健壯性等問題 作業系統中的中斷 異常機制很重要,可以比作汽車的發動機,飛機的引擎.也可以說作業系統由中斷驅動或者事件驅動 i o 中斷 鍵盤上control c,印表機結...
作業系統課堂筆記二 作業系統執行環境
作業系統執行機制 中斷異常機制工作原理 系統呼叫機制 系統呼叫實戰 參考舉例 陷入指令 訪管指令 是一條特殊的指令,通過這條指令,可以使使用者程式向作業系統提出各種各樣的請求,例如 int,trap,syscall,sysenter sy it 核心態 使用者態 概念 cpu對系統發生某個事件的一種...
作業系統(四)作業系統的執行機制
目錄 1.4 作業系統的執行機制 1.4.1 核心程式 應用程式 1.4.2 特權指令 非特權指令 1.4.3 核心態 使用者態 1.4.4 作業系統的核心 1.4.5 小結 作業系統其實也是一種程式,程式的執行過程也就是cpu執行一行行機器指令的過程。區別於一般程式設計師開發的應用程式,實現作業系...