Oracleデータベースでは、誤ってテーブルを削除(DROP)してしまうことがあります。
たとえば…
- 間違って
DROP TABLEを実行してしまった - 誤ったSQLファイルをバッチで流してしまった
- 誰かが消したテーブルを戻したい
このような時に使えるのが、RMANによる「テーブル単位のポイントインタイムリカバリ(Table PITR)」です。
この記事では、SCNを使ってDROPされたテーブルを復元する手順を詳しく解説します。
この手順はデータベースを停止することなく行えます。
💰 【PR】Oracleエンジニアの市場価値、調べてみませんか?
Oracleのスキルは需要が高く、特定の資格や経験を持っていると年収が大幅にアップするケースがあります。まずはIT専門のエージェントで非公開求人をチェックしてみませんか?
💡 Table PITRとは?
Oracle Database 12c以降(Enterprise Edition)では、RMANを使って特定のテーブルのみをSCNや時刻指定で復元することが可能です。
内部的には一時的な「補助インスタンス」を使って、指定時点までデータベースを復元し、そこから対象テーブルだけを抽出し、本番に戻します。
🖼 テキスト図:全体の流れ
本番DB ─────┐
├─ 補助DB(AUX)を作成し、過去の状態に復元
│ └─ Data PumpでDROP前のテーブルをエクスポート
└─ 本番DBに再インポート(テーブル復元)
🧪 実践:DROPしてしまったemp_rmanテーブルをSCNで復元する
① テスト用テーブルの作成
CREATE TABLE emp_rman AS SELECT * FROM scott.emp;
🔍 解説:
CREATE TABLE ~ AS SELECT ~ は、既存テーブルのデータを複製して新しいテーブルを作成する構文です。
ここでは scott.emp の内容を元に、テスト用の emp_rman を作成しています。
② RMANでバックアップを取得
rman target /
接続後、以下のコマンドを実行:
BACKUP DATABASE;
🔍 解説:
- このバックアップは、後ほど補助インスタンスで使われます。
RECOVER TABLEを使うためには、リカバリ対象時点より前のRMANバックアップが必要です。
③ 現在のSCNと時刻を記録
SELECT CURRENT_SCN FROM v$database;
SELECT TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS') FROM dual;
🔍 解説:
CURRENT_SCN:現在のSCN(System Change Number)を取得します。復元時に使用します。SYSDATE:現在時刻の記録(参考用)です。
DROP操作の前にこのSCNを記録しておくのがポイントです。
④ テーブルを誤ってDROP(ミスを再現)
DROP TABLE emp_rman;
🔍 解説:
DROP TABLE はテーブルをデータごと完全に削除します。
Flashback Table のようなUNDOでは戻せないため、RMANによる復元が必要になります。
⑤ RMANでテーブル単位のリカバリを実行(SCN指定)
rman target /
接続後、以下のように実行:
RECOVER TABLE test1.emp_rman
UNTIL SCN 123456789
AUXILIARY DESTINATION '/u01/app/oracle/auxdest';
※ 123456789 には、DROPする前に取得したSCNの値を指定してください。
🔍 解説:
| パラメータ | 内容 |
|---|---|
RECOVER TABLE | テーブル単位でリカバリする構文 |
test1.emp_rman | 対象テーブル(スキーマ付き) |
UNTIL SCN | DROPする前のSCNを指定して復元 |
AUXILIARY DESTINATION | 補助インスタンスを作る一時的なディレクトリ。十分な空き容量が必要 |
RMANが自動で以下を実行します:
- 補助DBにバックアップからリストア
- SCN指定までリカバリ
- DROP前の
emp_rmanテーブルをData Pumpでエクスポート - 本番DBに再インポート
- 補助インスタンスの削除
⑥ テーブルの復元確認
SELECT * FROM emp_rman;
🔍 解説:
テーブルが復元され、DROP前のデータが戻っていれば成功です。
SQL> CREATE TABLE emp_rman AS SELECT * FROM scott.emp; ★表を作成
表が作成されました。
SQL> set linesize 100 pagesize 100
SQL> select empno,ename,job,deptno from emp_rman
2 order by deptno;
EMPNO ENAME JOB DEPTNO
---------- ------------------------------ --------------------------- ----------
7839 KING PRESIDENT 10
7782 CLARK MANAGER 10
7934 MILLER CLERK 10
7902 FORD ANALYST 20
7369 SMITH CLERK 20
7566 JONES MANAGER 20
7900 JAMES CLERK 30
7844 TURNER SALESMAN 30
7654 MARTIN SALESMAN 30
7521 WARD SALESMAN 30
7499 ALLEN SALESMAN 30
7698 BLAKE MANAGER 30
12行が選択されました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on 土 3月 22 11:01:47 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
ターゲット・データベース: V19 (DBID=2957249400)に接続されました
RMAN> BACKUP DATABASE; ★バックアップ
backupを25-03-22で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=72 デバイス・タイプ=DISK
チャネルORA_DISK_1: フル・データファイル・バックアップ・セットを開始しています
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイル ファイル番号=00001 名前=/u01/app/oracle/oradata/V19/system01.dbf
入力データファイル ファイル番号=00003 名前=/u01/app/oracle/oradata/V19/sysaux01.dbf
入力データファイル ファイル番号=00004 名前=/u01/app/oracle/oradata/V19/undotbs01.dbf
入力データファイル ファイル番号=00007 名前=/u01/app/oracle/oradata/V19/users01.dbf
チャネルORA_DISK_1: ピース1 (25-03-22)を起動します
チャネルORA_DISK_1: ピース1 (25-03-22)が完了しました
ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kvrd7_1_1_1 タグ=TAG20250322T110159 コメント=NONE
チャネルORA_DISK_1: バックアップ・セットが完了しました。経過時間: 00:00:25
backupを25-03-22で終了しました
Control File and SPFILE Autobackupを25-03-22で開始しています
ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/c-2957249400-20250322-00 コメント=NONE
Control File and SPFILE Autobackupを25-03-22で終了しました
RMAN> exit
Recovery Managerが完了しました。
[oracle@v19single ~]$ sqlplus test1/test1
SQL*Plus: Release 19.0.0.0.0 - Production on 土 3月 22 11:02:38 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 土 3月 22 2025 10:59:42 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> SELECT CURRENT_SCN FROM v$database;
CURRENT_SCN
-----------
2276451 ★現在のSCNを確認
SQL> drop table emp_rman purge; ★表をDROP
表が削除されました。
SQL> exit
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0との接続が切断されました。
[oracle@v19single ~]$ rman target /
Recovery Manager: Release 19.0.0.0.0 - Production on 土 3月 22 11:08:53 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved.
ターゲット・データベース: V19 (DBID=2957249400)に接続されました
RMAN> RECOVER TABLE test1.emp_rman
2> UNTIL SCN 2276451 ★表をDROPする前のSCNを指定
3> AUXILIARY DESTINATION '/u01/app/oracle/auxdest';
recoverを25-03-22で開始しています
リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: SID=72 デバイス・タイプ=DISK
RMAN-05026: 警告: 次の表領域のセットは、指定したPoint-in-Timeへの適用が想定されています
UNDOセグメントがあると予測される表領域のリスト
表領域SYSTEM
表領域UNDOTBS1
自動インスタンスを作成しています(SID='sdxz')
自動インスタンスに使用される初期化パラメータ:
db_name=V19
db_unique_name=sdxz_pitr_V19
compatible=19.0.0
db_block_size=8192
db_files=200
diagnostic_dest=/u01/app/oracle
_pdb_name_case_sensitive=false
_system_trig_enabled=FALSE
sga_target=1472M
processes=200
db_create_file_dest=/u01/app/oracle/auxdest
log_archive_dest_1='location=/u01/app/oracle/auxdest'
#No auxiliary parameter file used
自動インスタンスV19を起動しています
Oracleインスタンスが起動しました
システム・グローバル領域の合計は、 1543500120バイトです。
Fixed Size 8925528バイト
Variable Size 369098752バイト
Database Buffers 1157627904バイト
Redo Buffers 7847936バイト
自動インスタンスが作成されました
メモリー・スクリプトの内容:
{
# set requested point in time
set until scn 2276451;
# restore the controlfile
restore clone controlfile;
# mount the controlfile
sql clone 'alter database mount clone database';
# archive current online log
sql 'alter system archive log current';
}
メモリー・スクリプトを実行しています
実行コマンド: SET until clause
restoreを25-03-22で開始しています
チャネル: ORA_AUX_DISK_1が割り当てられました
チャネルORA_AUX_DISK_1: SID=34 デバイス・タイプ=DISK
チャネルORA_AUX_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_AUX_DISK_1: 制御ファイルをリストア中です
チャネルORA_AUX_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/c-2957249400-20250322-00から読取り中です
チャネルORA_AUX_DISK_1: ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/c-2957249400-20250322-00 タグ=TAG20250322T110224
チャネルORA_AUX_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:01
出力ファイル名=/u01/app/oracle/auxdest/V19/controlfile/o1_mf_mxw6yc53_.ctl
restoreを25-03-22で終了しました
SQL文: alter database mount clone database
SQL文: alter system archive log current
メモリー・スクリプトの内容:
{
# set requested point in time
set until scn 2276451;
# set destinations for recovery set and auxiliary set datafiles
set newname for clone datafile 1 to new;
set newname for clone datafile 4 to new;
set newname for clone datafile 3 to new;
set newname for clone tempfile 1 to new;
# switch all tempfiles
switch clone tempfile all;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile 1, 4, 3;
switch clone datafile all;
}
メモリー・スクリプトを実行しています
実行コマンド: SET until clause
実行コマンド: SET NEWNAME
実行コマンド: SET NEWNAME
実行コマンド: SET NEWNAME
実行コマンド: SET NEWNAME
制御ファイルで一時ファイル1の名前を/u01/app/oracle/auxdest/V19/datafile/o1_mf_temp_%u_.tmpに変更しました
restoreを25-03-22で開始しています
チャネルORA_AUX_DISK_1の使用
チャネルORA_AUX_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_AUX_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_AUX_DISK_1: データファイル00001を/u01/app/oracle/auxdest/V19/datafile/o1_mf_system_%u_.dbfにリストアしています
チャネルORA_AUX_DISK_1: データファイル00004を/u01/app/oracle/auxdest/V19/datafile/o1_mf_undotbs1_%u_.dbfにリストアしています
チャネルORA_AUX_DISK_1: データファイル00003を/u01/app/oracle/auxdest/V19/datafile/o1_mf_sysaux_%u_.dbfにリストアしています
チャネルORA_AUX_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kvrd7_1_1_1から読取り中です
チャネルORA_AUX_DISK_1: ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kvrd7_1_1_1 タグ=TAG20250322T110159
チャネルORA_AUX_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:15
restoreを25-03-22で終了しました
データファイル1はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=4 スタンプ=1196420976 ファイル名=/u01/app/oracle/auxdest/V19/datafile/o1_mf_system_mxw6yk9t_.dbf
データファイル4はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=5 スタンプ=1196420976 ファイル名=/u01/app/oracle/auxdest/V19/datafile/o1_mf_undotbs1_mxw6ykb5_.dbf
データファイル3はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=6 スタンプ=1196420976 ファイル名=/u01/app/oracle/auxdest/V19/datafile/o1_mf_sysaux_mxw6ykb1_.dbf
メモリー・スクリプトの内容:
{
# set requested point in time
set until scn 2276451;
# online the datafiles restored or switched
sql clone "alter database datafile 1 online";
sql clone "alter database datafile 4 online";
sql clone "alter database datafile 3 online";
# recover and open database read only
recover clone database tablespace "SYSTEM", "UNDOTBS1", "SYSAUX";
sql clone 'alter database open read only';
}
メモリー・スクリプトを実行しています
実行コマンド: SET until clause
SQL文: alter database datafile 1 online
SQL文: alter database datafile 4 online
SQL文: alter database datafile 3 online
recoverを25-03-22で開始しています
チャネルORA_AUX_DISK_1の使用
実行中: alter database datafile 7 offline
メディア・リカバリを開始しています
スレッド1 (順序13)のアーカイブ・ログは、ファイル/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_13_1153872185.dbfとしてディスクにすでに存在します
アーカイブ・ログ・ファイル名=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_13_1153872185.dbf スレッド=1 順序=13
メディア・リカバリが完了しました。経過時間: 00:00:00
recoverを25-03-22で終了しました
SQL文: alter database open read only
メモリー・スクリプトの内容:
{
sql clone "create spfile from memory";
shutdown clone immediate;
startup clone nomount;
sql clone "alter system set control_files =
''/u01/app/oracle/auxdest/V19/controlfile/o1_mf_mxw6yc53_.ctl'' comment=
''RMAN set'' scope=spfile";
shutdown clone immediate;
startup clone nomount;
# mount database
sql clone 'alter database mount clone database';
}
メモリー・スクリプトを実行しています
SQL文: create spfile from memory
データベースがクローズしました
データベースがディスマウントされました。
Oracleインスタンスがシャットダウンしました
補助データベースに接続されました(開始されていません)
Oracleインスタンスが起動しました
システム・グローバル領域の合計は、 1543500120バイトです。
Fixed Size 8925528バイト
Variable Size 369098752バイト
Database Buffers 1157627904バイト
Redo Buffers 7847936バイト
SQL文: alter system set control_files = ''/u01/app/oracle/auxdest/V19/controlfile/o1_mf_mxw6yc53_.ctl'' comment= ''RMAN set'' scope=spfile
Oracleインスタンスがシャットダウンしました
補助データベースに接続されました(開始されていません)
Oracleインスタンスが起動しました
システム・グローバル領域の合計は、 1543500120バイトです。
Fixed Size 8925528バイト
Variable Size 369098752バイト
Database Buffers 1157627904バイト
Redo Buffers 7847936バイト
SQL文: alter database mount clone database
メモリー・スクリプトの内容:
{
# set requested point in time
set until scn 2276451;
# set destinations for recovery set and auxiliary set datafiles
set newname for datafile 7 to new;
# restore the tablespaces in the recovery set and the auxiliary set
restore clone datafile 7;
switch clone datafile all;
}
メモリー・スクリプトを実行しています
実行コマンド: SET until clause
実行コマンド: SET NEWNAME
restoreを25-03-22で開始しています
チャネル: ORA_AUX_DISK_1が割り当てられました
チャネルORA_AUX_DISK_1: SID=37 デバイス・タイプ=DISK
チャネルORA_AUX_DISK_1: データファイル・バックアップ・セットのリストアを開始しています
チャネルORA_AUX_DISK_1: バックアップ・セットからリストアするデータファイルを指定しています
チャネルORA_AUX_DISK_1: データファイル00007を/u01/app/oracle/auxdest/SDXZ_PITR_V19/datafile/o1_mf_users_%u_.dbfにリストアしています
チャネルORA_AUX_DISK_1: バックアップ・ピース/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kvrd7_1_1_1から読取り中です
チャネルORA_AUX_DISK_1: ピース・ハンドル=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/013kvrd7_1_1_1 タグ=TAG20250322T110159
チャネルORA_AUX_DISK_1: バックアップ・ピース1がリストアされました
チャネルORA_AUX_DISK_1: リストアが完了しました。経過時間: 00:00:01
restoreを25-03-22で終了しました
データファイル7はデータファイル・コピーに切り替えられました
入力データファイル・コピー レコードID=8 スタンプ=1196421024 ファイル名=/u01/app/oracle/auxdest/SDXZ_PITR_V19/datafile/o1_mf_users_mxw70hjo_.dbf
メモリー・スクリプトの内容:
{
# set requested point in time
set until scn 2276451;
# online the datafiles restored or switched
sql clone "alter database datafile 7 online";
# recover and open resetlogs
recover clone database tablespace "USERS", "SYSTEM", "UNDOTBS1", "SYSAUX" delete archivelog;
alter clone database open resetlogs;
}
メモリー・スクリプトを実行しています
実行コマンド: SET until clause
SQL文: alter database datafile 7 online
recoverを25-03-22で開始しています
チャネルORA_AUX_DISK_1の使用
メディア・リカバリを開始しています
スレッド1 (順序13)のアーカイブ・ログは、ファイル/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_13_1153872185.dbfとしてディスクにすでに存在します
アーカイブ・ログ・ファイル名=/u01/app/oracle/product/19.0.0/dbhome_1/dbs/arch1_13_1153872185.dbf スレッド=1 順序=13
メディア・リカバリが完了しました。経過時間: 00:00:00
recoverを25-03-22で終了しました
データベースがオープンしました。
メモリー・スクリプトの内容:
{
# create directory for datapump import
sql "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/u01/app/oracle/auxdest''";
# create directory for datapump export
sql clone "create or replace directory TSPITR_DIROBJ_DPDIR as ''
/u01/app/oracle/auxdest''";
}
メモリー・スクリプトを実行しています
SQL文: create or replace directory TSPITR_DIROBJ_DPDIR as ''/u01/app/oracle/auxdest''
SQL文: create or replace directory TSPITR_DIROBJ_DPDIR as ''/u01/app/oracle/auxdest''
表のエクスポートを実行しています...
EXPDP> "SYS"."TSPITR_EXP_sdxz_oFuE"を起動しています:
EXPDP> オブジェクト型TABLE_EXPORT/TABLE/TABLE_DATAの処理中です
EXPDP> オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
EXPDP> オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/MARKERの処理中です
EXPDP> オブジェクト型TABLE_EXPORT/TABLE/TABLEの処理中です
EXPDP> . . "TEST1"."EMP_RMAN" 8.703 KB 12行がエクスポートされました
EXPDP> マスター表"SYS"."TSPITR_EXP_sdxz_oFuE"は正常にロード/アンロードされました
EXPDP> ******************************************************************************
EXPDP> SYS.TSPITR_EXP_sdxz_oFuEに設定されたダンプ・ファイルは次のとおりです:
EXPDP> /u01/app/oracle/auxdest/tspitr_sdxz_30059.dmp
EXPDP> ジョブ"SYS"."TSPITR_EXP_sdxz_oFuE"が土 3月 22 11:11:19 2025 elapsed 0 00:00:36で正常に完了しました
エクスポートが完了しました
メモリー・スクリプトの内容:
{
# shutdown clone before import
shutdown clone abort
}
メモリー・スクリプトを実行しています
Oracleインスタンスがシャットダウンしました
表のインポートを実行しています...
IMPDP> マスター表"SYS"."TSPITR_IMP_sdxz_xFvp"は正常にロード/アンロードされました
IMPDP> "SYS"."TSPITR_IMP_sdxz_xFvp"を起動しています:
IMPDP> オブジェクト型TABLE_EXPORT/TABLE/TABLEの処理中です
IMPDP> オブジェクト型TABLE_EXPORT/TABLE/TABLE_DATAの処理中です
IMPDP> . . "TEST1"."EMP_RMAN" 8.703 KB 12行がインポートされました
IMPDP> オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICSの処理中です
IMPDP> オブジェクト型TABLE_EXPORT/TABLE/STATISTICS/MARKERの処理中です
IMPDP> ジョブ"SYS"."TSPITR_IMP_sdxz_xFvp"が土 3月 22 11:12:00 2025 elapsed 0 00:00:31で正常に完了しました
インポートが完了しました
自動インスタンスを削除しています
自動インスタンスが削除されました
補助インスタンス・ファイル/u01/app/oracle/auxdest/V19/datafile/o1_mf_temp_mxw6z20s_.tmpを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/SDXZ_PITR_V19/onlinelog/o1_mf_3_mxw70ltw_.logを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/SDXZ_PITR_V19/onlinelog/o1_mf_2_mxw70l3f_.logを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/SDXZ_PITR_V19/onlinelog/o1_mf_1_mxw70kp4_.logを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/SDXZ_PITR_V19/datafile/o1_mf_users_mxw70hjo_.dbfを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/V19/datafile/o1_mf_sysaux_mxw6ykb1_.dbfを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/V19/datafile/o1_mf_undotbs1_mxw6ykb5_.dbfを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/V19/datafile/o1_mf_system_mxw6yk9t_.dbfを削除しました
補助インスタンス・ファイル/u01/app/oracle/auxdest/V19/controlfile/o1_mf_mxw6yc53_.ctlを削除しました
補助インスタンス・ファイルtspitr_sdxz_30059.dmpを削除しました
recoverを25-03-22で終了しました
RMAN> exit
Recovery Managerが完了しました。
[oracle@v19single ~]$ sqlplus test1/test1
SQL*Plus: Release 19.0.0.0.0 - Production on 土 3月 22 11:12:16 2025
Version 19.21.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
最終正常ログイン時間: 土 3月 22 2025 11:08:17 +09:00
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.0.0
に接続されました。
SQL> set linesize 100 pagesize 100
SQL> select empno,ename,job,deptno from emp_rman ★表が復元されている
2 order by deptno;
EMPNO ENAME JOB DEPTNO
---------- ------------------------------ --------------------------- ----------
7839 KING PRESIDENT 10
7782 CLARK MANAGER 10
7934 MILLER CLERK 10
7902 FORD ANALYST 20
7369 SMITH CLERK 20
7566 JONES MANAGER 20
7900 JAMES CLERK 30
7844 TURNER SALESMAN 30
7654 MARTIN SALESMAN 30
7521 WARD SALESMAN 30
7499 ALLEN SALESMAN 30
7698 BLAKE MANAGER 30
12行が選択されました。
✅ 注意点まとめ
| 項目 | 内容 |
|---|---|
| バージョン要件 | Oracle 12c以降(Enterprise Edition) |
| バックアップ要件 | DROP前の時点でRMANバックアップが必要 |
| SCN取得タイミング | DROP前に必ず CURRENT_SCN を確認・記録しておくこと |
| 補助領域 | AUXILIARY DESTINATION に十分な空き容量が必要 |
📌 よく使う構文の補足
🔸 CURRENT_SCNの取得
SELECT CURRENT_SCN FROM v$database;
SCN(System Change Number)は、Oracleで「ある瞬間」を正確に表す番号です。
時刻指定よりも正確に復元ポイントを制御できます。
📚 まとめ:DROPされたテーブルの復元手順(SCN指定)
| 手順 | 内容 |
|---|---|
| 1 | テーブルを作成(テスト環境) |
| 2 | RMANで BACKUP DATABASE を取得 |
| 3 | SCNと現在時刻を記録 |
| 4 | DROP TABLE で誤削除を再現 |
| 5 | RECOVER TABLE(SCN指定)を実行 |
| 6 | テーブルが復元されたことを確認! |
🗒 この方法が活きる場面
- 誤って
DROP TABLEを実行してしまったとき - アプリやスクリプトが意図せずテーブルを削除したとき
- リサイクルビンを無効化していて Flashback Table が使えないとき
[参考]
Oracle Database バックアップおよびリカバリ・ユーザーズ・ガイド 19c




コメント