Oracle Databaseにおいて DROP TABLE ... PURGE を実行してしまった場合、リサイクルビン(RECYCLEBIN)を経由しないため、FLASHBACKでは復旧できません。
しかし、RMANの「不完全リカバリ(時点リカバリ)」を活用することで、削除前の任意の時点に戻すことが可能です。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🔁 どんな時に「不完全リカバリ」が必要なのか?
不完全リカバリ(Incomplete Recovery)は、データベースをある過去の時点に巻き戻す操作です。
✅ よくある利用シーンとその理由
| シーン | 使用できる理由 |
|---|---|
❌ 誤って DROP してしまった | SCNや時刻で削除前に戻せる |
❌ PURGE で完全削除 | FLASHBACKが効かないためRMANが唯一の手段 |
| ⚠ WHERE句の条件ミスで全行UPDATE | 更新直前に戻せば元の状態に復旧可能 |
| 🦠 改ざん・ウイルス被害 | 侵入直前に戻すことで影響を回避可能 |
🔎 解説:なぜこれらのシーンで使えるのか?
OracleのREDOログとアーカイブログにはトランザクションの履歴が記録されており、RMANはそれを元に「指定した時点」まで正確にデータベースを再構成できます。
そのため、DROPやUPDATEなどの操作の直前の状態を復元することが可能です。
⚠️ 不完全リカバリを行うための前提条件
以下の条件を満たしていない場合、不完全リカバリはできません:
- 🔹 RMANで事前に取得したバックアップ(データファイル、制御ファイル 等)
- 🔹 アーカイブログファイル一式
✅ アーカイブログモードが有効であることが必須条件です。
✅ バックアップとアーカイブログは、削除対象の操作前に取得している必要があります。
バックアップ手順についてはコチラ。
🧩 本記事の構成
- SCOTTスキーマの導入手順
- DROP TABLE … PURGE による削除の再現
- RMANによる不完全リカバリ(時点指定)
- SCNやログシーケンス番号を使った代替指定方法
- 現在のSCN確認方法
- RMAN接続後に行うDB停止手順
🧱 SCOTTスキーマのインストール手順
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus / as sysdba
SQL> @utlsampl.sql
SCOTT サンプルスキーマについてはコチラ。
💥 DROP TABLE … PURGE の誤操作例
-- テスト用テーブル作成
SQL> CREATE TABLE emp_copy AS SELECT * FROM emp;
-- 完全削除(リサイクルビンを経由しない)
SQL> DROP TABLE emp_copy PURGE;
-- FLASHBACKできない
SQL> FLASHBACK TABLE emp_copy TO BEFORE DROP;
ORA-38305: object not in RECYCLEBIN
🔍 現在の SCN を確認する方法
SQL> SELECT current_scn FROM v$database;
🛑 RMANでリストア・リカバリするための準備
$ rman target /
RMAN> SHUTDOWN IMMEDIATE;
RMAN> STARTUP MOUNT;
🔁 指定時刻へのリカバリ手順(例:2025/08/03 15:44:00)
RMAN> RESTORE DATABASE;
RMAN> RECOVER DATABASE UNTIL TIME "TO_DATE('2025-08-03 15:44:00', 'YYYY-MM-DD HH24:MI:SS')";
RMAN> ALTER DATABASE OPEN RESETLOGS;
🔁 SCN・ログシーケンス番号でのリカバリ
-- SCNでリカバリ
RECOVER DATABASE UNTIL SCN 123456789;
-- シーケンス番号でリカバリ
RECOVER DATABASE UNTIL SEQUENCE 127 THREAD 1;
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
🧭 不完全リカバリの流れ(図解)
┌────────────────────────────┐
│ 本番環境(誤操作発生) │
│ ・DROP TABLE emp_copy PURGE │
│ ・FLASHBACK不可 │
└────┬──────────────────────┘
▼
┌────────────────────────────┐
│ 補助環境(RMANで復元) │
│ ・SHUTDOWN IMMEDIATE │
│ ・STARTUP MOUNT │
│ ・RESTORE + RECOVER │
│ ・OPEN RESETLOGS │
└────────────────────────────┘
[oracle@orcl19c admin]$ sqlplus scott/tiger
SQL*Plus: Release 19.0.0.0.0 - Production on Sun Aug 3 03:50:16 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle. All rights reserved.
Last Successful login time: Sun Aug 03 2025 03:50:02 -04:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> CREATE TABLE emp_copy AS SELECT * FROM emp;
Table created.
SQL> select empno,ename,job from emp_copy;
EMPNO ENAME JOB
---------- ---------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7788 SCOTT ANALYST
7839 KING PRESIDENT
7844 TURNER SALESMAN
7876 ADAMS CLERK
7900 JAMES CLERK
7902 FORD ANALYST
7934 MILLER CLERK
14 rows selected.
SQL> ALTER SESSION SET NLS_DATE_FORMAT = 'YYYY-MM-DD HH24:MI:SS';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
2025-08-03 03:53:37 ★削除前の時間
SQL> DROP TABLE emp_copy PURGE; ★誤ってテーブルを削除してしまった
Table dropped.
SQL> select empno,ename,job from emp_copy;
select empno,ename,job from emp_copy
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> FLASHBACK TABLE emp_copy TO BEFORE DROP; ★フラッシュバックテーブルできない
FLASHBACK TABLE emp_copy TO BEFORE DROP
*
ERROR at line 1:
ORA-38305: object not in RECYCLE BIN
SQL> exit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
[oracle@orcl19c admin]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on Sun Aug 3 03:55:08 2025
Version 19.3.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
connected to target database: ORCL (DBID=1734656221)
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 1543500144 bytes
Fixed Size 8896880 bytes
Variable Size 889192448 bytes
Database Buffers 637534208 bytes
Redo Buffers 7876608 bytes
RMAN> RESTORE DATABASE; ★バックアップからリストア
Starting restore at 03-AUG-25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=34 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/ORCL/system01.dbf
channel ORA_DISK_1: restoring datafile 00003 to /u01/app/oracle/oradata/ORCL/sysaux01.dbf
channel ORA_DISK_1: restoring datafile 00004 to /u01/app/oracle/oradata/ORCL/undotbs01.dbf
channel ORA_DISK_1: restoring datafile 00007 to /u01/app/oracle/oradata/ORCL/users01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/product/19.0.0/dbhome_1/dbs/01405kvg_1_1
channel ORA_DISK_1: piece handle=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/01405kvg_1_1 tag=TAG20250803T034800
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:25
Finished restore at 03-AUG-25
RMAN> RECOVER DATABASE UNTIL TIME "TO_DATE('2025-08-03 03:53:37', 'YYYY-MM-DD HH24:MI:SS')"; ★テーブル削除前の時間を指定してリカバリ
Starting recover at 03-AUG-25
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:02
Finished recover at 03-AUG-25
RMAN> ALTER DATABASE OPEN RESETLOGS;
Statement processed
RMAN> select status from v$instance;
STATUS
------------
OPEN
RMAN> select empno,ename,job from scott.emp_copy; ★テーブルが元に戻っている
EMPNO ENAME JOB
---------- ---------- ---------
7369 SMITH CLERK
7499 ALLEN SALESMAN
7521 WARD SALESMAN
7566 JONES MANAGER
7654 MARTIN SALESMAN
7698 BLAKE MANAGER
7782 CLARK MANAGER
7788 SCOTT ANALYST
7839 KING PRESIDENT
7844 TURNER SALESMAN
7876 ADAMS CLERK
7900 JAMES CLERK
7902 FORD ANALYST
7934 MILLER CLERK
14 rows selected
📌 注意事項まとめ
| 項目 | 内容 |
|---|---|
| バックアップ | 事前にRMANバックアップ+アーカイブログが必要 |
| RESETLOGS | 実行後はログ系列が切り替わるため再バックアップ推奨 |
| 本番操作の危険性 | なるべく補助環境でのリカバリを推奨 |
| SCN活用 | 細かな時点復旧に便利、将来の備えにもなる |
✅ まとめ:DROP + PURGE でもRMANで復旧可能!
┌────────────────────────────┐
│ RMANの強み │
├────────────────────────────┤
│ ✔ 完全削除されたテーブルも復元可能 │
│ ✔ 指定時刻 / SCN / シーケンスで復旧 │
│ ✔ 安全な補助環境で復旧できる │
└────────────────────────────┘
[参考]
バックアップおよびリカバリ・リファレンス – 3.7 RESTORE
バックアップおよびリカバリ・リファレンス – 3.1 RECOVER
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?




コメント