Active Database Duplication の制限を確認する（Oracle Database 12c-）

Oracle Database に付属する Recovery Manager (RMAN) はデータベースのバックアップ、リストア、リカバリを行う標準ツールですが、 DUPLICATE コマンドを使うと手軽にデータベースのコピーを行うことができます。ここでは、稼働中の Oracle Database のコピーを作成する Active Database Duplication を試し、制限事項を確認します。
本記事は[こちら](https://qiita.com/tlokweng/items/1e2cd7d293e5dde5a4b2) で書かれている内容を参考にしました。

# DUPLICATE コマンド実行の準備
DUPLICATE コマンドを実行するためには、コピー元となるデータベース・インスタンスと、コピー先となるデータベース・インスタンス双方に RMAN が接続する必要があります。
コピー元となるデータベース・インスタンスをターゲット・インスタンス（target）、コピー先データベース・インスタンスを補助インスタンス（auxiliary） と呼びます。

双方に SYSDBA 権限で接続が必要です。このためコピー先データベース・インスタンス向けにパスワード・ファイルを作成します。コピー元データベースからコピーするか、orapwd コマンドで作成します。ファイル名は ORACLE_HOME/dbs/orapw{ORACLE_SID} です。

次に初期化パラメーターファイルを用意し、NOMOUNT モードでコピー先インスタンスを起動します。下記の例ではコピー元データベース名を O18A 、コピー先データベース名を O18B としています。

```
$ export ORACLE_SID=O18B
$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Thu Sep 13 17:05:32 2018
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> STARTUP NOMOUNT
ORACLE instance started.

Total System Global Area 2516580184 bytes
Fixed Size                  8660824 bytes
Variable Size             671088640 bytes
Database Buffers         1828716544 bytes
Redo Buffers                8114176 bytes

```

次にコピー先ホストで RMAN コマンドを実行し、ターゲット・インスタンスと補助インスタンスの接続を行います。この時、Oracle Databse 11g までは、リスナーに静的なデータベースの登録が必要でしたが、Oracle Database 12c からは不要になりました。

[バックアップおよびリカバリ・リファレンス・マニュアル](https://docs.oracle.com/cd/E96517_01/rcmrf/DUPLICATE.html#GUID-E13D8A02-80F9-49A2-9C31-92DD3A795CE4) には以下のように記述されています。

> 補助インスタンスと同じホストでRMANを実行している場合、ユーザー名とパスワードを使用して接続し、DUPLICATEコマンドにPASSWORD FILE句が含まれていないときは、ネット・サービス名なしでローカルに接続できます。接続するユーザーは、SYSDBAまたはSYSBACKUP権限が必要です。


下記の例では、コピー元データベース・インスタンス O18A に対してネットワーク接続を行い、補助インスタンス（コピー先）に対してはローカル接続を行っています。

```
$ rman target SYS/password@O18A  auxiliary SYS/password

Recovery Manager: Release 18.0.0.0.0 - Production on Thu Sep 13 17:06:40 2018
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

connected to target database: O18A (DBID=4103976400)
connected to auxiliary database: O18B (not mounted)

```

# DUPLICATE コマンドの実行
 両インスタンスに接続が確認できたら DUPLICATE コマンドを実行します。 OPEN 状態のターゲット・データベースからコピーを行うために FROM ACTIVE DATABASE 句を指定しています。

```
RMAN> DUPLICATE TARGET DATABASE TO O18B FROM ACTIVE DATABASE NOFILENAMECHECK;

Starting Duplicate Db at 13-SEP-18
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=261 device type=DISK
current log archived

contents of Memory Script:
{
   sql clone "create spfile from memory";
}
executing Memory Script

... 途中省略 ...
contents of Memory Script:
{
   Alter clone database open resetlogs;
}
executing Memory Script

database opened
Cannot remove created server parameter file
Finished Duplicate Db at 13-SEP-18

```

コピーが完了しました。

# Data Guard のスタンバイとしてコピー

DUPLICATE コマンドは、Data Guard のスタンバイ・データベースの作成にも使えます（こちらの用途の方が多いかもしれません）。
手順は同じで、DUPLICATE コマンドに FOR STANDBY 句を付けるだけです。同じように実行してみるとエラーになります。

```
$ rman target SYS/password@O18A auxiliary SYS/password

Recovery Manager: Release 18.0.0.0.0 - Production on Thu Sep 13 17:18:42 2018
Version 18.3.0.0.0

Copyright (c) 1982, 2018, Oracle and/or its affiliates.  All rights reserved.

connected to target database: O18A (DBID=4103976400)
connected to auxiliary database: O18B (not mounted)

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE;

Starting Duplicate Db at 13-SEP-18
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 09/13/2018 17:19:54
RMAN-05501: aborting duplication of target database
RMAN-06217: not connected to auxiliary database with a net service name

```

どうやら FOR STANDBY を指定すると、auxiliary がローカル接続では実行できないようです。マニュアルのどこかに制限が書かれているかもしれませんが、見つかっていません。

英語版マニュアル一覧： https://docs.oracle.com/en/database/oracle/oracle-database/18/books.html
日本語版マニュアル一覧： https://docs.oracle.com/cd/E96517_01/books.html