2011年4月7日木曜日

[memo] Oracle Linux 6 に Gridをインストールする...

Oracle Linux 6 + Oracle 11gR2(11.2.0.2)で ASM環境を構築する必要があったので、
何の気なしに片手間で作り始めたら、かなりハマりました。
忘れないうちに、Oracle Linux 5.6 の時との違いについてポイントをまとめておきます。

ちなみに、このポイントをクリアしても、動作するわけでありません っっ
あるいは、解決方法知っている人がいたら大募集。

更に、Oracle 11gR2は、まだ Oracle Linux 6を正式サポートしていませんので、チャレンジャーな感じです。


Oracle Linux 6
E-Deliveryからダウンロード
デフォルトの Unbreakable Enterprise Kernelを導入
導入するときに oracleasm-support-2.1.5-1.el6.x86_64 は、必ず入れる。

逆にこれ以外は oracleasm関連パッケージはありませんでした。


Oracle Grid Infrastructure 11.2.0.2.0
ASMディスクの構成を行い、インストーラを実行。構成チェックで root.shを実行するとエラーになる。
  1. # .../root.sh  
  2. ...  
  3. ohasd failed to start  
  4. Failed to start the Clusterware. Last 20 lines of the alert log follow:  
  5. 2011-04-01 11:55:49.329  
  6. [client(25625)]CRS-2101:The OLR was formatted using version 3.  
  7. 2011-04-01 11:55:55.191  
  8. [client(25654)]CRS-1001:The OCR was formatted using version 3.  
  9. [client(25696)]CRS-10001:CRS-6021: No msg for has:crs-6021 [l][unlimited]  
  10. [client(25697)]CRS-10001:CRS-6021: No msg for has:crs-6021 [n][65536]  
  11.   
  12. ohasd failed to start at /home/oracle/app/oracle/product/11.2.0/grid/crs/install/roothas.pl line 325.  
  13. /home/oracle/app/oracle/product/11.2.0/grid/perl/bin/perl -I/home/oracle/app/oracle/product/11.2.0/grid/perl/lib -I/home/oracle/app/oracle/product/11.2.0/grid/crs/install /home/oracle/app/oracle/product/11.2.0/grid/crs/install/roothas.pl execution failed.  
  14. #  
  1. CRS-06021: Could not set system resource limits for Clusterware: "ulimit -string string".  
メッセージからすると ulimit -l と -n の変更が出来ないと言っている。
裏で取得していた strace(1)でも同じエラーが出ていた。
  1. setrlimit( RLIMIT_MEMLOCK,{rlim_cur=RLIM_INFINITY,rlim_max=RLIM_INFINITY})  
  2.  = -1 EPERM (Operation not permitted)  
  3. setrlimit( RLIMIT_NOFILE,{rlim_cur=64*1024,rlim_max=64*1024})  
  4.  = -1 EPERM (Operation not permitted)  

/etc/security/limits.confに以下を追記する
* soft nofile 2048
* hard nofile 131072
* soft memlock 64
* hard memlock unlimited




ulimitのエラーは出なくなったが、相変わらず同じ場所でエラーとなる。
root.shに strace(1)をかけて見てみると
ctsctl.binのプロセスが /var/tmp/.oracle/sOHASD_UI_SOCKET というソケットファイルが出来るのを待っている様子が見て取れる。
  1. 12964 socket(PF_FILE, SOCK_STREAM, 0)   = 5  
  2. 12964 access("/var/tmp/.oracle/sOHASD_UI_SOCKET", F_OK) = -1 ENOENT (No such file or directory)  
  3. ....  
  4. CRS-04124:Oracle High Availability Services startup failed.を出力  
  5. ....  
  6. nanosleep(...)  
  7. ...この繰り返し...  

OHASが立ち上がっていないのが原因か。
なので ohasd.binというプロセスを見ていくと、
  1. 12969 mknod("/var/tmp/.oracle/npohasd", S_IFIFO|0666) = 0  
  2. 12969 open("/var/tmp/.oracle/npohasd", O_WRONLY <unfinished ...>  
ここが最後の行になっている。NamedPipeの open(2)が終了していない???
じゃあ、ここから吸いだしてあげたらいいじゃないか、ということで
  1. # dd if=/var/tmp/.oracle/npohasd  
を実行したら、ohasd.binが動き出した!!
一応必要なプロセスが全部動き始めたようで roo.shの実行が終了しました。

後でググったら、 CRS-4639: Could not contact Oracle High Availability Services

の資料でも ddコマンド使う という方法が載っていました。前のバージョンですが。
ddコマンドで動かすというのは、かなり乱暴だと思いますが、それが対応策で載っているあたりがオラクルです。syslogdが動作していないと発生する、というような記述もあるので、時間があれば後で調べてみようと思います。

ohasdが /var/tmp/.oracle/npohasdの open(2)で止まっていたら、dd(1)で先にすすめることが出来る。

ちなみにOS再起動するたびに dd(1)を実行しています。。トホホ


Oracle Database 11.2.0.2.0
Database自体の導入はスムーズに進みました。
また、今回のデータベースは SYSTEM表領域などはファイルシステム上に、ユーザーデータだけをASM上に作成しています。
で、データを入れてパフォーマンスを測りだしたら、Corrupt Blockのエラーが多発。。。。

データのロード方法などをいくつか試していますが、今のところ、ある程度以上のデータ量だと確実に再現しています。

詳細は次回で。

0 件のコメント:

コメントを投稿