DBFluteでのDB2サポートをより強化するために、 最前線戦闘用の MacBook Air (Lion) にDB2を インストールしました。 今までは Leapard 上の VMWare2 の WindowsXP の DB2環境にてテストを行っていたのですが、 やはり「遅い、手軽じゃない」というところで、 ちょっと距離が遠かったのですが、Macで動けばテストも楽チン。 さて、いきなり結論から言うと、苦労しました、でも、できました。 ただ、この苦労というのは自分がDB2に慣れてないからかもですね。 自分のような目的でインストールする人は珍しいかもしれませんので。 MacにDB2をインストールするような方は、普段も業務でもDB2に 触れ合う機会が多いのではないかと勝手に想像しているのですが、 自分はなかなかそういう機会がなかったので。 そんな状態で、いきなり DB2 on Mac ! (無謀!?)
「Mac DB2」でぐぐったり、「インストールマニュアルっぽいPDF」 を参考に、インストールの概要をまとめてみました。 o コマンドラインとGUIでの二種類のインストールがある o rootユーザーと通常ユーザーでの二種類のインストールがある o 事前に、/etc/sysctl.conf を設定する必要がある (by root) o 事前に、otoolコマンドが利用可能である必要がある (Xcode) そして、これは実体験からの恐らくこういうことかな?ってポイント。 o DB2管理専用のOSユーザーが必要!? o rootユーザーでのインストールが推奨!? o アンインストールバッチは全く動かない!?
まずは、事前準備。 「インストールマニュアルっぽいPDF」の通りに、 「/etc/sysctl.conf」を修正。 このファイルはroot権限じゃないと編集不可。 「$ sudo vi /etc/sysctl.conf」って感じで編集。 引用: kern.sysv.shmmax=1073741824 kern.sysv.shmmin=1 kern.sysv.shmmni=4096 kern.sysv.shmseg=32 kern.sysv.shmall=1179648 kern.maxfilesperproc=65536 kern.maxfiles=65536 そして、otoolコマンド。 ターミナルで「$ otool ...」と叩けるように。 DB2のインストーラーが利用するので必要です。 Xcodeのインストールが必要という情報を見かけたのですが、 Xcodeのダウンロードページで、Xcodeのコマンドだけを ダウンロードができたので、それだけをインストール。 DB2管理用のMacOSユーザー「db2inst1」を作成。 管理者権限ではありません。 なんかそういう名前をつけてる人がいたので真似。 (名前はなんでもいいはず)
そして、ダウンロードしてインストール。 もちろん、ダウンロードサイトはこちらのブログから辿る辿る。 // 無料のDB2 Express-C for Mac OS Xが正式にリリース! http://db2.jugem.cc/?eid=2464 「db2exc_952_MAC_x86_64.tar.gz」を解凍して、 expディレクトリ配下にインストールに関するファイルがあります。 o db2_deinstall // スクリプトでのアンインストール o db2_install // スクリプトでのインストール o db2setup // GUIでのインストール 「$ sudo sh db2_install」と叩けばスクリプトでのrootインストール。 sudoなしで叩けばスクリプトでの通常ユーザーインストール。 「$ sudo sh db2setup」と叩けばGUIによるrootインストール。 Finder から起動すれば、GUIによる通常ユーザーインストール。 (Mac上にJava6がインストールされている必要あり) 自分が最終的にうまくDB2が動かすことができたのは、 GUIでのrootインストール。 DASユーザーには、ログインしている管理者権限のあるOSユーザー。 インストールの過程でDB2インスタンスを作ることができるので、 インスタンスユーザーは作成したOSユーザー「db2inst1」を。 【追記: 2013/08/11】 ここら辺でMacBookを再起動。sysctl.conf が反映されるように!? でないとDB2コマンドで、SQL1032NやSQL1220Nあたりのエラーが... (もっと前のタイミングで再起動してもいいのかもだけど) 終わった後に「$ su db2inst1」でDB2管理ユーザーに化けて、 「$ . ~/sqllib/db2profile」と bash 用の環境セットアップを 叩いて「$ db2」コマンドを叩けば、接続できました。 (db2profile を叩くことでDB2関連のコマンドが利用可能に) そして、DB2コマンドライン上にてデータベースを作成。 create database dfexdb using codeset UTF-8 territory JP そのDB2管理ユーザーのまま「$ db2start」とすることでDB2起動。 DBFluteからポート番号「50002」で接続できました。 【追記: 2013/08/11】 新しいMacBook(Mountain Lion)でやったら、 GUIのrootインストールで 50001 になりました。 【追記: 2013/08/11】 新しいMacBook(Mountain Lion)でやったら、 ReplaceSchemaの実行で SQLSTATE=57011 が発生。 でも、三回目の実行でうまくいきました...!?!?!? とはいえ、その後も続くので、 db2 get db cfg for DFEXDB で確認。(DB2の色々なコンフィグ値が見られる) そして、(LOGFILSIZ) = 1024 となっていた。 増やしても問題は解決しなかった... 【追記: 2013/08/12】 その後、SQLSTATE じゃなくて SQLCODE の方で 調べていったら、バッファープールの不足っぽい。 今回は SQLCODE=-1218 でしたが、 db2 ? SQL1218 という感じでコマンドで調べられるようです。 (したら、SQLSTATEはあまり意味ない!?) // バッファープール、大きくしていますか? http://db2.jugem.cc/?eid=143 を参考に、 db2 "SELECT char(bpname,20) bpname ,pagesize,npages FROM SYSCAT.BUFFERPOOLS" で確認できた。NPAGES が -2 になっていた。 db2 "ALTER BUFFERPOOL ibmdefaultbp SIZE 10000" で増やしたら、ReplaceSchema してもOKになった。 (特に再起動もせず) でも、前のMacBookも -2 なんだけどなぁ... 【追記: 2013/08/12 続き】 STMM (セルフ・チューニング・メモリー・マネージャー) という機能がDB2にはあるらしく、 cd ~/sqllib/db2dump db2diag -g "message:=Altering bufferpool" db2diag.log したら、インストールした直後の時間と思われるログが、 前のMacは :: From: "1000" To: "65013" 今のMacは :: From: "1000" To: "174057" と、STMMは動いてる!? デカ過ぎ!? というかこの値は...何、NPAGES ???
めっちゃ失敗もしました。 otoolコマンドが「絶対に」必要という情報は見つからなかったので、 (どうやら必要そう、みたいな記事はありましたが...) Xcodeをインストールするのがいやだったので、無視して突っ込みました。 すると、コマンドラインインストールにて、 「sh: otool: command not found」というエラーが出まくり。 インストールした後も、あるはずのディレクトリがないとかで、 うまく動作しなかったので、入れなきゃだめかと... で、アンインストール... db2_deinstallスクリプトを叩いてみたのですが、 「dyld: Library not loaded: /wsdb/db2_v95fp2/darwin64/v080811/INST/lib/libdb2locale.dylib」 ...うーん、アンインストールできない これは、otoolを入れた後も前も、そしてDB2が正常に動いている今も、 変わらずこのエラーで全く動作しません。Why? もう、「rm」コマンドでDB2のディレクトリを豪快に削除。 インストール何度も失敗しては「rm」コマンドで削除。 DB2専用のOSユーザーを作るのがいやだったので、 ログインしているユーザーをそのままインスタンスオーナーに、 と思って、ユーザーを作らずにやろうとしたのですが、 GUIのインストールで「DASユーザー」を求められて、 DASユーザーってよくわからないがログインユーザーにして、 インスタンスオーナーも同じユーザーにしてみたら、 「"AWT-EventQueue-0" java.lang.NullPointerException」 ひー、ごめんなさい。 で、ちょっとあれこれ試行錯誤してたのと、 インストール直後に別件で忙しくしてしまったので、 試行錯誤の足跡がちょっとあやふやになってしまいました。 例えば、通常ユーザーでインストールうまくいったと思ったら、 DB2コマンドがうんともすんとも言わず帰ってこないとか... スクリプトでのインストールだと...だっけかな...!? DB2起動しても接続できないし落とすこともできない...!? まあ細かく色々失敗してたのですが、 たぶん何かが間違ってたんだろうけど、 記憶が辿れずうまく文章にまとまらない...(><
とにかく、 o DB2管理専用のOSユーザーは作る o otoolコマンドはインストールする o /etc/sysctl.conf を設定する o rootユーザーでインストールする とすることで、なんとかDB2動いたという感じです。 最初からこうしていれば苦労しなかったかな。 まあ、根本的にDB2に詳しくないことが災いをしました。 今でも、よくわからないところあるので勉強しないとですね。 DASユーザーって何? (インスタンスオーナーとの棲み分けは?) db2inst1ユーザーの「$HOME/sqllib」と 「/opt/IBM/db2/V9.5」配下が似たような感じなんだけど、 その違いは? 「create database」で「on 'パス'」を省略したら、 どこにデータって配置されるの? (そもそも create database のオプション大丈夫かな...) とかとか、色々ありまくりで不安ですが、 まあ徐々にですね...
ちなみに、GUI。コンソールのログは文字化けぇー。 (エラーダイアログのメッセージも文字化けぇー) 「/tmp」のログファイル(db2setup.logなど)は大丈夫なので、 恐らく「MacのJava6のデフォルトエンコーディングがSJIS」 であることの影響かなと。動作に問題はないようなので、 インストールの情報はターミナルから/tmpでviewコマンド。 あと、インストールの形式や権限次第で、 ポート番号が変わるようです(ログを見る限り)。 GUIのrootインストールだと 50002、 GUIの通常ユーザーインストールだと 48518、 スクリプトのどっちかだと 48409、とか... 他のDBMSだとデフォルトの固定のポートってあるけど、 DB2はわりとその辺は変動するのかな!? 【追記: 2013/08/11】 新しいMacBook(Mountain Lion)でやったら、 GUIのrootインストールで 50001 になりました。
まあ、とにもかくにもDBFluteの 「dbflute-db2-example」プロジェクト、 Macの上でしっかり動いてます! DB接続情報ファイルにOSユーザーのパスワード書いて 世に公開したくないので、うまーく SVN-Ignore の 外だしファイルに出せるようにしました。 人によってポート番号も変わるかもなので、 そこも切り替えられるように。 DBFluteのExampleについてのページ: DBFlute Example - データベース(DBMS)