#topicpath
----
機会がありまして VMware 上の CentOS 5.2 にて
Oracle 10g R2 RAC を構築してみました。

Oracle をインストールしたことがある方ならば
一通り作ることができるように手順をまとめてみましたので、
もしお役に立てるところがあればご利用ください。

内容については無保証とします。
個人的な質問はある程度は受けますが、
日本オラクル社等へのお問い合わせはご遠慮ください。
----
#contents
----
* 環境 [#o40f7556]

- VMware Workstation 5.5.7 (WindowsXP)
-- CentOS 5.2 (x86, HDD 20GB, RAM 1GB)
--- hostname: ora1
--- eth0:192.168.1.101 (public)
--- eth1:192.168.10.101 (private)
-- CentOS 5.2 (x86, HDD 20GB, RAM 1GB)
--- hostname: ora2
--- eth0:192.168.1.102 (public)
--- eth1:192.168.10.102 (private)
-- 共有ディスク
--- OCR用 0.2GB x1 (raw)
--- 投票ディスク用 0.1GB x1 (raw)
--- データ用 4GB x1 (raw, ASM管理)
--- フラッシュリカバリエリア用 4GB x1 (raw, ASM管理)

1台環境設定してから VMware の clone を使ってまるまるコピーして、
ネットワークなどの設定を書き直すことで2台作りました。

データやフラッシュリカバリエリアはASMで管理します。
ディスクグループは次のようにしました。

- データ用 : +DATA
- フラッシュリカバリエリア用 : +FRA

* 参考文献 [#cd6433d6]

次の文書を見ながらインストールしていきます。

- [[Oracle Database リリース・ノート 10g リリース2 (10.2) for Linux x86:http://otndnld.oracle.co.jp/document/products/oracle10g/102/linux/B19279-10/toc.htm]]
- [[Oracle Database クイック・インストレーション・ガイド 10g リリース2(10.2)for Linux x86:http://otndnld.oracle.co.jp/document/products/oracle10g/102/linux/B50706-01/toc.htm]]
- [[Oracle Database Oracle Clusterware および Oracle Real Application Clusters インストレーション・ガイド 10g リリース2(10.2)for Linux:http://otndnld.oracle.co.jp/document/products/oracle10g/102/linux/B25818-05/toc.htm]]
- [[Oracle Real Application Clusters 10g 設定手順書 - VMware編 ASM版 MIRACLE LINUX V4.0 Version:http://otndnld.oracle.co.jp/products/database/oracle10g/clustering/pdf/VMware-LinuxVer1.40.pdf]] (PDF)

* CentOS 5 に必要なパッケージ [#c5ba7785]

下記のパッケージが必要となっています。

- binutils-2.17.50.0.6-2.el5
- compat-libstdc++-33-3.2.3-61
- elfutils-libelf-0.125-3.el5
- elfutils-libelf-devel-0.125
- gcc-4.1.1-52
- gcc-c++-4.1.1-52
- glibc-2.5-12
- glibc-common-2.5-12
- glibc-devel-2.5-12
- glibc-headers-2.5-12
- libaio-0.3.106
- libaio-devel-0.3.106
- libgcc-4.1.1-52
- libstdc++-4.1.1
- libstdc++-devel-4.1.1-52.e15
- make-3.81-1.1
- sysstat-7.0.0
- unixODBC-2.2.11
- unixODBC-devel-2.2.11

* 1台目を作成 (ora1) [#af1bb9fd]

** グループやユーザの作成 [#o5404add]

useradd では -m も付けて、ホームディレクトリを作っておきます。

#pre{{
[root@ora1 ~]# groupadd oinstall
[root@ora1 ~]# groupadd dba
[root@ora1 ~]# useradd -g oinstall -G dba oracle -m
[root@ora1 ~]# passwd oracle
Changing password for user oracle.
New UNIX password: 
Retype new UNIX password: 
passwd: all authentication tokens updated successfully.
}}

** oracle ユーザの umask の設定 [#z58ef20a]

oracle ユーザを作成したら ~/.bash_profile で umask の設定をします。

#pre{{
[root@ora1 ~]# su - oracle
[oracle@ora1 ~]$ echo "umask 022" >> ~/.bash_profile
}}

ログインしなおして umask が正しく設定されているかどうかを確認しましょう。

#pre{{
[oracle@ora1 ~]$ exit

[root@ora1 ~]# su - oracle
[oracle@ora1 ~]$ umask
0022
}}

** /etc/sysctl.conf の設定 [#b482804e]

次の行を追加します。shmmax と shmall は設定されているので
そのまま使って構いません。

#pre{{
# for Oracle
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
}}

設定したら有効にします。

#pre{{
[root@ora1 ~]# sysctl -p
net.ipv4.ip_forward = 0
net.ipv4.conf.default.rp_filter = 1
net.ipv4.conf.default.accept_source_route = 0
kernel.sysrq = 0
kernel.core_uses_pid = 1
net.ipv4.tcp_syncookies = 1
kernel.msgmnb = 65536
kernel.msgmax = 65536
kernel.shmmax = 4294967295
kernel.shmall = 268435456
kernel.shmmni = 4096
kernel.sem = 250 32000 100 11128
fs.file-max = 65536
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 1048576
net.core.rmem_max = 1048576
net.core.wmem_default = 262144
net.core.wmem_max = 262144
}}

** シェルの制限の設定 [#lebe7871]

/etc/security/limits.conf に追加します。

#pre{{
# for Oracle
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
}}

/etc/pam.d/login に追加します。

#pre{{
# for Oracle
session    required     pam_limits.so
}}

/etc/profile に追加します。

#pre{{
# for Oracle
if [ $USER = "oracle" ]; then
        if [ $SHELL = "/bin/ksh" ]; then
              ulimit -p 16384
              ulimit -n 65536
        else
              ulimit -u 16384 -n 65536
        fi
fi
}}

oracle ユーザでログインして、実際に設定が反映されるかどうかを確認します。
(-n) 65536 と (-u) 16384 がこのようになっていれば OK です。

#pre{{
sugimura@e8400 ~ $ ssh oracle@192.168.1.101
oracle@192.168.1.101's password: 
Last login: Tue Jul  8 16:21:14 2008 from 192.168.1.2
[oracle@ora1 ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 12288
max locked memory       (kbytes, -l) 32
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65536
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 10240
cpu time               (seconds, -t) unlimited
max user processes              (-u) 16384
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited
}}

** インストール先のディレクトリを作成 [#a638d6fb]

CRS のインストールディレクトリを作成します。
/u01/crs 以下にインストールするものとします。

#pre{{
[root@ora1 ~]# mkdir -p /u01/crs
[root@ora1 ~]# chown -R root:oinstall /u01/crs
[root@ora1 ~]# chmod -R 775 /u01/crs
}}

DB も同様に /u01/app/oracle 以下にインストールするものとして、
ディレクトリを作成して権限を付与します。
この /u01/app/oracle は CRS のディレクトリ配下には入らないように
注意が必要です。

#pre{{
[root@ora1 ~]# mkdir -p /u01/app/oracle
[root@ora1 ~]# chown -R oracle:oinstall /u01/app/oracle
[root@ora1 ~]# chmod -R 775 /u01/app/oracle
}}

** hangcheck-timer モジュールの設定 [#ccc91370]

/etc/modprobe.conf に追加します。

#pre{{
# for Oracle
options hangcheck-timer hangcheck_tick=30 hangcheck_margin=180
}}

起動時に読み込まれるように、/etc/rc.local に追加します。

#pre{{
# for Oracle
/sbin/modprobe hangcheck-timer
}}

再起動してもいいのですが、一度正しくロードされることを確認しましょう。

#pre{{
[root@ora1 ~]# /sbin/modprobe hangcheck-timer
[root@ora1 ~]# tail -2 /var/log/messages 
Jul  8 17:09:12 ora1 kernel: Hangcheck: starting hangcheck timer 0.9.0 
(tick is 30 seconds, margin is 180 seconds).
Jul  8 17:09:12 ora1 kernel: Hangcheck: Using get_cycles().
}}

** ネットワークの設定 [#m4dcd7c4]

/etc/hosts に各ノードの定義を書きます。

#pre{{
127.0.0.1 localhost.localdomain localhost

192.168.1.101 ora1
192.168.1.102 ora2

192.168.1.111 ora1-vip
192.168.1.112 ora2-vip

192.168.10.101 ora1-priv
192.168.10.102 ora2-priv
}}

** 1台目終了 [#kcb21c61]

ここまでで1台目の基本環境は作成終了です。
一度 OS を終了しておきます。

#pre{{
[root@ora1 ~]# shutdown -h now

Broadcast message from root (pts/1) (Tue Jul  8 17:18:21 2008):

The system is going down for system halt NOW!
}}

* 2台目を作成 (ora2) [#t862d110]

VMware なので、2台目はコピーして作ります。
VMware Workstation には clone という機能があり、
そのままコピーできます。

コピーの作り方は "Create a linked clone" と "Create a full clone" 
の2つがありますが、ディスクもたくさんあるので "full clone" のほうにしました。

&ref(clone.png);

&ref(full-clone.png);

** 2台目のネットワーク設定 [#tb876c0b]

2台目だけ起動して、ネットワークの設定を書き直します。

- /etc/sysconfig/network

HOSTNAMEを "ora2" にします。

#pre{{
NETWORKING=yes
NETWORKING_IPV6=no
HOSTNAME=ora2
GATEWAY=192.168.1.1
}}

- /etc/sysconfig/network-scripts/ifcfg-eth0

ifcfg-eth0.bak から IPADDR の行を書き直して、
新しく生成された ifcfg-eth0 の HWADDR の行を持ってきます。

2台目のMACアドレスとIPアドレスを正しく設定する、ということです。

#pre{{
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth0
BOOTPROTO=static
BROADCAST=192.168.1.255
HWADDR=00:0C:29:4d:ee:f7
IPADDR=192.168.1.102
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
}}

- /etc/sysconfig/network-scripts/ifcfg-eth1

これも同様に直します。

#pre{{
# Advanced Micro Devices [AMD] 79c970 [PCnet32 LANCE]
DEVICE=eth1
BOOTPROTO=static
BROADCAST=192.168.10.255
HWADDR=00:0C:29:4d:ee:01
IPADDR=192.168.10.102
NETMASK=255.255.255.0
NETWORK=192.168.10.0
ONBOOT=yes
}}

一度再起動します。

#pre{{
[root@ora1 ~]# shutdown -h now

Broadcast message from root (pts/1) (Tue Jul  8 17:59:14 2008):

The system is going down for system halt NOW!
}}

* ユーザ等価性の設定 [#v0b53e64]

oracle ユーザでパスワードなしでお互いにログインできるように
ssh を設定します。

** 鍵の作成 [#bc51d480]

簡単のため、パスフレーズは空にして作りました。

- ora1 にて

#pre{{
[oracle@ora1 ~]$ ssh-keygen -t rsa
[oracle@ora1 ~]$ ssh-keygen -t dsa
}}

- ora2 にて

#pre{{
[oracle@ora2 ~]$ ssh-keygen -t rsa
[oracle@ora2 ~]$ ssh-keygen -t dsa
}}

** 鍵のコピー [#ja082ada]

鍵をコピーする際に (yes/no) を聞かれたときは yes で答えます。
最初の一度だけ聞かれます。

#pre{{
Are you sure you want to continue connecting (yes/no)? yes
}}

パスワードを要求されたときは正しいパスワードを入力しましょう。

- ora1 にて

#pre{{
[oracle@ora1 ~]$ ssh ora1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@ora1 ~]$ ssh ora1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[oracle@ora1 ~]$ ssh ora2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@ora1 ~]$ ssh ora2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
}}

- ora2 にて

#pre{{
[oracle@ora2 ~]$ ssh ora1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@ora2 ~]$ ssh ora1 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
[oracle@ora2 ~]$ ssh ora2 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
[oracle@ora2 ~]$ ssh ora2 cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
}}

** 動作確認 [#wc29c1e1]

ora1, ora1-priv, ora2, ora2-priv に対して、
パスワードなしでログインできることを確認します。

初回のログインでは (yes/no) を聞かれますが、
yes で答えて次回から聞かれないようにしましょう。

** 2台目終了 [#mb0a58c0]

ここまでできたら一度両方を shutdown しておきます。

* 共有ディスクの作成 [#x622329f]

共有ディスクを作ります。ここではこのように作成することにしました。
冗長構成にしたいところでしたが、VMware では無理でした。

-- 共有ディスク
--- OCR用 0.2GB x1
--- 投票ディスク用 0.1GB x1
--- データ用 4GB x1
--- フラッシュリカバリエリア用 4GB x1

** vmxファイルの設定 [#la7f7c44]

各ノードでの vmx ファイルにて、ロックの解除やキャッシュの設定を行います。

#pre{{
disk.locking = "false"
diskLib.dataCacheMaxSize = "0"
diskLib.dataCacheMaxReadAheadSize = "0"
diskLib.dataCacheMinReadAheadSize = "0"
diskLib.dataCachePageSize = "4096"
diskLib.maxUnsyncedWrites = "0"
}}

** ディスクの作成 [#z0ff8a87]

ora1 の "Edit virtual machine settings" から
ディスクを追加して作成します。

&ref(edit.png);

&ref(add-harddisk.png);

0.2GB のときはこのように作成します。

&ref(0.2GB.png);

Mode は Independent - Persistent にしておきます。

&ref(options.png);

vmdk ファイルを作成する先はそれぞれの OS とは違うフォルダに入れるのが
わかりやすいでしょう。
My Virtual Machines\RACshared\ の下に置きました。

&ref(RACshared.png);

この作業を繰り返して、このように作成してみました。
IDEで共有ディスクというのは気持ちが悪いですが、
VMware には接続数の制限があるようなのでこのようにしています。

|Device|ファイル名|ディスクの用途|容量|h
|IDE 0:0 (/dev/hda)|OCR.vmdk|OCR|0.2GB|
|IDE 0:1 (/dev/hdb)|vote.vmdk|投票ディスク|0.1GB|
|SCSI 0:1 (/dev/sdb)|data-4GB.vmdk|データ|4GB|
|SCSI 0:2 (/dev/sdc)|FRA-4GB.vmdk|フラッシュリカバリエリア|4GB|

ora2 では新規作成ではなく、ここで作ったディスクを追加していきます。

&ref(existingdisk.png);

** ディスクの認識 [#yef826bf]

ora1 にて fdisk パーティションを作ります。

#pre{{
[root@ora1 ~]# fdisk /dev/hda                                                   
デバイスは正常な DOS 領域テーブルも、Sun, SGI や OSF ディスクラベルも           
含んでいません                                                                  
新たに DOS ディスクラベルを作成します。あなたが書き込みを決定するまで、変更は   
メモリ内だけに残します。その後はもちろん以前の内容は修復不可能になります。      
警告: 領域テーブル 4 の不正なフラグ 0x0000 は w(書き込み)によって               
正常になります                                                                  
                                                                                
コマンド (m でヘルプ): n                                                        
コマンドアクション                                                              
   e   拡張                                                                     
   p   基本領域 (1-4)                                                           
p                                                                               
領域番号 (1-4): 1                                                               
最初 シリンダ (1-416, default 1):                                               
Using default value 1                                                           
終点 シリンダ または +サイズ または +サイズM または +サイズK (1-416, default 416):                                                                              
Using default value 416                                                         
                                                                                
コマンド (m でヘルプ): w                                                        
領域テーブルは交換されました!                                                  
                                                                                
ioctl() を呼び出して領域テーブルを再読込みします。                              
ディスクを同期させます。 
}}

fdisk -l で見て「正常な領域テーブルを含んでいません」というディスクがなくなるまで、
同様に /dev/hdb, /dev/sdb, /dev/sdc もパーティションを作ります。

#pre{{
[root@ora1 ~]# fdisk -l                                                         
                                                                                
Disk /dev/hda: 214 MB, 214748160 bytes                                          
16 heads, 63 sectors/track, 416 cylinders                                       
Units = シリンダ数 of 1008 * 512 = 516096 bytes                                 
                                                                                
デバイス Boot      Start         End      Blocks   Id  System                   
/dev/hda1               1         416      209632+  83  Linux                   
                                                                                
Disk /dev/hdb: 107 MB, 107374080 bytes                                          
16 heads, 63 sectors/track, 208 cylinders                                       
Units = シリンダ数 of 1008 * 512 = 516096 bytes                                 
                                                                                
デバイス Boot      Start         End      Blocks   Id  System                   
/dev/hdb1               1         208      104800+  83  Linux                   
                                                                                
Disk /dev/sda: 21.4 GB, 21474836480 bytes                                       
255 heads, 63 sectors/track, 2610 cylinders                                     
Units = シリンダ数 of 16065 * 512 = 8225280 bytes                               
                                                                                
デバイス Boot      Start         End      Blocks   Id  System                   
/dev/sda1   *           1          13      104391   83  Linux                   
/dev/sda2              14        2610    20860402+  8e  Linux LVM               
                                                                                
Disk /dev/sdb: 4294 MB, 4294967296 bytes                                        
255 heads, 63 sectors/track, 522 cylinders                                      
Units = シリンダ数 of 16065 * 512 = 8225280 bytes                               
                                                                                
デバイス Boot      Start         End      Blocks   Id  System                   
/dev/sdb1               1         522     4192933+  83  Linux                   
                                                                                
Disk /dev/sdc: 4294 MB, 4294967296 bytes                                        
255 heads, 63 sectors/track, 522 cylinders                                      
Units = シリンダ数 of 16065 * 512 = 8225280 bytes                               
                                                                                
デバイス Boot      Start         End      Blocks   Id  System                   
/dev/sdc1               1         522     4192933+  83  Linux    
}}

** rawデバイスへのマッピング [#wdfb5049]

CentOS 5 では /etc/udev/rules.d/60-raw.rules に追加していきます。

#pre{{
# for Oracle
ACTION=="add", KERNEL=="hda1", RUN+="/bin/raw /dev/raw/raw1 %N"
ACTION=="add", KERNEL=="hdb1", RUN+="/bin/raw /dev/raw/raw2 %N"
ACTION=="add", KERNEL=="sdb1", RUN+="/bin/raw /dev/raw/raw3 %N"
ACTION=="add", KERNEL=="sdc1", RUN+="/bin/raw /dev/raw/raw4 %N"
}}

permission も設定します。/etc/udev/rules.d/61-raw-permission.rules に書きました。

#pre{{
# for Oracle
KERNEL=="raw1", MODE="0640", OWNER="root", GROUP="oinstall"
KERNEL=="raw2", MODE="0640", OWNER="oracle", GROUP="oinstall"
KERNEL=="raw3", MODE="0660", OWNER="oracle", GROUP="dba"
KERNEL=="raw4", MODE="0660", OWNER="oracle", GROUP="dba"
}}

** ディスクの設定完了 [#if81067a]

ここまで正常に終われば、一度再起動します。

再起動後は raw コマンドで正しくマッピングされていることと、
permission が設定されていることを確認します。

#pre{{
[root@ora1 ~]# raw -qa
/dev/raw/raw1:  bound to major 3, minor 1
/dev/raw/raw2:  bound to major 3, minor 65
/dev/raw/raw3:  bound to major 8, minor 17
/dev/raw/raw4:  bound to major 8, minor 33
[root@ora1 ~]# ls -l /dev/raw/
合計 0
crw-r----- 1 root   oinstall 162, 1  7月  8 22:21 raw1
crw-r----- 1 oracle oinstall 162, 2  7月  8 22:21 raw2
crw-rw---- 1 oracle dba      162, 3  7月  8 22:21 raw3
crw-rw---- 1 oracle dba      162, 4  7月  8 22:21 raw4
}}

* Clusterware のインストール [#leec8c1c]

CentOS 5 はサポートされていないため、-ignoreSysPrereqs を付けて
インストーラを実行します。

#pre{{
[oracle@ora1 ~]$ unzip 10201_clusterware_linux32.zip
...
[oracle@ora1 ~]$ cd clusterware
[oracle@ora1 clusterware]$ ./runInstaller -ignoreSysPrereqs
}}

&ref(crs-1.png);

インベントリのディレクトリを設定します。

&ref(crs-2.png);

インストール先は /u01/crs にしました。

&ref(crs-3.png);

CentOS 5 はサポートされていないため、エラーになります。
特に気にせずそのまま進めて構いません。

&ref(crs-4.png);

ora1 上でインストーラを実行したので、ora1 だけがリストアップされます。
ora2 の定義も追加します。

&ref(crs-5.png);

ここでは 192.168.1.0/24 が外向きとして定義してあるので、
eth0 側をパブリックにします。

&ref(crs-6.png);

OCRの場所を指定します。冗長化してあれば2つ指定できます。

&ref(crs-7.png);

投票ディスクの場所を指定します。
冗長化したときは3つ指定します。

&ref(crs-8.png);

「クラスタ・ノード」が正しく認識されていることを確認して、
「インストール」をクリックして先へ進めます。

&ref(crs-9.png);

インストールが進行していきます。

&ref(crs-10.png);

各ノードでスクリプトを実行します。

&ref(crs-11.png);

まずは ora1 にて。

#pre{{
[root@ora1 ~]# /u01/app/oracle/oraInventory/orainstRoot.sh 
権限の変更中/u01/app/oracle/oraInventory 新規グループ名: 770.
次のグループ名を変更します: /u01/app/oracle/oraInventory 新規グループ名: oinstall.
スクリプトの実行が完了しました
}}

#pre{{
[root@ora1 ~]# /u01/crs/root.sh 
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.

Setting the permissions on OCR backup directory
Setting up NS directories
Oracle Cluster Registry configuration upgraded successfully
assigning default hostname ora1 for node 1.
assigning default hostname ora2 for node 2.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node <nodenumber>: <nodename> <private interconnect name> <hostname>
node 1: ora1 ora1-priv ora1
node 2: ora2 ora2-priv ora2
Creating OCR keys for user 'root', privgrp 'root'..
Operation successful.
Now formatting voting device: /dev/raw/raw2
Format of 1 voting devices complete.
Startup will be queued to init within 90 seconds.
Adding daemons to inittab
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
  ora1
CSS is inactive on these nodes.
  ora2
Local node checking complete.
Run root.sh on remaining nodes to start CRS daemons.
}}

ora2 でも実行します。

#pre{{
[root@ora2 ~]# /u01/app/oracle/oraInventory/orainstRoot.sh 
権限の変更中/u01/app/oracle/oraInventory 新規グループ名: 770.
次のグループ名を変更します: /u01/app/oracle/oraInventory 新規グループ名: oinstall.
スクリプトの実行が完了しました
}}

#pre{{
[root@ora2 ~]# /u01/crs/root.sh
Checking to see if Oracle CRS stack is already configured
/etc/oracle does not exist. Creating it now.

Setting the permissions on OCR backup directory
Setting up NS directories
Oracle Cluster Registry configuration upgraded successfully
clscfg: EXISTING configuration version 3 detected.
clscfg: version 3 is 10G Release 2.
assigning default hostname ora1 for node 1.
assigning default hostname ora2 for node 2.
Successfully accumulated necessary OCR keys.
Using ports: CSS=49895 CRS=49896 EVMC=49898 and EVMR=49897.
node <nodenumber>: <nodename> <private interconnect name> <hostname>
node 1: ora1 ora1-priv ora1
node 2: ora2 ora2-priv ora2
clscfg: Arguments check out successfully.

NO KEYS WERE WRITTEN. Supply -force parameter to override.
-force is destructive and will destroy any previous cluster
configuration.
Oracle Cluster Registry for cluster has already been initialized
Startup will be queued to init within 90 seconds.
Adding daemons to inittab
Expecting the CRS daemons to be up within 600 seconds.
CSS is active on these nodes.
        ora1
        ora2
CSS is active on all nodes.
Waiting for the Oracle CRSD and EVMD to start
Waiting for the Oracle CRSD and EVMD to start
Oracle CRS stack installed and running under init(1M)
Running vipca(silent) for configuring nodeapps
/u01/crs/jdk/jre//bin/java: error while loading shared libraries: libpthread.so.0:
cannot open shared object file: No such file or directory
}}

最後はエラーになりましたが、VIPCA の実行に失敗しているだけなので、
Clusterware としては成功しています。

スクリプトの実行が終わった後に
構成スクリプトが実行されますが、
VIPCA が正常終了していないために
クラスタ検証ユーティリティ(CVU)でエラーになります。
これは後に解決します。

&ref(crs-12.png);

このまま runInstaller を閉じて構いません。

** VIPCAの実行 [#t55ec89f]

CentOS 5 では、VIPCA はそのままでは実行できないようです。

/u01/crs/bin/vipca を下記のように修正します。
"#Remove this..." から "#End workaround" をコメントアウトします。

#pre{{
#       #Remove this workaround when the bug 3937317 is fixed
#      arch=`uname -m`
#       if [ "$arch" = "i686" -o "$arch" = "ia64" ]
#      then
#            LD_ASSUME_KERNEL=2.4.19
#            export LD_ASSUME_KERNEL
#       fi
#       #End workaround
       ;;
}}

Linux 64bit のときは arch=`uname -m` の行は残してください。

これで実行できるようになるので、root で起動します。

#pre{{
[root@ora1 ~]# /u01/crs/bin/vipca
}}

&ref(vipca-1.png);

パブリックなネットワークは eth0 なので
これだけが出てきます。

&ref(vipca-2.png);

VIP(仮想IPアドレス)を入力していきます。
あらかじめ /etc/hosts に定義されていれば、
「IP別名」のところに入力することで
自動的に他の項目も入力されます。

&ref(vipca-3.png);

正しく実行が終われば「構成結果」として表示されます。
「終了」を押して終わります。

&ref(vipca-4.png);

正常に終了したら、crs_stat で確認してみましょう。

#pre{{
[root@ora1 ~]# /u01/crs/bin/crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora.ora1.gsd   application    ONLINE    ONLINE    ora1        
ora.ora1.ons   application    ONLINE    ONLINE    ora1        
ora.ora1.vip   application    ONLINE    ONLINE    ora1        
ora.ora2.gsd   application    ONLINE    ONLINE    ora2        
ora.ora2.ons   application    ONLINE    ONLINE    ora2        
ora.ora2.vip   application    ONLINE    ONLINE    ora2 
}}

** SRVCTL の修正 [#rf801fb7]

VIPCA と同様に、SRVCTL も修正します。
/u01/crs/bin/srvctl を次のように直して、
"LD_ASSUME_KERNEL" の定義をコメントアウトします。

#pre{{
##Remove this workaround when the bug 3937317 is fixed
#LD_ASSUME_KERNEL=2.4.19
#export LD_ASSUME_KERNEL
}}

これで実行できるようになります。oracle ユーザで実行することもできます。
いまはまだ DB やリスナーをインストールしていないので、
Clusterware に関する情報しか表示できません。

#pre{{
[oracle@ora1 ~]$ /u01/crs/bin/srvctl status nodeapps -n ora1
VIPはノードで実行中です: ora1
GSDはノードで実行中です: ora1
PRKO-2016 : ノードのリスナーの条件チェックでエラーが発生しました: ora1
ONSデーモンはノードで実行中です: ora1
}}

** クラスタ検証ユーティリティ(CVU)によるインストールの確認 [#yddfc765]

Clusterware の配布物の中にあるクラスタ検証ユーティリティで、
正しくインストールできていることが確認できます。

#pre{{
[oracle@ora1 ~]$ clusterware/cluvfy/runcluvfy.sh stage -post crsinst -n ora1,ora2                                                                               
                                                                                
クラスタ・サービス設定の事後チェックを実行しています                            
                                                                                
ノード到達可能性をチェック中...                                                 
ノード"ora1"からのノード到達可能性チェックに合格しました。                      
                                                                                
                                                                                
ユーザー等価をチェック中...                                                     
ユーザー"oracle"のユーザー等価チェックに合格しました。             
...
                                                                                
VIPノード・アプリケーションの存在をチェック中です (必須)                        
チェックに合格しました。                                                        
                                                                                
ONSノード・アプリケーションの存在をチェック中です (オプション)                  
チェックに合格しました。                                                        
                                                                                
GSDノード・アプリケーションの存在をチェック中です (オプション)                  
チェックに合格しました。                                                        
                                                                                
                                                                                
クラスタ・サービス設定の事後チェックは成功しました。  
}}

エラーがないことが確認できれば、Clusterware のインストールは終了です。

* Database ソフトウェアのインストール (asm) [#y9ccd3be]

Database ソフトウェアは asm 用と DB 用と
別々にインストールするのがお勧めのようです。

asm 用には、/u01/app/oracle/product/10.2.0/asm_1 に
インストールするものとします。

Clusterware と同様に、runInstaller を -ignoreSysPrereqs を付けて
実行します。

#pre{{
[oracle@ora1 ~]$ unzip 10201_database_linux32.zip
...
[oracle@ora1 ~]$ cd database
[oracle@ora1 database]$ ./runInstaller -ignoreSysPrereqs
}}

&ref(asm-1.png);

Enterprise Edition を選択しました。

&ref(asm-2.png);

「パス」を /u01/app/oracle/product/10.2.0/asm_1 とします。
ここにインストールされます。

&ref(asm-3.png);

クラスタとしてインストールするため、
ora2 も選択します。

&ref(asm-4.png);

CentOS 5 は対応していないのでエラーになりますが、
気にせず続行して構いません。

&ref(asm-5.png);

asm インスタンスのためのインストールなので、
「自動ストレージ管理(ASM)の構成」を選択します。

SYS ユーザのパスワードを入力します。

&ref(asm-6.png);

ディスクグループを定義します。
インストール中には1つしか定義できないようなので、
ひとまず DATA を作成することにします。

冗長化する必要があればここで設定しますが、
後で変更することも可能です。
今回は VMware の制限から、1つのディスクで
1つのディスクグループとしています。

&ref(asm-7.png);

インストールのサマリーが表示されます。
「Oracleホーム」と「クラスタ・ノード」を確認して、
インストールを進めましょう。

&ref(asm-8.png);

&ref(asm-9.png);

root.sh を各ノードで実行します。

&ref(asm-10.png);

まずは ora1 で root.sh を実行します。

#pre{{
[root@ora1 ~]# /u01/app/oracle/product/10.2.0/asm_1/root.sh
Running Oracle10 root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/10.2.0/asm_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.

[root@ora1 ~]# 
}}

同様に ora2 でも実行します。

#pre{{
[root@ora2 ~]# /u01/app/oracle/product/10.2.0/asm_1/root.sh
Running Oracle10 root.sh script...

The following environment variables are set as:
    ORACLE_OWNER= oracle
    ORACLE_HOME=  /u01/app/oracle/product/10.2.0/asm_1

Enter the full pathname of the local bin directory: [/usr/local/bin]: 
   Copying dbhome to /usr/local/bin ...
   Copying oraenv to /usr/local/bin ...
   Copying coraenv to /usr/local/bin ...


Creating /etc/oratab file...
Entries will be added to the /etc/oratab file as needed by
Database Configuration Assistant when a database is created
Finished running generic part of root.sh script.
Now product-specific root actions will be performed.

[root@ora2 ~]# 
}}

"OK" を押して、インストールは終了です。

&ref(asm-11.png);

正しくインストールが終われば、ASM インスタンスやリスナーが
クラスタとして登録されていることが確認できます。

#pre{{
[oracle@ora1 ~]$ /u01/crs/bin/crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....SM1.asm application    ONLINE    ONLINE    ora1        
ora....A1.lsnr application    ONLINE    ONLINE    ora1        
ora.ora1.gsd   application    ONLINE    ONLINE    ora1        
ora.ora1.ons   application    ONLINE    ONLINE    ora1        
ora.ora1.vip   application    ONLINE    ONLINE    ora1        
ora....SM2.asm application    ONLINE    ONLINE    ora2        
ora....A2.lsnr application    ONLINE    ONLINE    ora2        
ora.ora2.gsd   application    ONLINE    ONLINE    ora2        
ora.ora2.ons   application    ONLINE    ONLINE    ora2        
ora.ora2.vip   application    ONLINE    ONLINE    ora2  
}}

* Database ソフトウェアのインストール (db) [#s752f02a]

db 用にも同様にインストールしていきます。

再度 runInstaller を実行して、
/u01/app/oracle/product/10.2.0/db_1 
を指定してインストールします。

#pre{{
[oracle@ora1 database]$ ./runInstaller -ignoreSysPrereqs
}}

&ref(db-1.png);

「データベースの作成」もここで進めてもいいのですが、
段階を踏んでわかりやすくするためには、
「データベース・ソフトウェアのみインストール」を
選ぶのが無難です。

&ref(db-2.png);

* DBCA によるデータベースの作成 [#cb713330]

db 用にインストールした Database ソフトウェアから、
DBCA を実行します。

#pre{{
[oracle@ora1 ~]$ /u01/app/oracle/product/10.2.0/db_1/bin/dbca
}}

** ASM の設定 [#x726acfc]

ディスクグループは DATA しか作っていなかったので、
FRA も追加します。

データベースの作成の中でも実行できますが、
別々にやったほうがわかりやすいでしょう。

まずは RAC でのデータベースを作成することを選択します。

&ref(dbca-1.png);

ASM の設定なので、「自動ストレージ管理の構成」を選びます。

&ref(dbca-2.png);

全てのノードでインスタンスを実行するようにします。

&ref(dbca-3.png);

ASM インスタンスの SYS ユーザのパスワードを入力します。

&ref(dbca-4.png);

インストール時に作っていなかった FRA ディスクグループを作成します。

ディスクはこれも1つで作成しています。

&ref(dbca-5.png);

この ASM インスタンスでは DATA と FRA の
2つのディスクグループを使うということが
ここで設定されました。

状態が "MOUNTED" になっていることを確認してください。

&ref(dbca-6.png);

これで ASM インスタンスについては終了です。

** データベースの作成 [#hbdceaca]

DBCA のメニュー画面に戻って、
「データベースの作成」を選びます。

&ref(dbca-db-1.png);

データ用に使うディスクグループを選択します。
ここでは "DATA" です。

&ref(dbca-db-2.png);

「フラッシュ・リカバリ領域の指定」では
"FRA" のディスクグループを指定します。
"+" をつけると ASM で管理されたディスクグループであることを示します。

サイズもディスクの容量の範囲内で設定します。

「アーカイブ有効化」にもチェックを入れてみました。
これは後に変更することも可能です。

&ref(dbca-db-3.png);

以上の設定が終われば、データベースの作成が進んでいきます。

&ref(dbca-db-4.png);

完了するとこの画面になります。
途中でサンプルスキーマを入れることにしてあれば、
「パスワード管理」をクリックして、
ロックされているユーザの解除をします。

&ref(dbca-db-5.png);

動作確認用によくある SCOTT.EMP 表などを使うために、
SCOTT ユーザのロックを解除します。
後に SQL*PLUS から ALTER USER 文を使っても
もちろん構いません。

&ref(dbca-db-6.png);

最後はインスタンスを起動して終了になります。

&ref(dbca-db-7.png);

正しく作成されれば、DB インスタンスもクラスタに登録されます。
これで全部揃いました。

#pre{{
[oracle@ora1 ~]$ /u01/crs/bin/crs_stat -t
Name           Type           Target    State     Host        
------------------------------------------------------------
ora....SM1.asm application    ONLINE    ONLINE    ora1        
ora....A1.lsnr application    ONLINE    ONLINE    ora1        
ora.ora1.gsd   application    ONLINE    ONLINE    ora1        
ora.ora1.ons   application    ONLINE    ONLINE    ora1        
ora.ora1.vip   application    ONLINE    ONLINE    ora1        
ora....SM2.asm application    ONLINE    ONLINE    ora2        
ora....A2.lsnr application    ONLINE    ONLINE    ora2        
ora.ora2.gsd   application    ONLINE    ONLINE    ora2        
ora.ora2.ons   application    ONLINE    ONLINE    ora2        
ora.ora2.vip   application    ONLINE    ONLINE    ora2        
ora.orcl.db    application    ONLINE    ONLINE    ora2        
ora....l1.inst application    ONLINE    ONLINE    ora1        
ora....l2.inst application    ONLINE    ONLINE    ora2 
}}

* 動作確認 [#jb6675aa]

まずはコマンドを使えるようにします。環境変数は~/.bash_profile に定義するのが楽でしょう。

#pre{{
[oracle@ora1 ~]$ export ORACLE_HOME=/u01/app/oracle/product/10.2.0/db_1
[oracle@ora1 ~]$ export PATH=$ORACLE_HOME/bin:$PATH
[oracle@ora1 ~]$ export NLS_LANG=Japanese_Japan.UTF8
[oracle@ora1 ~]$ sqlplus sys/xxxxxxxx@orcl as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on 木 7月 10 01:13:30 2008

Copyright (c) 1982, 2005, Oracle.  All rights reserved.



Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Real Application Clusters, OLAP and Data Mining options
に接続されました。
SQL> select instance_name from v$instance;

INSTANCE_NAME
------------------------------------------------
orcl2

SQL>
}}

orcl を指定すると orcl2 につながりました。
あとは tnsnames.ora の設定などでうまく振り分けましょう。

もちろんテーブルの参照は普通にできます。

#pre{{
SQL> col ename format a10
SQL> col job format a10
SQL> select empno,ename,job,deptno from scott.emp;

     EMPNO ENAME      JOB            DEPTNO
---------- ---------- ---------- ----------
      7369 SMITH      CLERK          20
      7499 ALLEN      SALESMAN       30
      7521 WARD       SALESMAN       30
      7566 JONES      MANAGER        20
      7654 MARTIN     SALESMAN       30
      7698 BLAKE      MANAGER        30
      7782 CLARK      MANAGER        10
      7788 SCOTT      ANALYST        20
      7839 KING       PRESIDENT      10
      7844 TURNER     SALESMAN       30
      7876 ADAMS      CLERK          20

     EMPNO ENAME      JOB            DEPTNO
---------- ---------- ---------- ----------
      7900 JAMES      CLERK          30
      7902 FORD       ANALYST        20
      7934 MILLER     CLERK          10

14行が選択されました。

SQL> 
}}

* その後 [#g409c548]

RAC は構築して終わりではありません。

チューニングや接続のフェイルオーバーの設定、
バックアップやリストア、ローリングアップグレードなど、
さまざまな場面で技が必要です。

また別に解説していこうと思います。

----
- 非常に丁寧な解説ですね。最近Oracle Master Silver 10g を取得したのですが、技術的なスキルが足りないため、linux環境でoracleDBを構築し、勉強したいと思います。こちらの日記を参考にさせていただきたいと思います。ありがとうございました。 -- きのぴお &new{2008-12-07 (日) 02:50:50};
- ありがとうございます。RACではなくシングルインスタンスでの構築から始めてみるのがお手軽です。11gのインストールを別途書いていますので、よろしければ参考にしてください。 -- すぎむら &new{2008-12-07 (日) 16:20:03};
- こういう人がマニュアルを書いてくれれば・・・。多謝。 -- Jianchen &new{2009-04-17 (金) 21:13:34};
- OracleMaster Gold 10g勉強用にASM環境を作りました。非常に参考になりました。 -- まぼ &new{2009-10-23 (金) 12:51:24};
- OracleMaster Gold 10g勉強用にASM環境を作りました。非常に参考になりました。 -- まぼ &new{2009-10-26 (月) 12:58:23};

#comment

トップ   差分 履歴 リロード   一覧 検索 最終更新   ヘルプ   最終更新のRSS