※以下の内容はがんばって動かそうとしたログ、なのですが、最終的にはちゃんとは動きませんでした。どういう理由だったかは詳しく覚えてなくて申し訳ないです。かなり惜しいところまで行ったんですが。もし、DBD::OracleをMacで動かす件、うまく行った方がいらっしゃったら、ご連絡ください。よろしくお願いします。

あとでかく。ほんとにかく。

dscl . -create /groups/oinstall
dscl . -append /groups/oinstall gid 600
dscl . -append /groups/oinstall passwd "*"
dscl . -create /users/oracle
dscl . -append /users/oracle uid 600
dscl . -append /users/oracle gid 600
dscl . -append /users/oracle shell /bin/bash
dscl . -append /users/oracle home /Users/oracle
dscl . -append /users/oracle realname "Oracle software owner"
mkdir /Users/oracle
chown oracle:oinstall /Users/oracle
  • passwdしなくてもsudo su - oracleとしてログイン可能だけど、システム環境設定のアカウントで見えない。ユーザーの削除が面倒なのでpasswdした方が良さそう。
  • なんでdsclしてるのかというと、uidとgidを600にしたいから、なのね。
  • /etc/sysctl.confを作る。これは申し訳ないがコピペ。
kern.sysv.semmsl=87381
kern.sysv.semmns=87381
kern.sysv.semmni=87381
kern.sysv.semmnu=87381
kern.sysv.semume=10
kern.sysv.shmall=2097152
kern.sysv.shmmax=2197815296
kern.sysv.shmmni=4096
kern.maxfiles=65536
kern.maxfilesperproc=65536
net.inet.ip.portrange.first=1024
net.inet.ip.portrange.last=65000
kern.corefile=core
kern.maxproc=2068
kern.maxprocperuid=2068
  • 以上の作業をして、reboot。起動時にカーネルパラメータが変更される。結構起動に時間がかかって焦るけど昼飯に行くなどするとよい。
  • sudo su - oracleとして、oracleユーザーになる
  • .bash_profileを書いて、. .bash_profileとして読み込む。
export DISPLAY=:0.0
export ORACLE_BASE=$HOME
umask 022
ulimit -Hn 65536
ulimit -Sn 65536
  • ダウンロードしたdb.zipをsudo chown oracle:oinstall db.zip;mv db.zip ~oracleとして、oracleのホームディレクトリに持ってくる。そしてインストーラ起動。これでGUIのインストーラが起動する。
unzip db.zip
./db/Disk1/runInstaller
  • GUIでのインストール時にDBも一緒に作るように書いてあったんだけど、後で作った方がいい気がした。どうにも作ったDBが起動出来なかったもんでな。
  • GUIの最後に/Users/oracle/oracle/product/10.2.0/db_1/root.shをrootで実行しろといわれるので、そうする。これでソフトウェアのインストールは完了。
  • DBのインストールを始める。その前に環境変数をセット。.bash_profileに追記して. .bash_profileする。
export ORACLE_HOME=/Users/oracle/oracle/product/10.2.0/db_1
export DYLD_LIBRARY_PATH=$ORACLE_HOME/lib
export ORACLE_SID=ORCL
export PATH="$ORACLE_HOME/bin:$PATH"
  • dbcaとして、database configuration assistantを起動する
  • 気をつけるのは、
    • グローバル・データベース名: orclとすると、SIDがorclと自動で埋まるけど、どうも不整合が起きるっぽいので、SIDはORCLと大文字にしておく
    • データベース・キャラクタ・セットをAL32UTF8にしておく
    • デフォルト言語を英語にしておく(日本語だとsqlplusで入った時に文字化けた)
  • 出来上がったらパスワードの設定をしろと言われるので、参考にしたページと同様、hrユーザーだけロックを外してパスワードをhrにした。
  • lsnrctl startとして、リスナーを起動する。
  • $ORACLE_HOME/network/log/listener.logを眺めて、以下のような行が出てくるまで待つ。出てこなかったらなにかがおかしい。
28-JUL-2009 13:39:06 * service_register * ORCL * 0
  • service_registerが走ったら接続可能なので、sqlplus hr/hr@127.0.0.1:1521/orclのようにして接続する。
sylvia:~ oracle$ sqlplus hr/hr@127.0.0.1:1521/orcl

SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jul 28 14:11:46 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Release 10.2.0.4.0 - Production

SQL> 
  • SQL>のプロンプトが出たら接続成功。 select table_name from tabs;でテーブル名の一覧が見える。これはサンプルのスキーマについてきたやつ。うむ。うまくいった。exitで終了。
SQL> select table_name from tabs;

TABLE_NAME
                                                                                                                    - REGIONS
LOCATIONS
DEPARTMENTS
JOBS
COUNTRIES
EMPLOYEES
JOB_HISTORY

7 rows selected.

SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.4.0 - Production
  • lsnrctl stopでリスナーを停止。
  • インスタンスを落とす。
sylvia:~ oracle$ lsnrctl stop

LSNRCTL for MacOS X Server: Version 10.2.0.4.0 - Production on 28-JUL-2009 14:14:17

Copyright (c) 1991, 2007, Oracle.  All rights reserved.

Connecting to (ADDRESS=(PROTOCOL=tcp)(HOST=)(PORT=1521))
The command completed successfully
sylvia:~ oracle$ sqlplus /nolog

SQL*Plus: Release 10.2.0.4.0 - Production on Tue Jul 28 14:14:39 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> conn / as sysdba
Connected.
SQL> show parameter service_name;

NAME				     TYPE	 VALUE
                                                                                                                                            - ----------- ------------------------------
service_names			     string	 orcl
SQL> shutdown
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> show parameter service_name;
ORA-01034: ORACLE not available


SQL> exit;
Disconnected from Oracle Database 10g Release 10.2.0.4.0 - Production
  • これで一旦終了。もういちど立ち上げるときは、以下の手順。
oracle$ sqlplus /nolog
SQL> conn / as sysdba
SQL> startup
SQL> exit
oracle$ lsnrctl start
danjou$ cd /usr/local
danjou$ sudo unzip ~/Downloads/instantclient-basic-10.2.0.4.0-macosx-x86.zip
danjou$ sudo unzip ~/Downloads/instantclient-sqlplus-10.2.0.4.0-macosx-x86.zip
danjou$ sudo unzip ~/Downloads/instantclient-sdk-10.2.0.4.0-macosx-x86.zip
danjou$ sudo ln -s instantclient_10_2 oracle
danjou$ cd oracle
danjou$ sudo ln -s libclntsh.dylib{.10.1,}
  • .zshenvでORACLE_HOMEとDYLD_LIBRARY_PATHをセットしてsource .zshenvする
export ORACLE_HOME=/usr/local/oracle
export DYLD_LIBRARY_PATH=/usr/local/oracle
  • cpanでlook DBD::Oracleする
danjou$ cpan
cpan> look DBD::Oracle
danjou$ perl Makefile.PL
danjou$ make
  • この状態でmake testするとt/01base.tがOKになっていて、モジュール自体は使えることが分かる。接続出来てないからテストがこけてる。
danjou$ make test
PERL_DL_NONLAZY=1 /usr/local/bin/perl "-MExtUtils::Command::MM" "-e" "test_harness(0, 'blib/lib', 'blib/arch')" t/*.t
t/01base.t .............. # Test loading DBI, DBD::Oracle and version

t/01base.t .............. ok   
t/10general.t ........... DBI connect('','scott/tiger',...) failed: ORA-12162: TNS:net service name is incorrectly specified (DBD ERROR: OCIServerAttach) at t/10general.t line 22
Bailout called.  Further testing stopped:  Unable to connect to Oracle (ORA-12162: TNS:net service name is incorrectly specified (DBD ERROR: OCIServerAttach))
FAILED--Further testing stopped: Unable to connect to Oracle (ORA-12162: TNS:net service name is incorrectly specified (DBD ERROR: OCIServerAttach))
make: *** [test_dynamic] Error 255
danjou$ export ORACLE_USERID='hr/hr'
danjou$ export ORACLE_DSN='dbi:Oracle:127.0.0.1:1521/orcl'
t/30long.t .............. Dubious, test returned 255 (wstat 65280, 0xff00)
Failed 1/383 subtests 
	(less 128 skipped subtests: 254 okay)


Test Summary Report
                                                                        - t/30long.t            (Wstat: 65280 Tests: 382 Failed: 0)
  Non-zero exit status: 255
  Parse errors: Bad plan.  You planned 383 tests but ran 382.
Files=30, Tests=790, 25 wallclock secs ( 0.30 usr  0.12 sys +  7.12 cusr  1.03 csys =  8.57 CPU)
Result: FAIL
Failed 1/30 test programs. 0/790 subtests failed.
make: *** [test_dynamic] Error 255
  • こけた。。。でもまぁ、接続出来てる訳だし、いいじゃんすか。
    • あれ、Looks like you planned 383 tests but ran 382とな。planを間違えたかskipを間違えたか、みたいな話か。無視しよう。
  • make installで完了。
  • すると、こんなのがかける。
#!perl

use strict;
use warnings;
use DBI;
use Data::Dumper;

my $dbh = DBI->connect('dbi:Oracle:127.0.0.1:1521/orcl', 'hr', 'hr');
my $arr = $dbh->selectall_arrayref('select * from JOBS');
warn Dumper $arr;
  • ぐぐると、ふるいバージョンではDBD::OracleはMacには入らない的なことが言われてるのがたくさん見つかるけど、そんなことなかった。結構あっさり。
  • 嵌ったのは、むしろDBの再起動の辺り。
  • たぶん正しくない手順でやってる部分もありそうなので、突っ込みプリーズです。