技術ブログ
技術ブログ
目次
Oracle ACEの渡部です。コーソルが最近力を入れている製品である Dbvisit Standby(以下Dbvisit)は、Oracle Databaseの基本スタンバイ機能をベースにした製品です。
基本スタンバイ機能はなかなか便利な機能ですが、Dbvisitに代表される支援ツールを使わないと、手順が複雑で導入・運用しずらいという問題点があります。 このエントリでは、Oracle Databaseの基本スタンバイについて、スタンバイデータベースの構築手順、ログ転送→適用の手順、スイッチオーバーの手順、フェイルオーバーの手順をまとめます。 かなり面倒なことがわかるはずです。
なお、Dbvisitを導入すれば、この問題点は解決されます。 ;-P
支援ツールを使用しない基本スタンバイ運用における、スタンバイデータベースの構築手順を以下に示します。
 
    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    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    $ 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.    SQL> create pfile='/var/tmp/oracle-work/init.ora' from spfile;
    File created.    $ 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/以後はスタンバイ側で実行
    $ 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    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.    $ 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    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    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    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支援ツールを使用しない基本スタンバイ運用における、ログ転送→適用の手順を以下に示します。
 
    $ 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.    $ scp /u01/app/oracle/arch/* oracle@ldvt8c2bs:/u01/app/oracle/arch/以後はスタンバイ側で実行
    $ 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>スイッチオーバーの手順については概要のみをスライドで示すだけにとどめさせていただきます・・・ ぶっちゃけかなり面倒です。
 
フェイルオーバーの手順についてもスライドで示すだけにとどめさせていただきます。フェイルオーバーは、プライマリ側に障害が発生した場合に実行する操作であり、言い換えれば、「もはやプライマリ側は存在しない」という前提でおこなう作業ですので、プライマリ側と一切連携を取る必要がない(というか、取りようがない)ため、手順はシンプルです。
 
Dbvisit Standby は歴史が長く、全世界および日本での導入実績も多数ある製品です。 安心してご利用いただけます。



2021年5月時点で、国内での最新バージョンは 9.0.20 ですが、近日中に新バージョン 10のリリースが予定されています。
バージョン10の主な新機能は以下の通りです。
コーソルはDbvisit Standbyの一次代理店で、Dbvisit Standbyの製品販売を行います。 加えて、Dbvisitの導入およびサポートを行います。

コーソルでは、Dbvisitを用いたOracle Standard Edition向け災害対策環境構築サービスを提供しています。
SIer様、販社様がDbvisit Standbyを販売することも可能です。
コーソルからDbvisit Standbyを購入いただけると、認定資格Dbvisit Standby Certified Associate取得者数12名、ORACLE MASTER Platinum 単年取得者数7年連続No.1(2014年度~2020年度)という指標に裏付けされた高い技術力により責任もって製品を導入いたします。また、導入後も品質の高い製品サポートをご提供いたします。
総勢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)
7年連続ORACLE MASTER Platinum取得者数No.1! Oracle Certification Award 2020
Dbvisit Standbyと併せて使用される、Oracle Databaseについても製品販売、製品サポート、製品の導入を行います。また、リモート回線経由でスポット的なDBA実務を行うリモートDBAサービス、コンサルティングやベンダコントロールを含めたOracle Databaseプロフェッショナルサービスを時間制で提供する時間制DBAサービスも提供しています。
非常駐型データベース運用サービス