Data Guard Broker のユーティリティ・コマンドを試す（Oracle Database 19c)

Oracle Database 19c の Data Guard Broker についていくつかの記事を書きました。

- [Data Guard Broker 環境の構築 (Oracle Database 19c)](https://qiita.com/plusultra/items/84618d0a8b3ca846ae94)
- [Data Guard Broker によるスイッチオーバーとフェイルオーバー (Oracle Database 19c)](https://qiita.com/plusultra/items/80b14e4e39a92f4f135a)
- [Data Guard Broker のスイッチオーバーによる Grid Infrastucture の設定変化](https://qiita.com/plusultra/items/6df65bccfc514b699fd2)

ここでは上記の記事に含まれないその他のコマンドについて紹介します。

# HELP
使用方法を確認するもっとも簡単な方法がHELPコマンドです。

```SQL: HELPコマンド
DGMGRL> HELP

次のコマンドは使用可能です:

@              DGMGRLスクリプト・ファイルを実行します
!              ホスト・オペレーティング・システム・コマンド
/              最後のコマンドを繰り返します
--             DGMGRLで無視されるコメント
add            メンバーをブローカ構成に追加します
connect        Oracleデータベース・インスタンスに接続します
convert        データベースをあタイプから別のタイプに変換します
create         ブローカ構成を作成します
disable        構成、メンバーまたはファスト・スタート・フェイルオーバーを使用不可にします
edit           構成またはメンバーを編集します
enable         構成、メンバーまたはファスト・スタート・フェイルオーバーを使用可能にします
exit           プログラムを終了します
export         Data Guard Broker構成をファイルにエクスポートします。
failover       スタンバイ・データベースをプライマリ・データベースに変更します
help           コマンドの説明と構文を表示します
host           ホスト・オペレーティング・システム・コマンド
import         Data Guard Broker構成をファイルからインポートします。
migrate        構成間でプラガブル・データベースを移行します。
quit           プログラムを終了します
reinstate      修復対象としてマークされたデータベースを稼働可能なスタンバイに変更します
rem            DGMGRLで無視されるコメント
remove         構成またはメンバーを削除します
set            DGMGRLI CLIプロパティを指定された値に設定します
show           構成またはメンバーに関する情報を表示します
shutdown       現在実行中のOracleデータベース・インスタンスを停止します
spool          DGMGRL CLIの入力および出力をファイルに格納します
sql            SQL文を実行します
start          ファスト・スタート・フェイルオーバーのオブザーバを起動します
startup        Oracleデータベース・インスタンスを起動します
stop           ファスト・スタート・フェイルオーバー・オブザーバを停止します
switchover     プライマリ・データベースとスタンバイ・データベースのロールを切り替えます
validate       メンバーに対してあらゆる検証を実行します

個々のコマンドの構文を表示するには、"help <command>"を使用します
```

特定のコマンドについて詳細を調べる時には　HELP にコマンド名を指定します。

```SQL: HELP SHOW コマンド
DGMGRL> HELP SHOW

構成またはメンバーに関する情報を表示します

構文:

  SHOW ALL;

  SHOW CONFIGURATION [LAG] [VERBOSE];

  SHOW CONFIGURATION WHEN PRIMARY IS <database name>;

  SHOW { RECOVERY_APPLIANCE | DATABASE | FAR_SYNC } [VERBOSE]
    <object name> [<property name>];

  SHOW { RECOVERY_APPLIANCE | DATABASE | FAR_SYNC | MEMBER }
    <object name> PARAMETER [<initialization parameter name>];

  SHOW INSTANCE [VERBOSE] <instance name> [<property name>]
    [ON { DATABASE | FAR_SYNC } <object name>];

  SHOW FAST_START FAILOVER;

  SHOW OBSERVER;

  SHOW OBSERVERS [FOR <configuration group name>];

  SHOW OBSERVERCONFIGFILE;
```

# EXPORT
Data Guard Broker 構成ファイルをテキストファイルにエクスポートします。ファイル名を指定すると、ADR 内のtrace ディレクトリに XML 形式で出力されます。

```SQL: エクスポート
DGMGRL> EXPORT CONFIGURATION TO 'dgtest'
成功しました。
DGMGRL> HOST cat /opt/oracle/diag/rdbms/o19a/O19A/trace/dgtest.txt
オペレーティング・システム・コマンドを実行しています:" cat /opt/oracle/diag/rdbms/o19a/O19A/trace/dgtest.txt"
<?xml version="1.0" encoding="UTF-8"?>
<DRC Version="19.0.0.0.0" CurrentPath="True" Name="dgtest">
  <DefaultState>ONLINE</DefaultState>
  <DRC_UNIQUE_ID>946560433</DRC_UNIQUE_ID>
  <IntendedState>ONLINE</IntendedState>
  <FastStartFailoverOBID1>1679565369</FastStartFailoverOBID1>
  <FastStartFailoverOBID2>1679565370</FastStartFailoverOBID2>
  <FastStartFailoverOBID3>1679565371</FastStartFailoverOBID3>
...
```

ファイル名を省略した場合には{SID}\_dmon_{PID}\_brkmeta\_{#}.trc ファイルが作成されます。このコマンドは Oracle Database 19c から利用できるようになりました。

# IMPORT
IMPORT コマンドはエクスポートされたファイルをインポートします。既に構成が存在する場合にはエラーになります。

```SQL: IMPORT CONFIGURATION
DGMGRL> IMPORT CONFIGURATION FROM O19A_dmon_2141773_brkmeta_1.trc
ORA-16504: Oracle Data Guard Broker構成はすでに存在します。
```


# SET
いくつかの設定を変更します。以下の設定が利用できます。

|動作|構文|
|:---|:---|
|時刻表示    | SET TIME { ON \| OFF } |
|コマンド出力| SET ECHO { ON \| OFF }|
|トレースレベル | SET TRACE_LEVEL { SUPPORT \| USER \| NONE }|
|ファストスタートフェイルオーバー移行先| SET FAST_START FAILOVER TARGET TO db [ NOWAIT ]|
|オブザーバー設定|SET MASTEROBSERVER TO name|
|オブザーバーホスト| SET MASTEROBSERVERHOSTS [ FOR group ] TO host|
|オブザーバー設定ファイル| SET OBSERVERCONFIGFILE=file|

```SQL: SET TIMEの設定
DGMGRL> SET TIME ON
22:48:25 DGMGRL> SET TIME OFF
DGMGRL>
```

# SQL
DGMGRL から接続しているデータベースに対して SQL 文を発行できます。
HELP 文の出力には行末にセミコロン（;）が指定されていますが、実際にはセミコロンは不要です。CREATE 文や INSERT 文等のデータを返さない SQL 文を実行できますが、SELECT 文は実行できません。

```SQL: SQL 文の実行
DGMGRL> SQL "INSERT INTO data1 VALUES (100, 'data1')"
SQL "INSERT INTO data1 VALUES (100, 'data1')"
成功しました。
DGMGRL> SQL "SELECT * FROM data1"
SQL "SELECT * FROM data1"
ORA-24374: フェッチまたは実行してフェッチする前に、定義されていません

失敗しました。
```
# SPOOL
コマンドの出力結果をファイルに出力することができます。
SPOOLコマンドにファイル名を指定します。


```SQL: SPOOL 
DGMGRL> SPOOL /tmp/spool.out
SPOOL /tmp/spool.out
DGMGRL> SHOW CONFIGURATION
SHOW CONFIGURATION

構成 - dgtest_config

  保護モード: MaxPerformance
  メンバー:
  O19A - プライマリ・データベース
    O19S - フィジカル・スタンバイ・データベース

ファスト・スタート・フェイルオーバー:  Disabled

構成ステータス:
SUCCESS   (ステータスは54秒前に更新されました)

DGMGRL> SPOOL OFF
SPOOL OFF
スプールがオフに設定されています
```

ファイル名の後ろには既存のファイルについての動作を指定できます。

|指定|動作|備考|
|:---|:---|:---|
|CREATE|ファイルを作成します。既にファイルが存在する時はエラーになります||
|REPLACE|既存のファイルを上書きします|デフォルト|
|APPEND|既存のファイルに追記します||

# VALIDATE
VALIDATE コマンドは環境の検証を行います。以下の構文を利用できます。

|動作|コマンド|
|:---|:---|
|データベース|VALIDATE DATABASE [VERBOSE] db|
|データファイル|VALIDATE DATABASE [VERBOSE] db DATAFILE number OUTPUT=file|
|SPFILE|VALIDATE DATABASE [VERBOSE] db SPFILE|
|FAR SYNC|VALIDATE FAR_SYNC [VERBOSE] name [ WHEN PRIMARY IS name ]|
|Network|VALIDATE NETWORK CONFIGURATION FOR { ALL \| member }|
|Clusterware対応|VALIDATE STATIC CONNECT IDENTIFIER FOR { ALL \| db }    |

```SQL: VALIDATE文いろいろ
DGMGRL> VALIDATE NETWORK CONFIGURATION FOR ALL
VALIDATE NETWORK CONFIGURATION FOR ALL
インスタンス"O19A" (データベース"O19A")に接続しています...
"O19A"に接続しました
インスタンス"O19A" (データベース"O19A)から次への接続を確認しています インスタンス"O19S" (データベース"O19S") ...
成功しました。
インスタンス"O19S" (データベース"O19S")に接続しています...
"O19S"に接続しました
インスタンス"O19S" (データベース"O19S)から次への接続を確認しています インスタンス"O19A" (データベース"O19A") ...
成功しました。

データベース"O19A"のOracle Clusterwareでは、データベース再起動が可能で す。

データベース"O19S"のOracle Clusterwareでは、データベース再起動が可能で す。

DGMGRL> VALIDATE STATIC CONNECT IDENTIFIER FOR ALL
VALIDATE STATIC CONNECT IDENTIFIER FOR ALL
データベース"O19A"のOracle Clusterwareでは、データベース再起動が可能で す。

データベース"O19S"のOracle Clusterwareでは、データベース再起動が可能で す。
````

Author: Noriyoshi Shinoda / Date: May 13, 2025