Oracle活用 テーブルの削除と救出
夏休み初日を自堕落に過ごしてしまい、罪悪感が半端ない。
この調子でいったら、「あっ!」という間に夏休み終了だよ…ふえぇ。
明日はちゃんと活動します!
さて、Oracle10gからごみ箱機能というものが追加されて、
テーブルの削除 = 取り返しのつかない所業 ではなくなりました。
でも実際あんまり仕事ではテーブルの削除なんてしないので、
今日はテーブルの削除と、救出について勉強してみました。
最初にこんな感じのテーブルを作って何件かデータを入れておく。
BOONUS テーブル
列名 | データ型 | サイズ | 制約 |
---|---|---|---|
DEPARTMENT_ID | NUMBER | 4 | NOT NULL |
RATE | NUMBER | 5,2 |
21:01:25 SQL> CREATE TABLE BONUS ( 21:01:37 2 DEPARTMENT_ID NUMBER(4) NOT NULL, 21:01:37 3 RATE NUMBER(5,2), 21:01:37 4 CONSTRAINT PK_BONUS PRIMARY KEY(DEPARTMENT_ID) 21:01:37 5 ) TABLESPACE USERS; 表が作成されました。 21:01:37 SQL> select * from bonus; レコードが選択されませんでした。 21:01:56 SQL> INSERT INTO BONUS VALUES (10,2); 1行が作成されました。 21:05:11 SQL> INSERT INTO BONUS VALUES (20,1.8); 1行が作成されました。 21:05:11 SQL> INSERT INTO BONUS VALUES (100,1.92); 1行が作成されました。 21:05:11 SQL> commit; コミットが完了しました。 21:05:23 SQL> select * from bonus; DEPARTMENT_ID RATE ------------- ---------- 10 2 20 1.8 100 1.92 21:05:26 SQL>
早速テーブルを削除してみる。ドキドキ…
21:05:26 SQL> DROP TABLE BONUS; 表が削除されました。 21:06:03 SQL> select * from bonus; select * from bonus * 行1でエラーが発生しました。: ORA-00942: 表またはビューが存在しません。 21:06:08 SQL>
こんなの会社で出てきちゃった日にはもう土下座して退職願を提出だよ…
怖い怖い
ここでゴミ箱をのぞくコマンドを…
21:06:08 SQL> SHOW RECYCLEBIN ORIGINAL NAME RECYCLEBIN NAME OBJECT TYPE DROP TIME ---------------- ------------------------------ ------------ ------------------- BONUS BIN$nuntDfzGSim+PLpJ9JzSOA==$0 TABLE 2015-08-08:21:06:03 21:06:32 SQL>
いたよ!いた!いた!!
削除した日時もちゃんと載ってるんだね。
ちなみに「Oracle Database 11g Express Editionのスタート・ガイド 」で見てみると、
こんな感じ。
BIN~って名前になるんだね。
PRIMARY_KEYも一緒にゴミ箱にいるみたい。
ではフラッシュバックで戻してみます!
21:06:32 SQL> FLASHBACK TABLE BONUS TO BEFORE DROP ; フラッシュバックが完了しました。 21:07:08 SQL>
たったこれだけ。
これだけ???
21:07:08 SQL> select * from bonus; DEPARTMENT_ID RATE ------------- ---------- 10 2 20 1.8 100 1.92 21:07:12 SQL>
ちゃんと中身もありました!よかったね!!
ただし、削除のときにゴミ箱に入れず完全削除をすると
当たり前だけど、戻せませんでした。
21:07:12 SQL> DROP TABLE BONUS CASCADE CONSTRAINT PURGE; 表が削除されました。 21:08:14 SQL> select * from bonus; select * from bonus * 行1でエラーが発生しました。: ORA-00942: 表またはビューが存在しません。 21:08:16 SQL> SHOW RECYCLEBIN 21:08:18 SQL>
ゴミ箱にない!!!!!
まとめ:テーブル削除はまずゴミ箱に。そのあとでゴミ箱を空にしよう。
テーブルを削除する
DROP TABLE [テーブル名] |
制約も含めてテーブルを削除する
DROP TABLE [テーブル名] CASCADE CONSTRAINT; |
制約も含めてゴミ箱に入れずに完全に削除する
DROP TABLE [テーブル名] CASCADE CONSTRAINT PURGE; |
PURGE恐るべし!!!
ゴミ箱を空にする
PURGE RECYCLEBIN ; |