2013年12月 9日 (月)

no ocijdbc11 in java.library.path on OS X Mavericks

JPOUG Advent Calendar 2013、9日目のエントリー、かつ、チューニングネタではなく Java on OS X の話という変化球 :) です。

OS X版Oracle SQL DeveloperやOracle JDeveloperで、OCI/Thick JDBCを利用しようとして以下のようなメッセージに遭遇したら...みなさんどうしてるのだろう? 

no ocijdbc11 in java.library.path

と考えだしたら眠れなくなったので、役に立つのか、たたないのかわからないけど書いておきます

私は、Oracle SQL DeveloperやOracle JDeveloperの起動シェルでDYLD_LIBRARY_PATHなどの環境変数をセットすることで対処しています。
(今となってはこれが楽だと思います。 environment.plistでなんとかできた時代もありましたけど...いまは使えないしね)

no ocijdbc11 in java.library.pathとなっている状態から解決するまでの操作をYouTubeで....


映像では、ユーザーのホームディレクトリーにOracle向け環境変数設定ファイル (この例では、oracleenvというファイルを作成してあります) を作成しておき、その設定ファイルをOracle SQL Developer等の起動シェルで読み込ませて問題を解決するまでの操作を行っています。

主演
MacBook Air (mid2013)

ホストOS、その他

  • OS X 10.9 Maveriks
  • Oracle Instant Client 11g 11.2.0.3.0 for OS X (64bit)
  • Terminal 2.4
  • VirtualBox 4.3.4 for OS X
  • Oracle SQL Developer 4.0.0 for OS X
  • Oracle JDeveloper12c 12.1.2.0.0 Studio Edition Generic

ゲストOS、その他

  • Oracle Linux Server 6.4 x86_64
  • Oracle Database 12c EE R1 for Linux x86_64

映像では見づらい方向けの解説。

事前にOracle向け設定ファイルを該当ユーザーのホームディレクトリーに作成しておきます。
この例では、oracleenvとして作成しました。(不過視ファイルとしてもよいかもしれません。)
Oracle_environment_variables


Oracle SQL Developer 4.0 for OS X

「Oracle SQL Developerメニュー」→「Preference...」を選択
002_sdev_004

「データベース」→「拡張」→「OCI/Thickドライバの使用」チェックボックス」をチェック→「テスト」ボタンをクリック
002_sdev_005

no ocijdbc11 in java.library.pathエラーとなる(ライブラリーへのパスが通ってないので当然ですよね)
002_sdev_006

「Finder」→「アプリケーション」→「SQL Developer」→「右クリック」→ポップアップメニューの「パッケージの内容表示」
002_sdev_009

「Contents」→「MacOS」→「sqldeveloper.sh」を選択
002_sdev_010

ポップアップメニュー「このアプリケーションで開く」でお好きなテキストエティタを選択
002_sdev_012

oracle向け環境設定ファイルを読み込ませるように編集。この例ではユーザーホームディレクトリにある oracleenvというファイルを読み込むように変更。
002_sdev_013

Oracle SQL Developer 4.0を再起動しOCI/Thick JDBCドライバーで接続可能か再確認
002_sdev_014

002_sdev_015


Oracle JDeveloper12c 12.1.2.0.0 Studio Edition Generic

「データベース接続編集」ダイアログの「接続のテスト」ボタンをクリックするとno ocijdbc11 in java.library.pathエラー(これもパスが通ってないのが原因なので...)
003_jdev_002

003_jdev_003

「Finder」でOracle JDeveloper12cのインストールディレクトリーからアプリケーション「JDeveloper」を右クリック
→ポップアップメニューの「パッケージの内容を表示」を選択

003_jdev_004

「Contents」→「MacOS」→「JDeveloper」を選択して右クリック→「このアプリケーションを開く」でお好きなテキストエディタを選択
003_jdev_005

oracle向け環境設定ファイルを読み込ませるように編集。この例ではユーザーホームディレクトリにある oracleenvというファイルを読み込むように変更。
003_jdev_006

Oracle JDeveloper12cを再起動し、OCI/Thick JDBCドライバーで接続可能か再確認
003_jdev_007

003_jdev_008


明日は、@dekasasaki さんの担当です。引き続き、JPOUG Advent Calendar 2013をお楽しみください。:)


| | コメント (0) | トラックバック (0)

2009年3月30日 (月)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #6(おまけ)

Oracle JDeveloper 11gのQuickStartからオンラインマニュアルへジャンプできなくても大した問題ではないのですが・・・とりあえず書いときます。
QuickStartからオンラインドキュメントへジャンプできるようになっているようなのだが、クリックすると、「ブラウザが見つかりません」と言われ、「了解」ボタンをクリックすると開く「ブラウザ選択」でSafariを選んでも「ブラウザが見つかりません」と言われる。ン〜〜。という状態、QuickStartにはPerferenceも無いようなのでFirefoxで試すことはしてない・・・面倒なのとQUickStartから開けなくても困らないから。というの理由で。

1

QuickStartのオンラインドキュメントのアクセスをクリックすると「ブラウザが見つかりません」。。なんで?
2

「了解」ボタンをクリックしてブラウザ(この例ではSafari)を選択して.....と
3

でもやっぱりブラウザが見つかりません・・・・なんですよね。OTNのドキュメントダウンロードすればいいのでこれ以上は調べてないですが・・・
2





バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #4
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #5

| | コメント (0) | トラックバック (0)

2009年3月27日 (金)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #5

PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の最終回。

前回はJDeveloper 11gを起動して超簡単な動作確認までだった。

今回はBEA Weblogic Server改めOracle WebLogic Server 10.3のコンフィギュレーションから起動確認まで


QuickStartから「Oracle ADFのドメインコンフィギュレーション」をクリック
(2009/4/11画像が間違っていたので入れ替えた)

Jdev11g_powerpc_macosx104_018

見慣れない(当然ですが)スプラッシュが..
Jdev11g_powerpc_macosx104_030

特に変更するところもなくインストーラのデフォルト設定でコンフィギュレーションした。この例で管理ユーザ名はweblogicにしたが、scottにもできるよ。w
Jdev11g_powerpc_macosx104_031

Jdev11g_powerpc_macosx104_032

Jdev11g_powerpc_macosx104_033

Jdev11g_powerpc_macosx104_034

Jdev11g_powerpc_macosx104_035

ドメインを入力(この例ではmac_de_oracle)して・・・・
Jdev11g_powerpc_macosx104_036

Jdev11g_powerpc_macosx104_037
ということで無事コンフィギュレーション終了。

続いて、Oracle Weblogic Server 10.3を起動してAdministration Consoleへログインできることを確認。

その前に 山本祐介さんのWebLogic Server 10g Release 3 を Mac OSX にインストール に記載されているSetDomainEnv.shのJAVA_VENDORの変更を行う。

G5Server:/Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin discus$ diff setDomainEnv.sh.org setDomainEnv.sh
89c89,90
< JAVA_VENDOR="Unknown"
---
> # JAVA_VENDOR="Unknown" #modified at 2009/3/18
> JAVA_VENDOR="Sun"

G5Server:˜ discus$
G5Server:˜ discus$ cd /Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin
G5Server:/Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin discus$ ./startWebLogic.sh
/Volumes/DiscusWork/Development/Oracle/Middleware/user_projects/domains/mac_de_oracle/bin/startWebLogic.sh: Don't know how to set the shared library path for Darwin.
.
.
JAVA Memory arguments: -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=48m -XX:MaxPermSize=128m
.
WLS Start Mode=Development
.
・・・・中略・・・・
.
***************************************************
* To start WebLogic Server, use a username and *
* password assigned to an admin-level user. For *
* server administration, use the WebLogic Server *
* console at http://hostname:port/console *
***************************************************
starting weblogic with Java version:
java version "1.6.0-dp"
Java(TM) SE Runtime Environment (build 1.6.0-dp-b88-34)
Java HotSpot(TM) Core VM (build 1.6.0-b88-17-release, interpreted mode, sharing)
Starting WLS with line:

・・・・中略・・・・

<2009/03/18 7時28分12秒 JST> <Notice> <WebLogicServer> <BEA-000365> <サーバ状態が RUNNING に変化しました。>
<2009/03/18 7時28分12秒 JST> <Notice> <WebLogicServer> <BEA-000360> <サーバが RUNNING モードで起動しました。>

変更後、startWebLogic.shのままTerminalから起動してもいいし、.sh拡張子を.commandへ変更しダブルクリックで起動してもOK。
2

Jdev11g_powerpc_macosx104_039

Jdev11g_powerpc_macosx104_040
使えそうですね。:)






バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #4

| | コメント (0) | トラックバック (0)

2009年3月26日 (木)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #4

PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の続きです。

前回はJDeveloper 11gをインストールしてQuickStartが起動したところまでだった。今回はそのつづきでインストールしたJDeveloper 11gを起動し、JDeveloper 10gで作成したProjectを取込むところまでを確認しておく。

「JDeveloper 11g の起動」をクリック
Jdev11g_powerpc_macosx104_018

「ロールの選択」ダイアログでは「デフォルトのロール」ラジオボタンを選択後、毎回起動時に聞かれるのはうざいので「起動時にロール選択を常に要求」チェックボックのチェックをはずして「OK」ボタンをクリック
Jdev11g_powerpc_macosx104_021

見慣れたJDeveloperのスプラッシュ
Jdev11g_powerpc_macosx104_022

「ユーザ設定の移行」では「はい」ボタンをクリックして移行を許可。(お、ちょっとしたバグ発見、ダイアログの文言が「以前のリリースから設定を移行しま か」と「す」が全角空白になってる。)
Jdev11g_powerpc_macosx104_023

「ユーザー設定の移行」は参照先をそのまま受け入れるので「OK」ボタンをクリックする。
Jdev11g_powerpc_macosx104_024

preview releaseでも見慣れたJDeveloper 11g
あとはJDeveloper 10gで作成したプロジェクトを開くと11gに合わせて移行してくれる。

Jdev11g_powerpc_macosx104_026
Jdev11g_powerpc_macosx104_027
Jdev11g_powerpc_macosx104_028
Jdev11g_powerpc_macosx104_029

PowerMac向けのJava SE 6.0 DP1でも取りあえず遊べそうね。:)



バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3

| | コメント (0) | トラックバック (0)

2009年3月25日 (水)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #3

PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の続きです。

前回はローカルJDKをInstallerが認識できるようにしたところまでだった。

今回はそのそのつづき。
JDeveloper 11gのインストールからQuickStartが起動するまで。

JDKを認識したので「次へ」ボタンをクリックしてインストール開始
Jdev11g_powerpc_macosx104_011_3

Jdev11g_powerpc_macosx104_012_2

Jdev11g_powerpc_macosx104_013

あとは終了まで、暫し待つ・・・

Jdev11g_powerpc_macosx104_014_2

Jdev11g_powerpc_macosx104_015

Jdev11g_powerpc_macosx104_016

「QuickStart実行」チェックボックスをチェックして「完了ボタン」をクリック。

Jdev11g_powerpc_macosx104_017

Installerが終了するとQuickStartが起動する。

Jdev11g_powerpc_macosx104_018

うまくインストールできたようですね。
次回は、インストールしたJDeveloper 11gを起動してみる。ということでつづく。。






バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2

| | コメント (0) | トラックバック (0)

2009年3月24日 (火)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #2

PowerMac G5 + Java SE6.0 DP1 de Oracle JDeveloper 11gとOracle Weblogic Server 10.3をインストールしちゃうぞ〜の続きです。


前回はOTNからJDeveloper 11g Studio Edition (Base Install For all the platforms without JDK 6)を入手したところまでだったので、今回はOracleあたらしいインストーラ?!(どうもBEAさんのものをベースにしたみたい・・・インストーラを起動するとcom.bea・・・と表示されるし)を起動するところまで。
Jdev11g_powerpc_macosx104_012

ということで早速取りかかる..

・ダウンロードしたJDeveloper 11g installのjarファイル
JDeveloper 11g installer

ファインダーからアプリケーション→ユーティリティ→Java→Java SE 6→Java Preferenceを起動し、Java Application Running SettingでJava SE 6が一番上に来ていることを確認。(このようになっていないとダブルクリックでは起動できないのでご注意を。)
Java Preference

Java SE 6.0 PD1のJava PreferenceのJava Application Running Settingだけではshell上のパスまでは変更してくれないので、手動でJDKへのパスをJava SE 5.0からava SE 6.0へ変更しちゃいます。(PowerPC版のMacOSXではJava SE 6は正式にはリリースされていないので面倒なのは仕方ないですね。)
シンボリックリンク CurrentJDKが1.5を指してしるので1.6に切り替えちゃいます。これでJava SE 6.0 DP1が動きます。

G5Server:˜ discus$ cd /System/Library/Frameworks/javaVM.framework/Versions
G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ ll
total 48
lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.3 -> 1.3.1
drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.3.1
lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.4 -> 1.4.2
drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.4.2
lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.5 -> 1.5.0
drwxr-xr-x 9 root wheel 306 Mar 17 19:54 1.5.0
lrwxr-xr-x 1 root wheel 5 Jul 21 2007 1.6 -> 1.6.0
drwxr-xr-x 10 root wheel 340 Mar 24 10:30 1.6.0
drwxr-xr-x 6 root wheel 204 Mar 17 19:53 A
lrwxr-xr-x 1 root wheel 1 Sep 25 21:27 Current -> A
lrwxr-xr-x 1 root wheel 3 Mar 24 10:32 CurrentJDK -> 1.5
G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ java -version
java version "1.5.0_16"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_16-b06-275)
Java HotSpot(TM) Client VM (build 1.5.0_16-132, mixed mode)
G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ ll
total 48
lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.3 -> 1.3.1
drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.3.1
lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.4 -> 1.4.2
drwxr-xr-x 8 root wheel 272 Jul 21 2005 1.4.2
lrwxr-xr-x 1 root wheel 5 Sep 25 21:27 1.5 -> 1.5.0
drwxr-xr-x 9 root wheel 306 Mar 17 19:54 1.5.0
lrwxr-xr-x 1 root wheel 5 Jul 21 2007 1.6 -> 1.6.0
drwxr-xr-x 10 root wheel 340 Mar 24 10:30 1.6.0
drwxr-xr-x 6 root wheel 204 Mar 17 19:53 A
lrwxr-xr-x 1 root wheel 1 Sep 25 21:27 Current -> A
lrwxr-xr-x 1 root wheel 3 Mar 24 10:32 CurrentJDK -> 1.5
G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ sudo rm CurrentJDK
G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ sudo ln -s 1.6 CurrentJDK
G5Server:/System/Library/Frameworks/javaVM.framework/Versions discus$ cd
G5Server:˜ discus$
G5Server:˜ discus$ java -version
java version "1.6.0-dp"
Java(TM) SE Runtime Environment (build 1.6.0-dp-b88-34)
Java HotSpot(TM) Core VM (build 1.6.0-b88-17-release, interpreted mode)
G5Server:˜ discus$

ということで、jdevstudio11110install.jarをダブルクリックしてinstallerを起動!

お〜〜起動しました〜〜パチパチ。

Jdev 11g splash

あとはインストーラの指示にしたがいクリックしていくだけ。
(この例ではOracle MIddleware Home Directoryを/Volumes/DiscusWork/Development/Oracle/Middlewareにしてあります。)

Installer#1

installer#2

installer#3

ん、ん、あれ〜、Java Perference及びJava SE 6.0 DP1へのパスを変更したのにJDKが見えないとでますね〜。
Jdev11g_powerpc_macosx104_010

no jdk alert

あ〜、忘れてました。これはRelease Noteに書かれていた既知の問題の一つですね。
Release NoteにはClasses.jarとrt.jarへシンボリックリンクを張るように記載されていますが、この例では山本祐介さんのWebLogic Server 10g Release 3 を Mac OSX にインストールで紹介されている方法で対処しました。

G5Server:˜ discus$ cd /System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home 
G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ ll
total 8
drwxr-xr-x 42 root wheel 1428 Jul 21 2007 bin
lrwxr-xr-x 1 root wheel 10 Jul 21 2007 include -> ../Headers
drwxr-xr-x 38 root wheel 1292 Mar 17 19:56 lib
drwxr-xr-x 24 root wheel 816 Jul 21 2007 man
G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo mkdir jre
Password:
G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo mkdir jre/lib
G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo touch jre/lib/rt.jar
G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$ sudo touch jre/lib/core.jar
G5Server:/System/Library/Frameworks/javaVM.framework/Versions/CurrentJDK/Home discus$

前述の対処でローカルJDKを認識したようですね。ただし、unknown JDK :)
jdk ok

次回へつづく。。。





バックナンバー
Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1

| | コメント (0) | トラックバック (0)

2009年3月23日 (月)

Oracle JDeveloper 11g (Build 5188) - with Oracle WebLogic Server 10.3 - #1

Oracle JDeveloper 11g (Build 5188) - Base Install (For all the platforms without JDK6.0で、Oracle JDeveloper11g にOracle WebLogic Server 10.3がバンドルされリリースされていたのでいままで使っていたJDeveloper10gと入れ替えてみた。

尚、
MacOSX 10.4.11 Tiger/PowerPC G5かつ今は多分入手できないんじゃないかと思うけどPowerPC/MacOSX Tiger向けJava SE6.0 Developer Preview 1という環境なので、ちょっとした確認なら使えない事もないかな〜ぐらいの軽い気持ちで使うのが吉ですよん。たぶん。
Java SE6.0 DP1を使うので。

(あ、そうそう、Intel版の64bit環境かつMacOSX 10.5 Leopardはすんなり出来そうなので後日。)

尚、MacOSXへインストールする際の注意があるので事前に把握しておくといいですよ。
JDeveloper 11g Release Notes
Installing JDeveloper on Mac OS

それと山本祐介さんのWebLogic Server 10g Release 3 を Mac OSX にインストールの記事も参考にさせて頂いた。

まずは今回の環境から:

・H/W : Apple PowerMac G5 Dual 2.7Ghz RAM 3GB
・OS : MacOSX 10.4.11 Tiger Server(Serverである必要はないですよ。)
・JDK : Java SE 6.0 Developer Preview 1
という環境へOracle JDeveloper 11g とOracle WebLogic Server 10.3をインストールする。

OTNからOracle JDeveloper 11g Studio Edition (Base Install
For all the platforms without JDK 6)をダウンロードする。
Jdev11g_powerpc_macosx104_001

ながくなるので次回へつづく。

| | コメント (0) | トラックバック (0)

2008年12月23日 (火)

emacsねぇ

私はとっくの昔にemacsには戻れない体になっとります。はい。w

ドットを叩くとコード補完してくれたりするautomatic code completion/code insight機能がないと・・・・。

そういえば、以下のビデオでも言っている(ビデオの後半で)けど、先日Sun Tech Days 2008 TokyoでもGoslingさんは同じ事言っていたっけ。「Just Stop!」

あ、忘れてた、秀丸とかでPL/SQLの巨大プログラム書かせるのも Just Stop! しようよ。w


| | コメント (0) | トラックバック (0)

2008年9月23日 (火)

Oracle JDeveloper11gが正式リリースされるとか。

先日開催されたOTN Day Unconferenceでは、JDeveloper11gのTechnology Previewが何時取れて正式リリースされるのかはっきりとは言えないという答えでしたが・・・、10月1日にリリース予定とのこと。(なるほど、ハッキリ言っちゃうとフライングになっちゃうので言えなかったのね〜。)

S/N Ratio (by SATO Naoki):Oracle JDeveloper 11g 発表 (10/1 リリース予定)

| | コメント (2) | トラックバック (0)

2008年3月23日 (日)

PL/SQL で Python Challenge Level 16 - 2年5ヶ月ぶり

そう、あれは、このブログをはじめたころ、Oracle10g R1 for MacOSX ServerとPL/SQL(画像処理関係はjava stored procedure)を利用し、Python Challengeに PL/SQLでチャレンジしていたっけ〜〜。遠い目。

アクセスログを見ていたら最近、またPython Challengeのキーワード検索が多くヒットしているのにびっくり!。
前述のエントリを書いていたのが約2年半前になるわけですから! ということで、久々にちょっとだけ再開してみようかと。。Level 16を見てみる。


Level 16の問題の画像を見ると、いかにもわざとらしい柄というか模様が目につく!。

で、Level 16のページタイトルもいつものようにヒントになっている。

画像にある模様を眺めつつ、ページタイトルの英文(簡単な英文です)を読み試しにJavaだけで作ってみると、考え方はいいと思うのだが全然答えにはなっていない。。。

こうか? ん、、、、それとも、こうか? でも違う。 あ、横にしてたよ。。。あはは。。(^^;;
と独り言を言いつつ何とか答えを見つけました。。は〜〜っ。暫くぶりだと疲れるわ。

次回は答えは書きませんが、Level 16の結果をぼかしたスナップショットを載せる予定。

ちなみに、今回の環境は以下。
Database Server : Oracle11g R1 EE for Linux x86

開発用クライアント:
JDeveloper10g 10.1.3 for MacOSX
Oracle SQL Developer 1.1.3 for MacOSX
(Java Stored Procedure、PL/SQL package、Java関連で利用した)

準備が整ったらMacOSXからsshでLinuxのOracle11gへ接続して実行!
結果確認は、MacOSXのVNCからLinuxへ接続して確認するという面倒なことまでしてMacを絡めている。
(Mac de Oracle ですから! 笑)

尚、以前のように、なるべくPL/SQLやSQLレベルで問題を解いて行くがPL/SQLやSQLでは不可能な処理はJava stored procedureで行う。Level 16もLevel14と同じような処理になっている。

| | コメント (0) | トラックバック (0)

2008年2月21日 (木)

Oracle de XMLDB #24 - Relational dataをXMLへ #7

リレーショナルデータをXMLへ変換するシリーズもひとまず最終回ということで、最後は、Oracleデータベース側でXMLTypeインスタンスへ変換して、クライアントではXMLTypeインスタンスを受け取るだけの例を一つ。
環境は前回の記事を見てもらうとして早速試してみる。

Xmldb24_project Xmldb24_project_property


バックナンバー:
Oracle de XMLDB #18 - Relational dataをXMLへ #1
Oracle de XMLDB #19 - Relational dataをXMLへ #2
Oracle de XMLDB #20 - Relational dataをXMLへ #3
Oracle de XMLDB #21 - Relational dataをXMLへ #4
Oracle de XMLDB #22 - Relational dataをXMLへ #5
Oracle de XMLDB #23 - Relational dataをXMLへ #6

以下の例は、SQL/XMLとOracleが提供しているXQuery関数 ora:view()を利用し、リレーショナルデータからXMLTypeインスタンスを作るまでをOracleデータベース側で行い、クライアントではXMLTypeインスタンスを受け取るだけというもの。

package jp.macdeoracle.sample;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.jdbc.OracleResultSet;
import oracle.jdbc.pool.OracleDataSource;

import oracle.xdb.XMLType;


public class Table2Xml2
{
public Table2Xml2()
throws SQLException
{
OracleDataSource ods;
ods = new OracleDataSource();
ods.setURL(
"jdbc:oracle:thin:scott/tiger@192.168.1.20:1521:lampeye"
);

Connection conn = ods.getConnection();
Statement stmt = conn.createStatement();
OracleResultSet rs = (OracleResultSet)stmt.executeQuery(
"SELECT "
+ "XMLROOT("
+ "XMLQuery("
+ "'<ROWSET> {"
+ " for $d in ora:view(\"EMP\") "
+ " order by $d"
+ " return $d"
+ "} </ROWSET>'"
+ "RETURNING CONTENT), VERSION '1.0') "
+ "FROM dual"
);
DatabaseMetaData meta = conn.getMetaData();
System.out.println(meta.getDatabaseProductVersion());
System.out.println(meta.getDriverName()+":"+meta.getDriverVersion());
while(rs.next()) {
System.out.println(
"=======================\n"
+((XMLType)rs.getObject(1)).getStringVal()
);
}
rs.close();
stmt.close();
conn.close();
}

public static void main(String[] args) throws SQLException
{
Table2Xml2 dbXml = new Table2Xml2();
}
}


実行結果は以下の通り。

Oracle Database 11g Release 11.1.0.0.0 - Production
Oracle JDBC driver:10.1.0.3.0
=======================
<?xml version="1.0"?>
<ROWSET>
<ROW>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>1980-12-17</HIREDATE>
<SAL>800</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW>
<EMPNO>7499</EMPNO>
<ENAME>ALLEN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-02-20</HIREDATE>
<SAL>1600</SAL>
<COMM>300</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7521</EMPNO>
<ENAME>WARD</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-02-22</HIREDATE>
<SAL>1250</SAL>
<COMM>500</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7566</EMPNO>
<ENAME>JONES</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-04-02</HIREDATE>
<SAL>2975</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW>
<EMPNO>7654</EMPNO>
<ENAME>MARTIN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-09-28</HIREDATE>
<SAL>1250</SAL>
<COMM>1400</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7698</EMPNO>
<ENAME>BLAKE</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-05-01</HIREDATE>
<SAL>2850</SAL>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7782</EMPNO>
<ENAME>CLARK</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>1981-06-09</HIREDATE>
<SAL>2450</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW>
<EMPNO>7839</EMPNO>
<ENAME>KING</ENAME>
<JOB>PRESIDENT</JOB>
<HIREDATE>1981-11-17</HIREDATE>
<SAL>5000</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW>
<EMPNO>7844</EMPNO>
<ENAME>TURNER</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-09-08</HIREDATE>
<SAL>1500</SAL>
<COMM>0</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7900</EMPNO>
<ENAME>JAMES</ENAME>
<JOB>CLERK</JOB>
<MGR>7698</MGR>
<HIREDATE>1981-12-03</HIREDATE>
<SAL>950</SAL>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW>
<EMPNO>7902</EMPNO>
<ENAME>FORD</ENAME>
<JOB>ANALYST</JOB>
<MGR>7566</MGR>
<HIREDATE>1981-12-03</HIREDATE>
<SAL>3000</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW>
<EMPNO>7934</EMPNO>
<ENAME>MILLER</ENAME>
<JOB>CLERK</JOB>
<MGR>7782</MGR>
<HIREDATE>1982-01-23</HIREDATE>
<SAL>1300</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW>
<EMPNO>9999</EMPNO>
<ENAME>ほげ</ENAME>
<JOB>ENGINEER</JOB>
<MGR>7566</MGR>
<HIREDATE>2008-01-01</HIREDATE>
<SAL>2500</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
</ROWSET>

プロセスが終了コード0で終了しました。


いろいろな方法があるので悩みそうな気もするなぁ。。。。やっぱり。。。

| | コメント (0) | トラックバック (0)

2008年2月20日 (水)

Oracle de XMLDB #23 - Relational dataをXMLへ #6

さて、Oracleデータベース側だけでリレーショナルデータをXMLTypeインスタンスへ変換する方法は一通り試したので、今度はリレーショナルデータを取り出しクライアント側でXMLへ変換してみた。
接続するOracleデータベースはいままで通り、Oracle11g R1 EE 11.1.0.6.0 for Linux(x86)なのだが、クライアントとして利用するMacOSX 10.4.11の構成は多少異なるので以下に示しておく。

Jdeveloper1013png

IDE : Oracle JDeveloper10g Studio Edition 10.1.3.0.4 for MacOSX
Oracle XML Developer's Kit(XDK) for Java - 10.2.0.2.0 Linux Production
JDBCドライバ : Oracle Instant Client for MacOSX(PPC) 10.1.0.3.0付属の ojdbc14.jar
Oracle XML Parser : JDeveloper 10g Studio Edition for MacOSX version 10.1.3.0.4に付属するOracle XML Parser v2 (xmlparserv2.jar)
Oracle XML SQL Utility : JDeveloper 10g Studio Edition for MacOSX version 10.1.3.0.4に付属するOracle XML SQL Utiliry (xsu12.jar)

Xmldb23_project Xmldb23_project_property


バックナンバー:
Oracle de XMLDB #18 - Relational dataをXMLへ #1
Oracle de XMLDB #19 - Relational dataをXMLへ #2
Oracle de XMLDB #20 - Relational dataをXMLへ #3
Oracle de XMLDB #21 - Relational dataをXMLへ #4
Oracle de XMLDB #22 - Relational dataをXMLへ #5

以下の例では、emp表をempno順にソートして読み込み、Oracle XML SQL Utilityを利用して読み込んだResultsetからXMLへ変換。

package jp.macdeoracle.sample;

import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import oracle.jdbc.pool.OracleDataSource;

import oracle.xml.sql.query.OracleXMLQuery;

public class Table2Xml1
{
public Table2Xml1()
throws SQLException
{
OracleDataSource ods;
ods = new OracleDataSource();
ods.setURL(
"jdbc:oracle:thin:scott/tiger@192.168.1.20:1521:lampeye"
);

Connection conn = ods.getConnection();
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("select * from emp order by empno");
OracleXMLQuery xmlqry = new OracleXMLQuery(conn, rs);

String xmlString = xmlqry.getXMLString();
DatabaseMetaData meta = conn.getMetaData();
System.out.println(meta.getDatabaseProductVersion());
System.out.println(meta.getDriverName()+":"+meta.getDriverVersion());
System.out.println("=====================\n"+xmlString);
rs.close();
stmt.close();
conn.close();
}

public static void main(String[] args) throws SQLException
{
Table2Xml1 Table2Xml1 = new Table2Xml1();
}
}


出力結果は以下の通り。ROW要素にnum属性がある以外、データベース側だけで変換した場合と内容的には変らない。
データベースサーバ側で変換まで行うか、クライアント側で変換するか、どちらが良いかといういうより、どのように負荷分散するかという戦略に合わせて考えればいいんじゃないかと思う。

Oracle Database 11g Release 11.1.0.0.0 - Production
Oracle JDBC driver:10.1.0.3.0
=====================
<?xml version = '1.0'?>
<ROWSET>
<ROW num="1">
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>12/17/1980 0:0:0</HIREDATE>
<SAL>800</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW num="2">
<EMPNO>7499</EMPNO>
<ENAME>ALLEN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>2/20/1981 0:0:0</HIREDATE>
<SAL>1600</SAL>
<COMM>300</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW num="3">
<EMPNO>7521</EMPNO>
<ENAME>WARD</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>2/22/1981 0:0:0</HIREDATE>
<SAL>1250</SAL>
<COMM>500</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW num="4">
<EMPNO>7566</EMPNO>
<ENAME>JONES</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>4/2/1981 0:0:0</HIREDATE>
<SAL>2975</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW num="5">
<EMPNO>7654</EMPNO>
<ENAME>MARTIN</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>9/28/1981 0:0:0</HIREDATE>
<SAL>1250</SAL>
<COMM>1400</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW num="6">
<EMPNO>7698</EMPNO>
<ENAME>BLAKE</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>5/1/1981 0:0:0</HIREDATE>
<SAL>2850</SAL>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW num="7">
<EMPNO>7782</EMPNO>
<ENAME>CLARK</ENAME>
<JOB>MANAGER</JOB>
<MGR>7839</MGR>
<HIREDATE>6/9/1981 0:0:0</HIREDATE>
<SAL>2450</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW num="8">
<EMPNO>7839</EMPNO>
<ENAME>KING</ENAME>
<JOB>PRESIDENT</JOB>
<HIREDATE>11/17/1981 0:0:0</HIREDATE>
<SAL>5000</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW num="9">
<EMPNO>7844</EMPNO>
<ENAME>TURNER</ENAME>
<JOB>SALESMAN</JOB>
<MGR>7698</MGR>
<HIREDATE>9/8/1981 0:0:0</HIREDATE>
<SAL>1500</SAL>
<COMM>0</COMM>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW num="10">
<EMPNO>7900</EMPNO>
<ENAME>JAMES</ENAME>
<JOB>CLERK</JOB>
<MGR>7698</MGR>
<HIREDATE>12/3/1981 0:0:0</HIREDATE>
<SAL>950</SAL>
<DEPTNO>30</DEPTNO>
</ROW>
<ROW num="11">
<EMPNO>7902</EMPNO>
<ENAME>FORD</ENAME>
<JOB>ANALYST</JOB>
<MGR>7566</MGR>
<HIREDATE>12/3/1981 0:0:0</HIREDATE>
<SAL>3000</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
<ROW num="12">
<EMPNO>7934</EMPNO>
<ENAME>MILLER</ENAME>
<JOB>CLERK</JOB>
<MGR>7782</MGR>
<HIREDATE>1/23/1982 0:0:0</HIREDATE>
<SAL>1300</SAL>
<DEPTNO>10</DEPTNO>
</ROW>
<ROW num="13">
<EMPNO>9999</EMPNO>
<ENAME>ほげ</ENAME>
<JOB>ENGINEER</JOB>
<MGR>7566</MGR>
<HIREDATE>1/1/2008 0:0:0</HIREDATE>
<SAL>2500</SAL>
<DEPTNO>20</DEPTNO>
</ROW>
</ROWSET>

プロセスが終了コード0で終了しました。

次回は、データベース側でXMLへの変換まで行いクライアント側ではその結果を受け取るだけの例を一つ。

| | コメント (0) | トラックバック (0)

2007年8月24日 (金)

JJUG : クロスコミュニティー IDEバトル?

少々、おそくなったが、
先日、JJUG主催の「クロスコニュニティ IDE」に参加してきた。
このセミナー申し込みが多かったらしく、抽選でした。うちは奥さんと二人個別に申し込んでいたのだが、当選したのは私だけ!。

奥さんも当選していたら会場にいたJDeveloperファン?は、もう少し増えてたかも。。(笑い)

私の場合、無償になる以前からJDeveloperを仕事で利用していたこともあり、考えてみると、


JDeveloper > Eclipse > NetBeans


という順で、利用経験が少なくなって行く。。

そういえば、無償になる前のJDeveloperは、ソースネクストから1980円で発売されていたこともあり、ある人からプレゼントに使った分の残りが少しあるから、私と奥さんの分を貰ったこともあったっけ。

前置きはこれくらいにして、セミナーの内容は、ストリーミングで配信されるようなのでそちらを見て頂いた方がよさそう。
http://ustream.tv/yoichiro/videos/T0rVTPSassJOp6yi2bLenA
http://ustream.tv/yoichiro/videos/G1IWObKZ9majKs2sdEiHdg

私個人の感想としては、前日、睡眠時間4時間(仕事ではなく、単に熱帯夜で、寝苦しくて。。。)の影響と祭り見物のための移動準備の疲れか?、Eclipseの時は、目は開いていたもののセミナー内容の記憶はほとんどなし。。。 (^^;;;

後半、ようやく、覚醒してきたところが、デモがうまくいかなかった、NetBeansのあたり。
(実は、Rubyでも遊びたくて、NetBeansインストールしてあるんですよ、Macに。)

佐藤直樹さんは、やはり、プレゼン慣れしていますな〜。

Jdev_netb

うちの奥さんは? といえば、プロジェクトの標準で、Eclipseを利用していることが多いのだが、最近、自宅のMacでは、JDeveloper11gを起動してあそんでいる姿を多く目にする。。。
本人曰く、Eclipseは仕事で十分使っているから、自分の趣味?で調べもしたり確かめたりするのにまで、Eclipseは使いたくないらしい。

ということで、今日からお祭り見物だ〜。

| | コメント (0) | トラックバック (0)

2007年7月 8日 (日)

Stored Procedure で host command #3

前回からの続きです。
さて、前回は、javaクラスをOracle Databaseへデプロイしたところまでだった。

ということで、デプロイしたクラスとメソッドを確認しておきましょう! (以下の例は、 user_java_methodsビューを問い合わせたもの)

このマニュアルも参考になるのでリンクしておきます。

SQL> conn scott/tiger
SQL> select name,method_name,accessibility,is_static,return_class from user_java_methods;

NAME METHOD_NAM ACCESSIBILITY IS_STA RETURN_CLA
---------------------------------------- ---------- ------------------ ------ ----------
jp/macdeoracle/CommandOutputReader $init$ NO -
jp/macdeoracle/CommandOutputReader <init> PUBLIC NO -
jp/macdeoracle/CommandOutputReader run PUBLIC NO -
jp/macdeoracle/HostCommandExecuter <clinit> YES -
jp/macdeoracle/HostCommandExecuter exec PRIVATE YES -
jp/macdeoracle/HostCommandExecuter ls PUBLIC YES -
jp/macdeoracle/HostCommandExecuter main PUBLIC YES -
jp/macdeoracle/HostCommandExecuter <init> PUBLIC NO -

8行が選択されました。

SQL>

● 次にjavaストアドプロシージャのコール仕様を作成する

language java以降がポイントですよ。実行するstatic methodを指定します。
SQL> create or replace procedure ls(directory IN VARCHAR2)
2 as language java
3 name 'jp.macdeoracle.HostCommandExecuter.ls(java.lang.String)';
4 /

プロシージャが作成されました。

では、実行してみると・・・・・。
あれれ、権限が足りないとでますね。。。。。

SQL>
SQL> exec ls('c:¥temp');
BEGIN ls; END;

*
行1でエラーが発生しました。:
ORA-29532: 不明なJava例外でJavaコールが終了しました: java.security.AccessControlException: the Permission (java.io.FilePermission <<ALL
FILES>> execute) has not been granted to SCOTT. The PL/SQL to grant this is dbms_java.grant_permission( 'SCOTT',
'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' )
ORA-06512: "SCOTT.LS", 行1
ORA-06512: 行1


● エラーメッセージの指示通りに、 dbms_java.grant_permissionを実行してみることに。。
  user_java_policyを確認してみると権限は付与されたようですね。。。

SQL> conn / as sysdba
SQL> execute dbms_java.grant_permission('SCOTT','SYS:java.io.FilePermission','<<ALL FILES>>','execute');

PL/SQLプロシージャが正常に完了しました。

SQL>
SQL> conn scott/tiger
SQL> select action,type_name,name,enabled from user_java_policy;


ACTION TYPE_NAME NAME ENABLED
---------- ---------------------------------------- ---------------------------------------- ----------------
read java.io.FilePermission <<ALL FILES>> ENABLED
java.lang.RuntimePermission accessClassInPackage.* ENABLED
java.lang.RuntimePermission defineClassInPackage.* ENABLED
java.lang.RuntimePermission getProtectionDomain ENABLED
java.lang.RuntimePermission stopThread ENABLED
connect, java.net.SocketPermission * ENABLED
resolve
java.lang.RuntimePermission createSecurityManager ENABLED
java.lang.RuntimePermission exitVM ENABLED
java.lang.RuntimePermission loadLibrary.* ENABLED
java.lang.RuntimePermission modifyThread ENABLED
java.lang.RuntimePermission modifyThreadGroup ENABLED
java.lang.RuntimePermission preferences ENABLED
read java.util.PropertyPermission * ENABLED
write java.util.PropertyPermission user.language ENABLED
oracle.aurora.rdbms.security.PolicyTable 0:java.lang.RuntimePermission#loadLibrar ENABLED
Permission y.*
oracle.aurora.security.JServerPermission DUMMY DISABLED
oracle.aurora.security.JServerPermission LoadClassInPackage.* ENABLED
oracle.aurora.security.JServerPermission LoadClassInPackage.java.* ENABLED
oracle.aurora.security.JServerPermission LoadClassInPackage.oracle.aurora.* ENABLED
oracle.aurora.security.JServerPermission LoadClassInPackage.oracle.jdbc.* ENABLED
execute java.io.FilePermission <<ALL FILES>> ENABLED

21行が選択されました。

SQL>


再度、実行してます!

SQL> exec ls('c:¥temp');
BEGIN ls; END;

*
行1でエラーが発生しました。:
ORA-29532: 不明なJava例外でJavaコールが終了しました: java.security.AccessControlException: the Permission (java.io.FilePermission <<ALL
FILES>> execute) has not been granted to SCOTT. The PL/SQL to grant this is dbms_java.grant_permission( 'SCOTT',
'SYS:java.io.FilePermission', '<<ALL FILES>>', 'execute' )
ORA-06512: "SCOTT.LS", 行1
ORA-06512: 行1


なんなんでしょうね。よくわからないエラーメッセージですね。権限はあるのに。
わかりにくいメッセージ。やはりこうでなくちゃ、オラクルは。。なんてね。
イライラしてきたので、javasysprivロールを付与しちゃいました。(セキュリティ面からみれば好ましくないのですけど。)
各クラス毎に実行権限を細かく付与すればうまくいきそうですが、エラーメッセージからは、何のどんな権限が不足しているのか単純には判断できない(予想はつきますけど・・・)ので、この件に関しては別途調べることにして先へ進むことにします。要調査->TODO

SQL> conn / as sysdba
接続されました。
SQL> grant javasyspriv to scott;

権限付与が成功しました。


:-) やっと動いた〜。

SQL> conn scott/tiger
接続されました。

SQL>
SQL> set serveroutput on
SQL> exec dbms_java.set_output(2000);

PL/SQLプロシージャが正常に完了しました。

SQL> exec ls('c:¥temp');
apex_3.0
apex_3.0.zip
jdevstudio10131.zip
version.log

PL/SQLプロシージャが正常に完了しました。

SQL>

なんとか実行できました。。。ね。 (^^;;;;

Jdeveloper_filelist3

| | コメント (0) | トラックバック (0)

2007年7月 4日 (水)

Stored Procedure で host command #2

さて、前回のつづきです。
javaストアドプロシージャのソースは以下の通り。

OSコマンドを実行するjavaの例は、ググればやまほどヒットするので特に解説はなし。
Oracleでjavaストアドプロシージャを作成する方法は、マニュアル「Oracle Database Java開発者ガイド - 3 Oracle DatabaseでのJavaメソッドのコール」を参照のこと。
基本は前述のマニュアルで足りると思います。(今回は、JDBCも利用していませんし。)
それに加えて、OTN-JのOracleJVM and Java Stored Procedures なども参考になるでしょうね。

以下、Oracle JDeveloper 10.1.3.1 for MacOSXを利用。

Jdev10gmacosx_hostcommand

package jp.macdeoracle;

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.IOException;


public class CommandOutputReader extends Thread {
private InputStream is;
private String lines = "";

public CommandOutputReader(InputStream is) {
this.is = is;
}

public void run()
{
String outputLine;
try {
BufferedReader br = new BufferedReader(new InputStreamReader(this.is));
while ((outputLine = br.readLine()) != null) {
System.out.println(outputLine);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
package jp.macdeoracle;

import java.lang.Runtime;
import java.lang.SecurityException;
import java.io.IOException;

public class HostCommandExecuter
{
public static final String OS_WINDOWS_ = "Windows";
public static final String OS_MACOSX_ = "Mac OS X";
public static final String OS_LINUX_ = "Linux";

private static void exec(String[] command)
throws IOException,
SecurityException,
InterruptedException
{
Process myproc = Runtime.getRuntime().exec(command);
new CommandOutputReader(myproc.getInputStream()).start();
new CommandOutputReader(myproc.getErrorStream()).start();
myproc.waitFor();
}

public static void ls(String directory)
throws IOException,
SecurityException,
InterruptedException
{
String osname = System.getProperty("os.name");
if (osname.indexOf(OS_WINDOWS_) >= 0) {
String[] cmd = {"CMD.EXE", "/C", "DIR", "/B", directory};
exec(cmd);
} else if (
osname.indexOf(OS_MACOSX_) >= 0
|| osname.indexOf(OS_LINUX_) >= 0
) {
String[] cmd = {"/bin/ls", directory};
exec(cmd);
} else {
throw new IOException(osname + ":このOSには対応していません。");
}
}

public static void main(String[] args)
throws IOException,
InterruptedException,
SecurityException
{
ls(".");
}
}

上記ソースをコンパイルしてOracle Databaseへデプロイ! (以下、Oracle10g R2の例)
うまくいけば以下のようなログが表示される。

loadjavaを接続'Oracle10gR2_Scott'で呼出し中。引数:
-order -resolve -definer -force -thin -schema scott -verbose
creating : class SCOTT.jp/macdeoracle/CommandOutputReader
loading : class SCOTT.jp/macdeoracle/CommandOutputReader
creating : class SCOTT.jp/macdeoracle/HostCommandExecuter
loading : class SCOTT.jp/macdeoracle/HostCommandExecuter
resolving: class SCOTT.jp/macdeoracle/CommandOutputReader
resolving: class SCOTT.jp/macdeoracle/HostCommandExecuter
Loadjavaが終了しました。
公開が終了しました。
---- ストアド・プロシージャのデプロイが終了しました ----


次のようなエラーがでたら、J2SE 1.4.xでコンパイルし直してデプロイすべし! 
オラクルにしては、わかり易いメッセージじゃ。 (^^) 

loadjavaを接続'Oracle9iR2_Scott'で呼出し中。引数:
-order -resolve -definer -force -thin -schema scott -verbose
creating : class SCOTT.jp/macdeoracle/CommandOutputReader
loading : class SCOTT.jp/macdeoracle/CommandOutputReader
created : "SCOTT".CREATE$JAVA$LOB$TABLE
Error while creating class jp/macdeoracle/CommandOutputReader
ソケットから読み込むデータはこれ以上ありません。
Error while testing for existence of dbms_java.handleMd5
Exception java.sql.SQLException: OALL8 is in an inconsistent state.
created : "SCOTT".JAVA$CLASS$MD5$TABLE
creating : class SCOTT.jp/macdeoracle/HostCommandExecuter
loading : class SCOTT.jp/macdeoracle/HostCommandExecuter
Error while creating class jp/macdeoracle/HostCommandExecuter
ソケットから読み込むデータはこれ以上ありません。
The following operations failed
class SCOTT.jp/macdeoracle/CommandOutputReader: creation (createFailed)
class SCOTT.jp/macdeoracle/HostCommandExecuter: creation (createFailed)
oracle.aurora.server.tools.loadjava.ToolsException: Failures occurred during processing
at oracle.aurora.server.tools.loadjava.LoadJava.process(LoadJava.java:863)
at oracle.jdeveloper.deploy.tools.OracleLoadjava.deploy(OracleLoadjava.java:116)
at oracle.jdeveloper.deploy.tools.OracleLoadjava.deploy(OracleLoadjava.java:46)
at oracle.jdevimpl.deploy.OracleDeployer.deploy(OracleDeployer.java:97)
at oracle.jdevimpl.deploy.StoredProcHandler.doDeploy(StoredProcHandler.java:473)
at oracle.jdevimpl.deploy.StoredProcHandler.doDeploy(StoredProcHandler.java:360)
at oracle.jdevimpl.deploy.StoredProcHandler.doDeploy(StoredProcHandler.java:284)
at oracle.jdevimpl.deploy.StoredProcProfileDt$Action$1.run(StoredProcProfileDt.java:383)
#### デプロイが不完全です ####
*** Note ***
デプロイ・エラーの可能性の1つとして、ターゲット・データベースがJDKバージョン1.5をサポートしていないことが考えられます。
お使いのプロジェクト・プロパティ・コンパイラのソースとターゲットを古いバージョンに変更することで、この問題を修復できます。
************


プロジェクトプロパティを開いて、j2se 1.4.2を設定している様子。
Change_jdk1 Change_jdk2Change_jdk3Change_jdk4

今日はここまで。次回へつづく。

| | コメント (0) | トラックバック (0)

2007年6月30日 (土)

Stored Procedure で host command

随分前のネタ(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) | トラックバック (0)

2007年5月16日 (水)

Mac De Oracle : Oracleのバージョン確認(FAQ) #8

Oracle JDBC Driverのバージョンは確認方法は?

マニュアルにしっかり載ってます。 
今回は、先日公開された、Oracle JDeveloper11g Technology Previewで試してみた。

ちなみに、接続先は、Oracle10g R2 EE 10.2.0.2.0
Jdev11g_jdbc11

よく見えないかもしれないので、ログペインを拡大したスクリーンショットも載せておく。
Jdbcversionresult

Oracle JDeveloper11g Technology Previewでは、Oracle JDBC Driver 11.1.0.0.0-Alpha が使われているんですね!。

Determining the Version of the JDBC Driverを見れば分かるし、マニュアルからコピペすればよいので、書くまでもないのだが。。。。。。。

読んでないのか!?、見つけられないのか?  よく聞かれるのでコードも載せておく。

package jp.macdeoracle.discus;

import oracle.jdbc.pool.OracleDataSource;
import java.sql.DatabaseMetaData;
import java.sql.Connection;
import java.sql.SQLException;

public class JdbcVersion
{
public static void main(String[] args)
{
OracleDataSource ods = null;
Connection conn = null;
try {
ods = new OracleDataSource();
ods.setURL("jdbc:oracle:thin:scott/tiger@192.168.1.2:1521:catfish");
conn = ods.getConnection();
DatabaseMetaData meta = conn.getMetaData();
System.out.println(meta.getDriverName() + "," + meta.getDriverVersion());
}
catch (SQLException se) {
System.out.println(se.getSQLState());
System.out.println(se.getErrorCode());
}
finally
{
try {
if (ods != null && conn != null && !conn.isClosed()) {
conn.close();
ods.close();
}
}
catch (SQLException se){
se.printStackTrace();
}
}
}
}

| | コメント (0) | トラックバック (0)

2007年5月 9日 (水)

Oracle JDeveloper11g Technology Preview

 Jdev11g2 Jdev11g3

http://www.oracle.com/technology/products/jdev/index.htmlでJDeveloper11g Technology Preview版が公開されたので、早速 MacOSX版をダウンロード。

ついでなのでhttp://d.hatena.ne.jp/satonaoki/20070508/p1で紹介されている スタートページを JDeveloper11gのものに変更するように設定してみた。

● なにもしないと、JDeveloper10gのころのスタートページが表示される。

Jdev11g4

http://d.hatena.ne.jp/satonaoki/20070508/p1で紹介されている設定をMacOSX版のJDeveloper11g Technology Previewで行うには、

「JDeveloper11g」を右クリック->ポップアップメニューの「パッケージ内容を表示をクリック」
-> Contents/Resource/jdev/jdev/bin/jdev.confを紹介されているように編集

Jdev11g5 Jdev11g7_1 Jdev11g6

● 編集内容を保存したら再起動。

尚、以前のスタートページが開いていると新しいスタートページが表示されないようなので、もし、JDeveloper10g向けのスタートページが表示されていたら、一旦、スタートページを閉じ、「メニュー」->「Help」->「Start page」で表示させる。

Jdev11g8

Jdev11g9

私好みの色合い。。。。。。

| | コメント (0) | トラックバック (0)

2007年2月26日 (月)

Mac De Oracle - 10万円 de RAC #43

10万円 de RACの最終回。PowerBook G4のJDeveloper10g/SQL Developer/SQL*Plusなどからの接続確認。JDeveloper10g R3 10.1.3編。

  1. ハードウェアの価格構成
  2. Linux (CentOS 4.4)のインストール
  3. ネットワークの構成
  4. Openfilerのインストール
  5. OpenfilerによるiSCSIボリュームの構成
  6. Oracle RACノードでのiSCSIボリュームの構成 その1。 その2
  7. Oracle所有者と関連ディレクトリの作成及び環境変数の設定
  8. Oracle向けLinuxサーバーの構成(カーネルパラメータの設定)
  9. hangcheck-timerカーネル・モジュールの構成
  10. Oracle RACノード間リモートアクセスの構成
  11. Oracle RACノード構成ファイルの確認
  12. Oracle Cluster File System (OCFS2)のインストール及び構成 その1/その2/その3
  13. Oracle Automatic Storage Management(ASMLib 2.0)のインストール及び構成
  14. Oracle 10gソフトウェアのダウンロード
  15. Oracle10g R2インストール事前作業 その1/その2/その3/その4
  16. Oracle10g Clusterwareのインストール
  17. Oracle10g R2 Database softwareのインストール その1/その2
  18. Oracle10g R2 Companion CD softwareのインストール
  19. TNS Listenerの構成
  20. Oracle Cluster databaseの作成 その1/その2
  21. Oracle Net Serviceの確認
  22. 表領域の作成と変更
  23. Oralce RAC ClusterとDatabase構成の確認
  24. Clusterの開始と停止の確認
  25. 簡単なTransparent Application Failover (TAF)の確認
  26. PowerBook G4のJDeveloper10g/SQL Developer/SQL*Plusなどからの接続確認(Mac De Oracleではお約束!なので) 
    SQL*Plus編/SQL Developer編/JDeveloper10g編
注)
MacOSX 10.4.8(PowerPC)へのOracle10g clientインストールは特に新しいネタでもないので記事として書く予定はないが、MacOSX 10.4.8(PowerPC)のJDeveloper10g、SQL DeveloperやSQL*Plusからの接続確認等の記録は載せる予定である。

今日は、PowerBook G4 (MacOSX10.4.8)の Oracle JDeveloper10g R3 10.1.3 for MacOSX Studio Editionからの接続確認を行う。
現時点(2007/2/25現在)での最新版である。

● 起動
スプラッシュ画面

Rac_de_oracle_jdev1

● connecttionの設定
jdbc thin driverにて接続。

Rac_de_oracle_jdev2

● emp表を問い合わせてみる。。

Rac_de_oracle_jdev3

と駆け足で接続確認まで行い。10万円 de RACも一旦終了。


いや〜〜、まいったなぁ。熱っぽい。30秒で体温を計れる体温計で体温を計ると、なんと37度?? なんかの間違いか? もう一度計り直す、36.6度。間を取って、36.8度くらいにしとこう。妻には早めに寝ろと言われるし。。まあ。言う事聞いて寝てやるか〜〜。風邪だったらまずいし。。。

| | コメント (0) | トラックバック (0)

2007年2月 1日 (木)

JDeveloper 10.1.3.1.0

10万円 de RAC に集中しているうちに、私がやりたかったネタを、先に妻が書いていた。
しまった〜〜〜。ネタを取らないで〜〜〜。==>妻。(笑)

JDev on iMac  

JDev on iMac にかぶらないようなネタをやらねば。。。。。。あ、パッチがリリースされている。。。と思ったら、Oracle SQL Developer の方でした。

| | コメント (0) | トラックバック (0)

2006年4月30日 (日)

Mac De JDeveloper10g #2 のおまけ。

以前、Software Updateで JDKをアップデートするとデフォルトがJ2SE5.0 Release 4になると書いたが、それに関連する情報が出ていたので追記しておく。

SafariでJava Consoleを使用する場合にもこの Java Preferenceアプリケーションを利用するのだが、Java Consoleの有効化以外の設定もJava Preferenceアプリケーションで行える。
J1

Appletを実行するJavaVM、Java Network Launching Protocolを使って起動されるJava Applicationまたは、Appletを実行するJavaVMのバージョンを設定することができる。

Appletを実行するJavaVMの変更。

J2


Java Network Launching Protocolを使って起動されるJava Applicationまたは、Appletを実行するJavaVMのバージョンを変更するには、該当バージョンをドラッグアンドドロップする
J3


注意)Terminalから実行するjavaコマンドには影響しない。

J4

| | コメント (0) | トラックバック (0)

2006年4月25日 (火)

Mac De JDeveloper10g #2


Img1


さて、JDeveloper10g 10.1.3 に入れ替えたところで、JDeveloper10g Updateを行ってみる。いろいろな拡張機能が提供されたり、更新されている。

尚、これらの機能は、米国OTNからダウンロードされるとのことで、
米国OTNへのログインが必要になることもあるようだ。
(今回は、すべてのUpdateをダウンロードしたのだが、
 米国OTNへのログインが必要でだった。)

以下、更新中の様子(Flash版)






ソフトウェアの更新に関して、Windows、Linux版との違いは無さそうだ。

| | コメント (0) | トラックバック (0)

2006年4月20日 (木)

Mac De JDeveloper10g #1

J2se5


AppleからSoftware Updateがリリースされていた、J2SE5.0 リリース4 これをインストールすると J2SE5.0がデフォルトになる。
http://www.apple.com/jp/ftp-info/reference/j2se50release4ppc.html

尚、Intel版は以下、
http://www.apple.com/jp/ftp-info/reference/j2se50release4intel.html

ということで、よいタイミングなので、 Oracle JDeveloper10g Studio 10.1.3にアップデート。
日本の借金時計は、XCodeを利用したのだが、JDeveloper10gを使ったネタも始めますかね。ー> PL/SQL で Phthon Challenge以外にするとは思うが。。

Jd1


Jd2


Jd3


Jd4

| | コメント (0) | トラックバック (0)