DROP TABLE、FLASHBACK TABLE
テーブル定義の削除と復活
もし作成したテーブルを誤って作成した場合や不要になった場合に以下のとおりに実行する。
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をパーツ化して記述、保存しておくことで再利用、メンテナンス性が格段に向上する。
関連事項