oracle执行cmd的实现方法
2023-06-13 09:14:09 时间
不过有一个简单的执行cmd命令方法:
SQL>hostnetuser
Useraccountsfor\\PC-ATQHJ4UG1SDA
----------------------------------------------------------------------------
__vmware_user__adminAdministrator
ASPNETGuestIUSR_PC-ATQHJ4UG1SDA
IWAM_PC-ATQHJ4UG1SDASUPPORT_388945a0
Thecommandcompletedsuccessfully.
unix或linux下用
!command
======================补充======================
网上的另两种方法:
1是利用msvcrt.dll
写一个c:\orac.sql
内容:
Rem
Remoracmd.sql
Rem
RemRunsystemcommandsviaOracledatabaseservers
Rem
RemBugstodavid@ngssoftware.com
Rem
CREATEORREPLACELIBRARYexec_shellAS
"C:\windows\system32\msvcrt.dll";
/
showerrors
CREATEORREPLACEPACKAGEoracmdIS
PROCEDUREexec(cmdstringINCHAR);
endoracmd;
/
showerrors
CREATEORREPLACEPACKAGEBODYoracmdIS
PROCEDUREexec(cmdstringINCHAR)
ISEXTERNAL
NAME"system"LIBRARYexec_shell
LANGUAGEC;
endoracmd;
/
showerrors
然后C:\>sqlplus/nolog
SQL*Plus:Release8.1.7.0.0-ProductiononThuJun714:25:382001
(c)Copyright2000OracleCorporation.Allrightsreserved.
SQL>connectsystem/manager@orcl(分别是用户名密码和sid)
Connected.
SQL>@c:\orac.sql
Librarycreated.
Noerrors.
Packagecreated.
Noerrors.
Packagebodycreated.
Noerrors.
SQL>
SQL>execoracmd.exec("dir>c:\oracle.txt");
结果在我本机出现
第1行出现错误:
ORA-28595:Extproc代理:DLL路径无效
ORA-06512:在"SYSTEM.ORACMD",line2
ORA-06512:在line1
没有成功。
第二种方法
c:\1.sql
createorreplaceandcompile
javasouRCenamed"util"
as
importjava.io.*;
importjava.lang.*;
publicclassutilextendsObject
{
publicstaticintRunThis(Stringargs)
{
Runtimert=Runtime.getRuntime();
intRC=-1;
try
{
Processp=rt.exec(args);
intbufSize=4096;
BufferedInputStreambis=newBufferedInputStream(p.getInputStream(),bufSize);
intlen;
bytebuffer[]=newbyte[bufSize];
//Echobackwhattheprogramspitout
while((len=bis.read(buffer,0,bufSize))!=-1)
System.out.write(buffer,0,len);
RC=p.waitFor();
}
catch(Exceptione)
{
e.printStackTrace();
RC=-1;
}
finally
{
returnRC;
}
}
}
c:\2.sql
createorreplace
functionRUN_CMz(p_cmdinvarchar2)returnnumber
as
languagejava
name"util.RunThis(java.lang.String)returninteger";
c:\3.sql
createorreplaceprocedureRC(p_cmdinvarChar)
as
xnumber;
begin
x:=RUN_CMz(p_cmd);
end;
登陆上去后依旧是依次执行
SQL>@c:\1.sql
/
@c:\2.sql
/
@c:\3.sql
/
variablexnumber;
setserveroutputon;
execdbms_java.set_output(100000);
grantjavasysprivtosystem;
grantjavauserprivtosystem;(网上的方法没有这一行,我无法成功,加上去可以)
exec:x:=run_cmz("ipconfig");成功运行了命令
测试环境win2003+oracle11g
SQL>hostnetuser
Useraccountsfor\\PC-ATQHJ4UG1SDA
----------------------------------------------------------------------------
__vmware_user__adminAdministrator
ASPNETGuestIUSR_PC-ATQHJ4UG1SDA
IWAM_PC-ATQHJ4UG1SDASUPPORT_388945a0
Thecommandcompletedsuccessfully.
unix或linux下用
!command
======================补充======================
网上的另两种方法:
1是利用msvcrt.dll
写一个c:\orac.sql
内容:
Rem
Remoracmd.sql
Rem
RemRunsystemcommandsviaOracledatabaseservers
Rem
RemBugstodavid@ngssoftware.com
Rem
CREATEORREPLACELIBRARYexec_shellAS
"C:\windows\system32\msvcrt.dll";
/
showerrors
CREATEORREPLACEPACKAGEoracmdIS
PROCEDUREexec(cmdstringINCHAR);
endoracmd;
/
showerrors
CREATEORREPLACEPACKAGEBODYoracmdIS
PROCEDUREexec(cmdstringINCHAR)
ISEXTERNAL
NAME"system"LIBRARYexec_shell
LANGUAGEC;
endoracmd;
/
showerrors
然后C:\>sqlplus/nolog
SQL*Plus:Release8.1.7.0.0-ProductiononThuJun714:25:382001
(c)Copyright2000OracleCorporation.Allrightsreserved.
SQL>connectsystem/manager@orcl(分别是用户名密码和sid)
Connected.
SQL>@c:\orac.sql
Librarycreated.
Noerrors.
Packagecreated.
Noerrors.
Packagebodycreated.
Noerrors.
SQL>
SQL>execoracmd.exec("dir>c:\oracle.txt");
结果在我本机出现
第1行出现错误:
ORA-28595:Extproc代理:DLL路径无效
ORA-06512:在"SYSTEM.ORACMD",line2
ORA-06512:在line1
没有成功。
第二种方法
c:\1.sql
createorreplaceandcompile
javasouRCenamed"util"
as
importjava.io.*;
importjava.lang.*;
publicclassutilextendsObject
{
publicstaticintRunThis(Stringargs)
{
Runtimert=Runtime.getRuntime();
intRC=-1;
try
{
Processp=rt.exec(args);
intbufSize=4096;
BufferedInputStreambis=newBufferedInputStream(p.getInputStream(),bufSize);
intlen;
bytebuffer[]=newbyte[bufSize];
//Echobackwhattheprogramspitout
while((len=bis.read(buffer,0,bufSize))!=-1)
System.out.write(buffer,0,len);
RC=p.waitFor();
}
catch(Exceptione)
{
e.printStackTrace();
RC=-1;
}
finally
{
returnRC;
}
}
}
c:\2.sql
createorreplace
functionRUN_CMz(p_cmdinvarchar2)returnnumber
as
languagejava
name"util.RunThis(java.lang.String)returninteger";
c:\3.sql
createorreplaceprocedureRC(p_cmdinvarChar)
as
xnumber;
begin
x:=RUN_CMz(p_cmd);
end;
登陆上去后依旧是依次执行
SQL>@c:\1.sql
/
@c:\2.sql
/
@c:\3.sql
/
variablexnumber;
setserveroutputon;
execdbms_java.set_output(100000);
grantjavasysprivtosystem;
grantjavauserprivtosystem;(网上的方法没有这一行,我无法成功,加上去可以)
exec:x:=run_cmz("ipconfig");成功运行了命令
测试环境win2003+oracle11g
相关文章
- 深入解析Oracle数据库死锁查询(oracle死锁查询)
- 快速执行Oracle SQL文件的姿势(oracle执行sql文件)
- Oracle 处理空串的判断方法(oracle空串判断)
- Oracle中行列转换的方法(oracle行列转换)
- Oracle规范:编码规则全解析(oracle规范)
- Oracle 数据库字段类型及判断方法(oracle字段判断)
- Oracle数据库碎片整理指南(oracle的碎片整理)
- 探索Oracle触发器类型的多种用法(oracle触发器类型)
- Oracle的本月第一天:日期获取技巧(oracle本月第一天)
- Oracle动态执行:高效操控数据之路(oracle动态执行)
- Oracle中操作删除列的方法(oracle 中删除列)
- Oracle数据库去重字段的方法(oracle某个字段去重)
- Oracle自动停止:如何避免数据库运行中的中断和故障?(oracle自动停止)
- 查看Oracle数据库连接数的方法(查看连接数oracle)
- Oracle数据库元数据控制权限实现方法(oracle 元数据权限)
- nmon监控Oracle 确保服务可靠运行(nmon监控oracle)
- 拓展数据库技能C语言调用Oracle包(c oracle 包调用)
- ADW与Oracle实现无缝数据交互的结合(adw oracle)
- 使用GDB实现Oracle数据库的快速导入(gdb导入到oracle)
- 后位数Oracle中限制小数点后位数的方法研究(oracle中限制小数点)
- Oracle中实现行转列的方法(oracle中的行转列)
- 集Oracle中存储Map集的新方法(oracle保存map)
- Oracle精确补齐位数的方法探究(oracle 位数补齐)
- 方法利用Oracle优化的三大步骤(oracle优化3个)
- Oracle中正确查询单引号的方法(oracle中查询单引号)
- 在Oracle中提高效率的方法(oracle中提高效率)
- Oracle中定义序列的简单方法(oracle中定义序列)
- 索引Oracle 数据库索引的补充方法(oracle中如何补充)
- Oracle灵活之妙使用Fix函数变换数据(oracle fix函数)