LoginSignup
7

More than 5 years have passed since last update.

Oracle Database Physical Data Guard 作成手順(12cR1)

Last updated at Posted at 2018-09-23

はじめに

作りたい環境

  • Linux(Oracle Linux Server release 7.3)
  • Oracle Database 12cR1
  • フィジカルスタンバイ
  • 非同期適用
  • リアルタイム適用
  • ファイルのディレクトリパスはプライマリとスタンバイで異なる
  • スイッチオーバー可能な構成

作りたい作り方

  • RMANのバックアップを使用する
  • Active Duplicateは行わない(作成時にターゲット側からソース側につなぎに行かない)
  • 初期化パラメータファイルは手動で作成
  • スタンバイ制御ファイルはRMANで作成

今回作る環境まとめ

首都オーディンにあるデータベース(odin)の災対環境として、イゼルローン要塞上にフィジカルスタンバイデータベース(iserlohn)を作成する。いろいろ問題がありそうだけど、それはまた別の話。

項目 プライマリ スタンバイ
DB_NAME odin odin
DB_UNIQUE_NAME odin iserlohn
hostname ol121p ol121s
service_names odin.us.oracle.com iserlohn.us.oracle.com

プライマリデータベース作成手順

プライマリデータベースの設定

強制ロギングの有効化

強制ロギングの有効化を行う。

SQL> ALTER DATABASE FORCE LOGGING;

Database altered.

アーカイブログモードを有効化

アーカイブログモードでない場合は、アーカイブログモードを有効にする。

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> create spfile from pfile='/tmp/pfile_mod.ora';

File created.

SQL> startup mount
ORACLE instance started.

Total System Global Area  729808896 bytes
Fixed Size                  2928680 bytes
Variable Size             562040792 bytes
Database Buffers          159383552 bytes
Redo Buffers                5455872 bytes
Database mounted.
SQL> archive log list
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     16
Current log sequence           18
SQL>
SQL> ALTER DATABASE ARCHIVELOG;

Database altered.

SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            USE_DB_RECOVERY_FILE_DEST
Oldest online log sequence     16
Next log sequence to archive   18
Current log sequence           18
SQL> alter database open;

Database altered.

リスナーの構成

リスナーが構成されており、プライマリデータベースのサービスが登録されていることを確認する。

$ lsnrctl status

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 10-SEP-2018 19:32:40

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

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ol121p)(PORT=1521)))

<中略>

Services Summary...
Service "odin.us.oracle.com" has 1 instance(s).
  Instance "odin", status READY, has 1 handler(s) for this service...
Service "odinXDB.us.oracle.com" has 1 instance(s).
  Instance "odin", status READY, has 1 handler(s) for this service...
The command completed successfully

tnsnames.oraの設定

プライマリデータベース(odin)およびスタンバイデータベース(iserlohn)接続用のネットサービス名を定義する。

odin =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol121p)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = odin.us.oracle.com)
    )
  )


iserlohn =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol121s)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = iserlohn.us.oracle.com)
    )
  )

初期化パラメータの設定

ALTER SYSTEM文やSPFILEの再作成で以下の設定を反映させる。

最初から入ってるかも

DB_NAME=odin
CONTROL_FILES='/u01/app/oracle/oradata/odin/control01.ctl', '/u01/app/oracle/fast_recovery_area/odin/control02.ctl'
DB_UNIQUE_NAME=odin
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

変更・追加する想定

LOG_ARCHIVE_CONFIG='DG_CONFIG=(odin,iserlohn)'
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=odin'
LOG_ARCHIVE_DEST_2='SERVICE=iserlohn ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)  DB_UNIQUE_NAME=iserlohn'
FAL_SERVER=iserlohn
DB_FILE_NAME_CONVERT='/iserlohn/','/odin/'
LOG_FILE_NAME_CONVERT='/iserlohn/','/odin/' 
STANDBY_FILE_MANAGEMENT=AUTO

スタンバイREDOログの構成

スタンバイREDOログを作成する。オンラインREDOログのグループ数+1で作成する。
ここではオンラインREDOログが3グループであるため、4つ作成する。

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/odin/redo04.log') SIZE 50M;
Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/odin/redo05.log') SIZE 50M;
Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/odin/redo06.log') SIZE 50M;
Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/odin/redo07.log') SIZE 50M;
Database altered.

プライマリデータベースのバックアップ取得

$ rman target /
RMAN> BACKUP DATABASE PLUS ARCHIVELOG;
<中略>
Finished backup at 2018/09/16 00:20:50

プライマリデータベースからスタンバイデータベースへのファイル転送

  • プライマリデータベースのパスワードファイルをスタンバイデータベースにファイル転送

ただしファイル名はorapwとなるように変更する。
$ORACLE_HOME/dbs/orapwodin → $ORACLE_HOME/dbs/orapwodin/orapwiserlohn

  • プライマリデータベースからPFILEを作って、スタンバイデータベースに転送

SQL> CREATE PFILE='/tmp/initiserlohn.ora' FROM SPFILE;

  • プライマリデータベースのバックアップ一式

スタンバイデータベースの設定

リスナーの構成

スタンバイ側でリスナーを起動する。

$ lsnrctl start listener

tnsnames.oraの設定

プライマリデータベース(odin)およびスタンバイデータベース(iserlohn)接続用のネットサービス名を定義する。

odin =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol121p)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = odin.us.oracle.com)
    )
  )


iserlohn =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ol121s)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = iserlohn.us.oracle.com)
    )
  )

ディレクトリ作成

必要なディレクトリを作成する。
監査ログのディレクトリは忘れがちなので気をつける。

mkdir -p /u01/app/oracle/oradata/iserlohn
mkdir -p /u01/app/oracle/fast_recovery_area/iserlohn/
mkdir -p /u01/app/oracle/admin/iserlohn/adump

初期化パラメータの設定と作成

プライマリデータベースからコピーした/tmp/initiserlohn.oraを以下の内容に編集する。

DB_NAME=odin
control_files='/u01/app/oracle/oradata/iserlohn/control01.ctl','/u01/app/oracle/fast_recovery_area/iserlohn/control02.ctl'
DB_UNIQUE_NAME=iserlohn
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_CONFIG='DG_CONFIG=(odin,iserlohn)'
LOG_ARCHIVE_DEST_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=iserlohn'
LOG_ARCHIVE_DEST_2='SERVICE=odin ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)  DB_UNIQUE_NAME=odin'
FAL_SERVER='odin'
DB_FILE_NAME_CONVERT='/odin/','/iserlohn/'
LOG_FILE_NAME_CONVERT='/odin/','/iserlohn/'
STANDBY_FILE_MANAGEMENT=AUTO

編集した内容で、SPFILEを作成する。

$ sqlplus / as sysdba

SQL> create spfile from pfile='/tmp/initiserlohn.ora';
File created.

データ同期の開始

スタンバイ側でRMANによるデータベースの複製

スタンバイデータベースのNOMOUNTでの起動。

SQL> startup nomount
ORACLE instance started.

Total System Global Area  729808896 bytes
Fixed Size                  2928680 bytes
Variable Size             562040792 bytes
Database Buffers          159383552 bytes
Redo Buffers                5455872 bytes

補助データベース(auxiliary)としてスタンバイデータベースに接続して、DUPLICATEを行う。
バックアップセットの場所はBACKUP LOCATIONで指定する。ここでは/backupsetを指定する。

$ rman auxiliary /
connected to auxiliary database: ODIN (not mounted)

RMAN> DUPLICATE TARGET DATABASE FOR STANDBY BACKUP LOCATION '/backupset' DORECOVER NOFILENAMECHECK;

Starting Duplicate Db at 2018/09/16 23:14:54

<中略>

Finished recover at 2018/09/16 23:17:54
Finished Duplicate Db at 2018/09/16 23:18:07

スタンバイDB側にスタンバイREDOログの作成

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/iserlohn/redo04.log') SIZE 50M;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/iserlohn/redo05.log') SIZE 50M;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/iserlohn/redo06.log') SIZE 50M;

Database altered.

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/iserlohn/redo07.log') SIZE 50M;

Database altered.

適用プロセスの開始

以下のコマンドを実行する。12cからは「USING CURRENT LOGFILE」は不要。

SQL>  ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

Database altered.

確認

フィジカルスタンバイのロールを確認する。
DATABASE_ROLE列がPHYSICAL STANDBYであること。

SQL> select DBID,NAME,LOG_MODE,OPEN_MODE,DATABASE_ROLE,FORCE_LOGGING,CURRENT_SCN from v$database;

      DBID NAME      LOG_MODE     OPEN_MODE            DATABASE_ROLE    FORCE_LOGGING                           CURRENT_SCN
---------- --------- ------------ -------------------- ---------------- --------------------------------------- -----------
 884158366 ODIN      ARCHIVELOG   MOUNTED              PHYSICAL STANDBY YES                                         3118450

MRP0が稼働していることを確認する。

SQL> SELECT PROCESS, STATUS, THREAD#, SEQUENCE#,BLOCK#, BLOCKS FROM V$MANAGED_STANDBY;

PROCESS   STATUS          THREAD#  SEQUENCE#     BLOCK#     BLOCKS
--------- ------------ ---------- ---------- ---------- ----------
ARCH      CLOSING               1         82      79872        986
ARCH      CONNECTED             0          0          0          0
ARCH      CLOSING               1         86      92160        787
ARCH      CLOSING               1         85      79872        102
RFS       IDLE                  1         87      34099          1
RFS       IDLE                  0          0          0          0
MRP0      APPLYING_LOG          1         87      34099     102400
RFS       IDLE                  0          0          0          0

参考

参考ドキュメント

Oracle® Data Guard概要および管理 12c リリース1 (12.1) B71304-07
10 フィジカルおよびスナップショット・スタンバイ・データベースの管理
https://docs.oracle.com/cd/E57425_01/121/SBYDB/manage_ps.htm

Oracle® Databaseバックアップおよびリカバリ・ユーザーズ・ガイド 12c リリース1 (12.1) B71297-08
25 データベースの複製
https://docs.oracle.com/cd/E57425_01/121/BRADV/rcmdupdb.htm

Oracle® Databaseバックアップおよびリカバリ・リファレンス 12cリリース1 (12.1) B71298-08
DUPLICATE
https://docs.oracle.com/cd/E57425_01/121/RCMRF/rcmsynta020.htm

Oracle® Database高可用性ベスト・プラクティス 12cリリース1 (12.1) E57730-02
8 Oracle Data Guardの構成
https://docs.oracle.com/cd/E57425_01/121/HABPT/config_dg.htm

つまったところ

「DUPLICATE TARGET DATABASE FOR STANDBY」の実行時に「NOFILENAMECHECK句」をつける

つけない場合、以下のエラーで失敗する。

RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of Duplicate Db command at 09/16/2018 23:07:48
RMAN-05501: aborting duplication of target database
RMAN-05001: auxiliary file name /u01/app/oracle/oradata/iserlohn/users01.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /u01/app/oracle/oradata/iserlohn/undotbs01.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /u01/app/oracle/oradata/iserlohn/sysaux01.dbf conflicts with a file used by the target database
RMAN-05001: auxiliary file name /u01/app/oracle/oradata/iserlohn/system01.dbf conflicts with a file used by the target database

参考
RMAN-05001: Auxiliary Filename Conflicts with a File Used by the Target Database Tips
http://www.dba-oracle.com/t_rman_05001_auxiliary_filename_conflicts_with_file_used_by_target_database.htm

スタンバイREDOログの作成はMRPが起動していない状態で実行する

MRP起動後に実行すると以下のエラーが発生する。

SQL> ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/iserlohn/redo04.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/iserlohn/redo04.log') SIZE 50M
*
ERROR at line 1:
ORA-01156: recovery or flashback in progress may need access to files

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7