LoginSignup
4
4

More than 1 year has passed since last update.

VirtualBoxを用いてOracle DBのRAC(19c)を構築しよー

Last updated at Posted at 2021-10-03

image.png

上記のようなRAC構成をVirtualBoxで構築します

RAC(Real Application Cluster)って何だっけ?という疑問に端的に答えるなら、
複数のマシンでデータベースを構築することです
複数のマシンでつくることの利点としては、"高可用性"と"拡張性"が提供されることです

ではでは作っていきましょー

なお、備忘録に近いので、雑です

ホストOS(パソコン)

名称 バージョン情報 備考
OS Windows 10 Pro リソースに余裕があるパソコンが望ましい
仮想化ソフトウェア Oracle VM VirtualBox 6.1 仮想環境を構築する

ゲストOS

仮想マシン概要
仮想マシン名 ホスト名OS liunxバージョン メモリ ディスク領域 CPU数 備考
rac1 rac1.oracle19c.jp Oracle Linux 7.9 10G 100G 4 推奨としては4GB以上
rac2 rac2.oracle19c.jp Oracle Linux 7.9 10G 100G 4 推奨としては4GB以上
dns dns.oracle19c.jp Oracle Linux 7.9 8G 100G 4 快適に操作したい為、メモリとCPUは多めにしているが、メモリ:1G、CPU:2程度で問題なし
ネットワーク構成
ホスト名OS 接続名 IPアドレス ネットワーク 用途 備考
rac1.oracle19c.jp enp0s8 192.168.56.101 パブリック 外部通信
enp0s9 192.168.100.101 プライベート ノード間通信
enp0s10 192.168.200.101 プライベート ノード間通信
rac2.oracle19c.jp enp0s8 192.168.56.102 パブリック 外部通信
enp0s9 192.168.100.102 プライベート ノード間通信
enp0s10 192.168.200.102 プライベート ノード間通信
dns.oracle19c.jp enp0s8 192.168.56.254 パブリック 外部通信
scan構成
SCAN名 IPアドレス 用途
scan.oracle19c.jp 192.168.56.201 SCAN用VIP
192.168.56.202 SCAN用VIP
192.168.56.203 SCAN用VIP

仮想マシン作成

まずはコピー元(クローン元)用の仮想マシン(ゲストOS)を1つ作成します

そもそもゲストOSどうやって作るんだっけ?の人は以下記事を参考に構築下さい
※OSの設定完了まで行って下さい
※ディスクサイズは一度設定したら変更が手間なので100Gで作っておくこと推奨
※メモリ・CPUは後で容易に変更可能
https://qiita.com/FiftyStorm/items/9d4c2142b7aa0c212afc

ゲストOS作成完了しましたか?

できたらそのゲストOSをクローンして、"rac1"、"rac2"、"dns"を作成しましょー

コピーしたい仮想マシンを選択した上で"クローン"ボタンを押下
"名前"を入力、"MACアドレスのポリシー"は"すべてのネットワークアダプターでMACアドレスを生成"を選択
そして"次へ"を押下
image.png

"すべてのクローン"を選択し"次へ"を押下
image.png

"現在のマシンの状態"を選択し"クローン"を押下
image.png

VirtualBoxの諸々の設定を実施

"rac1","rac2"を以下の画像のように設定をする
※OSはシャッドダウンしないと設定できません
※"rac1","rac2"の内部ネットワークのアダプター3の名前は同じ名前にして下さい
※"rac1","rac2"の内部ネットワークのアダプター4の名前は同じ名前にして下さい

image.png

image.png

image.png

image.png

共有フォルダ設定

"rac1"のみを以下の画像のように設定をする
※"Oracle Grid Infrastructure"と"Oracle Database"のモジュール配置先

image.png

共有ストレージ追加

仮想マシン(rac1、rac2)で使用可能な共有ストレージを追加
下記の内容の通りホストOS上に仮想ディスクを作成し、ゲストOSに対応させる

配置先(ホストOS) 仮想ディスク名(ホストOS) デバイス名(ゲストOS) サイズ
D:\VBox\SharedDisk SharedDisk1.vdi sdb 50G
SharedDisk2.vdi sdc 50G
SharedDisk3.vdi sdd 50G
SharedDisk4.vdi sde 50G
SharedDisk5.vdi sdf 50G
SharedDisk6.vdi sdg 50G

"rac1"で仮想ディスクの作成と設定を行い、"rac2"では設定のみ行う
"rac1"のストレージ設定から"ハードディスクの追加"を押下

image.png

"作成"を押下

image.png

"VDI"を選択し"次へ"を押下

image.png

"固定サイズ"を選択し"次へ"を押下

image.png

"D:\VirtualBox\SharedDisk\SharedDisk1.vdi"と"50.00GB"を入力し"作成"を押下

image.png

同様の手順で以下を作成

D:\VirtualBox\SharedDisk\SharedDisk2.vdi
D:\VirtualBox\SharedDisk\SharedDisk3.vdi
D:\VirtualBox\SharedDisk\SharedDisk4.vdi
D:\VirtualBox\SharedDisk\SharedDisk5.vdi
D:\VirtualBox\SharedDisk\SharedDisk6.vdi

仮想メディアマネージャーを選択

image.png

"SharedDisk1.vdi"に対して"タイプ:共有可能"を選択し、"適用"を押下

image.png

同様の手順で以下に対しても"タイプ:共有可能"を選択し、"適用"を押下

SharedDisk2.vdi
SharedDisk3.vdi
SharedDisk4.vdi
SharedDisk5.vdi
SharedDisk6.vdi

"rac1"のストレージ設定で"共有可能"に変更されていることを確認し、変更を反映させるため"OK"を押下

image.png

"rac2"のハードディスクで以下を選択する

SharedDisk1.vdi
SharedDisk2.vdi
SharedDisk3.vdi
SharedDisk4.vdi
SharedDisk5.vdi
SharedDisk6.vdi

"rac2"のストレージ設定から"ハードディスクの追加"を押下

image.png

"SharedDisk1.vdi"~"SharedDisk6.vdi"を選択し、"選択"を押下
※複数選択できません

image.png

"OK"を押下

image.png

DNSサーバー設定

仮想マシン(dns)にて、DNSサーバーの設定を行います
作業は、rootユーザーで行います

ホスト名OS デバイス名 メソッド アドレス ネットマスク ゲートウェイ 自動接続 用途
dns.oracle19c.jp enp0s8 手動 192.168.56.254 255.255.255.0 - ON DNSサーバー

ホスト名を変更する

vi /etc/hostname
dns.oracle19c.jp

nmcliコマンドでenp0s8のネットワーク設定を変更する

nmcli c modify enp0s8 ipv4.method manual ipv4.addresses 192.168.56.254/24 connection.autoconnect yes

設定内容を確認

nmcli d show enp0s8
GENERAL.DEVICE:                         enp0s8
GENERAL.TYPE:                           ethernet
GENERAL.HWADDR:                         08:00:27:9B:87:C8
GENERAL.MTU:                            1500
GENERAL.STATE:                          100 (接続済み)
GENERAL.CONNECTION:                     enp0s8
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/2
WIRED-PROPERTIES.CARRIER:               オン
IP4.ADDRESS[1]:                         192.168.56.254/24
IP4.GATEWAY:                            --
IP4.ROUTE[1]:                           dst = 192.168.56.0/24, nh = 0.0.0.0, mt = 101
IP6.ADDRESS[1]:                         fe80::c986:31cd:7d66:d7c8/64
IP6.GATEWAY:                            --
IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 101
IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255

hostsファイルを修正

vi /etc/hosts

以下を追記

192.168.56.101 rac1.oracle19c.jp rac1
192.168.56.102 rac2.oracle19c.jp rac2
192.168.56.111 rac1-vip.oracle19c.jp rac1-vip
192.168.56.112 rac2-vip.oracle19c.jp rac2-vip
192.168.56.201 scan.oracle19c.jp scan
192.168.56.202 scan.oracle19c.jp scan
192.168.56.203 scan.oracle19c.jp scan
192.168.56.254 dns.oracle19c.jp dns

enp0s3は不要なので、自動起動OFFにして、停止

nmcli c modify enp0s3 connection.autoconnect no
nmcli c down enp0s3

設定反映の為、再起動

reboot

dnsmasq を使用して DNS サーバーを構築
自動起動を有効化して、dnsmasqを起動
また、再起動します

systemctl enable dnsmasq.service
systemctl start dnsmasq.service
reboot

常に起動していることと自動起動が有効化されていることを確認

[root@dns ~]# systemctl status dnsmasq.service
● dnsmasq.service - DNS caching server.
   Loaded: loaded (/usr/lib/systemd/system/dnsmasq.service; enabled; vendor preset: disabled)
   Active: active (running) since 水 2021-07-14 21:21:18 JST; 1min 29s ago
 Main PID: 1234 (dnsmasq)
    Tasks: 1
   CGroup: /system.slice/dnsmasq.service
           └─1234 /usr/sbin/dnsmasq -k

 7月 14 21:21:18 dns.oracle19c.jp systemd[1]: Started DNS caching server..
 7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: started, version 2.76 cachesize 150
 7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: compile time options: IPv6 GNU-getopt DBus no-i18n IDN DHCP DHCPv6 no-Lua TFTP no-conntrack ipset auth nettlehash no-DNSSEC ...ect inotify
 7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: no servers found in /etc/resolv.conf, will retry
 7月 14 21:21:19 dns.oracle19c.jp dnsmasq[1234]: read /etc/hosts - 10 addresses
Hint: Some lines were ellipsized, use -l to show in full.

Oracle Preinstallation RPMのインストール

rac1、rac2にて、rootユーザーで作業を行う

以下を実行

yum install oracle-database-preinstall-19c

oracle-database-preinstall-19c-verify を実行

export LANG=C
oracle-database-preinstall-19c-verify

OSユーザー構成

rac1、rac2にて、rootユーザーで作業を行う

必要な OS グループを作成
※oinstall、dba、oper、backupdba、dgdba、kmdba、racdba は「Oracle Preinstallation RPM」で作成されている

groupadd -g 54327 asmdba
groupadd -g 54328 asmoper
groupadd -g 54329 asmadmin

gridユーザー作成と oracleユーザー修正

useradd -u 54322 -g oinstall -G asmadmin,asmdba,asmoper,racdba grid
usermod -u 54321 -g oinstall -G dba,asmdba,backupdba,dgdba,kmdba,racdba,oper oracle

oracleユーザーと gridユーザーのパスワードを設定

passwd oracle
passwd grid

必要なディレクトリを作成

mkdir -p /u01/app/grid
mkdir -p /u01/app/oracle
mkdir -p /u01/app/19.3.0/grid
mkdir -p /u01/app/oraInventory
mkdir -p /u01/app/oracle/product/19.3.0/dbhome_1
chown -R grid:oinstall /u01
chown -R oracle:oinstall /u01/app/oracle
chown -R grid:oinstall /u01/app/oraInventory
chmod -R 775 /u01

oracleユーザーとgridユーザーの.bash_profileを設定

# vi /home/oracle/.bash_profile

~下記を追記~
umask 022
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1

# vi /home/grid/.bash_profile

~下記を追記~
umask 022
export ORACLE_BASE=/u01/app/grid
export ORACLE_HOME=/u01/app/19.3.0/grid

oracleユーザーとgridユーザーのリソース制限を設定

# vi /etc/security/limits.conf

~下記を追記~
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536
oracle soft stack 10240
oracle hard stack 32768

grid soft nproc 2047
grid hard nproc 16384
grid soft nofile 1024
grid hard nofile 65536
grid soft stack 10240
grid hard stack 32768

ログインしたときにリソース制限が有効になるように、PAM認証の設定ファイルを修正

# vi /etc/pam.d/login

~下記を追記~
session required pam_limits.so

システム時刻同期設定

chrony.confをリネーム

mv /etc/chrony.conf /etc/chrony.conf.org

ネットワーク構成

ホスト名OS デバイス名 IPアドレス メソッド ネットマスク ゲートウェイ 自動接続 DNSサーバー 用途
rac1.oracle19c.jp enp0s8 192.168.56.101 手動 255.255.255.0 - ON 192.168.56.254 外部通信
enp0s9 192.168.100.101 手動 255.255.255.0 - ON - ノード間通信
enp0s10 192.168.200.101 手動 255.255.255.0 - ON - ノード間通信
rac2.oracle19c.jp enp0s8 192.168.56.102 手動 255.255.255.0 - ON 192.168.56.254 外部通信
enp0s9 192.168.100.102 手動 255.255.255.0 - ON - ノード間通信
enp0s10 192.168.200.102 手動 255.255.255.0 - ON - ノード間通信

rac1用のnmcliコマンド

nmcli c modify enp0s8 ipv4.method manual ipv4.addresses 192.168.56.101/24 ipv4.dns 192.168.56.254 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s9 con-name enp0s9 ipv4.method manual ipv4.addresses 192.168.100.101/24 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s10 con-name enp0s10 ipv4.method manual ipv4.addresses 192.168.200.101/24 connection.autoconnect yes

rac2用のnmcliコマンド

nmcli c modify enp0s8 ipv4.method manual ipv4.addresses 192.168.56.102/24 ipv4.dns 192.168.56.254 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s9 con-name enp0s9 ipv4.method manual ipv4.addresses 192.168.100.102/24 connection.autoconnect yes
nmcli c add type ethernet ifname enp0s10 con-name enp0s10 ipv4.method manual ipv4.addresses 192.168.200.102/24 connection.autoconnect yes

設定を確認したい場合は以下コマンドを実行

nmcli c show
nmcli d show "デバイス名"

複数プライベート・ネットワークを使用する場合、rp_filterパラメータの設定が必要
2(緩慢モード)に設定
※rac1,rac2共通

# vi /etc/sysctl.d/99-sysctl.conf

~下記を記載~
net.ipv4.conf.enp0s9.rp_filter = 2
net.ipv4.conf.enp0s10.rp_filter = 2

変更した値を反映
※rac1,rac2共通

sysctl --system

hosts ファイルを修正
※rac1,rac2共通

# vi /etc/hosts

~下記を記載~
192.168.56.101 rac1.oracle19c.jp rac1
192.168.56.102 rac2.oracle19c.jp rac2
192.168.56.111 rac1-vip.oracle19c.jp rac1-vip
192.168.56.112 rac2-vip.oracle19c.jp rac2-vip

enp0s3は不要なので、自動起動OFFにして、停止
※rac1,rac2共通

nmcli c modify enp0s3 connection.autoconnect no
nmcli c down enp0s3

image.png

Oracle Grid Infrastructureのインストール

"rac1"を起動し、gridユーザーでログイン
共有フォルダー(前述したvirtualboxの設定が必要)をマウントするので、rootユーザーに切り替え
マウント先ディレクトリを作成して、共有フォルダーをマウント

mkdir /opt/image
mount -t vboxsf oracle19c /opt/image

Oracleソフトウェアが配置されているディレクトリに移動し、ファイルを確認
gridユーザーに戻る

cd /opt/image
ll

※virtualboxで共有フォルダで設定したホスト(パソコン)のディレクトリ(D:\Software\oracle19c
)に"LINUX.X64_193000_db_home.zip"と"LINUX.X64_193000_grid_home.zip"を配置しておく必要あり
※zipファイルは以下からダウンロード可能(オラクルID必要)
https://www.oracle.com/jp/database/technologies/oracle-database-software-downloads.html

"rac1"にて、gridユーザーでインストール開始

env|grep ORA
ORACLE_BASE=/u01/app/grid
ORACLE_HOME=/u01/app/19.3.0/grid

cd $ORACLE_HOME
pwd
/u01/app/19.3.0/grid

unzip /opt/image/LINUX.X64_193000_grid_home.zip

セットアップ起動

/u01/app/19.3.0/grid/gridSetup.sh

以下の画像の通り、設定していく

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

「修正および再チェック」をクリック
生成される修正スクリプトを実行する
image.png

image.png

image.png

image.png

スワップサイズとRPMは今回は無視する為、"すべて無視"をチェック
image.png

構成スクリプトの実行を促されたら、実行
image.png

Oracle Databaseのインストール

"rac1"にて、oracleユーザーでインストール

env|grep ORA
ORACLE_BASE=/u01/app/oracle
ORACLE_HOME=/u01/app/oracle/product/19.3.0/dbhome_1

cd $ORACLE_HOME
pwd
/u01/app/oracle/product/19.3.0/dbhome_1
 unzip /opt/image/LINUX.X64_193000_db_home.zip

インストーラー起動

./runInstaller

以下の画像の通り実行していく

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

ASMディスク・グループ作成

gridユーザーでASMCAを起動

/u01/app/19.3.0/grid/bin/asmca

以下の画像の通り実行していく

ディスクグループを選択し、作成をクリック
image.png

画像の通り、設定してOKをクリック
image.png

終了をクリック
image.png

データベース作成

oracleユーザーでDBCAを起動

/u01/app/oracle/product/19.3.0/dbhome_1/bin/dbca

以下の画像の通り設定していく

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

環境変数の設定

gridユーザーとoracleユーザーの環境変数を設定
"rac1"、"rac2"それぞれで設定

tmpディレクトリ作成

su - grid
mkdir $HOME/tmp

PMONより、ORACLE_SIDに設定する値を確認

ps -ef | grep pmon
grid      4585     1  0 14:44 ?        00:00:00 asm_pmon_+ASM1
oracle    8845     1  0 17:05 ?        00:00:00 ora_pmon_orcl_2
grid     22001 20168  0 17:30 pts/0    00:00:00 grep --color=auto pmon

.bash_profileを修正

vi .bash_profile

~下記を追記~
export TMPDIR=$HOME/tmp
export TEMP=$HOME/tmp
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=JAPANESE_JAPAN.UTF8
export LANG=ja_JP.UTF-8
export ORACLE_SID=+ASM1

.bash_profileの修正を反映

. .bash_profile

tmpディレクトリ作成

su - oracle
mkdir $HOME/tmp

PMONより、ORACLE_SIDに設定する値を確認

$ ps -ef | grep pmon
grid      4585     1  0 14:44 ?        00:00:00 asm_pmon_+ASM1
oracle    8845     1  0 17:05 ?        00:00:00 ora_pmon_orcl_2
grid     22001 20168  0 17:30 pts/0    00:00:00 grep --color=auto pmon

.bash_profileを修正

$ vi .bash_profile

~下記を追記~
export TMPDIR=$HOME/tmp
export TEMP=$HOME/tmp
export PATH=$ORACLE_HOME/bin:$ORACLE_HOME/jdk/bin:${PATH}
export LD_LIBRARY_PATH=$ORACLE_HOME/lib
export NLS_LANG=JAPANESE_JAPAN.UTF8
export LANG=ja_JP.UTF-8
export ORACLE_SID=orcl_2

.bash_profileの修正を反映

同様にもう一方のノードでも環境変数の設定を行う

データベースの稼働確認

以下の状態なら問題なし

接続

sqlplus / as sysdba

show con_name

CON_NAME
------------------------------
CDB$ROOT

SELECT inst_id, con_id, name, open_mode FROM gv$database ORDER BY inst_id, con_id

   INST_ID     CON_ID NAME                 OPEN_MODE
---------- ---------- -------------------- ------------
         1          0 ORCL                 READ WRITE
         2          0 ORCL                 READ WRITE

SELECT inst_id, con_id, instance_name, status FROM gv$instance ORDER BY inst_id, con_id;

   INST_ID     CON_ID INSTANCE_NAME        STATUS
---------- ---------- -------------------- ---------
         1          0 orcl_1               OPEN
         2          0 orcl_2               OPEN

SELECT inst_id, con_id, name, open_mode FROM gv$pdbs ORDER BY inst_id, con_id;

    INST_ID     CON_ID NAME                 OPEN_MODE
---------- ---------- -------------------- ----------------
         1          2 PDB$SEED             READ ONLY
         1          3 PDB1                 READ WRITE
         2          2 PDB$SEED             READ ONLY
         2          3 PDB1                 READ WRITE

SCANを使用したPDB1への接続確認

sqlplus system/[PASSWORD]@scan.oracle19c.jp:1521/pdb1.oracle19c.jp

SCANを使用したORCLへの接続確認

$ sqlplus system/[PASSWORD]@scan.oracle19c.jp:1521/orcl.oracle19c.jp

コマンド集

DBの停止(全ノードのリソース操作) ※rac1(root)で実行

/u01/app/19.3.0/grid/bin/srvctl stop database -d ORCL

CRSの停止(全ノードのリソース操作)※rac1(root)で実行

/u01/app/19.3.0/grid/bin/crsctl stop cluster -all

CRSリソースの状態確認(全ノードのリソース操作) ※rac1(root)で実行

/u01/app/19.3.0/grid/bin/crsctl stat res -t

CRSリソースの状態確認 ※rac1&rac2(root)で実行

/u01/app/19.3.0/grid/bin/crsctl check crs

crsが自動的に起動するようになっているか確認

cat /etc/oracle/scls_scr/rac1/root/crsstart

データベース起動&状態確認 ※rac1(root)で実施

/u01/app/19.3.0/grid/bin/srvctl start database -d ORCL
/u01/app/19.3.0/grid/bin/crsctl stat res -t

PDB起動

[rac1]
alter pluggable database all open;

[rac2]
shutdown immediate ←うまく起動しなかったので、一度落とした
startup
alter pluggable database all open;

その他

set lin 1000
set pages 100
col name for a20
SELECT inst_id, con_id, name, open_mode FROM gv$pdbs ORDER BY inst_id, con_id;

CREATE TABLE test (test VARCHAR2(10) NOT NULL);

usermod -aG wheel ユーザー名

systemctl disable avahi-daemon.service
systemctl stop avahi-daemon.service

参考サイト

Oracle LinuxにOracle Real Application Clusters 19c Enterprise Editionをインストールする
https://dbalone.com/oracle-rac-19c-ee-install

Oracle VM VirtualBox を用いた Oracle Real Application Clusters (RAC) 12c Release 1 環境の構築
https://www.oracle.com/a/tech/docs/raconvbox-db12101onol6u4-2080481-ja.pdf

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4