+ -
当前位置:首页 → 问答吧 → oracle调用solaris(UNIX)系统指令

oracle调用solaris(UNIX)系统指令

时间:2010-08-25

来源:互联网

我有一台数据库服务器,用户权限为DBA。

环境是solaris + oracle 9i


远程登录oracle以后

我想执行系统命令, 听说可以使用存储过程调用, 但是按照网上的方法并没有成功~




在这里请教大家了~ 谢谢~

作者: h4x0r   发布时间: 2010-08-25

host system_command

作者: renxiao2003   发布时间: 2010-08-25

楼上这位大哥

sql>   host ls
无效啊

作者: h4x0r   发布时间: 2010-08-25

在ORACLE的JAVA存储过程中调用系统命令






CREATE OR REPLACE AND RESOLVE JAVA SOURCE NAMED "syscmd" AS

import java.io.*;

import java.lang.*;

import oracle.sql.*;

public class syscmd extends Object{

        public static void runcmd(int bufSize, String command, String result[]){

       //String result;

       try {

           Process p;

           p = Runtime.getRuntime().exec(command);

           BufferedInputStream bis=new BufferedInputStream(p.getInputStream(),bufSize);

           byte buffer[]=new byte[bufSize];

           while(bis.read(buffer,0,bufSize)!=-1);

              //System.out.write(buffer,0,len);

           p.waitFor();

       }catch (Exception e){

           e.printStackTrace();

       }

    }

}

/




CREATE OR REPLACE procedure syscmd( bufsize in number, cmd in varchar2, result out varchar2) as

language java

name 'syscmd.runcmd(int, java.lang.String, java.lang.String[])';

/




begin

dbms_java.grant_permission('SOC_USER','java.io.FilePermission','/bin/vmstat', 'execute');

dbms_java.grant_permission('SOC_USER','java.io.FilePermission','/bin/ps', 'execute');

dbms_java.grant_permission('SOC_USER','java.io.FilePermission','/bin/df', 'execute');

dbms_java.grant_permission('SOC_USER','java.io.FilePermission','/bin/sh', 'execute');

dbms_java.grant_permission('SOC_USER', 'java.lang.RuntimePermission', '*', 'writeFileDescriptor');

end;

/



这里赋予权限时,要写全路径,才成成功调用。

如:
CREATE OR REPLACE procedure sysinfo_test as

res varchar2(256);

begin

syscmd(2000,'/bin/vmstat',res);

dbms_output.put_line(res);

end;

/

作者: h4x0r   发布时间: 2010-08-25

下载 (76.96 KB)
2010-08-25 15:51



结果报上面的错误。

作者: h4x0r   发布时间: 2010-08-25

如果用sqlplus登录remote的DB时,host是不可能执行remote的OS command的,host的调用的local的

作者: doni   发布时间: 2010-08-25