9章 RACデータベースの管理
本章ではRACデータベースの管理について確認していきます。
RACデータベースはシングルDBと比較してどのような操作の違いがあるのでしょうか。
表領域の作成やテーブル作成はシングルDBと違うのか?
パラメータ変更は変わるかなどDB管理に必要な操作を学んでいきます。
RACのDB管理の概要
RACの特徴としては複数インスタンスに対してデータベースは1つとなります。
その為、データベースに影響がある操作は1つのノードで実施しても
全インスタンスに影響があります。またインスタンスは別々ですので、
インスタンスに影響がある操作は片方で実施しても影響は片方のみとなります。
インスタンス全体に影響がある操作
・表領域の作成、追加、変更
・テーブルの作成、削除、変更
・レコードの挿入、削除、更新
インスタンスのみに影響がある操作
・インスタンス停止
・初期化パラメータの変更
各ノードにDBインスタンスが存在するのでSQL*PlusでDBインスタンスを停止する場合は、
各ノードでshutdownコマンドを実施する必要があります。
たくさんのノードが存在するような環境ですべてのインスタンスを停止する場合、
SQL*Plusでは時間がかかる為、srvctlコマンドを使用します。
その他の操作も色々ありますが、操作していると段々と理解できるようになるかと思います。
今回はRAC特有の操作について確認していきたいと思います。
RACインスタンスの接続
RACのインスタンスはそれぞれのノードで起動しています。
ノード1でORCL01のインスタンスに接続するにはどうすればよいのでしょうか。
一番簡単な方法はノード1上でORACLE_SIDをorcl01に設定し接続します。
ノード2に存在するorcl02インスタンスも同様ノード2に接続し、
ORACLE_SIDをorcl02に設定し接続します。
$ export ORACLE_SID=orcl01
$ echo $ORACLE_SID
$ sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on XX XX XX XX:XX:XX 2018
Copyright (c) 1982, 2016, Oracle. All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
orcl01
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
今回はプラガブルデータベースなのでCDBに接続しています。
その他の方法はシングルデータベースと同様、簡易接続、
ネットサービス接続などがあります。
簡易接続は以下の方法で接続します。
$ sqlplus system/manager@scan.oracle12c.jp:1521/orcl
orclはサービス名です。サービス名は初期化パラメータ「service_names」で確認できますが、
デフォルトではデータベース名と同じ名前が1つ存在します。サービスは追加で作成することも
可能ですが、それは次章でご紹介します。
また「scan.oracle12c.jp」はDNSもしくはhostsファイルに記載のあるSCANのVIPアドレスです。
通常はSCANは複数IPアドレスを定義しているので、
そのIPがSCAN VIPとして各ノードで自動的に起動します。
今回の環境はhostsに記載しています。
$ cat /etc/hosts
192.168.56.101 rac01.oracle12c.jp rac01
192.168.56.102 rac02.oracle12c.jp rac02
192.168.56.111 rac01-vip.oracle12c.jp rac01-vip
192.168.56.112 rac02-vip.oracle12c.jp rac02-vip
192.168.56.201 scan.oracle12c.jp scan
192.168.56.202 scan.oracle12c.jp scan
192.168.56.203 scan.oracle12c.jp scan
scan.oracle12c.jpは192.168.56.201と192.168.56.202と
192.168.56.203の3つのVIPを定義しています。
このSCAN VIPがどちらで起動しているかはcrsctlコマンドで確認できます。
$ crsctl stat res -t -w "TYPE = ora.scan_vip.type"
-------------------------------------------------------------------
Name Target State Server State details
-------------------------------------------------------------------
Cluster Resources
-------------------------------------------------------------------
ora.scan1.vip
1 ONLINE ONLINE rac02 STABLE
ora.scan2.vip
1 ONLINE ONLINE rac01 STABLE
ora.scan3.vip
1 ONLINE ONLINE rac01 STABLE
-------------------------------------------------------------------
上記から、scan1はノード2(rac02)でscan2,3はノード1(rac01)で起動しています。
どのIPアドレスかはOSコマンドのipコマンドで確認できます。v
$ ip addr show
1: lo: mtu 65536 qdisc noqueue state UNKNOWN
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0: mtu 1500 qdisc pfifo_fast state UP qlen 1000
link/ether 08:00:27:9b:44:c0 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.101/24 brd 192.168.56.255 scope global eth0
inet 192.168.56.111/24 brd 192.168.56.255 scope global secondary eth0:2
inet 192.168.56.203/24 brd 192.168.56.255 scope global secondary eth0:3
inet 192.168.56.202/24 brd 192.168.56.255 scope global secondary eth0:4
・・・省略・・・
ノード1では192.168.56.202,192.168.56.203のSCAN VIPアドレスが起動しています。
簡易接続は以下のコマンドですが、この場合はどちらのノードのインスタンスに接続するのでしょうか。
orclはサービス名であり、どちらのインスタンスもorclである為、
両方のインスタンスに接続する可能性があります。
$ sqlplus system/manager@scan.oracle12c.jp:1521/orcl
答えはSCANで接続した場合は、どちらのインスタンスに接続されるかわかりません。
これはSCANのクライアントロードバランスと言う機能でデフォルトのサービスは
インスタンスの接続数を均等に割り振ります。
このようにSCANを利用することでクライアントはノード障害時でも意識することなく、
SCAN VIPを使用すれば自動的にフェイルオーバー、ロードバランシングの機能を使用することが出来ます。
クライアントとしては障害を意識しないで接続できるのでSCANのほうがメリットが大きいですね。
もし特定のインスタンスに接続したい場合は、対象ノードの物理IP等で接続すれば必ず特定のインスタンスに接続することが出来ます。
RAC 初期化パラメータ
初期化パラメータの変更は各インスタンスで異なるパラメータを設定することが出来ます。
例えば自動メモリ管理(memory_target)のサイズをそれぞれのインスタンスで変えることが可能です。
ただし「すべてのインスタンスで同じ値を設定する必要があるパラメータ」も存在します。
COMPATIBLE
CLUSTER_DATABASE
CONTROL_FILES
DB_BLOCK_SIZE
DB_DOMAIN
DB_FILES
DB_NAME
DB_RECOVERY_FILE_DEST
DB_RECOVERY_FILE_DEST_SIZE
DB_UNIQUE_NAME
INSTANCE_TYPE (RDBMSまたはASM)
PARALLEL_EXECUTION_MESSAGE_SIZE
REMOTE_LOGIN_PASSWORDFILE
UNDO_MANAGEMENT
上記パラメータはすべてのインスタンスで同じ値を設定します。
RACデータベースで初期化パラメータを変更する場合、
ALTER SYSTEM分にSIDオプションが必要となります。
[構文] RACパラメータの変更
$ ALTER SYSTEM SET パラメータ名 = 値
[SCOPE=both|spfile|memory] [ SID='*|SID名']
SIDオプションには適用したいインスタンス名を指定するか、
*の場合は全インスタンスを適用するかを指定します。
RAC データベース起動停止
RACのデータベース停止方法は以下の方法があります。
・SRVCTLコマンド
・SQL*Plusのstartup,shutdown
・Enteprise Manager
SRVCTLコマンドは全インスタンスの起動、停止を行うことができますし、
片方のインスタンスを起動、停止することもできます。
SQL*Plusのstartup,shutdownコマンドは片方のインスタンスのみ影響があります。
その為、データベースを停止するのであれば、
全ノードでshutdownコマンドを発行する必要があります。
[構文] RAC データベース起動/停止
$ srvctl [start|stop] database -d DB名
[構文] RAC DBインスタンス起動/停止
$ srvctl [start|stop] instance -d DB名 -i インスタンス名
srvctlでdatabaseを指定するとすべてのインスタンスに対して操作を行います。
$ crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
1 OFFLINE OFFLINE rac01 Instance Shutdown,ST
ABLE
2 OFFLINE OFFLINE rac02 Instance Shutdown,ST
ABLE
--------------------------------------------------------------------------------
$ srvctl start database -d orcl
$ crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
1 ONLINE ONLINE rac01 Open,HOME=/u01/app/o
racle/product/12.2.0
/dbhome_1,STABLE
2 ONLINE ONLINE rac02 Open,HOME=/u01/app/o
racle/product/12.2.0
/dbhome_1,STABLE
--------------------------------------------------------------------------------
srvctlでinstanceを指定すると特定のインスタンスに対して操作を行います。
$ crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
1 OFFLINE OFFLINE rac01 Instance Shutdown,ST
ABLE
2 OFFLINE OFFLINE rac02 Instance Shutdown,ST
ABLE
--------------------------------------------------------------------------------
$ srvctl start instance -d orcl -i orcl01
$ crsctl stat res -w "TYPE = ora.database.type" -t
--------------------------------------------------------------------------------
Name Target State Server State details
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.orcl.db
1 ONLINE ONLINE rac01 Open,HOME=/u01/app/o
racle/product/12.2.0
/dbhome_1,STABLE
2 OFFLINE OFFLINE rac02 Instance Shutdown,ST
ABLE
--------------------------------------------------------------------------------
上記コマンドはorcl01インスタンスのみを起動します。
プラガブルデータベースの場合、CDBのみ起動します。
上記はCDBを起動するコマンドであり、PDBは起動しません。
手動で起動するのであれば、いつも通りCDBに接続し、
alter pluggable database openで起動します。
PDBをsrvctlコマンドで起動したい場合は、サービスを作成して依存関係により起動させます。
自動起動させる場合はこの方法を使用します。サービスに関しては次章でご紹介します。
表領域を作成したり、テーブルを作成したりはどちらのインスタンスで
実施してもかまいませんが、データベースは1つなのでコマンドの実行はどちらか一方のみとなります。
その他の操作はシングルデータベースと変わりはありません。
RAC 動的パフォーマンスビュー
RAC環境は複数インスタンスが存在する為、
動的パフォーマンスビューは各インスタンス上に存在します。
動的パフォーマンスビューはインスタンス上の管理情報を保持するビューでしたね。
データディクショナリはデータベースの管理情報を格納するビューであり、
データディクショナリは全インスタンスで共通です。
例えば、インスタンス名を確認したい場合、V$INSTANCEビューを参照しますが、
全インスタンスの情報を参照するときは、各ノードにログインして、
それぞれのノードでインスタンス名を確認するのは大変ですね。
RAC環境の場合、全インスタンスから情報を取得するGV$ビューが存在します。
このビューを使用することで一方のノードから、
複数インスタンスの情報を取得することが出来ます。
SQL> SELECT instance_name,host_name FROM gv$instance;
INSTANCE_NAME HOST_NAME
---------------- --------------------
orcl01 rac01
orcl02 rac02
例えば各インスタンスでどのくらいの接続が来ているのかを確認する場合、
GV$SESSIONが便利です。
SQL> SELECT inst_id,username,machine FROM gv$session;
INST_ID USERNAME MACHINE
---------- -------------------- --------------------
1 SYSRAC rac01
1 SYS rac01
2 APLUSER rac02
2 APLUSER rac02
2 APLUSER rac02
2 APLUSER rac02
上記のように各インスタンスごとにどんな接続があるのかを確認することができます。
データベースの自動起動
データベースはクラスタウェア起動時、自動的(デフォルト)にOPENまで起動します。
※クラスタウェアの自動起動とは別です。
ただ計画作業(メンテナンス)などでクラスタウェアを起動した後、
DBは起動させたくない場合などもあります。
この設定は変更が可能です。
# srvctl config -database orcl
一意のデータベース名: orcl
データベース名: orcl
Oracleホーム: /u01/app/oracle/product/12.2.0/dbhome_1
Oracleユーザー: oracle
spfile: +DATA/ORCL/PARAMETERFILE/spfile.273.947872331
パスワード・ファイル: +DATA/orcl/orapworcl01
ドメイン:
開始オプション: open
停止オプション: immediate
データベース・ロール: PRIMARY
管理ポリシー: AUTOMATIC
サーバー・プール:
ディスク・グループ: DATA
マウント・ポイントのパス:
サービス: test1,test2,test3_pdb
タイプ: RAC
開始の同時実行性:
停止の同時実行性:
OSDBAグループ: dba
OSOPERグループ: dba
データベース・インスタンス: orcl01,orcl02
構成されたノード: rac01,rac02
CSSクリティカル: no
CPU数: 0
メモリー・ターゲット: 0
最大メモリー: 0
データベース・サービスのデフォルト・ネットワーク番号:
データベースは管理者によって管理されています
上記の管理ポリシーはAUTOMATICとなっていますが、デフォルト自動起動が有効となっています。
この設定を変更する場合は以下のコマンドを使用します。
[構文] DB自動起動有効/無効
$ srvctl modify database -database orcl -policy [manual|automatic]
自動起動を有効(デフォルト)にする場合は、automaticを指定し、
無効とする場合は、manualを設定します。
以上がRACデータベース管理についてのご紹介となります。
今回はデータベースの管理について学んでいきました。お疲れ様でした。