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/18921899/viewspace-1017130/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle中執行os命令(轉)Oracle
- ORACLE_DB2_SQL SERVER_MYSQL中執行os命令OracleDB2ServerMySql
- 【OS】Linux命令如何放到後臺執行Linux
- Linux下Oracle sqlplus命令中執行ed命令LinuxOracleSQL
- Docker命令-docker exec-在執行的容器中執行命令Docker
- Go語言中用 os/exec 執行命令的五種姿勢Go
- 如何在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中執行計劃中的cardinalityOracle
- 命令執行漏洞
- Docker執行命令Docker
- Windows更新+中間人=遠端命令執行Windows
- 在awk中執行system命令------太有用了
- 從反序列化到命令執行 - Java 中的 POP 執行鏈Java
- TortoiseSVN 命令 (命令列執行工具)命令列
- 在VB中執行windows2000中的命令Windows
- Oracle中job無法自動執行Oracle
- 從OS中kill ORACLE死鎖程式Oracle
- 在 Ruby 中執行 Shell 命令的 6 種方法
- 在PL/SQL中執行作業系統命令SQL作業系統
- telnet中執行命令去掉ntlm認證(轉)
- SQLPLUS檢視oracle sql執行計劃命令SQLOracle
- Java執行cmd命令Java
- 遠端執行命令
- 命令列執行Nunit命令列
- .net執行cmd命令
- 如何執行maven和執行maven的命令。Maven
- 從Java到JVM到OS執行緒睡眠JavaJVM執行緒