oracle執(zhí)行cmd的實(shí)現(xiàn)方法
更新時(shí)間:2009年04月20日 14:51:39 作者:
裝了一個(gè)oracle db11g,于是想試一下網(wǎng)上流傳的在sqlplus中執(zhí)行cmd的一些命令,也不知怎么的,沒(méi)一個(gè)好用的,可能是網(wǎng)上轉(zhuǎn)來(lái)轉(zhuǎn)去的轉(zhuǎn)錯(cuò)了.
不過(guò)有一個(gè)簡(jiǎn)單的執(zhí)行cmd命令方法:
SQL> host net user
User accounts for \\PC-ATQHJ4UG1SDA
----------------------------------------------------------------------------
__vmware_user__ admin Administrator
ASPNET Guest IUSR_PC-ATQHJ4UG1SDA
IWAM_PC-ATQHJ4UG1SDA SUPPORT_388945a0
The command completed successfully.
unix或linux下用
! command
======================補(bǔ)充======================
網(wǎng)上的另兩種方法:
1是利用msvcrt.dll
寫一個(gè)c:\orac.sql
內(nèi)容:
Rem
Rem oracmd.sql
Rem
Rem Run system commands via Oracle database servers
Rem
Rem Bugs to david@ngssoftware.com
Rem
CREATE OR REPLACE LIBRARY exec_shell AS
'C:\windows\system32\msvcrt.dll';
/
show errors
CREATE OR REPLACE PACKAGE oracmd IS
PROCEDURE exec (cmdstring IN CHAR);
end oracmd;
/
show errors
CREATE OR REPLACE PACKAGE BODY oracmd IS
PROCEDURE exec(cmdstring IN CHAR)
IS EXTERNAL
NAME "system" LIBRARY exec_shell
LANGUAGE C;
end oracmd;
/
show errors
然后C:\>sqlplus /nolog
SQL*Plus: Release 8.1.7.0.0 - Production on Thu Jun 7 14:25:38 2001
(c) Copyright 2000 Oracle Corporation. All rights reserved.
SQL> connect system/manager@orcl (分別是用戶名密碼和sid)
Connected.
SQL> @c:\orac.sql
Library created.
No errors.
Package created.
No errors.
Package body created.
No errors.
SQL>
SQL> exec oracmd.exec ('dir > c:\oracle.txt');
結(jié)果在我本機(jī)出現(xiàn)
第 1 行出現(xiàn)錯(cuò)誤:
ORA-28595: Extproc 代理: DLL 路徑無(wú)效
ORA-06512: 在 "SYSTEM.ORACMD", line 2
ORA-06512: 在 line 1
沒(méi)有成功。
第二種方法
c:\1.sql
create or replace and compile
java souRCe named "util"
as
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int RC = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
// Echo back what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -1;
}
finally
{
return RC;
}
}
}
c:\2.sql
create or replace
function RUN_CMz(p_cmd in varchar2) return number
as
language java
name 'util.RunThis(java.lang.String) return integer';
c:\3.sql
create or replace procedure RC(p_cmd in varChar)
as
x number;
begin
x := RUN_CMz(p_cmd);
end;
登陸上去后依舊是依次執(zhí)行
SQL> @c:\1.sql
/
@c:\2.sql
/
@c:\3.sql
/
variable x number;
set serveroutput on;
exec dbms_java.set_output(100000);
grant javasyspriv to system;
grant javauserpriv to system;(網(wǎng)上的方法沒(méi)有這一行,我無(wú)法成功,加上去可以)
exec :x:=run_cmz('ipconfig'); 成功運(yùn)行了命令
測(cè)試環(huán)境win2003+oracle11g
SQL> host net user
User accounts for \\PC-ATQHJ4UG1SDA
----------------------------------------------------------------------------
__vmware_user__ admin Administrator
ASPNET Guest IUSR_PC-ATQHJ4UG1SDA
IWAM_PC-ATQHJ4UG1SDA SUPPORT_388945a0
The command completed successfully.
unix或linux下用
! command
======================補(bǔ)充======================
網(wǎng)上的另兩種方法:
1是利用msvcrt.dll
寫一個(gè)c:\orac.sql
內(nèi)容:
Rem
Rem oracmd.sql
Rem
Rem Run system commands via Oracle database servers
Rem
Rem Bugs to david@ngssoftware.com
Rem
CREATE OR REPLACE LIBRARY exec_shell AS
'C:\windows\system32\msvcrt.dll';
/
show errors
CREATE OR REPLACE PACKAGE oracmd IS
PROCEDURE exec (cmdstring IN CHAR);
end oracmd;
/
show errors
CREATE OR REPLACE PACKAGE BODY oracmd IS
PROCEDURE exec(cmdstring IN CHAR)
IS EXTERNAL
NAME "system" LIBRARY exec_shell
LANGUAGE C;
end oracmd;
/
show errors
然后C:\>sqlplus /nolog
SQL*Plus: Release 8.1.7.0.0 - Production on Thu Jun 7 14:25:38 2001
(c) Copyright 2000 Oracle Corporation. All rights reserved.
SQL> connect system/manager@orcl (分別是用戶名密碼和sid)
Connected.
SQL> @c:\orac.sql
Library created.
No errors.
Package created.
No errors.
Package body created.
No errors.
SQL>
SQL> exec oracmd.exec ('dir > c:\oracle.txt');
結(jié)果在我本機(jī)出現(xiàn)
第 1 行出現(xiàn)錯(cuò)誤:
ORA-28595: Extproc 代理: DLL 路徑無(wú)效
ORA-06512: 在 "SYSTEM.ORACMD", line 2
ORA-06512: 在 line 1
沒(méi)有成功。
第二種方法
c:\1.sql
create or replace and compile
java souRCe named "util"
as
import java.io.*;
import java.lang.*;
public class util extends Object
{
public static int RunThis(String args)
{
Runtime rt = Runtime.getRuntime();
int RC = -1;
try
{
Process p = rt.exec(args);
int bufSize = 4096;
BufferedInputStream bis =new BufferedInputStream(p.getInputStream(), bufSize);
int len;
byte buffer[] = new byte[bufSize];
// Echo back what the program spit out
while ((len = bis.read(buffer, 0, bufSize)) != -1)
System.out.write(buffer, 0, len);
RC = p.waitFor();
}
catch (Exception e)
{
e.printStackTrace();
RC = -1;
}
finally
{
return RC;
}
}
}
c:\2.sql
create or replace
function RUN_CMz(p_cmd in varchar2) return number
as
language java
name 'util.RunThis(java.lang.String) return integer';
c:\3.sql
create or replace procedure RC(p_cmd in varChar)
as
x number;
begin
x := RUN_CMz(p_cmd);
end;
登陸上去后依舊是依次執(zhí)行
SQL> @c:\1.sql
/
@c:\2.sql
/
@c:\3.sql
/
variable x number;
set serveroutput on;
exec dbms_java.set_output(100000);
grant javasyspriv to system;
grant javauserpriv to system;(網(wǎng)上的方法沒(méi)有這一行,我無(wú)法成功,加上去可以)
exec :x:=run_cmz('ipconfig'); 成功運(yùn)行了命令
測(cè)試環(huán)境win2003+oracle11g
您可能感興趣的文章:
- Oracle數(shù)據(jù)庫(kù)常用命令整理(實(shí)用方法)
- Oracle利用errorstack追蹤tomcat報(bào)錯(cuò)ORA-00903 無(wú)效表名的問(wèn)題
- Oracle按身份證號(hào)得到省市、性別、年齡的示例代碼
- Windows10安裝Oracle19c數(shù)據(jù)庫(kù)詳細(xì)記錄(圖文詳解)
- Shell腳本連接oracle數(shù)據(jù)庫(kù)的實(shí)現(xiàn)代碼
- Oracle數(shù)據(jù)庫(kù)服務(wù)器修改操作系統(tǒng)時(shí)間的注意事項(xiàng)詳解
- Linux一鍵部署oracle安裝環(huán)境腳本(推薦)
- CMD操作oracle數(shù)據(jù)導(dǎo)庫(kù)過(guò)程圖解
相關(guān)文章
oracle中函數(shù) trunc(),round(),ceil(),floor的使用詳解
這篇文章主要介紹了oracle中函數(shù) trunc(),round(),ceil(),floor的使用詳解的相關(guān)資料,需要的朋友可以參考下2017-03-03
oracle導(dǎo)出sql語(yǔ)句的結(jié)果集和保存執(zhí)行的sql語(yǔ)句(深入分析)
本篇文章是對(duì)oracle導(dǎo)出sql語(yǔ)句的結(jié)果集與保存執(zhí)行的sql語(yǔ)句進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05
Oracle?exadata存儲(chǔ)節(jié)點(diǎn)更換內(nèi)存操作及報(bào)錯(cuò)處理方法
在進(jìn)行Oracle?Exadata巡檢時(shí),發(fā)現(xiàn)cell節(jié)點(diǎn)內(nèi)存報(bào)錯(cuò),需確認(rèn)內(nèi)存PN號(hào)及大小,并更換備件,這篇文章主要介紹了Oracle?exadata存儲(chǔ)節(jié)點(diǎn)更換內(nèi)存操作及報(bào)錯(cuò)處理的相關(guān)資料,需要的朋友可以參考下2024-10-10
Oracle創(chuàng)建帶有參數(shù)的視圖代碼介紹
這篇文章主要介紹了Oracle創(chuàng)建帶有參數(shù)的視圖代碼介紹,簡(jiǎn)介地介紹了創(chuàng)建方法,具有一定參考價(jià)值,需要的朋友可以了解下。2017-09-09
Oracle 11G數(shù)據(jù)庫(kù)審計(jì)監(jiān)控設(shè)置指南
Oracle 11G數(shù)據(jù)庫(kù)審計(jì)監(jiān)控涉及創(chuàng)建獨(dú)立表空間、查看審計(jì)信息、遷移表空間、開(kāi)啟審計(jì)及審計(jì)維護(hù)等步驟,合理規(guī)劃審計(jì)表空間有助于管理審計(jì)數(shù)據(jù),避免影響系統(tǒng)表空間,審計(jì)監(jiān)控涵蓋審計(jì)數(shù)據(jù)遷移、自動(dòng)清理、權(quán)限分配、查詢審計(jì)類型等方面,確保數(shù)據(jù)庫(kù)安全性能2024-10-10
oracle in長(zhǎng)度限制的兩個(gè)快速解決方法
這篇文章主要給大家介紹了關(guān)于oracle in長(zhǎng)度限制的兩個(gè)快速解決方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

