株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

Oracle Database基本スタンバイの各種手順(スタンバイDB構築、ログ転送→適用、スイッチオーバー、フェイルオーバー)

Oracle ACEの渡部です。コーソルが最近力を入れている製品である Dbvisit Standby(以下Dbvisit)は、Oracle Databaseの基本スタンバイ機能をベースにした製品です。

基本スタンバイ機能はなかなか便利な機能ですが、Dbvisitに代表される支援ツールを使わないと、手順が複雑で導入・運用しずらいという問題点があります。 このエントリでは、Oracle Databaseの基本スタンバイについて、スタンバイデータベースの構築手順、ログ転送→適用の手順、スイッチオーバーの手順、フェイルオーバーの手順をまとめます。 かなり面倒なことがわかるはずです。

なお、Dbvisitを導入すれば、この問題点は解決されます。 ;-P

スタンバイデータベースの構築手順 ー 基本スタンバイ

支援ツールを使用しない基本スタンバイ運用における、スタンバイデータベースの構築手順を以下に示します。

dbvisit1905__016.png

1. プライマリデータベースの準備

    SQL> -- ARCHIVELOG設定
    SQL> ALTER DATABASE ARCHIVELOG;
    Database altered.

    SQL> -- FORCE LOGGING設定
    SQL> ALTER DATABASE FORCE LOGGING;
    Database altered.

    SQL> SELECT log_mode, force_logging FROM v$database;
    LOG_MODE     FORCE_LOGGING
    ------------ ---------------------------------------
    ARCHIVELOG   NO

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

    RMAN> run {
    2> allocate channel c1 device type disk format '/var/tmp/oracle-backup/%U';
    3> backup as compressed backupset full database plus archivelog;
    4> release channel c1;
    5> }

    released channel: ORA_DISK_1
    allocated channel: c1
    channel c1: SID=271 device type=DISK

    Starting backup at 29-MAY-19
    current log archived
    channel c1: starting compressed archived log backup set
    channel c1: specifying archived log(s) in backup set
    input archived log thread=1 sequence=18 RECID=18 STAMP=1009538421
    channel c1: starting piece 1 at 29-MAY-19
    channel c1: finished piece 1 at 29-MAY-19
    piece handle=/var/tmp/oracle-backup/1cu2olbl_1_1 tag=TAG20190529T112021 comment=NONE
    channel c1: backup set complete, elapsed time: 00:00:01
    Finished backup at 29-MAY-19

    Starting backup at 29-MAY-19
    channel c1: starting compressed full datafile backup set
    channel c1: specifying datafile(s) in backup set
    input datafile file number=00001 name=/u01/app/oracle/oradata/dvt8c2b1/system01.dbf
    input datafile file number=00003 name=/u01/app/oracle/oradata/dvt8c2b1/sysaux01.dbf
    input datafile file number=00004 name=/u01/app/oracle/oradata/dvt8c2b1/undotbs01.dbf
    input datafile file number=00007 name=/u01/app/oracle/oradata/dvt8c2b1/users01.dbf
    channel c1: starting piece 1 at 29-MAY-19
    channel c1: finished piece 1 at 29-MAY-19
    piece handle=/var/tmp/oracle-backup/1du2olbn_1_1 tag=TAG20190529T112023 comment=NONE
    channel c1: backup set complete, elapsed time: 00:01:05
    Finished backup at 29-MAY-19

    Starting backup at 29-MAY-19
    current log archived
    channel c1: starting compressed archived log backup set
    channel c1: specifying archived log(s) in backup set
    input archived log thread=1 sequence=19 RECID=19 STAMP=1009538488
    channel c1: starting piece 1 at 29-MAY-19
    channel c1: finished piece 1 at 29-MAY-19
    piece handle=/var/tmp/oracle-backup/1eu2oldo_1_1 tag=TAG20190529T112128 comment=NONE
    channel c1: backup set complete, elapsed time: 00:00:01
    Finished backup at 29-MAY-19

    Starting Control File and SPFILE Autobackup at 29-MAY-19
    piece handle=/u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-306897338-20190529-09 comment=NONE
    Finished Control File and SPFILE Autobackup at 29-MAY-19

    released channel: c1

3. スタンバイ制御ファイルを作成

    $ sqlplus / as sysdba

    SQL*Plus: Release 12.2.0.1.0 Production on Wed May 29 11:27:02 2019

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

    Connected to:
    Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

    SQL> alter database create standby controlfile as '/var/tmp/oracle-work/stndby_control.ctl';

    Database altered.

4. pfileを作成

    SQL> create pfile='/var/tmp/oracle-work/init.ora' from spfile;

    File created.

5. ファイルをリモートコピー

    $ scp /var/tmp/oracle-backup/* oracle@ldvt8c2bs:/var/tmp/oracle-backup/
    $ scp /var/tmp/oracle-work/stndby_control.ctl oracle@ldvt8c2bs:/u01/app/oracle/oradata/dvt8c2b1/control01.ctl
    $ scp /var/tmp/oracle-work/stndby_control.ctl oracle@ldvt8c2bs:/u01/app/oracle/oradata/dvt8c2b1/control02.ctl
    $ scp /var/tmp/oracle-work/init.ora oracle@ldvt8c2bs:$ORACLE_HOME/dbs/
    $ scp $ORACLE_HOME/dbs/orapw* oracle@ldvt8c2bs:$ORACLE_HOME/dbs/

6. リモートコピーしたpfileを使用してnomountモードで起動

以後はスタンバイ側で実行

    $ sqlplus / as sysdba

    SQL*Plus: Release 12.2.0.1.0 Production on Wed May 29 11:28:52 2019

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

    Connected to an idle instance.

    SQL> startup nomount pfile=$ORACLE_HOME/dbs/init.ora;
    ORACLE instance started.

    Total System Global Area 1895825408 bytes
    Fixed Size                  8622048 bytes
    Variable Size             570425376 bytes
    Database Buffers         1308622848 bytes
    Redo Buffers                8155136 bytes

7. pfileからspfileを作成し、mountモードで起動

    SQL> create spfile from pfile='$ORACLE_HOME/dbs/init.ora';

    File created.

    SQL> shutdown immediate
    ORA-01507: database not mounted

    ORACLE instance shut down.
    SQL> startup mount
    ORACLE instance started.

    Total System Global Area 1895825408 bytes
    Fixed Size                  8622048 bytes
    Variable Size             570425376 bytes
    Database Buffers         1308622848 bytes
    Redo Buffers                8155136 bytes
    Database mounted.

8. RMANリポジトリの不要なバックアップ情報を削除

    $ rman target /

    Recovery Manager: Release 12.2.0.1.0 - Production on Wed May 29 11:29:43 2019

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

    connected to target database: DVT8C2B1 (DBID=306897338, not open)

    RMAN> crosscheck backup;

    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=259 device type=DISK
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/var/tmp/oracle-backup/1cu2olbl_1_1 RECID=44 STAMP=1009538421
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/var/tmp/oracle-backup/1du2olbn_1_1 RECID=45 STAMP=1009538423
    crosschecked backup piece: found to be 'AVAILABLE'
    backup piece handle=/var/tmp/oracle-backup/1eu2oldo_1_1 RECID=46 STAMP=1009538488
    crosschecked backup piece: found to be 'EXPIRED'
    backup piece handle=/u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-306897338-20190529-09 RECID=47 STAMP=1009538490
    Crosschecked 4 objects

    RMAN> delete noprompt force expired backup;

    using channel ORA_DISK_1

    List of Backup Pieces
    BP Key  BS Key  Pc# Cp# Status      Device Type Piece Name
    ------- ------- --- --- ----------- ----------- ----------
    47      47      1   1   EXPIRED     DISK        /u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-306897338-20190529-09
    deleted backup piece
    backup piece handle=/u01/app/oracle/product/12.2.0/dbhome_1/dbs/c-306897338-20190529-09 RECID=47 STAMP=1009538490
    Deleted 1 EXPIRED objects

9. 2.で転送したバックアップファイルをカタログ化

    RMAN> catalog start with '/var/tmp/oracle-backup/';

    searching for all files that match the pattern /var/tmp/oracle-backup/
    no files found to be unknown to the database

10. リストア+リカバリ

    RMAN> restore database;

    Starting restore at 29-MAY-19
    allocated channel: ORA_DISK_1
    channel ORA_DISK_1: SID=259 device type=DISK

    channel ORA_DISK_1: starting datafile backup set restore
    channel ORA_DISK_1: specifying datafile(s) to restore from backup set
    channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/dvt8c2b1/system01.dbf
    channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/dvt8c2b1/sysaux01.dbf
    channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/dvt8c2b1/undotbs01.dbf
    channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/dvt8c2b1/users01.dbf
    channel ORA_DISK_1: reading from backup piece /var/tmp/oracle-backup/1du2olbn_1_1
    channel ORA_DISK_1: piece handle=/var/tmp/oracle-backup/1du2olbn_1_1 tag=TAG20190529T112023
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:01:15
    Finished restore at 29-MAY-19
    RMAN> recover database;

    Starting recover at 29-MAY-19
    using channel ORA_DISK_1

    starting media recovery

    channel ORA_DISK_1: starting archived log restore to default destination
    channel ORA_DISK_1: restoring archived log
    archived log thread=1 sequence=19
    channel ORA_DISK_1: reading from backup piece /var/tmp/oracle-backup/1eu2oldo_1_1
    channel ORA_DISK_1: piece handle=/var/tmp/oracle-backup/1eu2oldo_1_1 tag=TAG20190529T112128
    channel ORA_DISK_1: restored backup piece 1
    channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
    archived log file name=/u01/app/oracle/arch/1_19_1009044989.dbf thread=1 sequence=19
    media recovery complete, elapsed time: 00:00:00
    Finished recover at 29-MAY-19

11. 再起動してstandby databaseとしてmount

    RMAN> shutdown immediate

    database dismounted
    Oracle instance shut down

    RMAN> startup nomount
    connected to target database (not started)
    Oracle instance started

    Total System Global Area    1895825408 bytes

    Fixed Size                     8622048 bytes
    Variable Size                570425376 bytes
    Database Buffers            1308622848 bytes
    Redo Buffers                   8155136 bytes

    RMAN> ALTER DATABASE MOUNT STANDBY DATABASE;

    Statement processed

ログ転送→適用の手順 - 基本スタンバイ

支援ツールを使用しない基本スタンバイ運用における、ログ転送→適用の手順を以下に示します。

dbvisit1905__017.png

1. 手動でログスイッチを実行

    $ sqlplus / as sysdba

    SQL*Plus: Release 12.2.0.1.0 Production on Wed May 29 11:35:11 2019

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

    Connected to:
    Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

    SQL> alter system switch logfile;

    System altered.

    SQL> set lines 160
    SQL> set pages 1000
    SQL> col NAME format a120
    SQL> SELECT SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE#, NAME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;

     SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# NAME
    ---------- ------------- ------------ ------------------------------------------------------------------------------------------------------------------------
             1       1408558      1424047
             2       1424047      1424961
             3       1424961      1425483
             4       1425483      1425718
             5       1425718      1425728
             6       1425728      1426259
             7       1426259      1483182
             8       1483182      1483232
             9       1483232      1483292
            10       1483292      1483344
            11       1483344      1483702
            12       1483702      1483806
            13       1483806      1484173
            14       1484173      1484208
            15       1484208      1484532
            16       1484532      1484569
            17       1484569      1485123
            18       1485123      1485347 /u01/app/oracle/arch/1_18_1009044989.dbf
            19       1485347      1485382 /u01/app/oracle/arch/1_19_1009044989.dbf
            20       1485382      1485761 /u01/app/oracle/arch/1_20_1009044989.dbf

    20 rows selected.

2. アーカイブログファイルをリモートコピー

    $ scp /u01/app/oracle/arch/* oracle@ldvt8c2bs:/u01/app/oracle/arch/

3. アーカイブログファイルを適用(RECOVER STANDBY DATABASE)

以後はスタンバイ側で実行

    $ sqlplus / as sysdba

    SQL*Plus: Release 12.2.0.1.0 Production on Wed May 29 11:35:41 2019

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

    Connected to:
    Oracle Database 12c Standard Edition Release 12.2.0.1.0 - 64bit Production

    SQL> SELECT MAX(SEQUENCE#) FROM V$LOG_HISTORY;

    MAX(SEQUENCE#)
    --------------
                19

    SQL> RECOVER STANDBY DATABASE UNTIL CANCEL;
    ORA-00279: change 1485382 generated at 05/29/2019 11:21:28 needed for thread 1
    ORA-00289: suggestion : /u01/app/oracle/arch/1_20_1009044989.dbf
    ORA-00280: change 1485382 for thread 1 is in sequence #20

    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

    ORA-00279: change 1485761 generated at 05/29/2019 11:35:14 needed for thread 1
    ORA-00289: suggestion : /u01/app/oracle/arch/1_21_1009044989.dbf
    ORA-00280: change 1485761 for thread 1 is in sequence #21
    ORA-00278: log file '/u01/app/oracle/arch/1_20_1009044989.dbf' no longer needed
    for this recovery

    Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

    ORA-00308: cannot open archived log '/u01/app/oracle/arch/1_21_1009044989.dbf'
    ORA-27037: unable to obtain file status
    Linux-x86_64 Error: 2: No such file or directory
    Additional information: 7

    SQL> SELECT MAX(SEQUENCE#) FROM V$LOG_HISTORY;

    MAX(SEQUENCE#)
    --------------
                20

    SQL>

スイッチオーバーの手順 - 基本スタンバイ

スイッチオーバーの手順については概要のみをスライドで示すだけにとどめさせていただきます・・・ ぶっちゃけかなり面倒です。

dbvisit1905__018.png

フェイルオーバーの手順 - 基本スタンバイ

フェイルオーバーの手順についてもスライドで示すだけにとどめさせていただきます。フェイルオーバーは、プライマリ側に障害が発生した場合に実行する操作であり、言い換えれば、「もはやプライマリ側は存在しない」という前提でおこなう作業ですので、プライマリ側と一切連携を取る必要がない(というか、取りようがない)ため、手順はシンプルです。

dbvisit1905__019.png

Dbvisit Standbyの概要

Dbvisit Standby は歴史が長く、全世界および日本での導入実績も多数ある製品です。 安心してご利用いただけます。

2021年5月時点で、国内での最新バージョンは 9.0.20 ですが、近日中に新バージョン 10のリリースが予定されています。

バージョン10の主な新機能は以下の通りです。

  • 有償 Snapshot Optionが標準機能に(追加費用不要)
  • 運用中のPDBの追加・削除に対応(PDB数3まで)
  • ネットワーク処理の改善

なぜコーソルからDbvisit Standbyを購入すべきなのか

コーソルのDbvisitサービス

コーソルはDbvisit Standbyの一次代理店で、Dbvisit Standbyの製品販売を行います。 加えて、Dbvisitの導入およびサポートを行います。

コーソルのDbvisit Standby販売など

コーソルでは、Dbvisitを用いたOracle Standard Edition向け災害対策環境構築サービスを提供しています。

SIer様、販社様がDbvisit Standbyを販売することも可能です。

Oracle DatabaseおよびDbvisit Standbyの技術力は日本随一

コーソルからDbvisit Standbyを購入いただけると、認定資格Dbvisit Standby Certified Associate取得者数12名、ORACLE MASTER Platinum 単年取得者数7年連続No.1(2014年度~2020年度)という指標に裏付けされた高い技術力により責任もって製品を導入いたします。また、導入後も品質の高い製品サポートをご提供いたします。

Dbvisit Standby技術力の証明

総勢12名のエンジニアが認定資格Dbvisit Standby Certified Associateを取得

Dbvisitに関わる総勢12名のエンジニアが認定資格Dbvisit Standby Certified Associateを取得しました!

Dbvisitに関する技術的な知見をセミナーおよび技術ブログで発信

Oracle AWS移行セミナー Dbvisit on EC2セッション骨子(2020年7月22日実施)
3/11開催SIOS社共催Oracle SEHA+Dbvisitセミナーのお知らせ
3/3(水) お昼のDbvisit + Insight Qubeウェビナーのお知らせ
11/10-12 db tech showcase コーソル担当セッションのご紹介 #dbts2020

Dbvisit関連ブログ記事を多数公開

Dbvisit Standby Snapshot Option – Dbvisit 9新機能
Dbvisitとカスタムスクリプトによる基本スタンバイ管理・運用の比較
Dbvisit : スイッチオーバーとフェイルオーバーの比較
スタンバイDBを再作成せずにStandby ExpressからDbvisit Standbyへ変更する方法
Oracle ASM RACからシングル構成のスタンバイDBを作成する – Dbvisit
REDO欠落時のブロック破損時のスタンバイDB再作成を回避する / Dbvisitの同期機能
Dbvisit Standbyのアーキクチャと管理コンソール操作
Oracle Database基本スタンバイの各種手順(スタンバイDB構築、ログ転送→適用、スイッチオーバー、フェイルオーバー)
Oracle Database Standard Editionの拠点災害対策ソリューションとは (基本スタンバイとDbvisit)

Oracle Database技術力の証明

  • 単年度ORACLE MASTER Platinum取得者数7年連続No.1

7年連続ORACLE MASTER Platinum取得者数No.1! Oracle Certification Award 2020

Oracle DatabaseのDBAサービスを提供可能

Dbvisit Standbyと併せて使用される、Oracle Databaseについても製品販売、製品サポート、製品の導入を行います。また、リモート回線経由でスポット的なDBA実務を行うリモートDBAサービス、コンサルティングやベンダコントロールを含めたOracle Databaseプロフェッショナルサービスを時間制で提供する時間制DBAサービスも提供しています。

非常駐型データベース運用サービス

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ