7章 不完全リカバリ
本章では不完全リカバリについてご紹介していきます。不完全リカバリはデータベースを過去の状態に戻すリカバリとなります。
ARCHIVELOGモードでの不完全リカバリ
本章ではARCHIVELOGモードでの不完全リカバリ方法について学んでいきます。
完全リカバリは障害発生直前まで戻すリカバリでしたが、
不完全リカバリはDBを過去の状態に戻すリカバリとなります。
不完全リカバリを実施するパターンは以下のような場合があります。
・アプリケーションの不具合によりデータ不整合となった。
・完全リカバリを実施しようとしたが、アーカイブログが一部欠損していた。
1つ目は意図的にDBを過去に戻していますが、2つ目はやむを得ず過去の状態となってしまうパターンです。
それでは不完全リカバリの方法を確認していきましょう。
不完全リカバリ
@データベースを停止
AデータベースをMOUNT
Bすべてのデータファイルをリストア
Cすべてのデータファイルのアーカイブログ&REDOログを指定した期間分をロールフォワード
DDBをresetlogsオプション付きでDB起動
一部のデータファイルだけを過去の状態にすることは出来ない為、不完全リカバリはすべてのデータファイルの
リストア、リカバリを実施します。
では不完全リカバリを実施する前に、テーブルを更新してみます。
$ sqlplus / as sysdba
SQL> select * from c##apluser.test;
ID NAME
---------- ----------
10 HEEEEY!
SQL> insert into c##apluser.test values (20,'BBBBBB');
1 row created.
SQL> commit;
Commit complete.
SQL> select * from c##apluser.test;
ID NAME
---------- ----------
20 BBBBBB
10 HEEEEY!
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
479621649
1行を挿入し、2行となりました。この時のSCN(システム変更番号)は「479621649」です。
SQL> insert into c##apluser.test values (30,'CCCCCC');
SQL> commit;
Commit complete.
SQL> select * from c##apluser.test;
ID NAME
---------- ----------
20 BBBBBB
30 CCCCCC
10 HEEEEY!
SQL> select dbms_flashback.get_system_change_number from dual;
GET_SYSTEM_CHANGE_NUMBER
------------------------
479621724
1行を挿入し、3行となりました。SCNは「479621724」です。
では不完全リカバリを行い、SCN「479621649」の2行であった過去の状態に戻します。
[構文] 不完全リカバリ
RMAN> recover database until [ SCN | SEQUENCE | RESTOREPOINT | TIME ];
SCN |
指定したSCNまでのログを適用
|
SEQUENCE |
指定したログ順序番号までのログを適用 |
RESTOREPOINT |
指定したリストアポイントまでのログを適用 |
TIME |
指定した時間までのログを適用 |
上記コマンドはRMANでも実施できますが、通常のSQL*Plusからでも実施ができます。
今回はSCNでリカバリを実施してみます。
$ rman target /
Recovery Manager: Release 12.1.0.1.0 - Production on Fri Aug 12 13:02:10 2016
Copyright (c) 1982, 2013, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=397531058)
RMAN> shutdown immediate
using target database control file instead of recovery catalog
database closed
database dismounted
Oracle instance shut down
RMAN> startup mount
connected to target database (not started)
Oracle instance started
database mounted
Total System Global Area 1068937216 bytes
Fixed Size 2296576 bytes
Variable Size 746587392 bytes
Database Buffers 314572800 bytes
Redo Buffers 5480448 bytes
RMAN> restore database ;
Starting restore at 12-AUG-16
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=6 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/XXX/ORCL/system01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/XXX/ORCL/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/XXX/ORCL/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00006 to /u01/app/XXX/ORCL/users01.dbf
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:02:35
Finished restore at 12-AUG-16
RMAN> recover database until scn 479621649;
Starting recover at 12-AUG-16
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:06
Finished recover at 12-AUG-16
RMAN> alter database open resetlogs;
Statement processed
リカバリはSCNを指定し復旧しました。またリカバリ実施後、「alter database open resetlogs」コマンドを実施しています。これはログ順序番号を0にリセットし、データベースをOPENします。不完全リカバリを実施する場合は必須のコマンドとなります。
では復旧できたかどうか、テーブルを確認してみましょう。
$ sqlplus / as sysdba
SQL> select * from c##apluser.test;
ID NAME
---------- ----------
20 BBBBBB
10 HEEEEY!
件数は2件となっているのでDBが過去の状態に戻りました。
不完全リカバリの場合はrecoverコマンド時にuntilオプションで戻したい時間を指定します。
以上が、不完全リカバリの実施についてとなります。