はじめに

みなさん、こんにちは。

Oracle Cloud Infrastructure検証チームです。

今回は、Oracle Cloud Infrastructure(OCI)のオブジェクト・ストレージに取得したバックアップからdbaascliを使用してデータベースリカバリを実施する方法について、ご紹介したいと思います。

オブジェクト・ストレージに取得するために、dbaascliを使用してバックアップを取得できますが、リカバリにもdbaascliを使用してデータベースリカバリが可能です。

リカバリオプション

dbaascliを使用したリカバリには、dbaascli database recover コマンドを使用します。

また、リカバリには下記の指定が可能です。

  • –untilTime(時間指定)
  • –untilSCN(SCN指定) ★今回の記事で取り上げます
  • –latest(最新の状態)
  • –tag(バックアップtag指定)

今回は、SCN指定でデータベースリカバリを試してみたいと思います。

前準備

データベースリカバリができたかを確認するために、事前にテーブルを作成して、SCNを確認しておきます。

$ date
Sun Nov 13 12:37:09 UTC 2022
$ sqlplus / as sysdba
SQL> create table table_01 (
  2  col01 VARCHAR2(10)
  3  );

Table created.

SQL> select table_name from user_tables where table_name='TABLE_01';

TABLE_NAME
--------------------------------------------------------------------------------
TABLE_01

SQL> select current_scn from v$database;

CURRENT_SCN
----------------
87654321

dbaascliを使用してオブジェクトストレージにバックアップを取得します。

※dbaascliを使用したオブジェクトストレージへのデータバックアップ方法については過去記事をご参照ください。下図から該当記事へ遷移出来ます

[Oracle Cloud]dbaascli を使用したオブジェクトストレージへのデータベースバックアップ

バックアップを取得した後に、作成したテーブルを削除します。

SQL> DROP TABLE TABLE_01;

Table dropped.

SQL> select table_name from user_tables where table_name='TABLE_01';

no rows selected

SQL>

データベースリカバリ

以下のようなコマンドを実行し、データベースリカバリを実施します。

# dbaascli database recover --dbname TESTCDB --start --untilSCN 87654321 ←確認したSCN
DBAAS CLI version XX.X.X.X.X
Executing command database recover --start --untilSCN 87654321
DBaaS Backup API VX.X @XXXX Multi-Oracle home
-> Action : recover_start
-> logfile : /var/opt/oracle/log/TESTCDB/bkup_api_log/bkup_api_XXXXXXXX_XXXXXXXXXXXXXX.XXXXXX.log
UUID 9876543210abcdefghijklmnopqrstuv for this backup
** process started with PID: 123456
** see log file for monitor progress
--------------------------------------
dbaascli execution completed

リカバリステータスの確認

バックアップ時と同じように、データベースリカバリでもリカバリのステータスを確認することができます。

uuidには、上記、データベースリカバリ実行時に表示されるuuidを指定します。

リカバリ実行中には、以下のような標準出力となります。

# dbaascli database recover --dbname TESTCDB --status --uuid 9876543210abcdefghijklmnopqrstuv
DBAAS CLI version XX.X.X.X.X
Executing command database recover --status --uuid 9876543210abcdefghijklmnopqrstuv
DBaaS Backup API VX.X @XXXX Multi-Oracle home
@ STARTING CHECK STATUS 9876543210abcdefghijklmnopqrstuv
[ REQUEST TICKET ]
[UUID    ->  9876543210abcdefghijklmnopqrstuv
[DBNAME  ->  TESTCDB
[STATE   ->  running
[ACTION  ->  recovery-start
[STARTED ->  2022-11-10 15:49:XX UTC
[ENDED   ->   UTC
[PID     ->  123456
[TAG     ->  SCN 87654321
[PCT     ->  90.0
[ END TICKET ]
dbaascli execution completed

リカバリ成功時には、以下のような出力となります。

# dbaascli database recover --dbname TESTCDB --status --uuid 9876543210abcdefghijklmnopqrstuv
DBAAS CLI version XX.X.X.X.X
Executing command database recover --status --uuid 9876543210abcdefghijklmnopqrstuv
DBaaS Backup API VX.X @XXXX Multi-Oracle home
@ STARTING CHECK STATUS 9876543210abcdefghijklmnopqrstuv
[ REQUEST TICKET ]
[UUID    ->  9876543210abcdefghijklmnopqrstuv
[DBNAME  ->  TESTCDB
[STATE   ->  success
[ACTION  ->  recovery-start
[STARTED ->  2022-11-10 15:49:XX UTC
[ENDED   ->  2022-11-10 15:59:XX UTC
[PID     ->  123456
[TAG     ->  SCN 87654321
[PCT     ->  100
[LOG     ->  2022-11-10 15:49:XX.XXXXXX - API:: Logfile is /var/opt/oracle/log/TESTCDB/orec/orec_2022-11-10_15:49:XX.XXXXXXXXXXXX.log
[LOG     ->  2022-11-10 15:49:XX.XXXXXX - API:: RUNNINg IN NON DATAGUARD ENVIRONMENT
[LOG     ->  2022-11-10 15:49:XX.XXXXXX - API:: DATA mode only
[LOG     ->  2022-11-10 15:49:XX.XXXXXX - API:: Stopping GRID DB
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: State GRID DB
[LOG     ->  2022-11-10 15:49:XX.XXXXXX - API:: Executing SHUTDOWN ABORT...2022-11-10 11:50:XX.XXXXXX - Output from sql shutdown abort is:
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: Verifying scn validity...
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: Checking prerequirements before recovery process.
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: State GRID DB
[LOG     ->  ORA-01034: ORACLE not available2022-11-10 11:50.XX.XXXXXX - API:: DB Status : 0
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: Checking for PFILE in file system...
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: PFILE is present in file system.
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: Changing instance to MOUNT stage.
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: Shutting down the database...2022-11-10 11:50:XX.XXXXXX - DEBUG: SQL Executing set hea off set pagesize 5000 
set linesize 400 set newpage none shutdown abort; quit
[LOG     ->  2022-11-10 15:50:XX.XXXXXX - API:: (RMAN) Startup mount...2022-11-10 11:51:XX.XXXXXX -
[LOG     ->  2022-11-10 15:51:XX.XXXXXX - API:: Checking for PDBs directories.
[LOG     ->  2022-11-10 15:51:XX.XXXXXX - API:: Opening DB in order to validate PITR parameter
[LOG     ->  2022-11-10 15:51:XX.XXXXXX - API:: Catalog mode: 2022-11-10 11:51:XX.XXXXXX - Disabled
[LOG     ->  2022-11-10 15:51:XX.XXXXXX - API:: Testing RMAN connection.
[LOG     ->  2022-11-10 15:51:XX.XXXXXX - API:: bkup_standby_enabled = no
[LOG     ->  2022-11-10 15:51:XX.XXXXXX - API:: Verifying backups dates ..
[LOG     ->  2022-11-10 15:52:XX.XXXXXX - API:: Performing PITR using SCn number 123456 ...2022-11-10 11:52:XX.XXXXXX - API:: Checking if PITR is across incarnation ...
[LOG     ->  2022-11-10 15:52:XX.XXXXXX - API:: Determining current incarnation ...
[LOG     ->  2022-11-10 15:52:XX.XXXXXX - API:: Determining target incarnation for SCN: 123456 ...
[LOG     ->  API:: PITR is within current incarnation 11
[LOG     ->  2022-11-10 15:52:XX.XXXXXX - API:: Starting all instance in mount mode
[LOG     ->  2022-11-10 15:52:XX.XXXXXX - API:: Shutting down the database...2022-11-10 11:52:XX.XXXXXX - DEBUG: SQL Executing set hea off set pagesize 5000 
set linesize 400 set newpage none shutdown abort; quit
[LOG     ->  2022-11-10 15:52:XX.XXXXXX - API:: State database verbose
[LOG     ->  2022-11-10 15:56:XX.XXXXXX - API:: Stopping GRID DB
[LOG     ->  2022-11-10 15:57:XX.XXXXXX - API:: State GRID DB
[LOG     ->  2022-11-10 15:57:XX.XXXXXX - API:: Starting GRID DB
[LOG     ->  2022-11-10 15:58:XX.XXXXXX - API:: State GRID DB
[LOG     ->  2022-11-10 15:58:XX.XXXXXX - API:: Recovery to SCN completed.
[LOG     ->  2022-11-10 15:58:XX.XXXXXX - API:: Patching database...
[ END TICKET ]
dbaascli execution completed

データベースリカバリが完了しました。

前作業で削除したテーブルがある状態に、データベースが戻っているか確認します。

SQL> select table_name from user_tables where table_name='TABLE_01';

TABLE_NAME
-------------------------------------------------------------------------------- 
TABLE_01

SQL>

テーブルがあることが確認できました。
バックアップ後に削除したテーブルがデータベースリカバリで戻りました。

おわりに

今回はdbaascliを使用したデータベースリカバリを試してみましたが、いかがでしたでしょうか?

バックアップと同様にdbaascliユーティリティを使用することで、簡単にデータベースリカバリが実施できたかと思います。

今回は割愛をしましたが、PDB単位のリカバリは、dbaascli pdb recoveryを使用して、リカバリ可能なようです。

最後までご覧いただきありがとうございました!

Oracle Cloudをご検討の際は弊社までお問い合わせください。

当社のプロ集団にお任せください!

投稿者プロフィール

技術チーム
技術チーム
DBひとりでできるもんを盛り上げるべく、技術チームが立ち上がり早5年。ひとりでできるもんと言いつつ、技術者が読んでプッとなるような、極めてピンポイントでマニアックな技術ネタを執筆していきます!