PDBのクローンを試す（Oracle Database 18c)

Oracle Database 18cではPDBのローカル・クローンにDatabase Configuration Assistant(DBCA)を使うことができるようになりました。この記事ではローカル・クローン方法を３種類試しました。検証ではCDBは基本的にストレージ構成にOMFを使っているので、ファイル名のコンバート等の指定を省略しています。

# DBCAを使ったクローン
DBCAを起動し、「Manage Pluggable databases」を選択します。
![DBCA Manage Pluggable databases](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/81aa3d7b-a4e3-834d-613d-b30488538c40.png)

Pluggable Databaseの管理画面から「Create a Pluggable database」を選択します。
![Create a pluggable database](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/3909bbad-f18e-89ef-0cc4-af21d0c36d86.png)

CDBの接続先インスタンスとを指定し、ユーザー名、パスワードを入力します。

![Select a container](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/d8749f54-bb53-277a-16b6-1f38d332c3fe.png)

「Create a new Pluggable database from another PDB」を選択し、クローン元PDBを選択します。

![Create a new Pluggable Database from another PDB](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/4b4474b2-9c30-3aac-5013-0ff69d23c78e.png)

新しい名前とオプションを指定します。

![Pluggable database name](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/b884d507-9c7f-e504-88bb-82e0cac2f113.png)

データファイルの保存先を指定します。

![Storage option](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/de991beb-36f7-e1aa-106e-c79781ff386e.png)

最後に確認画面が表示されるので、「Finish」ボタンをクリックします。

![Summary](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/181284/66386f46-543c-9020-693e-e791ead37657.png)

# SQL文をつかったクローン
PDBの作成は従来通りCDBに接続してCREATE PLUGGABLE DATABASE文でクローン元を指定するだけです。

```
$ sqlplus / as sysdba

SQL*Plus: Release 18.0.0.0.0 - Production on Fri Apr 19 14:02:22 2019
Version 18.3.0.0.0

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


Connected to:
Oracle Database 18c Enterprise Edition Release 18.0.0.0.0 - Production
Version 18.3.0.0.0

SQL> CREATE PLUGGABLE DATABASE pdb2 FROM pdb1;

Pluggable database created.

```

# RMANを使ったクローン
RMANを使ってもPDBのクローニングを行うことができます。基本的にはコピー先とコピー元のCDBに接続してDUPLICATE文を実行することになります。しかし、ローカル・クローンを行う方法がマニュアルに無いので試行錯誤してみました。
targetとauxiliaryを同じCDB接続にしてDUPLICATE PLUGGABLE DATABASE文を実行します。

## ローカル接続
まずtargetとauxiliaryをローカル接続してみます。DUPLICATE PLUGGABLE DATABASE文を実行すると、
ターゲットがネットワーク接続ではない（RMAN-05603）が発生します。

```
$ rman target / auxiliary /

Recovery Manager: Release 18.0.0.0.0 - Production on Fri Apr 19 13:07:40 2019
Version 18.3.0.0.0

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

connected to target database: O18P (DBID=677639375)
connected to auxiliary database: O18P (DBID=677639375)

RMAN> DUPLICATE PLUGGABLE DATABASE pdb1 AS pdb2 FROM ACTIVE DATABASE;

Starting Duplicate PDB at 19-APR-19
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate PDB command at 04/19/2019 13:08:05
RMAN-05501: aborting duplication of target database
RMAN-05603: not connected to target database with a net service name

RMAN>
```

## ターゲットをネット接続
 target接続をネットワーク経由にしてみました。まず、初期化パラメーターREMOTE_RECOVERY_FILE_DESTが設定されていない（RMAN-05655）というエラーが発生したため設定を行いました。次にこの初期化パラメーターを設定してから再実行すると、やはりリモート・インスタンスに接続できない（ORA-17629）エラーが発生しました。

```

$ rman target SYS/password@O18P auxiliary /

Recovery Manager: Release 18.0.0.0.0 - Production on Fri Apr 19 13:08:26 2019
Version 18.3.0.0.0

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

connected to target database: O18P (DBID=677639375)
connected to auxiliary database: O18P (DBID=677639375)

RMAN> DUPLICATE PLUGGABLE DATABASE pdb1 AS pdb2 FROM ACTIVE DATABASE;

Starting Duplicate PDB at 19-APR-19
using channel ORA_AUX_DISK_1
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate PDB command at 04/19/2019 13:12:16
RMAN-05501: aborting duplication of target database
RMAN-05655: specified REMOTE_RECOVERY_FILE_DEST parameter is NULL

RMAN> DUPLICATE PLUGGABLE DATABASE pdb1 AS pdb2 FROM ACTIVE DATABASE;

Starting Duplicate PDB at 19-APR-19
using channel ORA_AUX_DISK_1
current log archived
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate PDB command at 04/19/2019 13:13:17
RMAN-05501: aborting duplication of target database
RMAN-06136: Oracle error from auxiliary database: ORA-17627:
ORA-17629: Cannot connect to the remote database server

```

## 両方のインスタンスをネットワーク経由で接続
 targetとauxiliaryを同一インスタンスにネットワーク経由で接続し、DUPLICATE PLUGGABLE DATABASE文を実行します。無事にRMANを使ってローカル・クローンが実行できました。

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

Recovery Manager: Release 18.0.0.0.0 - Production on Fri Apr 19 13:13:54 2019
Version 18.3.0.0.0

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

connected to target database: O18P (DBID=677639375)
connected to auxiliary database: O18P (DBID=677639375)

RMAN> DUPLICATE PLUGGABLE DATABASE pdb1 AS pdb2 FROM ACTIVE DATABASE;

Starting Duplicate PDB at 19-APR-19
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=397 device type=DISK
current log archived

contents of Memory Script:
{
   set newname for clone datafile  8 to new;
   set newname for clone datafile  9 to new;
   set newname for clone datafile  10 to new;
   set newname for clone datafile  11 to new;
   restore
   from  nonsparse   clone foreign pluggable database
    "PDB1"
   from service  'O18P'   ;
}
<< 途中省略 >>
current log archived

contents of Memory Script:
{
   set archivelog destination to  '/u01/app/oracle/remote_recovery_area';
   restore clone force from service  'O18P'
           foreign archivelog from scn  880962;
}
executing Memory Script

executing command: SET ARCHIVELOG DESTINATION

Starting restore at 19-APR-19
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting archived log restore to user-specified destination
archived log destination=/u01/app/oracle/remote_recovery_area
channel ORA_AUX_DISK_1: using network backup set from service O18P
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=15
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:06
channel ORA_AUX_DISK_1: starting archived log restore to user-specified destination
archived log destination=/u01/app/oracle/remote_recovery_area
channel ORA_AUX_DISK_1: using network backup set from service O18P
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=16
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:06
Finished restore at 19-APR-19

Performing import of metadata...
Finished Duplicate PDB at 19-APR-19

```