データベース
 Computer >> コンピューター >  >> プログラミング >> データベース

フィジカル・スタンバイからRMANアクティブ・デュプリケーションでデータベースを複製する方法

本記事では、フィジカル・スタンバイデータベースをソースとして、ターゲット環境にデータベースを複製(デュプリケート)する手順を解説します。

データベースの複製では、ネットワーク経由でターゲットデータベースを補助先(Auxiliary)インスタンスへコピーし、そこから複製データベースを作成します。事前にRMANのバックアップやコピーを用意しておく必要はありません。

フィジカル・スタンバイからのデータベース複製は、Oracle® 11g Release 2以降のバージョンでサポートされています。

前提条件

フィジカル・スタンバイからRMANアクティブ・デュプリケーションを実行するには、以下の環境が必要です。

  • データベース:Oracle 11g 〜 最新バージョン
  • プラットフォーム:Linux® 7
  • スタンバイDB名:PROD_DR
  • ターゲットDB名:TEST

スタンバイデータベースを読み取り専用モードでオープンする

まず、フィジカル・スタンバイデータベースのリカバリを停止し、データベースを読み取り専用モードでオープンして、複製操作を受け入れられる状態にします。

以下のコマンドで、スタンバイデータベースの現在のステータスを確認します。

PROD_DR> select name, open_mode, log_mode from v$database;

出力は次のようになります。

NAME      	OPEN_MODE             LOG_MODE
--------- 	--------------------  ------------
PROD_DR    	 MOUNTED              ARCHIVELOG

続いて、以下のコマンドでスタンバイデータベースのリカバリを停止します。

SQL> alter database recover managed standby database cancel;
Database altered.

その後、データベースを読み取り専用モードでオープンします。

SQL> alter database open read only;
Database altered.

再度ステータスを確認し、MOUNTEDではなくREAD ONLYになっていることを確認します。

PROD_DR> select name, open_mode,log_mode from v$database;

NAME   	      OPEN_MODE           	 LOG_MODE
--------- 	  -------------------- 	 ------------
PROD_DR   	  READ ONLY         	   ARCHIVELOG

ターゲットサーバーを準備する

このセクションでは、スタンバイ側のOracleホーム一式をターゲットインスタンスのサーバーへコピーし、ソースデータベースからpfile(パラメータファイル)を作成して、新しいデータベース名に合わせた修正を行います。

注意: 同じサーバー上へデータベースを複製する場合は、DB_NAMEDB_UNIQUE_NAMEDB_FILE_NAME_CONVERTLOG_FILE_NAME_CONVERTに適切な値を必ず設定してください。

まず、以下のコマンドでpfileを作成します。

cd $ORACLE_HOME/dbs
initTEST.ora

*.control_files='+DATA/cntrl01.dbf', '+DATA/cntrl02.dbf'
*.db_create_file_dest='+DATA'
*.db_file_name_convert='+PROD_DR_DATA','+DATA'
*.db_name='TEST'
*.db_unique_name='TEST'
*.diagnostic_dest='/u01/app/diag'
*.log_file_name_convert='+PROD_DR_DATA','+DATA'

既存のスタンバイ用パスワードファイルをコピーし、TESTデータベースのSIDに合わせてリネームします。あるいは、同じパスワードを使用してターゲットサーバー上に新しいパスワードファイルを作成してもかまいません。

cd $ORACLE_HOME/dbs
cp orapwPROD_DR orapwTEST

静的リスナーを構成する

次に、テストデータベース用の静的リスナー登録を以下の手順で構成します。

cd $ORACLE_HOME/network/admin
cat listener.ora

ADR_BASE_LISTENER_LOCAL = /u01/app/oracle

LISTENER_LOCAL =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = TEST.ras.com)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )
SID_LIST_LISTENER_LOCAL = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DGNEER) (ORACLE_HOME = /u01/app/oracle/product/12.1.0.2/dbhome_1) (SID_NAME = TEST)))

以下のコマンドでリスナーを起動します。

lsnrctl status listener_local

出力例は次のとおりです。

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 09-JUN-2020 02:57:35

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST= TEST.ras.com)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     listener_local
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                04-JAN-2020 04:53:15
Uptime                    156 days 21 hr. 4 min. 19 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0.2/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/12.1.0.2/dbhome_1/admin/diag/tnslsnr/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST= TEST.ras.com)(PORT=1521)))
Services Summary...
Service "+ASM" has 1 instance(s).
  Instance "+ASM", status READY, has 1 handler(s) for this service...
Service "TEST" has 2 instance(s).
  Instance "TEST", status UNKNOWN, has 1 handler(s) for this service...
  Instance "TEST", status READY, has 1 handler(s) for this service...
The command completed successfully

Oracle Netエイリアスを作成する

続いて、スタンバイデータベースへ接続するためのOracle Netエイリアスを作成します。

PROD_DR=
        (DESCRIPTION=
                (ADDRESS=(PROTOCOL=tcp)(HOST= standbydb.ras.com)(PORT=1523))
            (CONNECT_DATA=
                (SID=PROD_DR)
            )
        )

ターゲットデータベースを起動する

以下のコマンドを実行し、ターゲットデータベースをnomount状態で起動します。

sqlplus "/ as sysdba"

startup nomount

SQL> show parameter db_name
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------
db_name                              string      TEST

SQL> show parameter uniq
NAME                                 TYPE        VALUE
------------------------------------ ----------- -------------
db_unique_name                       string      TEST

RMANで接続をテストする

ターゲットデータベースがnomount状態で起動したら、RMANで接続できることを確認します。

[oracle@TEST.ras.com dbs]$ rman target sys@PROD_DR  auxiliary sys@TEST

Recovery Manager: Release 12.1.0.2.0 - Production on Thu Jun 09 03:25:22 2020

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

target database Password:
connected to target database: PROD_DR (DBID=4252464621)
auxiliary database Password:
connected to auxiliary database: TEST (not mounted)

データベースをリストアおよび複製する

以下のコマンドを使用して、スタンバイデータベースをターゲットデータベースへリストアおよび複製します。

RMAN> target sys@PROD_DR  auxiliary sys@TEST
RMAN> duplicate target database to TEST from active database nofilenamecheck;

duplicateコマンドが完了した後、以下のコマンドでスタンバイデータベースを再起動し、リカバリを再有効化します。

PROD_DR> shut immediate
PROD_DR> startup mount;
PROD_DR> alter database recover managed standby database disconnect from session;

ターゲットデータベースのステータスを確認する

以下のコマンドで、複製されたターゲットデータベースのステータスを確認します。

[oracle@TEST.ras.com dbs]$ sqlplus "/ as sysdba"

SQL*Plus: Release 12.1.0.2.0 Production on Tue Jun 9 05:15:53 2020

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


Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
and Real Application Testing options

SQL>  select name, open_mode, log_mode , database_role from v$database;

NAME      OPEN_MODE            LOG_MODE     DATABASE_ROLE
--------- -------------------- ------------ ----------------
TEST      READ WRITE           ARCHIVELOG   PRIMARY

まとめ

本記事では、物理バックアップを一切取得することなくフィジカル・スタンバイからデータベースを複製し、スタンバイデータベースが供給する最新のアーカイブログの時点までターゲットデータベースをリストアしました。RMANアクティブ・デュプリケーションを活用すれば、バックアップを介さずに効率的なクローン環境の構築が可能です。

参考文献

  • Performing RMAN duplicate from standby to create a new clone (Doc ID 1665784.1)

データベースに関する詳細は、関連ドキュメントをご参照ください。

ご意見やご質問がある場合は、フィードバックタブからお気軽にお寄せください。また、Sales Chatをクリックいただければ、すぐにチャットでご相談いただけます。

  1. Oracle SE/SE2向けディザスタリカバリを実現するDbvisit Standby徹底解説

    Dbvisit Standbyは、Oracle® Standard Edition(SE)およびStandard Edition 2(SE2)データベース向けに設計されたレプリケーションツールです。 はじめに Oracleデータベースのディザスタリカバリ(DR)環境を構築する際、コストは常に大きな検討要素となります。Oracle Standard Editionには標準でDRソリューションが含まれていませんが、Dbvisitはこの課題に対する有効なソリューションを提供しています。Dbvisitは、長年の実績で信頼性が証明されているOracleのアーカイブログおよびREDOログの仕組みを活用し、

  2. 増分バックアップを使用してフィジカル・スタンバイ・データベースをリカバリーする方法

    スタンバイ・データベースとは、本番データベースの一貫性のあるコピーのことです。本番環境で災害やデータ損失、データ破損が発生した際の保護手段として重要な役割を果たします。 はじめに プライマリ・サイトとスタンバイ・サイトの間にラグ(遅延)が発生する主な理由としては、以下が挙げられます。 プライマリ・データベースとスタンバイ・データベース間のネットワーク帯域幅の問題 スタンバイ・データベースが利用できない状態 プライマリ・データベース上のアーカイブREDOデータの誤削除 プライマリ・サイトからアーカイブログをコピーして適用することで両環境を同期させることも可能ですが、この方法は非常に時間がかか