Stored Procedure で host command Tweet
随分前のネタ(Oracle9i R2は、TurboLinux8 Enterprise Server - Powered by United Linux 1.0と Oracle10g R1 は、MacOSX Pantherの頃なので2005年くらいに公開するタイミングを逃していたネタ)なんですが、検索キーワードやOTN-Jなどでもたまに見かけるので、昔のネタに、Oracle10g R2 for Windowsの例も付け加えて公開することにした。
どんなネタかって? まずは実行結果から。
見ての通り、ストアドプロシージャからDOSコマンドのdirや、shellコマンドのlsを実行してます。
Oracleのストアドプロシージャは、PL/SQL以外に、javaやCでを書くこともできます。
以下の例は、javaストアドプロシージャで DOSコマンドのdirや、shellコマンドのlsを実行しています。
セキュリティ上、なんでもかんでも実行できるようにしたりするのはお勧めしませんが、以前、負荷テストで使ったことがあります。
負荷テスト開始のタイミングで、sarを実行し、テスト終了時に停止させるshellスクリプトを実行してましたね。 いつ終わるかはっきりしないような負荷テストを自動起動し、システム側の状態も同時に記録するといったことを行っていました。
ただ、最近は、DBMS_SCHEDULERパッケージがあるので自前で作らなくてできるとは思いますが。。まぁ、こんなことも出来るんだよね。 っていうことを知ってても損はないんじゃないかと思います。
● Linux (United Linux 1.0 なつかしい〜。)
SCOTT> conn scott@zion
パスワードを入力してください:
接続されました。
SCOTT> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE 9.2.0.1.0 Production
TNS for Linux: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production
SCOTT>
SCOTT>
SCOTT> set serveroutput on
SCOTT> exec dbms_java.set_output(20000);
PL/SQLプロシージャが正常に完了しました。
SCOTT> exec ls('/tmp');
UnitedLinux-1.0-SP-3
i830-20030120-i386-linux.tar.gz
turbonetcfg-routing.log
turbonetcfg.log
PL/SQLプロシージャが正常に完了しました。
SCOTT>
● MacOSX 10.3 Panther
SCOTT> conn scott@panther
パスワードを入力してください:
接続されました。
SCOTT> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 - Prod
PL/SQL Release 10.1.0.3.0 - Production
CORE 10.1.0.3.0 Production
TNS for MacOS X Server: Version 10.1.0.3.0 - Production
NLSRTL Version 10.1.0.3.0 - Production
SCOTT> set serveroutput on
SCOTT> exec dbms_java.set_output(20000);
PL/SQLプロシージャが正常に完了しました。
SCOTT> exec ls('/Users/oracle');
Desktop
Documents
Library
Movies
Music
Pictures
Public
Sites
jdevhome
PL/SQLプロシージャが正常に完了しました。
SCOTT>
● Windows XP Professional
SCOTT> conn scott@catfish
パスワードを入力してください:
接続されました。
SCOTT>
SCOTT>
SCOTT>
SCOTT> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Prod
PL/SQL Release 10.2.0.2.0 - Production
CORE 10.2.0.2.0 Production
TNS for 32-bit Windows: Version 10.2.0.2.0 - Production
NLSRTL Version 10.2.0.2.0 - Production
SCOTT>
SCOTT> set serveroutput on
SCOTT> exec dbms_java.set_output(20000);
PL/SQLプロシージャが正常に完了しました。
SCOTT> exec ls('c:¥temp');
apex_3.0
apex_3.0.zip
jdevstudio10131.zip
version.log
PL/SQLプロシージャが正常に完了しました。
SCOTT>
ってとこですね。ほんとにお遊びでした。(笑)
ということで、次回はどうやってOracleのPL/SQL、java、ホストコマンドで遊んでいるかお見せします。
| 固定リンク | 0
コメント