6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

最小限の設定で RAC インスタンスを起動する

Last updated at Posted at 2023-01-18

 Oracle Real Application Clusters (RAC) は複数ノードでストレージを共有しながら Oracle Database インスタンスを起動する複雑な仕組みです。RAC を起動するためには Oracle Grid Infrastructure 設定、Oracle Database 初期化パラメーター、各種ファイル等多数の設定が必要です。本記事では作成した Oracle Database データベースを最小限の設定だけで RAC 構成で起動する方法について記載しています。

環境

 以下の環境で試します。データベースは他ノードで起動中の Oracle Real Application Clusters 環境から RMAN DUPLICATE コマンドを使ってコピーしています。このため ASM ディスクグループ上にデータファイル、制御ファイルが配置され、パスワード・ファイルも配置された状態です。

項目 備考
Oracle Database 19c (19.14)
Oracle Grid Infrastructure 19c (19.14)
OS Red Hat Enterprise Linux 7.8
Node rel78-1, rel78-2 2ノード
データベース名 O19S

リソース登録

 まずは Oracle Grid Infrastructure にデータベースを登録します。srvctl add database コマンドを実行します。Real Application Clusters として機能するために -dbtype RAC を指定しています。また各ノードでインスタンスが起動するように srvctl add instance コマンドも実行します。

$ srvctl add database -db O19S -oraclehome /u01/app/oracle/product/19.0.0/dbhome_1 -dbtype RAC
$ srvctl add instance -db O19S -instance O19S1 -node rel78-1
$ srvctl add instance -db O19S -instance O19S2 -node rel78-2

初期化パラメーター

ここから初期化パラメーターをひとつずつ追加しながらインスタンスの起動テストを行います。

control_files のみ

初期化パラメーター・ファイルと、初期化パラメーター control_files はどうしても必要なので各ノードに設定します。

$ cd $ORACLE_HOME/dbs
$ cat initO19S1.ora
*.control_files='+DATA/O19S/CONTROLFILE/current.267.1126282771'

これだけの初期化パラメーター・ファイルで srvctl start database コマンドを実行します。両ノードで Oracle Grid Infrastructure のエラーが発生します。エラーの詳細は ${ORACLE_BASE}/diag/crs/{hostname}/crs/trace/crsd_oraagent_oracle.trc ファイルに記載されます。

$ srvctl start database -db o19s
PRCR-1079 : Failed to start resource ora.o19s.db
CRS-5017: リソース・アクション"ora.o19s.db start"に次のエラーが発生しました:
ORA-01506: missing or illegal database name
。詳細は"(:CLSN00107:)"("/u01/app/grid/diag/crs/rel78-1/crs/trace/crsd_oraagent_oracle.trc")を参照してください。

CRS-5017: リソース・アクション"ora.o19s.db start"に次のエラーが発生しました:
ORA-01506: missing or illegal database name
。詳細は"(:CLSN00107:)"("/u01/app/grid/diag/crs/rel78-2/crs/trace/crsd_oraagent_oracle.trc")を参照してください。

CRS-2674: 'ora.o19s.db'('rel78-1')の起動に失敗しました
CRS-2632: 配置ポリシーを満たす場所へのリソース'ora.o19s.db'の配置を試行するサー バーはありません
CRS-2674: 'ora.o19s.db'('rel78-2')の起動に失敗しました

エラーの原因は初期化パラメーターdb_name の不足でした。最初の起動で $ORACLE_BASE/diag/rdbms ディレクトリ以下のファイルが生成されています。

2023-01-12 13:03:02.503 : USRTHRD:501098240: [     INFO] {1:30447:3343} ORA-01506: missing or illegal database name

db_name を追加

初期化パラメータ db_name を追加してインスタンスを起動します。

$ srvctl start database -db o19s
PRCR-1079 : Failed to start resource ora.o19s.db
CRS-5017: リソース・アクション"ora.o19s.db start"に次のエラーが発生しました:
ORA-01034: ORACLE not available
ORA-27101: shared memory realm does not exist
Linux-x86_64 Error: 2: No such file or directory
Additional information: 4475
Additional information: 822090739
Process ID: 0
Session ID: 0 Serial number: 0
。詳細は"(:CLSN00107:)"("/u01/app/grid/diag/crs/rel78-1/crs/trace/crsd_oraagent_oracle.trc")を参照してください。

CRS-2674: 'ora.o19s.db'('rel78-1')の起動に失敗しました

エラーは発生していますが、ノード2(rel78-2)ではインスタンスは起動しています。ノード1(rel78-1)のエラー原因は instance_number でした。

2023-01-18 22:58:15.996 : USRTHRD:3240548096: [     INFO] {1:10042:702} ORA-00304: requested INSTANCE_NUMBER is busy

instance_number を追加

初期化パラメーター instance_number を追加します。各ノードで異なる値になるようにします。

$ srvctl start database -db o19s
PRCR-1079 : Failed to start resource ora.o19s.db
CRS-5017: リソース・アクション"ora.o19s.db start"に次のエラーが発生しました:
ORA-01102: cannot mount database in EXCLUSIVE mode
。詳細は"(:CLSN00107:)"("/u01/app/grid/diag/crs/rel78-2/crs/trace/crsd_oraagent_oracle.trc")を参照してください。

CRS-2674: 'ora.o19s.db'('rel78-2')の起動に失敗しました
CRS-2632: 配置ポリシーを満たす場所へのリソース'ora.o19s.db'の配置を試行するサー バーはありません

今度はノード2(rel78-2)でインスタンスが起動しません。ORA-1102 エラーが発生しています。これはノード1で起動したインスタンスとノード2のインスタンスがストレージを共有できず、ノード2ではシングルノードでも起動できなかったことを示します。このため初期化パラメーター cluster_database を設定します。

cluster_database を追加

初期化パラメーター cluster_database を設定したところ、2ノードで Oracle Real Application Clusters インスタンスが正常に稼働しました。このため最低限必要な初期化パラメーターは control_files, db_name, cluster_database, instance_number であることがわかりました。

$ srvctl start database -db o19s
$ cat initO19S1.ora
*.control_files='+DATA/O19S/CONTROLFILE/current.267.1126282771'
*.db_name='O19S'
*.cluster_database=true
O19S1.instance_number=1
O19S2.instance_number=2

上記以外の初期化パラメーターはすべてデフォルトです。私の検証環境では以下のようになりました。

初期化パラメーター ノード1の値 ノード2の値 備考
control_files +DATA/O19S/CONTROLFILE/current.267.1126282771 +DATA/O19S/CONTROLFILE/current.267.1126282771 設定
db_name O19S O19S 設定
instance_number 1 2 設定
cluster_database true true 設定
instance_name O19S1 O19S2
audit_file_dest $ORACLE_HOME/rdbms/audit $ORACLE_HOME/rdbms/audit
background_dump_dest $ORACLE_HOME/rdbms/log $ORACLE_HOME/rdbms/log
core_dump_dest $ORACLE_BASE/diag/rdbms/o19s/O19S1/cdump $ORACLE_BASE/diag/rdbms/o19s/O19S2/cdump
cpu_count 4 4
db_cache_size 64M 64M
hash_area_size 131072 131072
sga_max_size 416M 416M
sga_target 0 0
shared_pool_size 332M 332M
sort_area_size 65536 65536
thread 0 0
pga_aggregate_target 10M 10M
user_dump_dest $ORACLE_HOME/rdbms/log $ORACLE_HOME/rdbms/log

たったこれだけの設定でインスタンス起動が成功するとは思いませんでした。特に thread や instance_name の設定すら不要であることは驚きでした。

Author: Noriyoshi Shinoda / Date: January 18, 2023

6
3
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
6
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?