SQL 入門 > テーブル削除と削除の取り消し

DROP TABLE、FLASHBACK TABLE

テーブル定義の削除と復活

もし作成したテーブルを誤って作成した場合や不要になった場合に以下のとおりに実行する。

  • USER_MASTER 表を削除

SQL*Plus にて以下の DDL 文を実行。

DROP TABLE USER_MASTER CASCADE CONSTRAINTS ;

なお Oracle10g から「ごみ箱」の機能が追加され DROP TABLE =取り返しのつかない削除ではない。(※)
従来通り、ごみ箱に入れず即座に削除する場合は PURGE 句を付ける

DROP TABLE USER_MASTER CASCADE CONSTRAINTS PURGE ;

(※) 但し SYSTEM 表領域 に表を作成していた場合には即座に削除されるので例外。(Oracle 10g 時点)
補足:SYS やSYSTEM ユーザーのデフォルトの表領域は システム表領域 に設定されている。

  • 消してしまった RECYCLEBIN にあるテーブル USER_MASTER を元に戻したい場合には
FLASHBACK TABLE USER_MASTER TO BEFORE DROP ;

ちなみにユーザー「ごみ箱」の全体を空にするには

PURGE RECYCLEBIN ;
-- システム「ごみ箱」の全体を空にする
PURGE DBA_RECYCLEBIN ;

とする。

なお「ごみ箱」に入ってるテーブルは、BIN$〜 という名前で置き換えられていて

「BIN$5cFTJkQu1cngMKjA8AAu0w==$0」

のようなテーブル*もどき*で存在している。

アクセスしようとすると ORA-38301: リサイクルビンのオブジェクトにDDL/DMLを実行できません。 エラーが発生する。

ゴミ箱にあるテーブル名を見るには SQL*Plus で

SHOW RECYCLEBIN

を実行することで見ることが可能。

FLASHBACK DROP の使用可能エディションは Oracle 10g Standard 以上
⇒ オラクル通信 (http://www.oracle.co.jp/2shin/no103/o96otn-j.html 外部リンク)

テーブル定義を保存しておく習慣を…

例えば テーブル定義を ファイル名.sql というファイルに保存しておく。

/***********************************
 *  利用者マスタの削除と作成を行う
 *    作成者:      ○× △□
 *    作成日:      2004/XX/XX 
 *
 *    更新者:      ○× △◇
 *    最終更新日:  2004/XX/XX 
 **********************************/
--
--  利用者マスタの削除  / 制約(プリマリキー)も同時削除する /
DROP TABLE USER_MASTER CASCADE CONSTRAINTS;
-- 
--  PURGEは 10gからの機能なので DROP 文とは別に実行
PURGE TABLE USER_MASTER;
--
--  利用者マスタの作成
CREATE TABLE USER_MASTER
(
   USER_ID           VARCHAR2(8) NOT NULL,
   DEPT_NO           VARCHAR2(3),
   USER_NAME         VARCHAR2(32),
   CREATED_ON        DATE DEFAULT SYSDATE,
   MODIFIED_ON       DATE
);
--
-- プライマリキーの作成
ALTER TABLE USER_MASTER ADD CONSTRAINT USER_MASTER_PK PRIMARY KEY (USER_ID) ;

このように、各DDLをパーツ化して記述、保存しておくことで再利用、メンテナンス性が格段に向上する。



関連事項


日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ Oracle のライセンスがわからない…
Oracle Direct (ネットで聞いても最後はここで要確認)