本コンテンツはORACLE MASTER Gold DBA 2019(Oracle Database AdministrationⅡ)の試験トピックであるOracle Multitenant Architectureのバックアップ・リカバリに関する内容をご紹介します。今回は「RMANを用いたデータベースの複製」の問題を解きながら詳しく解説していきます。

————————————————-

それでは問題文を確認していきましょう。

CDB1コンテナ・データベース内にPDB1プラガブル・データベースがあります。このPDB1を別のコンテナ・データベースであるCDB2へ、RMANのDuplicateコマンドを使ったクローニングを検討しています。アクティブな状態での操作方法として正しい内容はどれになりますか(3つ選択してください)。

1.    アクティブ状態の2つ以上のPDBを同時にクローニングすることができる。
2.    複製元であるCDB1にRMANからターゲットとして接続する必要がある。
3.    宛先であるCDB2にENABLE_PLUGGABLE_DATABASE=TRUEの設定が必要である。
4.    DUPLICATEコマンドのFROM ACTIVE DATABASE句の指定が必要である。
5.    宛先であるCDB2にREMOTE_RECOVERY_FILE_DESTの設定が必要である。

(解説)

今回はRMANを使用したデータベースの複製に関する内容を解説してきましょう。RMANのDuplicateコマンドを使用することで比較的簡単にデータベースの複製を行うことができますが、複製方法にはいくつか種類があります。まず方法として「アクティブなデータベースから複製」と「バックアップから複製」の2つに分類することができます。そしてバックアップからの複製の場合はRMANから「ターゲット(複製元)に接続あり・なし」であったり「リカバリ・カタログへの接続あり・なし」といった方法を選択することができます。

今回は「アクティブなデータベースから複製」を扱っていきますので「バックアップから複製」方法の詳細は割愛させていただきます。興味がある方は以下のマニュアルを確認するといいでしょう。

Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド

 第Ⅶ部 RMANを使用したデータの送信

  25 データベースの複製

RMANを使用した複製には、アクティブなデータベースからであっても、バックアップからであっても「補助インスタンス」にRMANから接続する必要があります。まずは複製を行う流れをおさえておきましょう。

  1. 初期化パラメータファイルを作成し、補助インスタンスを起動
  2. RMANから接続するためのOracle NETの構成
  3. RMANでターゲットおよび補助インスタンスに接続
  4. RMANのduplicate … from active databaseコマンドで複製開始

複製を行うイメージ図も記載しておきます。

RMANから複製元であるターゲットと補助インスタンスに接続を行ってからduplicateコマンドを実行します。そのため事前に補助インスタンスは作成しておく必要があるということですね。ただし18c(18.1)以降のバージョンでは既存CDBへのPDBの複製であれば補助インスタンスの作成を行う必要がなくなりました。既存のCDBが補助インスタンスの代わりを行ってくれる機能が追加されています。今回の問題がまさに既存CDBへのPDBの複製になりますのでその内容のイメージ図も記載しておきましょう。

既存CDBへのPDBの複製の特徴や注意事項についてまとめておきます。

  • アクティブ状態のPDBを既存のCDBに複製できます
  • COMPATIBLE初期化パラメータは18.1以上が必要です
  • RMANは複製元および複製先インスタンスのCDBルートに接続が必要です
  • PDBの複製は一度に1つのみです
  • 複製先CDBのREMOTE_RECOVERY_FILE_DEST初期化パラメータの設定が必要です

REMOTE_RECOVERY_FILE_DEST初期化パラメータは外部アーカイブ・ログ・ファイルをリストアする場所として設定します。複製中にアーカイブ・ログ・ファイルの読取りが必要になった場合に使用されるパラメータになりますね。既存CDBへのPDBの複製について、実際の操作ログも載せておくので参考にしていただければと思います。複製元であるCDB1のプラガブル・データベースPDB1を複製先のCDB2にDuplicateする操作になります。

===<複製元(CDB1)の環境確認>===

$ . oraenv    ※CDB1の環境変数設定
ORACLE_SID = [ORCL] ? CDB1

$ sqlplus / as sysdba

SQL> show pdbs

CON_ID  CON_NAME  OPEN MODE   RESTRICTED
———  ————-  ————— —————
         2   PDB$SEED   READ ONLY     NO
         3   PDB1           READ WRITE   NO  ※このPDB1をCDB2に複製

SQL> exit


===<複製先(CDB2)の環境確認と初期化パラメータ設定>===

$ . oraenv    ※CDB2の環境変数設定
ORACLE_SID = [ORCL] ? CDB2

$ sqlplus / as sysdba

SQL> show pdbs

CON_ID   CON_NAME  OPEN MODE   RESTRICTED
———- ————– ————— —————
           2 PDB$SEED    READ ONLY    NO

SQL> alter system set remote_recovery_file_dest=’/home/oracle/remote_arch’ scope=both;
※REMOTE_RECOVERY_FILE_DEST初期化パラメータの設定
System altered.

SQL> exit


===<RMANで複製開始>===

$ rman target sys/oracle_4U@cdb1 auxiliary sys/oracle_4U@cdb2
※事前にネットサービスは作成しておく
※複製元(target)をCDB1、補助インスタンス(auxiliary)として既存のCDB2に接続

Recovery Manager: Release 19.0.0.0.0 – Production on Sun Apr 14 23:44:56 2024
Version 19.3.0.0.0

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

connected to target database: CDB1 (DBID=1139791567)
connected to auxiliary database: CDB2 (DBID=913121231)

RMAN> duplicate pluggable database pdb1 to cdb2 
            from active database 
            db_file_name_convert=(‘CDB1′,’CDB2’);

Starting Duplicate PDB at 14-APR-24
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: SID=16 device type=DISK
current log archived
duplicating Online logs to Oracle Managed File (OMF) location

contents of Memory Script:
{
   set newname for datafile  9 to
 “/u01/app/oracle/oradata/CDB2/pdb1/system01.dbf”;
   set newname for datafile  10 to
 “/u01/app/oracle/oradata/CDB2/pdb1/sysaux01.dbf”;
   set newname for datafile  11 to
 “/u01/app/oracle/oradata/CDB2/pdb1/undotbs01.dbf”;
   restore
   from  nonsparse   clone foreign pluggable database
    “PDB1”
   from service  ‘cdb1’   ;
}
executing Memory Script

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 14-APR-24
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service cdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 9 to 
/u01/app/oracle/oradata/CDB2/pdb1/system01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:07
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service cdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 10 to 
/u01/app/oracle/oradata/CDB2/pdb1/sysaux01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:03
channel ORA_AUX_DISK_1: starting datafile backup set restore
channel ORA_AUX_DISK_1: using network backup set from service cdb1
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_AUX_DISK_1: restoring foreign file 11 to
/u01/app/oracle/oradata/CDB2/pdb1/undotbs01.dbf
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 14-APR-24
current log archived

contents of Memory Script:
{
   set archivelog destination to  ‘/home/oracle/remote_arch’;
   restore clone force from service  ‘cdb1’
           foreign archivelog from scn  2567706;
}
executing Memory Script

executing command: SET ARCHIVELOG DESTINATION

Starting restore at 14-APR-24
using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting archived log restore to user-specified destination
archived log destination=/home/oracle/remote_arch
channel ORA_AUX_DISK_1: using network backup set from service cdb1
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=13
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
channel ORA_AUX_DISK_1: starting archived log restore to user-specified destination
archived log destination=/home/oracle/remote_arch
channel ORA_AUX_DISK_1: using network backup set from service cdb1
channel ORA_AUX_DISK_1: restoring archived log
archived log thread=1 sequence=14
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 14-APR-24

Performing import of metadata…
Finished Duplicate PDB at 14-APR-24

RMAN> exit

===<複製先(CDB2)にPDB1が複製されたか確認>===

$ . oraenv    ※CDB2の環境変数設定
ORACLE_SID = [ORCL] ? CDB2

$ sqlplus / as sysdba

SQL> show pdbs

CON_ID   CON_NAME   OPEN MODE   RESTRICTED
———- ————— ————— —————
           2 PDB$SEED     READ ONLY    NO
           3 PDB1             READ WRITE  NO  ※複製されていることを確認

尚、複製先でPDBの名前が重複している場合など複製の際に名前を変更したい場合、次の構文を使用して名前変更が可能です。

「duplicate pluggable database pdb1 as rename_pdb to cdb2 from active …」

操作が完了しましたら、複製の一部としてREMOTE_RECOVERY_FILE_DEST初期化パラメータによって指定した場所にリストアされた外部アーカイブログ・ファイルは削除して大丈夫です。

それでは問題の選択肢を解説していきましょう。

選択肢1は誤りです。アクティブデータベースの複製において、既存CDBへのPDBの複製は1つのみになります。

選択肢2は正しい内容です。アクティブデータベースの複製操作を行う際には複製元であるターゲットと補助インスタンスへの接続が必要になります。

選択肢3は誤りです。既存CDBへの複製操作になるのでENABLE_PLUGGABLE_DATABASE=TRUEの設定は関係ありません。

選択肢4と5は正しい内容になります。これまで解説した内容と操作ログをご確認ください。

以上を踏まえまして正解は 2、4、5 になります。

複製データベースを作成することで、本番環境では操作できない様々な検証作業などが出来るようになるかと思います。またRMANを使用することで容易に複製を作成することが可能となっていますので、操作に慣れていただき是非業務に役立てていただければと思います。今回の講義はこれまでとします。お疲れ様でした。

 

————————————————-

【Oracle University講師によるORACLE MASTER Gold DBA 2019 試験トピック解説講座】トピック一覧

————————————————-

その他の ORACLE MASTER 試験トピック解説講座シリーズ:

【Oracle University 講師による ORACLE MASTER Silver SQL 2019 試験トピック解説講座】-トピック一覧-

————————————————-