リモート操作

O-Analyzerは「O-Analyzerのダウンロード」から無償でダウンロードできます。ぜひご利用ください。

リモート操作画面1 リモート操作画面2


使用方法

初回のみ「準備」タブからストアドプロシージャの作成及び、実行するOSコマンドの権限付与を実施した上で「実行」タブで 実行するOSコマンドを入力して実行します。

注意

・本機能はJAVAストアドプロシージャを使用するためORACLE JVMがインストールされている必要があります。
・OSコマンドが出力した標準出力及び標準エラーはサーバプロセスのPGA上に一度すべて格納した後に取り出されるため大量の出力を伴うコマンドを実行するとメモリを多く消費します。
・標準出力及び標準エラーの取出しはODP.netのみバインド配列で取得できるため高速になっています。
・必ず処理が一定時間で終わるOSコマンドを実行してください。Windowsのメモ帳のように終了にはユーザ側の作業が必要なコマンドを実行してしまうとサーバ側でプロセスを強制停止しなくてはいけなくなります。

項目説明(0 準備タブ)

項目名 説明
1 JAVAプロシージャの作成 グループボックス内の作成ボタンを押すと設定した名前のJAVAストアドプロシージャが作成されます
2 JAVAプロシージャのコールファンクションの作成 グループボックス内の作成ボタンを押すと設定した名前のJAVAプロシージャをコールするファンクションが作成されます
3 JAVAの権限付与 実行したいOSコマンドに対して以下のようなコマンドでJAVAの権限を与えます。本画面から登録することはできないためsql実行画面やsqlplus等から設定してください。
--UNIX系の場合
call dbms_java.grant_permission('<権限付与先スキーマ>', 'SYS:java.io.FilePermission','/bin/grep','execute');
call dbms_java.grant_permission('<権限付与先スキーマ>', 'SYS:java.io.FilePermission','/usr/bin/tail','execute');
--Windowsの場合
call dbms_java.grant_permission('<権限付与先スキーマ>', 'SYS:java.io.FilePermission','C:\WINDOWS\system32\cmd.exe','execute');
call dbms_java.grant_permission('<権限付与先スキーマ>', 'SYS:java.io.FilePermission','C:\WINDOWS\system32\findstr.exe','execute');

--9.2までは以下も必要です
call dbms_java.grant_permission('<権限付与先スキーマ>', 'SYS:java.lang.RuntimePermission','writeFileDescriptor', '' );
call dbms_java.grant_permission('<権限付与先スキーマ>', 'SYS:java.lang.RuntimePermission','readFileDescriptor', '' );

【参考】権限の剥奪
call dbms_java.revoke_permission('<権限付与先スキーマ>', 'SYS:java.io.FilePermission','E:\program\SetEnvironment.exe','read,execute');

※「*」を指定すると指定したディレクトリ配下のすべてのファイルが対象になります
※「-」を指定すると指定したディレクトリ配下のすべてのファイルとディレクトリが対象になります
ex)call dbms_java.grant_permission('<権限付与先スキーマ>', 'SYS:java.io.FilePermission','/bin/*','execute');
現在の権限の設定は「確認」ボタンを押すと確認できます。

項目説明(1 実行タブ)

項目名 説明
定型処理表示 選択すると指定した処理を行うOSコマンドが表示されます
ファンクション名 準備タブで作成したファンクション名を入力します。
サーバー側エンコード OSコマンドが出力する標準出力及び標準エラーと同じ文字コードを指定します。
実行コマンド(フルパス) 実行するOSコマンドを入力します。コマンドはフルパスで入力する必要があります

エラーメッセージ

・該当のデータベースにJVMがインストールされていなかった場合
JVMのインストールはDBCAから追加インストールするか、$ORACLE_HOME\javavm\install\initjvm.sqlを実行して手動作成することでインストールできます。
ORA-29538: Javaがインストールされていません。
・指定したコマンドが見つからなかった場合
StackTrace:
java.io.IOException: Exception during creation of the process: java.io.IOException:XXXX
	at java.lang.OracleProcess.start(OracleProcess.java)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java)
	at java.lang.Runtime.exec(Runtime.java:591)
	at java.lang.Runtime.exec(Runtime.java)
	at java.lang.Runtime.exec(Runtime.java:326)
	at J_EXECUTE_OS_CMD.execCommand(J_EXECUTE_OS_CMD)
ErrorMessage:
Exception during creation of the process: java.io.IOException:XXXX
・JAVAの権限が与えられていなかった場合
java.security.AccessControlException: the Permission (java.io.FilePermission J:\program\JDK1.6.0_23\bin\java.exe execute) has not been granted to TEST. The PL/SQL to grant this is dbms_java.grant_permission( 'TEST', 'SYS:java.io.FilePermission', 'J:\program\JDK1.6.0_23\bin\java.exe', 'execute' )
	at java.security.AccessControlContext.checkPermission(AccessControlContext.java)
	at java.security.AccessController.checkPermission(AccessController.java)
	at java.lang.SecurityManager.checkPermission(SecurityManager.java)
	at oracle.aurora.rdbms.SecurityManagerImpl.checkPermission(SecurityManagerImpl.java)
	at java.lang.SecurityManager.checkExec(SecurityManager.java)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java)
	at java.lang.Runtime.exec(Runtime.java:591)
	at java.lang.Runtime.exec(Runtime.java)
	at java.lang.Runtime.exec(Runtime.java:326)
	at J_EXECUTE_OS_CMD.execCommand(J_EXECUTE_OS_CMD)
ErrorMessage:
the Permission (java.io.FilePermission J:\program\JDK1.6.0_23\bin\java.exe execute) has not been granted to TEST. The PL/SQL to grant this is dbms_java.grant_permission( 'TEST', 'SYS:java.io.FilePermission', 'J:\program\JDK1.6.0_23\bin\java.exe', 'execute' )
・指定したエンコードでは解釈不能な文字コードが見つかった場合
なお、データベースのキャラクタセットとクライアント側のNLS_LANGが異なる環境では複数の文字コードがアラートログに格納される場合があるため、このエラーが発生します。
sun.io.MalformedInputException
	at sun.io.ByteToCharUTF8.convert(ByteToCharUTF8.java)
	at sun.nio.cs.StreamDecoder$ConverterSD.convertInto(StreamDecoder.java)
	at sun.nio.cs.StreamDecoder$ConverterSD.implRead(StreamDecoder.java)
	at sun.nio.cs.StreamDecoder.read(StreamDecoder.java)
	at java.io.InputStreamReader.read(InputStreamReader.java)
	at java.io.BufferedReader.fill(BufferedReader.java)
	at java.io.BufferedReader.readLine(BufferedReader.java)
	at java.io.BufferedReader.readLine(BufferedReader.java)
	at J_EXECUTE_OS_CMD.execCommand(J_EXECUTE_OS_CMD)
ErrorMessage:
null
★ORACLE案件承ります