Oracle Databaseを使用していますが、ドロップおよび削除コマンドについて少し混乱しています。実際、私にとっては両方とも同じことをしています。データベースからスキーマを持つテーブルを削除します。これら2つの主な違いは何ですか?
通常、テーブルは、削除されるとごみ箱(Oracle 10gの時点)に移動されます。ただし、パージ修飾子も指定されている場合、テーブルはデータベースから(完全に)回復不能に削除されます。
Oracle Database 10gでは、表を削除するための新機能が導入されています。テーブルを削除しても、データベースはテーブルに関連付けられたスペースをすぐには解放しません。むしろ、データベースはテーブルの名前を変更し、それをごみ箱に入れます。誤ってテーブルを削除した場合は、後でFLASHBACK TABLEステートメントを使用して復元できます。 DROP TABLEステートメントの発行時にテーブルに関連付けられたスペースをすぐに解放する場合は、次のようにPURGE句を含めます。 DROP TABLE従業員のパージ; PURGEを指定するのは、1つの手順でテーブルを削除し、それに関連付けられているスペースを解放する場合のみです。 PURGEを指定すると、データベースはテーブルとその依存オブジェクトをごみ箱に入れません。注:PURGE句を使用してDROP TABLEステートメントをロールバックすることはできません。また、PURGE句を使用して削除した場合、テーブルを回復することはできません。この機能は、以前のリリースでは使用できませんでした。
Asktom記事へのリンク: http://asktom.Oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:3254353804142
基本的にOracle10では、ドロップされたすべてのテーブルは、ドロップできる場所からごみ箱に入ります。パージでは、基本的にごみ箱の部分をスキップし、アクションを元に戻すオプションなしでテーブルを削除します。
SQL>drop table table_name;
このコマンドは、table_nameという名前のテーブルを削除しますが、内部的にはOracleのごみ箱に移動します(これは、 Delete Windows OSのキー)。
利点:
1。必要に応じて、上記の削除されたテーブルを復元できます。
欠点:
1。それでもある程度のメモリを占有します。
SQL>drop table table_name purge;
このコマンドは、テーブルtable_nameをデータベースから完全に削除します(これは、 Shift + Delete Windows OSのキー)。
利点と欠点は、上記の逆です。
次の文は、テーブルを削除してごみ箱に入れます。
DROP TABLE emp_new;
次のステートメントは、テーブルを削除し、ごみ箱からフラッシュします。
DROP TABLE emp_new PURGE;
@Randyコメントから明らかなように、追加するだけです。
(1)テーブルTablenameの削除:
purge
がない場合、テーブルはRECYCLEBINまたはUSER_RECYCLEBINにあります。コマンドFLASHBACK
を使用して復元できます。これは、Windowsデスクトップで削除したファイルに似ており、ごみ箱に移動し、元に戻すことができます。
(2)ドロップテーブルテーブル名パージ:
Drop
がPurge
とともに指定された場合、そのテーブルスペースは解放され、復元できません。 (デスクトップでShift + Deleteのように)
次の例は実際的な例を示します:
create table test_client (val_cli integer, status varchar2(10));
drop table test_client ;
select tablespace_name from all_tables where owner = 'test' and table_name = 'TEST_CLIENT';
SELECT * FROM RECYCLEBIN where ORIGINAL_NAME='TEST_CLIENT';
SELECT * FROM USER_RECYCLEBIN where ORIGINAL_NAME='TEST_CLIENT';
FLASHBACK TABLE test_client TO BEFORE DROP;
select tablespace_name from all_tables where owner = 'test' and table_name = 'TEST_CLIENT';
drop table test_client purge;
select tablespace_name from all_tables where owner = 'test' and table_name = 'TEST_CLIENT';