Oracle Data Guard環境をOracle Clusterwareに登録する


# Oracle Data Guard環境
Oracle Data Guard環境の構築時にはプライマリ・データベースからデータファイルの完全なコピーが必要です。
一般的なファイル・システムを使っている場合は、scpコマンド等でコピーしても問題ありませんが、ASM環境ではRMANのDUPLICATEコマンドを利用する方法が一般的です。ファイルのコピーを行った後、Data Guard環境を構築しますが、Oracle Clusterwareへの登録は自動的には行われないためここで手順を確認します。

# Oracle Clusterwareへの登録
Oracle Data Guardのスタンバイ・インスタンスをOracle Clusterwareへ登録するにはsrvctlコマンドを実行します。コマンドを実行するOSユーザーは、oracleユーザー（Oracle Databaseのインストール・ユーザー）またはgridユーザー（Oracle Grid Infrastructureのインストール・ユーザー）です。
使い方はsrvctl add database -helpコマンドで表示されます。表示されるメッセージの文字コードは環境変数LANGに依存します。環境変数NLS_LANGではありません。

```
$ srvctl add database -help

Oracle Restartによって管理されるデータベース構成を追加します。

使用方法: srvctl add database -db <db_unique_name> -oraclehome <oracle_home> [-domain <domain_name>] [-spfile <spfile>] [-pwfile <password_file_path>] [-role {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY | FAR_SYNC}] [-startoption <start_options>] [-stopoption <stop_options>] [-dbname <db_name>] [-instance <inst_name>] [-policy {AUTOMATIC | MANUAL | NORESTART}] [-diskgroup "<diskgroup_list>"]
    -db <db_unique_name>           データベースの一意の名前
    -oraclehome <path>             Oracleホーム・パス
    -domain <domain>               データベースのドメイン。データベースにDB_DOMAINが設定されている場合、設定する必要があります。
    -spfile <spfile>               サーバー・パラメータ・ファイルのパス
    -pwfile <password_file_path>   パスワード・ファイルのパス
    -role <role>                   データベースのロール(PRIMARY、PHYSICAL_STANDBY、LOGICAL_STANDBY、SNAPSHOT_STANDBY、FAR_SYNC)
    -startoption <start_options>   データベースの起動オプション。起動オプション の例は、OPEN、MOUNTまたは"READ ONLY"です。
    -stopoption <stop_options>     データベースの停止オプション。停止オプション の例は、NORMAL、TRANSACTIONAL、IMMEDIATEまたはABORTです。
    -dbname <db_name>              -dbオプションで指定した一意の名前とは異なる場合のデータベース名(DB_NAME)
    -instance <inst_name>          インスタンス名
    -policy <dbpolicy>             データベースの管理ポリシー(AUTOMATIC、MANUAL またはNORESTART)
    -diskgroup "<diskgroup_list>"  カンマで区切られたディスク・グループ名のリス ト
    -verbose                       冗長出力
    -help                          使用方法の表示
```

最低限必要なパラメーターについて説明します。

- -dbname 
 初期化パラメーターdb_nameの指定を指定します。スタンバイ・データベースの場合に指定します。

- -db 
 Data Guardスタンバイ・データベースの初期化パラメーターdb_unique_nameに指定した名前を指定します。
　プライマリ・データベースの場合は、通常初期化パラメーターdb_nameの値と同じになります。
　大文字／小文字は区別しません。インスタンス名のデフォルト値になりますが、インスタンス名は大文字／小文字を区別した名前が指定されます。

- -oraclehome
 Oracle DatabaseソフトウェアのOracle Homeディレクトリを指定します。この指定があるため、Oracle Clusterwareは複数バージョンのOracle Databaseを管理することができます。

- -spfile
 SPFILEへのパスを指定します。ASMファイル名を指定できます。

- -role
 ロールを指定します。Data Guardスタンバイ・データベースの場合はPHYSICAL_STANDBYまたはLOGICAL_STANDBYを指定します。 
　ただし、このロールを指定したからData GuardのREDO適用が自動的に行われるわけではありません。

- -startoption
 インスタンスの開始状態を指定します。Data Guardスタンバイ・データベースの場合は通常MOUNTを指定します。

# Oracle Clusterwareの登録パラメーターの変更
 追加したデータベースのパラメーターを変更する場合は、srvctl modify databaseコマンドを実行します。
-dbオプションを必須として、パラメーターを指定します。srvctl modify database -helpコマンドで使用方法が表示されます。

```
$ srvctl modify database -help

データベースの構成を変更します。

使用方法: srvctl modify database -db <db_unique_name> [-dbname <db_name>] [-instance <inst_name>] [-oraclehome <oracle_home>] [-user <oracle_user>] [-domain <domain>] [-spfile <spfile>] [-pwfile <password_file_path>] [-role {PRIMARY | PHYSICAL_STANDBY | LOGICAL_STANDBY | SNAPSHOT_STANDBY}] [-startoption <start_options>] [-stopoption <stop_options>] [-policy {AUTOMATIC | MANUAL | NORESTART}] [-diskgroup "<diskgroup_list>"|-nodiskgroup] [-force]
    -db <db_unique_name>           データベースの一意の名前
    -dbname <db_name>              -dbオプションで指定した一意の名前とは異なる場合のデータベース名(DB_NAME)
    -instance <inst_name>          インスタンス名
    -oraclehome <path>             Oracleホーム・パス
    -user <oracle_user>            Oracleユーザー
    -domain <domain>               データベースのドメイン。データベースにDB_DOMAINが設定されている場合、設定する必要があります。
    -spfile <spfile>               サーバー・パラメータ・ファイルのパス
    -pwfile <password_file_path>   パスワード・ファイルのパス
    -role <role>                   データベースのロール(PRIMARY、PHYSICAL_STANDBY、LOGICAL_STANDBY、SNAPSHOT_STANDBY)
    -startoption <start_options>   データベースの起動オプション。起動オプション の例は、OPEN、MOUNTまたは"READ ONLY"です。
    -stopoption <stop_options>     データベースの停止オプション。停止オプション の例は、NORMAL、TRANSACTIONAL、IMMEDIATEまたはABORTです。
    -policy <dbpolicy>             データベースの管理ポリシー(AUTOMATIC、MANUAL またはNORESTART)
    -diskgroup "<diskgroup_list>"  カンマで区切られたディスク・グループ名のリス ト
    -nodiskgroup                   ディスク・グループに対するデータベースの依存 性の削除
    -force                         変更操作を強制して、必要に応じて一部のノード のデータベースおよびサービス・リソースを停止するか、新しいデータベース管理ポリシーと一致するようにすべてのサービスの管理ポリシーを変更します
    -verbose                       冗長出力
    -help                          使用方法の表示
```
以下のパラメーターは変更されることが多いようです。

- -policy 
  Oracle Clusterware起動時のデータベース・インスタンスの挙動を指定します。
  AUTOMATICに指定すると、Oracle Clusterware起動時に前回と同じ状態になるようにインスタンスを操作します。このためOracle Clusterware停止時にインスタンス起動状態であれば自動的にインスタンスを起動します。
  Oracle ClusterwareによるOracle Databaseインスタンスの起動は非同期に行われます。このためcrsctl startコマンドでOracle Clusterwareの起動コマンドが終了しても、Oracle Databaseインスタンスは起動していない可能性があります。
  このパラメーターをMANUALに指定すると、Oracle Clusterware起動時にOracle Databaseインスタンスは起動しなくなります。
  Oracle Databaseインスタンスを起動するには別途srvctl start databaseコマンドを実行する必要がありますが、このコマンドはインスタンス起動の完了を待ちます。

- -instance
  インスタンス名を指定します。指定しない場合は-dbで指定したデータベース一意名が利用されます。
　　大文字／小文字を意識します。

# REDO適用
Data Guard環境でREDOの適用を行うためにはスタンバイ・データベースに対してALTER DATABASE RECOVER MANAGED STANDBY文を実行する必要がありますが、Oracle Clusterwareの起動と同時にREDO適用を実行するためにはData Guard Brokerが必要です。
Oracle Cluterwareオプションの-roleの指定と連動するだけで実行できると大変ありがたいのですが。Data Guard Brokerを使わない場合、スタンバイ・データベースのインスタンス起動直後にシェル・スクリプト等を使って上記SQL文を実行する必要があります。