oracle中執行os命令(轉)
I can think of a couple of different ways....
o In Oracle8i, release 8.1, we could use java to run a system command with an "&" after it (assuming unix) or perhaps "start xxx.cmd" if using NT.
o In Oracle8.0 and up, we can write an external procedure in C that runs host commands with system() and the "&". (see attached for an external procedure example)
o In Oracle7.0 and up, we can use dbms_pipes to talk to a daemon running outside the database. Here is a simple example that uses sqlplus to be the daemon:
A quick and dirty way to do this is with a csh script and sqlplus as such (cut and pasted from another email)
Ok, so can you do this without C? Yes. Here is a PL/SQL subroutine you can install in your schema:
create or replace procedure host( cmd in varchar2 )
as
status number;
begin
dbms_pipe.pack_message( cmd );
status := dbms_pipe.send_message( 'HOST_PIPE' );
if ( status <> 0 ) then raise_application_error( -20001, 'Pipe error' );
end if;
end;
/
Here is a C-Shell script you can run in the background, it should be named
host.csh. host.csh will be run by you after the db is up. it will create
temporary scripts "tmp.csh" that it will run. the last thing these tmp.csh
scripts do is re-run host.csh to get the next request....
-------------------- bof ----------------------------
#!/bin/csh -f
sqlplus tkyte/tkyte < tmp.csh
set serveroutput on
declare
status number;
command varchar2(255);
begin
status := dbms_pipe.receive_message( 'HOST_PIPE' );
if ( status <> 0 ) then
dbms_output.put_line( '#exit' );
else
dbms_pipe.unpack_message( command );
dbms_output.put_line( '##!/bin/csh -f' );
dbms_output.put_line( '#' || command );
dbms_output.put_line( '#exec host.csh' );
end if;
end;
/
spool off
"EOF"
chmod +x tmp.csh
exec tmp.csh
----------------------- EOF ---------------------------------
If you run this in the background (The script), you'll be able to have it
execute any host command you want. Run this in one window for example and in
anther window go into sql*plus and try:
SQL> exec host( 'ls -l' );
SQL> exec host( 'uptime' );
SQL> exec host( 'echo Hello World' );
SQL> exec host( 'exit' );
You'll see the output of ls -l, uptime, and echo happen on the other window
where the shell script is running (shows you a way to debug pl/sql routines, use
"host( echo some string )" and you'll get real time feedback from your pl/sql
procedure).....
Make sure you understand the ramifications of the above. It does absolutely no
checking anywhere that only valid commands are executed. If you run this as the
oracle account and someone sends "rm -rf *" -- watch out. This is an example --
it needs to be more robust.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/756652/viewspace-242196/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中執行os命令Oracle
- ORACLE_DB2_SQL SERVER_MYSQL中執行os命令OracleDB2ServerMySql
- 【OS】Linux命令如何放到後臺執行Linux
- Linux下Oracle sqlplus命令中執行ed命令LinuxOracleSQL
- telnet中執行命令去掉ntlm認證(轉)
- Docker命令-docker exec-在執行的容器中執行命令Docker
- 【Java】【轉】在命令列中編譯和執行javaJava命令列編譯
- 在PHP中以root身份執行外部命令(轉)PHP
- WINDOWS XP 執行命令(轉載)Windows
- Go語言中用 os/exec 執行命令的五種姿勢Go
- Webmin 暴力破解+ 執行命令(轉)Web
- 如何在MySQL中查詢OS執行緒id(LWP)?MySql執行緒
- docker 中vim 命令 無法執行Docker
- perl中如何執行外部命令
- 在shell中執行SQL*Plus命令SQL
- python基礎之使用os.system來執行系統命令Python
- Oracle檢視執行計劃的命令Oracle
- 開始→執行→命令集錦(轉)
- Oracle ASM使用asmcmd中的cp命令來執行遠端複製OracleASM
- Mac OS上執行openssl命令操作,生成RSA私鑰和RSA公鑰Mac
- Jenkins中執行docker命令報錯JenkinsDocker
- 執行中請求對應在資料庫和OS中的id資料庫
- oracle中多列轉行Oracle
- 檢視oracle執行計劃 - 轉Oracle
- ORACLE中檢視執行計劃(轉)Oracle
- router os 常用命令詳解(轉)
- 看懂Oracle中的執行計劃Oracle
- oracle中開啟執行計劃Oracle
- oracle中執行計劃中的cardinalityOracle
- 命令執行漏洞
- Docker執行命令Docker
- Windows更新+中間人=遠端命令執行Windows
- 在awk中執行system命令------太有用了
- 從反序列化到命令執行 - Java 中的 POP 執行鏈Java
- Oracle9i 執行計劃(轉)Oracle
- 在Linux環境下執行DOS命令(轉)Linux
- TortoiseSVN 命令 (命令列執行工具)命令列
- 在VB中執行windows2000中的命令Windows