トップ > DBA上級 バックアップリカバリ > 7章
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オプションで戻したい時間を指定します。

以上が、不完全リカバリの実施についてとなります。