Mac OS XへのOracle9i及びODBCドライバの導入
Mac OS X用の商用RDBMSとしては「Sybase ASE 12.5 for Mac OS X」があります。
(日本語版は2003年5月20日にリリース:開発ライセンス版の無償ダウンロードもできます)
一方のOracle社もMac OS X v10.2(Jaguar) Server用のOracle9i開発ライセンス版の無償ダウンロードサービスを行っています。
今回はそのOracle9i開発ライセンス版をMac OS X v10.3(Panther)に導入してみました。
更にOracle9i/MySQL/PostgreSQL用のODBCドライバも導入しREALbasicからも利用してみました。
(REALbasicからはOracle9i/MySQL/PostgreSQLをネーティブアクセスすることも可能)
Mac OS Xに導入したOracleはOracle9i Database Release 2 Enterprise Edition for Apple Mac OS X Version 10.2 Jaguar(以下単にOracle9iと表記)です。
またODBCドライバはOpenLink Software社のものを導入してみました。
ここではMac OS XへのOracle9iの導入&利用を中心にMac OS XからMySQL/PostgreSQLへのアクセスについても簡単に紹介します。
■ Mac OS XへのOracle9i導入
Mac OS X用の開発者向けOracle9iはOTN(Oracle Technology Network)にて公開されています。
Mac OS X用Oracle9iの導入手順の概略は以下の通りです(詳細説明は省略します)。
尚、Mac OS X用Oracle9iにはインストーラが付属していないため圧縮ファイルを解凍して各種制御ファイル(tnsnames.ora, listener.ora等)は自前で用意する必要があります。
- Oracle9iのダウンロード
OTNにて公開されているOracle9iはMac OS X v10.2(Jaguar)用となっていますがMac OS X v10.3(Panther)でも利用可能です。
ダウンロードファイルはmacosx_920_dev_rel.tar.gzです(サイズ:361,755,594バイト)。
AirMac Extreme環境でも20分程度でダウンロードできます。
- NetInfoのコマンドにてdbaグループとその中のoracleユーザを作成
- インストールディレクトリの作成
今回は一般的流儀に従って/opt/oracle/product/9.2.0にOracle9iをインストールするために/opt/oracle/productディレクトリを作成します。
- Oracle SIDの決定
今回は「test」というSIDにすることにしました。
- ダンプ用ディレクトリの作成
cdump(コアダンプ用)、udump、bdump等のディレクトリを作成します。
- ファイルの解凍
ダウンロードしたmacosx_920_dev_rel.tar.gzを/opt/oracle/productに移動させ、
/opt/oracle/productディレクトリにて以下のコマンドを実行して解凍します。
tar xvzf macosx_920_dev_rel.tar.gz
解凍するとorahomeディレクトリ(約1.8GB)が作成されるのでその名称を「9.2.0」に変更します。
- oracleユーザ用.bash_profileの作成
oracleユーザ用の「.bash_profile」にORACLE_HOME, ORACLE_SID等の環境変数を設定してそれらの環境変数を有効にします。
例;
export ORACLE_HOME=/opt/oracle/product/9.2.0
export ORACLE_SID=test
- inittest.oraの作成
Oracle SIDを「test」にしているため$ORACLE_HOME/dbs/inittest.oraを作成します。
- listener.oraの作成
他のマシンからの接続を受け付けるための制御ファイルである$ORACLE_HOME/network/admin/listener.oraを作成します。
- tnsnames.oraの作成
Oracleサービス定義ファイルである$ORACLE_HOME/network/admin/tnsnames.oraを作成します。
- データベースの作成
データベース領域を作成すると共にscottユーザ用のサンプルテーブルを作成します($ORACLE_HOME/DBCreate/createDBスクリプトが参考になります)。
尚、サンプルテーブル作成用のSQLスクリプトは解凍ファイル中に存在します。
これでOracle9iを利用する準備が整いました。
■ Oracle9iの起動と停止
手動でOracle9iを起動/停止するにはoracleユーザにて起動/停止コマンドを使用します。
- Oracle9iの起動
以下のコマンドでOracle9iを起動します。
sqlplus "/ as sysdba"
SQL> startup
- リスナーの起動
リスナーの起動は「lsnrctl start」コマンドで行います。
- リスナーの停止
リスナーの起動は「lsnrctl stop」コマンドで行います。
- Oracle9iの停止
以下のコマンドでOracle9iを停止させます。
sqlplus "/ as sysdba"
SQL> shutdown immediate
- 補足:その他の起動/停止方法
- dbstartコマンド
Oracle9iにはdbstartコマンドが用意されています。
このdbstartコマンドはシェルスクリプトですが、その中に「ps -ef ...」という記述があります。
DarwinではSolarisとは違ってpsコマンドで-efオプションを使用することはできません。
そこで「ps -ef ...」を「ps -ax ...」に変更しておきます(Solarisでは-axオプション使用不可)。
更に、dbstartを使用するには/etc/oratabが必要となります。
oratabは以下の内容にて作成しておきます。
test:/opt/oracle/product/9.2.0:Y
- dbshutコマンド
Oracle9iにはdbshutコマンドも用意されています。
■ Oracle9iでのテーブル作成とテーブル検索
SQL*Plusにてテーブルを作成したり、テーブルのカラムに値をセットしたりします。
下の例はテーブル定義の例です。
下の例はテーブル検索の例です。
別マシンのLinuxやWindowsからもアクセスしてみました。
■ Mac OS X用ODBCドライバの導入
Mac OS X用のODBCドライバとしてOpenLink Software社のサイト(http://www.openlinksw.com/)にてリリースされているものを導入してみました。
Mac OS X用のODBCドライバはiODBCのODBCドライバをOpenLink Software社がMac OS X用に移植したものです。
- Oracle用ODBCドライバ(OpenLink Oracle 8 Lite ODBC Driver)
OpenLink Software社のサイトからm5l5o81z.dmg(ディスクイメージ)をダウンロードしインストールします。
本ドライバはOpenLink Software社のサイトにおいてMac OS X 10.2.x/10.3.x及びOracle 8 & 9に対応しているとされています。
- MySQL用ODBCドライバ
OpenLink Software社のサイトからm5l5y3zz.dmg(ディスクイメージ)をダウンロードしインストールします。
- PostgreSQL用ODBCドライバ
OpenLink Software社のサイトからm5l5g7zz.dmg(ディスクイメージ)をダウンロードしインストールします。
■ Mac OS X用ODBCデータソースの設定/テスト
ODBCデータソースの定義はOpenLink ODBC Administrator(iODBC Data Source Administrator)で行います。
OpenLink ODBC AdministratorはMac OS X標準の「ODBCアドミニストレータ」と違って<Test>ボタンでODBCデータソースとの接続テストもできるようになっています。
- Oracle用ODBCデータソース
Mac OS X自体にインストールしたOracle9iをODBCでローカルアクセスするためのテスト用ODBCデータソースを定義してみました。
しかしiODBCのodbctestツールでは動作しませんでした。
ODBCのログ(sql.log)を見るとSQLDriverConnect関数でエラーが発生しており接続が失敗しているようでした。
そこでOpenLink Software社のホームページを見ると「client connections to Oracle 9.2 on Mac OS X require new libclntsh.dylib.9.0」という不具合報告がされていました。
libclntsh.dylib.9.0というのはMac OS X用Oracle9i付属のOCI(Oracle Call Interface)ライブラリ(Mac OS X用共有ライブラリ)です。
そこでOpenLink Oracle 8 Lite ODBC Driver付属のlibclnsh8.dylibをOracle9i付属のlibclntsh.dylib.9.0へのシンボリックファイルとなるようにしました。
null値のカラムが「*************...」として表示されています。
- MySQL用ODBCデータソース
iODBCにはodbcのtestツール(iodbctest)が付属しておりそれでODBCの接続/アクセステストが行えます。
下記はRed Hat 7.3上のMySQLサーバをMySQL用ODBCを利用してアクセスした例です。
- PostgreSQL用ODBCデータソース
下記はRed Hat 7.3上のPostgreSQLサーバをPostgreSQL用ODBCを利用してアクセスした例です。
- odbc.iniの内容
odbc.iniの内容はこちらです。
Oracle9i用のSIDの値は「Options = -Q test」というように記述されています。
■ Mac OS X用REALbasicからのODBCアクセス
REALbasicを使用してOracle9i/MySQL/PostgreSQLの各ODBCデータソースをアクセスしてみました。
- Oracle9iアクセス
REALbasicを使用してODBCアクセスするにはいくつかの方法があります。
一番手っ取り早いのはDataControlコントロールやDatabaseQueryコントロールと呼ばれる部品を使用する方法です。
またREALbasicで用意されているODBC関連のオブジェクト、メソッド、プロパティを使用してODBCアクセスすることもできます。
更にはREALbasic標準の問い合わせ機能によるテーブルデータ表示もできます。
- DataControlコントロールの利用例
- プロジェクトへのODBCデータソースの追加
[ファイル]−[データソースの追加]−[ODBC Database]を実行してODBCデータソースを選択します。
これは「iODBC Data Source Chooser」画面で行います。
Oracleへのログイン画面で接続後、選択したODBCデータソースはプロジェクトウィンドウに追加されます。
- 画面のデザイン
ツールパレットにあるDataControlコントロールをウィンドウエディタにドラッグします。
そのDataControlコントロールのプロパティとして下記を設定します。
・Database:odbcoracleを選択
・TableName:MACAPTABLEを選択
・SQLQuery:select * from macaptable
更にツールパレットにあるEditFieldコントロールをウィンドウエディタにドラッグします。
そのEditFieldコントロールのプロパティウィンドウの「データベースバインド」部分で下記を設定します。
・DataSource:DataControlのコントロール名の選択
・DataField:検索テーブル内のフィード選択
これらの操作は必要数分繰り返します(完成したデザイン画面)。
- 実行例
DataControlコントロールをナビゲータとして使用することができます。
- DatabaseQueryコントロールの利用例
ここではDatabaseQueryコントロールで指定した検索内容をリストボックスに表示させる例を紹介します。
- まずプロジェクトへODBCデータソース(odbcoracle)を追加します。
- 次にツールパレットにあるDatabaseQueryコントロールをウィンドウエディタにドラッグします。
そのDatabaseQueryコントロールのプロパティとして下記を設定します。
・SQLQuery:select * from macaptable (3列の取得となります)
・Database:odbcoracleを選択
- ツールパレットにあるListBoxコントロール(複数列タイプ)をウィンドウエディタにドラッグします。
ListBoxのプロパティに3列の設定をします。
- ListBoxとDatabaseQueryをバインドします。
バインドの方法はまずcommand+shiftキーを押しながらDatabaseQueryコントロールをListBoxにドラッグします(点線表示となります)。
ドラッグすると「New Binding」ダイアログが表示されます。
そのダイアログで<Bind ListBox1 with list data from DatabaseQuery1 results>を選択します。
この時点で点線が実線になります。
- 実行例
あまりに単純すぎるのでウィンドウ/リストボックス装飾のプロパティ設定をしてみました(ウィンドウ装飾後の実行例)。
- ODBC関連のオブジェクト、メソッド、プロパティの利用例
REALbasicにはODBCDatabase、RecordSet等のクラスが用意されています。
これらのクラス/オブジェクトを使用して極めてシンプルなサンプルアプリケーションを作成してみました。
本サンプルの仕様は画面から指定された情報を元にMac OS Xに導入したOracle9iをODBC経由で接続/アクセスします。
実際にはデータ検索して得られた最初のレコードの最初の3個のフィールド値を画面に表示するだけという簡単なものです。
検索結果以外の部分(ユーザ、パスワード、SQL文)はプリセットしており実行時に変えられるようにしています。
- 画面デザイン
実寸画像はこちらです。
- コードエディタ
テスト用につきODBCデータソースの接続エラー以外のエラー処理は全く含めていません。
- 実行例
尚、上記コード中にはOracleを意識したコードを含めていませんので他のDBMSのODBCアクセスのテストにも使用できます(MySQLの例、PostgreSQLの例)。
- REALbasicのデータベースツール利用例
REALbasicにはデータベースツールとしてデータベーステーブルの定義(スキーマ編集)、テーブルの追加・削除、テーブルデータの表示を行うための一種の支援ツールが付いています。
使い方は極めて簡単です。
- プロジェクトへのODBCデータソースの追加
[ファイル]−[データソースの追加]−[ODBC Database]を実行してODBCデータソースを選択します。
これは「iODBC Data Source Chooser」画面で行います。
選択したODBCデータソースはプロジェクトウィンドウに追加されます。
そのODBCデータソースを開くとテーブル管理支援用の画面にテーブル一覧が表示されます。
その画面には「データ表示」「スキーマ編集」「新規テーブル」「テーブル削除」という4個のボタンがあります。
- スキーマ編集画面
- テーブルのデータ表示例
テーブルを選択して<データ表示>ボタンを押すと問い合わせ画面が表示され、デフォルトのSQL文も表示されます。
SQL文を確認(変更も可)して<問い合わせ>ボタンを押すとテーブルデータが表示されます。
- MySQLアクセス
Oracle9iアクセスの場合と同様にREALbasic付属のデータベースツールでMySQLのテーブル内容を表示してみました。
- PostgreSQLアクセス
DataControlコントロールを使用してテーブル検索してみました(REALbasic付属のデータベースツールでのデータ表示も同時使用)。
■ Mac OS X用REALbasicからOracle9iへのネーティブアクセス
REALbasicにおいてはOracle9iをODBC経由だけではなくネーティブアクセスすることもできます。
- データベースツールの利用
- [ファイル]−[データソースの追加]−[Oracle Database]の選択
- 接続先の指定
「Select Oracle」で接続先を指定します。
Server欄にはSIDを指定します。
- データベースツールでのネーティブアクセス(データ表示)
ちなみにMySQLやPostgreSQLについてもREALbasicからネーティブアクセスすることができます。
- OracleDatabaseクラスの利用例
DatabaseクラスのサブクラスとしてOracleDatabase, MySQLDatabasae, PostgreSQLDatabaseクラスがあります。
ここではOracleDatabaseクラスを利用してOracle9iにネーティブ接続してDBアクセスした例を紹介します。
尚、MySQLDatabase,PostgreSQLDatabaseクラスを使用してネーティブアクセスする場合には、Host及びPortプロパティも指定する必要があります。
- MySQLDatabaseクラスを利用したMySQLアクセス
- PostgreSQLDatabaseクラスを利用したPostgreSQLアクセス
■ Mac OS X用FileMaker ProからOracle9iへのODBCアクセス
Mac OS X用FileMaker Pro 7(英語版)を使用してOracle9i/MySQL/PostgreSQLをODBCアクセスしてみました。
このFileMaker ProはOpenLink Software社のMySQL/PostgreSQL用ODBCドライバと共に使用できます。
例えば[File]−[Open]でデータベースの種類として「ODBC Data Source」を選択すると「Select ODBC Data Source」ダイアログが表示されます。
そこでMySQLやPostgreSQLのODBCデータソースを選択して「SQL Query Builder」でSQLを作成して実行すればMySQLやPostgreSQLのデータをFileMaker Pro側に取り込むことができます。
・MySQLのデータ取り込み結果例
・PostgreSQLのデータ取り込み結果例
さて本題のOracle9iアクセスについてですがODBCドライバはFileMaker Pro付属の「FileMaker ODBC 4.0 Oracle Wire Protocol Driver」を使用する必要があります。
本ドライバは「ODBC Import Drivers Installer」を実行することで/Library/CFMSupportに「FileMaker 4.0 OracleWP Driver」としてインストールされます。
/Library/CFMSupportには「iODBC CFM Bridge」もインストールされます。
- Oracle用ODBCの定義
アプリケーションの「DataDirect ODBC Folder」にある「ODBC Configure」を起動してODBCデータソースを定義します。
ここで定義したユーザデータソース情報はホームディレクトリ>ライブラリ>Preferences中の「ODBC Preferences PPC」というテキストファイルに格納されます。
- Oracle用ODBCデータソースの選択
[File]−[Open]でデータベースの種類として「ODBC Data Source」を選択します。
「Select ODBC Data Source」ダイアログが表示されますのでOracle用データソースを選択します。
- SQL Query Builderによるデータの取り出し
SQL Query BuilderによりSQLを生成し実行するとFileMaker Pro側にOracle9iのデータを取り込むことができます。
- フォームのデザイン変更
[View]−[View as Form]でフォーム形式でデータ表示し、デザインモードにしてフォームをカスタマイズします。
カスタマイズ後のフォーム例
- Script MakerによるOracle9iデータベースの直接更新
FileMaker Proの「Script Maker」における「Execute SQL」を使用してOracle9iデータベースを直接更新できます。
MyExecuteSQLというスクリプトを作成登録してUPDATE文を実行してみました(「Kernel」を「カーネル」に更新)。
SQLの実行でエラーが発生するとODBCのエラーメッセージが表示されます。
エラーが無ければSQL実行の画面は自動的に消えます。
UPDATE実行後に再度Oracle9iのデータを取り込み直しました。
■ Mac OS X用Oracle9iの日本語データ表示
上記で使用したOracle9iのサンプルテーブル(macaptable)の内容を一部日本語データに更新してデータ表示してみました。