機会がありまして VMware 上の CentOS 5.2 にて Oracle 10g R2 RAC を構築してみました。
Oracle をインストールしたことがある方ならば 一通り作ることができるように手順をまとめてみましたので、 もしお役に立てるところがあればご利用ください。
内容については無保証とします。 個人的な質問はある程度は受けますが、 日本オラクル社等へのお問い合わせはご遠慮ください。
1台環境設定してから VMware の clone を使ってまるまるコピーして、 ネットワークなどの設定を書き直すことで2台作りました。
データやフラッシュリカバリエリアはASMで管理します。 ディスクグループは次のようにしました。
次の文書を見ながらインストールしていきます。
下記のパッケージが必要となっています。
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 ユーザを作成したら ~/.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 }}
次の行を追加します。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 }}
/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 }}
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 }}
/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(). }}
/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台目の基本環境は作成終了です。 一度 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! }}
VMware なので、2台目はコピーして作ります。 VMware Workstation には clone という機能があり、 そのままコピーできます。
コピーの作り方は "Create a linked clone" と "Create a full clone" の2つがありますが、ディスクもたくさんあるので "full clone" のほうにしました。
2台目だけ起動して、ネットワークの設定を書き直します。
HOSTNAMEを "ora2" にします。
#pre{{ NETWORKING=yes NETWORKING_IPV6=no HOSTNAME=ora2 GATEWAY=192.168.1.1 }}
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 }}
これも同様に直します。
#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! }}
oracle ユーザでパスワードなしでお互いにログインできるように ssh を設定します。
簡単のため、パスフレーズは空にして作りました。
#pre{{ [oracle@ora1 ~]$ ssh-keygen -t rsa [oracle@ora1 ~]$ ssh-keygen -t dsa }}
#pre{{ [oracle@ora2 ~]$ ssh-keygen -t rsa [oracle@ora2 ~]$ ssh-keygen -t dsa }}
鍵をコピーする際に (yes/no) を聞かれたときは yes で答えます。 最初の一度だけ聞かれます。
#pre{{ Are you sure you want to continue connecting (yes/no)? yes }}
パスワードを要求されたときは正しいパスワードを入力しましょう。
#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 }}
#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 }}
ora1, ora1-priv, ora2, ora2-priv に対して、 パスワードなしでログインできることを確認します。
初回のログインでは (yes/no) を聞かれますが、 yes で答えて次回から聞かれないようにしましょう。
ここまでできたら一度両方を shutdown しておきます。
共有ディスクを作ります。ここではこのように作成することにしました。 冗長構成にしたいところでしたが、VMware では無理でした。
各ノードでの vmx ファイルにて、ロックの解除やキャッシュの設定を行います。
#pre{{ disk.locking = "false" diskLib.dataCacheMaxSize = "0" diskLib.dataCacheMaxReadAheadSize = "0" diskLib.dataCacheMinReadAheadSize = "0" diskLib.dataCachePageSize = "4096" diskLib.maxUnsyncedWrites = "0" }}
ora1 の "Edit virtual machine settings" から ディスクを追加して作成します。
0.2GB のときはこのように作成します。
Mode は Independent - Persistent にしておきます。
vmdk ファイルを作成する先はそれぞれの OS とは違うフォルダに入れるのが わかりやすいでしょう。 My Virtual Machines\RACshared\ の下に置きました。
この作業を繰り返して、このように作成してみました。 IDEで共有ディスクというのは気持ちが悪いですが、 VMware には接続数の制限があるようなのでこのようにしています。
Device | ファイル名 | ディスクの用途 | 容量 |
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 では新規作成ではなく、ここで作ったディスクを追加していきます。
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 }}
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" }}
ここまで正常に終われば、一度再起動します。
再起動後は 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 }}
CentOS 5 はサポートされていないため、-ignoreSysPrereqs を付けて インストーラを実行します。
#pre{{ [oracle@ora1 ~]$ unzip 10201_clusterware_linux32.zip ... [oracle@ora1 ~]$ cd clusterware [oracle@ora1 clusterware]$ ./runInstaller -ignoreSysPrereqs }}
インベントリのディレクトリを設定します。
インストール先は /u01/crs にしました。
CentOS 5 はサポートされていないため、エラーになります。 特に気にせずそのまま進めて構いません。
ora1 上でインストーラを実行したので、ora1 だけがリストアップされます。 ora2 の定義も追加します。
ここでは 192.168.1.0/24 が外向きとして定義してあるので、 eth0 側をパブリックにします。
OCRの場所を指定します。冗長化してあれば2つ指定できます。
投票ディスクの場所を指定します。 冗長化したときは3つ指定します。
「クラスタ・ノード」が正しく認識されていることを確認して、 「インストール」をクリックして先へ進めます。
インストールが進行していきます。
各ノードでスクリプトを実行します。
まずは 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.
ora1 ora2CSS 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)でエラーになります。 これは後に解決します。
このまま runInstaller を閉じて構いません。
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 }}
パブリックなネットワークは eth0 なので これだけが出てきます。
VIP(仮想IPアドレス)を入力していきます。 あらかじめ /etc/hosts に定義されていれば、 「IP別名」のところに入力することで 自動的に他の項目も入力されます。
正しく実行が終われば「構成結果」として表示されます。 「終了」を押して終わります。
正常に終了したら、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 }}
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 }}
Clusterware の配布物の中にあるクラスタ検証ユーティリティで、 正しくインストールできていることが確認できます。
#pre{{ [oracle@ora1 ~]$ clusterware/cluvfy/runcluvfy.sh stage -post crsinst -n ora1,ora2
クラスタ・サービス設定の事後チェックを実行しています
ノード到達可能性をチェック中... ノード"ora1"からのノード到達可能性チェックに合格しました。
ユーザー等価をチェック中... ユーザー"oracle"のユーザー等価チェックに合格しました。 ...
VIPノード・アプリケーションの存在をチェック中です (必須) チェックに合格しました。
ONSノード・アプリケーションの存在をチェック中です (オプション) チェックに合格しました。
GSDノード・アプリケーションの存在をチェック中です (オプション) チェックに合格しました。
クラスタ・サービス設定の事後チェックは成功しました。 }}
エラーがないことが確認できれば、Clusterware のインストールは終了です。
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 }}
Enterprise Edition を選択しました。
「パス」を /u01/app/oracle/product/10.2.0/asm_1 とします。 ここにインストールされます。
クラスタとしてインストールするため、 ora2 も選択します。
CentOS 5 は対応していないのでエラーになりますが、 気にせず続行して構いません。
asm インスタンスのためのインストールなので、 「自動ストレージ管理(ASM)の構成」を選択します。
SYS ユーザのパスワードを入力します。
ディスクグループを定義します。 インストール中には1つしか定義できないようなので、 ひとまず DATA を作成することにします。
冗長化する必要があればここで設定しますが、 後で変更することも可能です。 今回は VMware の制限から、1つのディスクで 1つのディスクグループとしています。
インストールのサマリーが表示されます。 「Oracleホーム」と「クラスタ・ノード」を確認して、 インストールを進めましょう。
root.sh を各ノードで実行します。
まずは 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" を押して、インストールは終了です。
正しくインストールが終われば、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 }}
db 用にも同様にインストールしていきます。
再度 runInstaller を実行して、 /u01/app/oracle/product/10.2.0/db_1 を指定してインストールします。
#pre{{ [oracle@ora1 database]$ ./runInstaller -ignoreSysPrereqs }}
「データベースの作成」もここで進めてもいいのですが、 段階を踏んでわかりやすくするためには、 「データベース・ソフトウェアのみインストール」を 選ぶのが無難です。
db 用にインストールした Database ソフトウェアから、 DBCA を実行します。
#pre{{ [oracle@ora1 ~]$ /u01/app/oracle/product/10.2.0/db_1/bin/dbca }}
ディスクグループは DATA しか作っていなかったので、 FRA も追加します。
データベースの作成の中でも実行できますが、 別々にやったほうがわかりやすいでしょう。
まずは RAC でのデータベースを作成することを選択します。
ASM の設定なので、「自動ストレージ管理の構成」を選びます。
全てのノードでインスタンスを実行するようにします。
ASM インスタンスの SYS ユーザのパスワードを入力します。
インストール時に作っていなかった FRA ディスクグループを作成します。
ディスクはこれも1つで作成しています。
この ASM インスタンスでは DATA と FRA の 2つのディスクグループを使うということが ここで設定されました。
状態が "MOUNTED" になっていることを確認してください。
これで ASM インスタンスについては終了です。
DBCA のメニュー画面に戻って、 「データベースの作成」を選びます。
データ用に使うディスクグループを選択します。 ここでは "DATA" です。
「フラッシュ・リカバリ領域の指定」では "FRA" のディスクグループを指定します。 "+" をつけると ASM で管理されたディスクグループであることを示します。
サイズもディスクの容量の範囲内で設定します。
「アーカイブ有効化」にもチェックを入れてみました。 これは後に変更することも可能です。
以上の設定が終われば、データベースの作成が進んでいきます。
完了するとこの画面になります。 途中でサンプルスキーマを入れることにしてあれば、 「パスワード管理」をクリックして、 ロックされているユーザの解除をします。
動作確認用によくある SCOTT.EMP 表などを使うために、 SCOTT ユーザのロックを解除します。 後に SQL*PLUS から ALTER USER 文を使っても もちろん構いません。
最後はインスタンスを起動して終了になります。
正しく作成されれば、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 }}
まずはコマンドを使えるようにします。環境変数は~/.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> }}
RAC は構築して終わりではありません。
チューニングや接続のフェイルオーバーの設定、 バックアップやリストア、ローリングアップグレードなど、 さまざまな場面で技が必要です。
また別に解説していこうと思います。