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)

2013年3月23日 (土)

R(relation)の線が無いERDを見てて..思いついたこと....でもメンテする気がなけりゃ同じだけどな

ExcelでメンテされてないERDとか、リリース当初からERDのR(relation)の線がない(ヒアリングするrelationは確かにあるんだよ)ERDとか見てて...寂しくなった。
ERD見る意味ないじゃん。というか、なんでそんなERDメンテするのに工数取ってんの?
とか、そんなERDベースにテストデータどうやって作るのさ...急に呼ばれて飛び出てきたのに...
ということをもやもや考えてた日々がしばらくありまして...

Oracle SQL Developer ModelerでリバースエンジニアリングしてERD作ろうと思っても...

そういう所って外部参照制約なんてないんですよ。

そもそも外部参照制約作れないだろって所もあるわけですけど...それはない前提で...

20130323_145704

20130323_145856

ERDをリバースエンジニアリングで作成しようと思うと、エンティティ図になってしまうという残念な結果になるのは目に見えてるわけです。はい。(><)

外部参照制約作成していれば.....

20130323_154430_2

20130323_154436


20130323_154444


20130323_154451_2


20130323_154503

こんな感じですぐにできるので、面倒くさくなくて素敵なんですね。

だた、参照整合性嫌いだし。とか、毎日夜間バッチで整合性チェックしてるからいいの!
ってところは多いわけです。


....で....ある日、電球がピカりんこと光った訳ですよ....


Oracle SQL Developer Data Modelerのリバースエンジニアリングって 、外部参照制約がdisableかつnovalidateで制約が効かない(一部制限あり*1)状態でもERDではrelation作成してくれるかも〜〜〜〜。と。

忘れないうちにすぐ試す!
外部参照制約はdropしないで、disable かつ novalidate済み!


20130323_144207


20130323_144244


20130323_144256


20130323_144311


20130323_144318

できた〜〜〜〜っ!


Enjoy! Oracle SQL Data Modeler and Developer !



*1:
外部参照整合性をdisable かつ novalidateにしていても外部参照整合性が作成されているだけで親表は子表より先にdropできなくなるのでその点はお忘れなく!

試験環境は以下のとおり
Oracle11g R2 for linux x86
Oracle SQL Developer 3.3.20 for OS X
Oracle DataModeler 3.1.4 for OS X

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

2009年9月27日 (日)

Oracle SQL Developer Data Modeler #3

前回予告したようにOracle SQL Developer Data Modeler 2.0で日本語を使ったモデリングを試してみた。まず使用感から先に書いておくと”まあまあ”と言ったところ。
日本語を使う上で注意する点も現時点ではまだまだあるな。という感じで、その辺りが面倒だとか気になるようであればERwinとかObjectBrowser ERとか既存のツールを使った方が楽だと感じる方も多いかもしれない。


まずはYouTubeへアップしたムービーでご覧ください。
論理モデルを日本語で作成し、物理モデルへ変換する。
その際のポイントは以下。

  • 変換する際に英語表記へ変換しているが制約名(主キー制約、ユニーク制約、外部参照制約など)を日本語表記から英語表記へ置換する機能が無い(?)ようで、制約名に関しては論理モデル上で英語表記へ手動変更している。

  • 外部参照制約では外部キー削除時のデフォルトアクションをNO ACTIONと設定していてもSET NULLが設定されてしまうため、この項目についても適宜手動で設定する必要がある。

  • DDL生成時に指定した名称を置換する「Name Substitution」機能は動作しないようなので使うのをやめた。(使い方が悪いのか?)

  • 今回あえて、日本語名のままのカラム(従業員.給与)を残しておきDDLにどのように書き出されるか確認しておいた。結果としては識別引用子(quoted identifier)は付加されないので「日本語名称でテーブル等のデータベースオブジェクト名称」を作成したいという方々には残念!かも。ただ、どうしても識別引用子を付加したい場合もあると思うのでDDL生成時オプションとして用意してもらえると良いと思う。(確かObjectBrowser ERはそんな機能があったような気がする。)

  • 論理モデル上にてリレーションを作成した場合、属性名称のPreferred Abbreviationに指定した名称を継承しないので手動で入力する必要がる。(タイプミスには要注意。)


ムービーは最大化するといいよ!

ムービーで作成した物理モデルから生成したDDLは以下の通り。(EMPLOYEESの給与列はあえてマルチバイトのままにしてあるが識別引用子が付加されていない。赤太字部分)

他に気付いたことも幾つかあった気がする・・・・・。が・・・思い出したらこのエントリに追記するか別エントリにする予定。

尚、論理モデルから物理モデルへ変換する際「Apply Name Translation」と「Use preferred abbreviations」をチェックしたが、「Use preferred abbreviations」をチェックしなかった場合はどこに設定した名称に変換してくれるのか未確認。


-- Generated by Oracle SQL Developer Data Modeler Version: 2.0.0 Build: 570
-- at: 2009-09-26 22:05:49
-- site: Oracle Database 11g
-- type: Oracle Database 11g


CREATE TABLE DEPARTMENTS
(
DEPARTMENT_ID NUMBER (4) NOT NULL ,
DEPARTMENT_NAME VARCHAR2 (60 BYTE) NOT NULL
) TABLESPACE HOGE_TS

;


COMMENT ON TABLE DEPARTMENTS IS '部署マスタ'
;

COMMENT ON COLUMN DEPARTMENTS.DEPARTMENT_ID IS '部署ID'
;

COMMENT ON COLUMN DEPARTMENTS.DEPARTMENT_NAME IS '部署名'
;
CREATE UNIQUE INDEX DEPARTMENTS_PKX ON DEPARTMENTS
(
DEPARTMENT_ID ASC
)
;

ALTER TABLE DEPARTMENTS
ADD CONSTRAINT DEPARTMENTS_PK PRIMARY KEY ( DEPARTMENT_ID ) ;


CREATE TABLE EMPLOYEES
(
EMPLOYEE_ID NUMBER (5) NOT NULL ,
EMPLOYEE_NAME VARCHAR2 (40 BYTE) NOT NULL ,
給与 NUMBER (7,2) NOT NULL ,
DEPARTMENT_ID NUMBER (4) ,
MGR_ID NUMBER (5)
) TABLESPACE HOGE_TS

;



COMMENT ON TABLE EMPLOYEES IS '従業員マスタ'
;

COMMENT ON COLUMN EMPLOYEES.EMPLOYEE_ID IS '従業員ID'
;

COMMENT ON COLUMN EMPLOYEES.EMPLOYEE_NAME IS '従業員名'
;

COMMENT ON COLUMN EMPLOYEES.給与 IS '給与'
;

COMMENT ON COLUMN EMPLOYEES.DEPARTMENT_ID IS '部署ID'
;

COMMENT ON COLUMN EMPLOYEES.MGR_ID IS '上司ID'
;
CREATE UNIQUE INDEX EMPLOYEES_PKX ON EMPLOYEES
(
EMPLOYEE_ID ASC
)
;
CREATE INDEX EMP_DEPT_FK1X ON EMPLOYEES
(
DEPARTMENT_ID ASC
)
;
CREATE INDEX EMP_EMP_FK1X ON EMPLOYEES
(
MGR_ID ASC
)
;

ALTER TABLE EMPLOYEES
ADD CONSTRAINT EMPLOYEES_PK PRIMARY KEY ( EMPLOYEE_ID ) ;



ALTER TABLE EMPLOYEES
ADD CONSTRAINT EMP_DEPT_FK1 FOREIGN KEY
(
DEPARTMENT_ID
)
REFERENCES DEPARTMENTS
(
DEPARTMENT_ID
)
;


ALTER TABLE EMPLOYEES
ADD CONSTRAINT EMP_EMP_FK1 FOREIGN KEY
(
MGR_ID
)
REFERENCES EMPLOYEES
(
EMPLOYEE_ID
)
;


-- Oracle SQL Developer Data Modeler Summary Report:
--
-- CREATE TABLE 2
-- CREATE INDEX 4
-- ALTER TABLE 2
-- CREATE VIEW 0
-- CREATE PROCEDURE 0
-- CREATE TRIGGER 0
-- CREATE STRUCTURED TYPE 0
-- CREATE COLLECTION TYPE 0
-- CREATE CLUSTER 0
-- CREATE CONTEXT 0
-- CREATE DATABASE 0
-- CREATE DIMENSION 0
-- CREATE DIRECTORY 0
-- CREATE DISK GROUP 0
-- CREATE ROLE 0
-- CREATE ROLLBACK SEGMENT 0
-- CREATE SEQUENCE 0
-- CREATE SNAPSHOT 0
-- CREATE SYNONYM 0
-- CREATE TABLESPACE 0
-- CREATE USER 0
--
-- DROP TABLESPACE 0
-- DROP DATABASE 0
--
-- ERRORS 0
-- WARNINGS 0




バックナンバー
Oracle SQL Developer Data Modeler #1
Oracle SQL Developer Data Modeler #2

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

2009年9月20日 (日)

Oracle SQL Developer Data Modeler #2

Oracle SQL Developer Data Modelerの第2回目です。
今回はOracle database 11g release 2 for Linux x86のHRスキーマのテーブル定義をリーバスエンジニアリングし物理モデルと論理モデル、ついでにDDLも生成してみた。以下のムービーの通りリレーションの自動レイアウトはちょっとイマイチかもしれないがそれ以外は良さげです。ちなみに今回の例でも日本語は使っていません。多分次回のエントリで日本語を使っている所を出せるかも。。あくまで予定ですので未定ですが。


以下のムービーはQuickTIme XのScreen Recorderで記録後、YouTubeへアップロード。さらにサウンドトラックをYouTube上で設定した。


尚、上記例ではOracle SQL Developer Data ModelerからOracle database 11g release 2 へはTNS接続していましうす。MacOS XのOracle SQL DeveloperでTNS接続を利用する方法と同じです。詳細は以下を参照してください。

「Oracle SQL Developer for MacOSX で Oracle Instant Clientを使ってみる」


バックナンバー
Oracle SQL Developer Data Modeler #1

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

2009年9月18日 (金)

Oracle SQL Developer Data Modeler #1

最近、Oracle SQL Developerのエントリが検索上位に来ていたので久々に新ネタです。Oracle SQL Developerに組込まれる?(ちゃんと読んだわけではないので違うかも)というOracle SQL Developer Data Modelerのお話。

このエントリでは書きませんが、メニューなど日本語化されていないのですがエンティティなどでは多少問題はありますが日本語は扱えるようです。(注)私が日本語を使って試した範囲に於いて。

今回利用したのはMacOS X Snow Leopard でOracle SQL Developer Data Modeler for MacOS Xを単体で起動できるようにした後にOracle SQL Developer for MacOS Xの外部アプリケーションとして起動するところまで。(ちなみに、PowerPC版のMacOS X TigerでもJDK6 Developer Previewがインストールされていれば利用できます。)


Datamodeler_2

では、さっそくやってみましょう!

OTNのサイトからダウンロードしたOracle SQL Developer Data Modeler for MacOS Xを適当な場所に解凍します。(今回は/Applications以下に展開)
Oracle SQL Developer Data ModelerをMacOS X上で起動するには、Data Modelerを解凍したディレクトリ直下にあるdatamodeler.shをTerminalから実行します。
尚、ダウンロード・解凍直後はdatamodeler.shの実行権限が無いので実行権限を付与しておきます。

guppy:˜ discus$ cd /Applications/datamodeler 
guppy:datamodeler discus$ ll
total 256
drwxr-xr-x@ 8 discus staff 272 9 18 04:10 bin
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 conf
-rw-r--r--@ 1 discus staff 118784 6 26 03:42 datamodeler.exe
-rw-r--r--@ 1 discus staff 60 6 26 03:42 datamodeler.sh
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 doc
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 domains
-rw-r--r--@ 1 discus staff 4279 6 26 03:42 icon.png
drwxr-xr-x@ 16 discus staff 544 9 18 04:05 lib
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 logtypes
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 rdbms
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 reports
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 templates
guppy:datamodeler discus$
guppy:datamodeler discus$ chmod ug+x datamodeler.sh
guppy:datamodeler discus$ ll
total 256
drwxr-xr-x@ 8 discus staff 272 9 18 04:10 bin
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 conf
-rw-r--r--@ 1 discus staff 118784 6 26 03:42 datamodeler.exe
-rwxr-xr--@ 1 discus staff 60 6 26 03:42 datamodeler.sh
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 doc
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 domains
-rw-r--r--@ 1 discus staff 4279 6 26 03:42 icon.png
drwxr-xr-x@ 16 discus staff 544 9 18 04:05 lib
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 logtypes
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 rdbms
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 reports
drwxr-xr-x@ 3 discus staff 102 9 18 04:05 templates
guppy:datamodeler discus$


JavaSEは1.6がデフォルトになっていますが、まだ、このままではData Modelerを実行できません。

guppy:datamodeler discus$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03-219)
Java HotSpot(TM) 64-Bit Server VM (build 14.1-b02-90, mixed mode)
guppy:datamodeler discus$


なにもしないで実行すると、~/jdk.confに設定されるJ2SEのホームディレクトリのフルパスの入力を求められます。指示に従いそのまま入力してもよいのですが、datamodelerとは直接関係の無いディレクトリにjdk.confが作成されるのが嫌なので、別の方法で設定します。

guppy:datamodeler discus$ ./datamodeler.sh &
[1] 2198
guppy:datamodeler discus$
Oracle SQL Developer Data Modeler
Copyright (c) 1997, 2009, Oracle and/or its affiliates.All rights reserved.

Type the full pathname of a J2SE installation (or Ctrl-C to quit), the path will be stored in ˜/jdk.conf

[1]+ Stopped ./datamodeler.sh
guppy:datamodeler discus$


Data Modelerを解凍したディレクトリ以下の /bin/datamodeler.confのSetJavaHomeパラメータにJavaSE6.0へのフルパスを設定します。

guppy:datamodeler discus$ vi ./bin/datamodeler.conf
guppy:datamodeler discus$ grep SetJavaHome ./bin/datamodeler.conf
SetJavaHome /System/Library/Frameworks/JavaVM.framework/Versions/1.6/home


尚、MacOS XのJavaへのパスは以下のように管理されています。今回は、1.6/homeを設定しています。

guppy:datamodeler discus$ 
guppy:datamodeler discus$ ll /System/Library/Frameworks/JavaVM.framework/Versions
total 48
lrwxr-xr-x 1 root wheel 5 9 2 17:21 1.3 -> 1.3.1
drwxr-xr-x 3 root wheel 102 7 21 08:35 1.3.1
lrwxr-xr-x 1 root wheel 5 9 2 17:21 1.5 -> 1.5.0
drwxr-xr-x 7 root wheel 238 9 2 17:21 1.5.0
lrwxr-xr-x 1 root wheel 5 9 2 17:21 1.6 -> 1.6.0
drwxr-xr-x 7 root wheel 238 9 2 17:21 1.6.0
drwxr-xr-x 8 root wheel 272 9 2 17:21 A
lrwxr-xr-x 1 root wheel 1 9 2 17:21 Current -> A
lrwxr-xr-x 1 root wheel 3 9 2 17:21 CurrentJDK -> 1.6
guppy:datamodeler discus$


これでやっと起動できるようになります。

guppy:datamodeler discus$ ./datamodeler.sh &
Oracle SQL Developer Data Modeler
Copyright (c) 1997, 2009, Oracle and/or its affiliates.All rights reserved.


[2]- Done ./datamodeler.sh
guppy:datamodeler discus$
Osdm_window_2

Data Modelerを起動するのに毎回Terminalを開いて、shellを実行するというのは面倒という方は、.sh の部分を .command と書き換えてください。ダブルクリックで起動できるようになります。
.command に変更後エイリアスをDockに登録しておけばクリック一発で起動できます。


他の方法として、Oracle SQL Developerの外部アプリケーションとして登録しておきOracle SQL Developer経由で起動する方法があります。
登録するのは、 .sh の方でも .command の方でも、どちらでも構いません。以下の例では datamodeler.sh を外部アプリケーションとして登録・起動しています。


おまけ、JavaSE5.0を設定してしまうと・・・・・・こんなことになっちゃいますからご注意を。

guppy:datamodeler discus$ ./datamodeler.sh &
[1] 891
guppy:datamodeler discus$
Oracle SQL Developer Data Modeler
Copyright (c) 1997, 2009, Oracle and/or its affiliates.All rights reserved.

java.lang.UnsupportedClassVersionError: Bad version number in .class file
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
Exception in thread "main" ll


次回につづく。

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