初めに
前回はOracle Database Cloud Backup Moduleを用いてデータベースをOCI Object Storageにバックアップする方法を紹介しました。普通の場合、オンプレミス・データベースが障害ある時にこのバックアップからリストアやリカバリして、データベースを回復します。ただ、オンプレミス・データベース・サーバがハードウェア障害などがあったら、短時間に回復できない場合どうしますか?
OCI Computeサービスを使って、OCI Object Storageに保存されたバックアップの状態のデータベース・インスタンスを迅速に作成するのは可能です。バックアップ頻度によって、新規作成できるインスタンスはオンプレミス・データベースが障害あった直前の状態ではないですが、基本的なサビースを提供できると思います。
今回はOCI Object Storageに保存されたフルバックアップから新しいデータベース・サーバを作成する方法を紹介します。
バックアップからデータベース・サーバを新規作成
今回紹介する内容は一時データベースサーバとしてのOCI Compute Instanceで新しいデータベース・サーバを作成する時に適用だけではありません。オンプレミス環境の障害がリペアされた後に、一時データベースサーバにおける変更されたデータのバックアップからオンプレミス環境に新しいデータベース・インスタンスを構築(Object Storageのバックアップからリストア)する時も適用します。
基本的に、一時データベースサーバとしてのOCI Compute Instanceも、オンプレミス環境に新規構築するデータベース・サーバも最初(障害があった前に)の環境と同じようなソフトウェアを設定する必要があります。OCI Compute Instanceの場合、カスタム・イメージを使えますが、オンプレミスの場合、手動でインストールや設定などが必要になります。
下記の流れはデータベース、OCI-CLI、Backup Moduleなど必要なソフトウェアを全部正しく設定できた前提とします。
-
早くデータベース・インスタンスを作成するため、事前に既存環境と同じバージョンのソフトウェアをインストールしたカスタム・イメージを作成するのをお勧めます。通常の場合、カスタム・イメージからインスタンスを作成するのはただ30秒ぐらいかかります。
-
OCI-CLI
とBackup Module
のインストールについては前回の記事「Oracle Database Cloud Backup ModuleでデータベースをOCI Object Storageにバックアップする方法」のOCI-CLIの設定とBackup Moduleの設定のセクションを参照してください。
データベース・インスタンスを起動
ます、サーバにログインしてRMANでロカール・データベースと接続します。コマンドSTARTUP NOMOUNT
でデータベース・インスタンスを起動します。
SPFILE
とPFILE
がまだないから、下記のエラーが出て来ますが、問題がありません。
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora'
[oracle@oda11 ~]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Sun Sep 5 09:06:39 2021
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database (not started)
RMAN>
RMAN> STARTUP NOMOUNT;
startup failed: ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora'
starting Oracle instance without parameter file for retrieval of spfile
Oracle instance started
Total System Global Area 1073737800 bytes
Fixed Size 8904776 bytes
Variable Size 276824064 bytes
Database Buffers 780140544 bytes
Redo Buffers 7868416 bytes
RMAN>
SPFILEのリストア
OCI Object Storageにバックアップをした時に暗号化が必要でした。バックアップからファイルをリストアする時にも復号化が必要です。このため、リストアする前にまず復号化の設定をしておきます。
# 復号化のパスワードを設定
RMAN> SET DECRYPTION IDENTIFIED BY <PASSWORD>;
そして、バックアップされたデータベースのDBIDを設定します。
RMAN> SET DBID=1610037248;
下記のコマンドでSBTタイプのチャネルを割り合って、SPFILE
をリストアします。
RMAN> RUN {
ALLOCATE CHANNEL t1 DEVICE TYPE SBT_TAPE PARMS='SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/opcORCL.ora)';
RESTORE SPFILE TO PFILE '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora' FROM AUTOBACKUP;
}
# log
allocated channel: t1
channel t1: SID=181 device type=SBT_TAPE
channel t1: Oracle Database Backup Service Library VER=19.0.0.1
Starting restore at 2021/09/05 09:42:34
channel t1: looking for AUTOBACKUP on day: 20210905
channel t1: looking for AUTOBACKUP on day: 20210904
channel t1: looking for AUTOBACKUP on day: 20210903
channel t1: AUTOBACKUP found: c-1610037248-20210903-00
channel t1: restoring spfile from AUTOBACKUP c-1610037248-20210903-00
channel t1: SPFILE restore from AUTOBACKUP complete
Finished restore at 2021/09/05 09:43:08
released channel: t1
RMAN>
上記のログによってSPFILE
が前回の自動バックアップc-1610037248-20210903-00
からリストアされたことを見られます。
リストアされたSPFILEはPFILEinitORCL.ora
として$ORACLE_HOME/dbs/
に格納しています。
[oracle@oda11 ~]$ ll $ORACLE_HOME/dbs/init*
-rw-r--r--. 1 oracle oinstall 3079 May 14 2015 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/init.ora
-rw-r--r--. 1 oracle oinstall 975 Sep 5 09:43 /u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora
[oracle@oda11 ~]$
SPFILEの作成
元データベースのフルバックアップから新しいデータベースサーバを作成できたのはいいですが、一点注意しなければならないところがあります。それはSPFILEの作成です。新しく作成したデータベースはまだPFILEより起動しているのは覚えていますか?RMANで自動バックアップする対象としてはCONTROLFILEとSPFILEですから、PFILEからSPFILEを生成するのは必要となります。
上記のステップ「SPFILEのリストア」を実施して、バックアップから元データベースのSPFILEをPFILEとしてリストアされました。データベース・インスタンスはこのPFILEから正常に起動できるになります。ただ、データベース管理やRMANの自動バックアップ対象(CONTROLFILEとSPFILE)の観点から、PFILEからSPFILEを生成するのは必要となります。
SQLコマンドcreate spfile from pfile;
でSPFILEを作成して、データベースを再起動します。作成したSPFILEを確認できます。
SQL> create spfile from pfile;
File created.
SQL> show parameter spfile ;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 6291453600 bytes
Fixed Size 8910496 bytes
Variable Size 1073741824 bytes
Database Buffers 5200936960 bytes
Redo Buffers 7864320 bytes
Database mounted.
Database opened.
SQL> show parameter spfile ;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
spfile string /u01/app/oracle/product/19.0.0
/dbhome_1/dbs/spfileORCL.ora
SQL>
必要なディレクトリを確保
次のステップCONTROLFILE
をリストアする時に、PFILEにおける記載されているディレクトリが存在しないとエラーになりますので、それらのディレクトリを確認して作成する必要があります。
# PFILEの内容を確認
[oracle@oda11 ~]$ cat /u01/app/oracle/product/19.0.0/dbhome_1/dbs/initORCL.ora
ORCL.__data_transfer_cache_size=0
ORCL.__db_cache_size=5066719232
ORCL.__inmemory_ext_roarea=0
ORCL.__inmemory_ext_rwarea=0
ORCL.__java_pool_size=0
ORCL.__large_pool_size=16777216
ORCL.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
ORCL.__pga_aggregate_target=2097152000
ORCL.__sga_target=6291456000
ORCL.__shared_io_pool_size=134217728
ORCL.__shared_pool_size=1056964608
ORCL.__streams_pool_size=0
ORCL.__unified_pga_pool_size=0
*.audit_file_dest='/u01/app/oracle/admin/ORCL/adump'
*.audit_trail='db'
*.compatible='19.0.0'
*.control_files='/u01/app/oracle/oradata/ORCL/control01.ctl','/u01/app/oracle/oradata/ORCL/control02.ctl'
*.db_block_size=8192
*.db_name='ORCL'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=ORCLXDB)'
*.nls_language='AMERICAN'
*.nls_territory='AMERICA'
*.open_cursors=300
*.pga_aggregate_target=2000m
*.processes=300
*.remote_login_passwordfile='EXCLUSIVE'
*.sga_target=6000m
*.undo_tablespace='UNDOTBS1'
[oracle@oda11 ~]$
# 必要なディレクトリを作成
[oracle@oda11 ~]$ mkdir -p /u01/app/oracle/fast_recovery_area/
[oracle@oda11 ~]$ mkdir -p /u01/app/oracle/admin/ORCL/adump
[oracle@oda11 ~]$ mkdir -p /u01/app/oracle/oradata/ORCL/
CONTROLFILEのリストア
CONTROLFILEをリストアする前に、データベース・インスタンスをNOMOUNT
の状態で再起動します。今回はPFILE
がありますから、正常で起動できます。
RMAN> SHUTDOWN IMMEDIATE;
Oracle instance shut down
RMAN> STARTUP NOMOUNT;
connected to target database (not started)
Oracle instance started
Total System Global Area 6291453600 bytes
Fixed Size 8910496 bytes
Variable Size 1073741824 bytes
Database Buffers 5200936960 bytes
Redo Buffers 7864320 bytes
RMAN>
改めてSBTタイプのチャネルを割り合って、CONTROLFILE
をリストアします。
RMAN> RUN {
ALLOCATE CHANNEL t1 DEVICE TYPE SBT_TAPE PARMS='SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/opcORCL.ora)';
RESTORE CONTROLFILE FROM AUTOBACKUP;
}
# log
allocated channel: t1
channel t1: SID=21 device type=SBT_TAPE
channel t1: Oracle Database Backup Service Library VER=19.0.0.1
Starting restore at 2021/09/05 10:02:08
channel t1: looking for AUTOBACKUP on day: 20210905
channel t1: looking for AUTOBACKUP on day: 20210904
channel t1: looking for AUTOBACKUP on day: 20210903
channel t1: AUTOBACKUP found: c-1610037248-20210903-00
channel t1: restoring control file from AUTOBACKUP c-1610037248-20210903-00
channel t1: control file restore from AUTOBACKUP complete
output file name=/u01/app/oracle/oradata/ORCL/control01.ctl
output file name=/u01/app/oracle/oradata/ORCL/control02.ctl
Finished restore at 2021/09/05 10:02:43
released channel: t1
RMAN>
上記のようにCONTROLFILE
が正常でリストアされたら、データベースをMOUNT
に変更できます。
RMAN> ALTER DATABASE MOUNT;
Statement processed
RMAN>
元データベースのRMANの設定はCONTROLFILEに保存されたので、今のRMAN設定を確認すると全部反映されたはずです。
RMAN> show all;
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE SBT_TAPE TO '%F'; # default
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE 'SBT_TAPE' PARALLELISM 2 BACKUP TYPE TO COMPRESSED BACKUPSET;
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE SBT_TAPE TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' PARMS 'SBT_LIBRARY=/home/oracle/lib/libopc.so, SBT_PARMS=(OPC_PFILE=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/opcORCL.ora)';
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'MEDIUM' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE;
CONFIGURE RMAN OUTPUT TO KEEP FOR 7 DAYS; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/19.0.0/dbhome_1/dbs/snapcf_ORCL.f'; # default
RMAN>
データファイルをリストアする前のプレビュー
データファイルをリストアする前に、リストアの詳しい動作をプレビューしたほうがいいです。データベースを一致させるためのSCNを特定できるし、リストアする時に使用されるバックアップ・ピースやロケーションも確認できます。
RMAN> RESTORE DATABASE PREVIEW;
Starting restore at 2021/09/05 10:18:27
allocated channel: ORA_SBT_TAPE_1
channel ORA_SBT_TAPE_1: SID=258 device type=SBT_TAPE
channel ORA_SBT_TAPE_1: Oracle Database Backup Service Library VER=19.0.0.1
allocated channel: ORA_SBT_TAPE_2
channel ORA_SBT_TAPE_2: SID=24 device type=SBT_TAPE
channel ORA_SBT_TAPE_2: Oracle Database Backup Service Library VER=19.0.0.1
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=259 device type=DISK
List of Backup Sets
===================
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
3 Full 198.00M SBT_TAPE 00:00:06 2021/09/03 06:54:27
BP Key: 3 Status: AVAILABLE Compressed: YES Tag: TAG20210903T065421
Handle: 040849gt_1_1 Media: objectstorage.us-phoenix..oud.com/n/sehubjapacprod/rex-db-backup
List of Datafiles in backup set 3
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name
---- -- ---- ---------- ------------------- ----------- ------ ----
1 Full 2053030 2021/09/03 06:54:21 NO /u01/app/oracle/oradata/ORCL/system01.dbf
7 Full 2053030 2021/09/03 06:54:21 NO /u01/app/oracle/oradata/ORCL/users01.dbf
BS Key Type LV Size Device Type Elapsed Time Completion Time
------- ---- -- ---------- ----------- ------------ -------------------
2 Full 56.00M SBT_TAPE 00:00:03 2021/09/03 06:54:24
BP Key: 2 Status: AVAILABLE Compressed: YES Tag: TAG20210903T065421
Handle: 050849gt_1_1 Media: objectstorage.us-phoenix..oud.com/n/sehubjapacprod/rex-db-backup
List of Datafiles in backup set 2
File LV Type Ckp SCN Ckp Time Abs Fuz SCN Sparse Name
---- -- ---- ---------- ------------------- ----------- ------ ----
3 Full 2053031 2021/09/03 06:54:21 NO /u01/app/oracle/oradata/ORCL/sysaux01.dbf
4 Full 2053031 2021/09/03 06:54:21 NO /u01/app/oracle/oradata/ORCL/undotbs01.dbf
using channel ORA_SBT_TAPE_1
using channel ORA_SBT_TAPE_2
using channel ORA_DISK_1
List of Backup Sets
===================
BS Key Size Device Type Elapsed Time Completion Time
------- ---------- ----------- ------------ -------------------
4 256.00K SBT_TAPE 00:00:01 2021/09/03 06:54:37
BP Key: 4 Status: AVAILABLE Compressed: YES Tag: TAG20210903T065436
Handle: 060849hc_1_1 Media: objectstorage.us-phoenix..oud.com/n/sehubjapacprod/rex-db-backup
List of Archived Logs in backup set 4
Thrd Seq Low SCN Low Time Next SCN Next Time
---- ------- ---------- ------------------- ---------- ---------
1 6 2053017 2021/09/03 06:54:16 2053042 2021/09/03 06:54:36
validation succeeded for backup piece
recovery will be done up to SCN 2053030
Media recovery start SCN is 2053030
Recovery must be done beyond SCN 2053031 to clear datafile fuzziness
validation succeeded for backup piece
Finished restore at 2021/09/05 10:18:29
RMAN>
データファイルのリストア
上記のプレビューで問題がなければ、RESTORE DATABASE
でデータファイルをリストアします。
RMAN> RESTORE DATABASE;
Starting restore at 2021/09/05 10:21:03
using channel ORA_SBT_TAPE_1
using channel ORA_SBT_TAPE_2
using channel ORA_DISK_1
channel ORA_SBT_TAPE_1: starting datafile backup set restore
channel ORA_SBT_TAPE_1: specifying datafile(s) to restore from backup set
channel ORA_SBT_TAPE_1: restoring datafile 00003 to /u01/app/oracle/oradata/ORCL/sysaux01.dbf
channel ORA_SBT_TAPE_1: restoring datafile 00004 to /u01/app/oracle/oradata/ORCL/undotbs01.dbf
channel ORA_SBT_TAPE_1: reading from backup piece 050849gt_1_1
channel ORA_SBT_TAPE_2: starting datafile backup set restore
channel ORA_SBT_TAPE_2: specifying datafile(s) to restore from backup set
channel ORA_SBT_TAPE_2: restoring datafile 00001 to /u01/app/oracle/oradata/ORCL/system01.dbf
channel ORA_SBT_TAPE_2: restoring datafile 00007 to /u01/app/oracle/oradata/ORCL/users01.dbf
channel ORA_SBT_TAPE_2: reading from backup piece 040849gt_1_1
channel ORA_SBT_TAPE_1: piece handle=050849gt_1_1 tag=TAG20210903T065421
channel ORA_SBT_TAPE_1: restored backup piece 1
channel ORA_SBT_TAPE_1: restore complete, elapsed time: 00:00:45
channel ORA_SBT_TAPE_2: piece handle=040849gt_1_1 tag=TAG20210903T065421
channel ORA_SBT_TAPE_2: restored backup piece 1
channel ORA_SBT_TAPE_2: restore complete, elapsed time: 00:00:45
Finished restore at 2021/09/05 10:21:48
RMAN>
データベースのリカバリ
データファイルをすべて問題なくてリストアされたら、次にデータベースをリカバリします。
データベースを一致させるSCNを指定し、リカバリのコマンドを実施します。
RMAN> RECOVER DATABASE UNTIL SCN 2053042;
Starting recover at 2021/09/05 10:27:04
using channel ORA_SBT_TAPE_1
using channel ORA_SBT_TAPE_2
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:00
Finished recover at 2021/09/05 10:27:04
RMAN>
正常にリカバリしました。データベースをオーペンに設定します。
RMAN> ALTER DATABASE OPEN RESETLOGS;
Statement processed
RMAN>
データベースが正しくリストアされたかを確認します。元データベースの内容を見られます。
SQL> select * from TESTER.students;
STUDENT_NO SURNAME FORENAME
---------- -------------------- --------------------
20060101 Dickens Charles
SQL>
オンプレミス・データベース・サーバがリペアした後
オンプレミス・データベース・サーバが障害があった時に、上記の流れでOCI Object Storageに保存されたバックアップから一時データベース・インスタンスを作成できて、サービスを続けて提供できます。同時にオンプレミス環境のリペアを行います。リペアが完了してからサービスはオンプレミス環境へ切り替えする場合はどうしますか?
基本的に、オンプレミスデータベースのバックアップからクラウド環境に一時インスタンスを作成する流れと同じです。
- ① クラウド環境に作成した一時データベース(OCI Compute Instance)をObject Storageにバックアップします。このバックアップはオンプレミス環境をリペアするうちに発生したデータ変更を含めています。
- バックアップを取得する方法はOracle Database Cloud Backup ModuleでデータベースをOCI Object Storageにバックアップする方法をご参照ください。
- 参照記事ではオンプレミス・データベースのバックアップを取得すると想定しますが、OCI Compute上のデータベースのバックアップを取得する時にOCI Compute上で同じコマンドを実行してもいいです。
- ② オンプレミス環境で上記のバックアップから新しいデータベース・インスタンスを作成します。作成する方法はOCI Object Storageに保存されたバックアップから新しいデータベース・サーバを作成してみようをご参照ください。
考察
上記の方法はフルバックアップから新しいデータベースを作成する方法です。OCI環境にネットワークのスループットはいいですが、バックアップのデータ量が大きであればリストアする時に長い時間をかかる可能性があると考えられます。
OCI Object Storageからオンプレミス環境にリストアする時にネットワーク帯域によってもっと時間をかかるかもしれません。