kenken0807_DBメモ

つば九郎が好きなDBAです。Oracle Standard Editionでの運用やツールとかとかの備忘録。特に記載がない場合はoracle11gR2です。時々MySQL

ORACLE RMANで複製データベースの作成

RMANでアクティブなデータベースから同じSIDを持った複製データベースを作成したのでメモ。

複製先サーバ側の設定

  • 複製先サーバでOracleインスタンスが起動できる状態にしておく

    • 同じバージョンORACLEソフトウェアのインストールをしておく
    • 環境変数も設定する
    • データファイルや高速リカバリエリアなどのフォルダ構成を同様にしておく
  • 以下ファイルを複製元から複製先へコピー、配置する。

    • 初期化パラメータ(initSID.ora)
    • パスワードファイル(orapwSID)
    • リスナー構成ファイル(listener.ora)
  • 静的リスナーを設定

$ vim $ORACLE_HOME/network/admin/listener.ora

 LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 複製先サーバIP)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER=
  (SID_LIST=
    (SID_DESC=
      (SID_NAME=orcl)
      (ORACLE_HOME=/opt/app/oracle/product/11.2.0/dbhome_1)
    )
  )
  • リスナー起動
$ lsnrctl start

複製元サーバでの作業

$ sqlplus sys/oraora@複製先IP:1521/orcl as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on 木 4月 7 14:03:52 2016

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

アイドル・インスタンスに接続しました。

sql>startup nomount

RMANからデータベースの複製を行う。

  • RMAN接続
$ rman target /

Recovery Manager: Release 11.2.0.4.0 - Production on 金 4月 8 15:28:01 2016

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

ターゲット・データベース: ORCL (データベースID=3408942822)に接続されました
  • RMANから複製先へ接続
RMAN>  connect auxiliary sys/oraora@複製先IP:1521/orcl 

補助データベース: ORCLに接続されました(マウントされていません)
  • 複製データベース作成する
RMAN>  duplicate target database to orcl
       from active database 
       spfile
       NOFILENAMECHECK;

これで完了。

標準出力からわかるざっくりな流れとして、
1. SPFILEのコピー
2. 制御ファイルのコピー
3. データファイルのリストア
4. アーカイブログを使用したリカバリ
5. resetlogしてデータベースOPEN

  • どの時点のデータまで複製されるのか。
    アクティブなデータベースから作成しているので、どの時点のデータまでが複製されるのか気になった。

複製元データベースで↓実施しながら複製開始。

$ watch -n 1 "echo \"insert into duplicate_test values (1,sysdate);\" | sqlplus orcl/orcl"

複製が完了した時点でのデータ

        ID D
---------- -------------------
         1 2016/04/08 18:33:43
         1 2016/04/08 18:33:44
         1 2016/04/08 18:33:45
         1 2016/04/08 18:33:46
         1 2016/04/08 18:33:47
         1 2016/04/08 18:33:48 ←ここまで反映

duplicateコマンドのログ情報

チャネルORA_DISK_1: データファイルのコピーを開始しています
入力データファイル・ファイル番号=00004 名前=/opt/app/oracle/oradata/orcl/users01.dbf
出力ファイル名=/opt/app/oracle/oradata/orcl/users01.dbf タグ=TAG20160408T181846
チャネルORA_DISK_1: データファイルのコピーが終了しました。経過時間: 00:00:01
backupが完了しました(完了時間: 2016-04-08 18:33:48)    ←リストア完了時刻

SQL文: alter system archive log current    ←ログスイッチ実行

メモリー・スクリプトの内容:
{
   backup as copy reuse
   archivelog like  "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12114_cjgyknf3_.arc" auxiliary format
 "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12114_%u_.arc"   archivelog like
 "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12115_cjgyqwxc_.arc" auxiliary format
 "/opt/app/oracle/fast_recovery_area/ORCL/archivelog/2016_04_08/o1_mf_1_12115_%u_.arc"   ;
   catalog clone recovery area;
   switch clone datafile all;
}
メモリー・スクリプトを実行しています

backupが開始されました(開始時間: 2016-04-08 18:33:49)
・
・
・
Duplicate Dbが完了しました(完了時間: 2016-04-08 18:34:33)    ←Duplicateコマンド完了時刻

というようにデータ登録時刻とリストア完了の時刻はほぼ一緒で、
リストア完了後にログのスイッチが行われている。
そこで生成されたアーカイブログまで適用されているよう。

SQL文: alter system archive log current

複製されたデータベースで一時表領域がエラー

一時表領域のデータファイルを確認しようするとエラーが発生。

SQL> select * from dba_temp_files;
select * from dba_temp_files
*
行1でエラーが発生しました。:
ORA-01187:
ファイルが検査を通過しなかったため、このファイルから読み込むことができません。
ORA-01110: データファイル201: '/opt/app/oracle/oradata/orcl/temp01.dbf'

ステータスはオンライン

SQL> select tablespace_name, status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
TEMP                           ONLINE

ファイルはちゃんと複製されていたので一時表領域から一度dropしてaddしてあげることで直った。

SQL> alter database tempfile '/opt/app/oracle/oradata/orcl/temp01.dbf' drop;

データベースが変更されました。

SQL> alter tablespace TEMP add tempfile '/opt/app/oracle/oradata/orcl/temp01.dbf' REUSE;

表領域が変更されました。

SQL> select * from dba_temp_files;

FILE_NAME
--------------------------------------------------------------------------------
   FILE_ID TABLESPACE_NAME                     BYTES     BLOCKS STATUS
---------- ------------------------------ ---------- ---------- -------
RELATIVE_FNO AUT   MAXBYTES  MAXBLOCKS INCREMENT_BY USER_BYTES USER_BLOCKS
------------ --- ---------- ---------- ------------ ---------- -----------
/opt/app/oracle/oradata/orcl/temp01.dbf
         1 TEMP                           3.4359E+10    4194176 ONLINE
           1 NO           0          0            0 3.4358E+10     4194048