ついに、Oracle10gになってDROPしてしまったテーブルを復活できるようになりました。(フラッシュリカバリの進化形ですね)
間違って「SAMPLE」テーブルをDROPしてしまったとします。
DBA権限を持つユーザ(SYSTEMとか)で以下のSQL実行します。
↓のSQLはOracleの「ゴミ箱」を表示します。(NLSSORT関数のくだりは、大文字/小文字を無視する指定です)
select original_name, type, ts_name, droptime, dropscn, object_name, owner
from dba_recyclebin
where NLSSORT(owner, 'NLS_SORT=BINARY_CI') = NLSSORT('taipei_neko', 'NLS_SORT=BINARY_CI')
original_name | type | ts_name | droptime | dropscn | object_name | owner |
SAMPLE | TABLE | USERS | 2008-02-23:18:29:03 | 629095 | BIN$TxcezCXaS4iFz2XLZVvS5Q==$0 | TAIPEI_NEKO |
ゴミ箱に残っています。
では、これを復活します。「TAIPEI_NEKO」ユーザで以下のSQLを実行します。
flashback table sample to before drop
もう一度↓を実行しても、先ほど表示されたSAMPLEテーブルのデータは表示されません。
SAMPLEテーブルは復活しました。
select original_name, type, ts_name, droptime, dropscn, object_name, owner
from dba_recyclebin
where NLSSORT(owner, 'NLS_SORT=BINARY_CI') = NLSSORT('taipei_neko', 'NLS_SORT=BINARY_CI')
ただし、SYSTEM表領域のテーブル、ローカル表領域以外のテーブル、ファイングレイン監査・
仮想プライベートデータベース(VPD)が使用されているテーブルは対象外です。