Oracle10gから、リサイクルビン(Recycle Bin:再利用する瓶)という
ものが導入され、テーブル削除が面倒になった。[2005-05-26]
(Flashback Dropという機能らしい)
今まではテーブルをDROPすると即テーブルが無くなったが、10gでは(デフォルトでは)リサイクルビンに入ることになり、そこから削除しないと消えない。
リサイクルビンに入っているテーブルは、user_tablesで見ると「BIN」で始まる変なテーブルとして見られる。
この名前を元に、元のテーブルに戻したり
完全に削除(PURGE)したりする。(リサイクルビン管理となったテーブルはDROPできない)
|
|
リサイクルビンに入れられたテーブルは、BINから始まるテーブル名になっている。
SQL> select table_name from user_tables where table_name like'BIN%'; TABLE_NAME ------------------------------ BIN$KGWUZUW7RLaF/azn7fs5Nw==$0
SQL*Plusのshowコマンドでリサイクルビンの内容を照会することが出来る。
SQL> show recyc ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- TBL_HOGE BIN$KGWUZUW7RLaF/azn7fs5Nw==$0 TABLE 2005-05-26:22:14:31
※SQL*PlusのバージョンがOracle10gより前の場合はshowコマンドでは照会できない。
また、user_recyclebinやall_recyclebinビュー、あるいはrecyclebinシノニムで確認することも出来る。[/2010-02-19]
select * from recyclebin;
SQL> select object_name,original_name,type from user_recyclebin; OBJECT_NAME ORIGINAL_NAME TYPE ------------------------------ -------------------------------- ------------------------- BIN$G1FeH97iTRWpR6GqWaneLQ==$0 PK_TBL_HOGE INDEX BIN$KGWUZUW7RLaF/azn7fs5Nw==$0 TBL_HOGE TABLE
リサイクルビンに入れられたテーブルを復元する(元に戻す)方法。
flashback table 削除前テーブル名 to before drop; flashback table "BIN〜" to before drop;
削除前のテーブル名を指定した場合、同名のテーブルが何度も削除されていたなら、一番直近のものが復元される。[2010-02-19]
SQL> flashback table "BIN$KGWUZUW7RLaF/azn7fs5Nw==$0" to before drop; フラッシュバックが完了しました。
リサイクルビンに入れられたテーブルを完全に削除(領域を解放)する方法。
purge table 削除前テーブル名; purge table "BIN〜"; purge user_recyclebin; purge recyclebin;
削除前のテーブル名を指定した場合、同名のテーブルが何度も削除されていたなら、一番古い1件だけが削除される。[2010-02-19]
Oracle Database SQL言語リファレンスのSQL文: PURGESQL> purge user_recyclebin; リサイクルビンがパージされました。
drop table文においてpurge句を指定すると、リサイクルビンに入れられずに直接削除される。
drop table テーブル名 purge;
SQL> drop table tbl_hoge purge; 表が削除されました。
SQL*PlusがOracle9iであっても、Oracle10gのDBに接続することが出来る。[2007-12-13]
しかし10g独自の構文は、9iのSQL*Plusではエラーになる。
つまりshow recyclebin・flashback・purgeは使えない。
ただしuser_objectsを使う照会は可。
(「drop table テーブル名 purge;
」も出来る…ちょっと不思議)