oracle调用solaris(UNIX)系统指令
时间:2010-08-25
来源:互联网
我有一台数据库服务器,用户权限为DBA。
环境是solaris + oracle 9i
远程登录oracle以后
我想执行系统命令, 听说可以使用存储过程调用, 但是按照网上的方法并没有成功~
在这里请教大家了~ 谢谢~
环境是solaris + oracle 9i
远程登录oracle以后
我想执行系统命令, 听说可以使用存储过程调用, 但是按照网上的方法并没有成功~
在这里请教大家了~ 谢谢~
作者: h4x0r 发布时间: 2010-08-25
host system_command
作者: renxiao2003 发布时间: 2010-08-25
楼上这位大哥
sql> host ls
无效啊
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;
/
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

结果报上面的错误。
作者: h4x0r 发布时间: 2010-08-25
如果用sqlplus登录remote的DB时,host是不可能执行remote的OS command的,host的调用的local的
作者: doni 发布时间: 2010-08-25
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28