※以下の内容はがんばって動かそうとしたログ、なのですが、最終的にはちゃんとは動きませんでした。どういう理由だったかは詳しく覚えてなくて申し訳ないです。かなり惜しいところまで行ったんですが。もし、DBD::OracleをMacで動かす件、うまく行った方がいらっしゃったら、ご連絡ください。よろしくお願いします。
あとでかく。ほんとにかく。
- http://doruby.kbmj.com/8y/20090505/Mac_OS_X_Leopard__Oracle_ をベースにしています。
- http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10204macsoft_x86-64.html からdb.zipをダウンロードする(要登録)
- oracleユーザーを作る
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
- ここまでがoracleをmacに入れて使う手順。次にDBD::Oracleをインストールする手順。
- http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/intel_macsoft.html から、以下のファイルを落としてくる。
- instantclient-basic-10.2.0.4.0-macosx-x86.zip
- instantclient-sqlplus-10.2.0.4.0-macosx-x86.zip
- instantclient-sdk-10.2.0.4.0-macosx-x86.zip
- /usr/local以下に展開する
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
- http://awk.jugem.jp/?eid=135 をまねして、以下のようにしてmake testすれば通るはず!!
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の再起動の辺り。
- たぶん正しくない手順でやってる部分もありそうなので、突っ込みプリーズです。