web-dev-qa-db-ja.com

Oracle DROP USER CASCADEがユーザーの残りをすべてディスクから削除しないのはなぜですか?

Oracle 11gR2データベースから特定のユーザーの残りをすべて削除する必要があります。これは、ユーザーを1つずつ削除するだけでなく、.dbfファイルなど、ディスク上のすべての物理的な残骸に加えて、そのユーザーに関連付けられているすべてのオブジェクトを削除することも意味します。

このための構文を提案するいくつかの記事を読み、ユーザーごとに次の2行のシリーズに落ち着きました。

DROP USER <username> CASCADE;
DROP TABLESPACE <username> INCLUDING CONTENTS AND DATAFILES;  

次に、SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS;と入力し、特定のユーザー名のUSERが結果に含まれていないことを確認しました。

しかし、.DBFファイルを含むフォルダも開いているので、Oracle SQL Developerインターフェイスで上記の2つのコマンドの両方が通知されても、.DBFファイルは削除されません。成功しました。

Oracle 11g R2データベースからユーザーとそれに関連するスキーマなどの残りをすべて削除するには、どのような特定の構文またはその他のアクションを実行する必要がありますか?


ONGOING RESEARCH:


@EliasGarciaのアプローチを読んだ後、OPの前のコマンドで使用されたのと同じユーザー名に対して彼の最初のコマンドselect tablespace_name from dba_data_files where file_name = 'file_including_path'を試しました。しかし、私のOPで上記の2つのコマンドによって表スペースが削除されたため、このクエリは結果を生成しませんでした。

ユーザーとユーザーに関連するすべてのオブジェクトも削除する必要があることを考えると、誰かがOPアプローチを@EliasGarciaのアプローチと組み合わせる方法を教えてもらえますか?たとえば、OPはDROP USER username CASCADE INCLUDING CONTENTS AND DATAFILES;のようなものを要求しています

上記のコマンドを実行した後、単に.dbfファイルを削除することを躊躇します。

5
HereAndThere

データファイルは、ユーザーではなくテーブルスペースに割り当てられます。ユーザーを削除すると、テーブルなどがテーブルスペースから削除されますが、基盤となるストレージは影響を受けません。

ファイルシステムからdbfファイルを直接削除しないでください。データベースが混乱します。それらを削除するには、次のステートメントを使用して、ファイルが属するテーブルスペースを見つけます。

select tablespace_name
from   dba_data_files
where  file_name = <file name with full path>;

次に、テーブルスペースを削除してファイルを削除できます。

drop tablespace <tablespace_name> including contents and datafiles;

ただし、これを行う前に、他のユーザーの表領域にまだ割り当てられているオブジェクトがないことを確認する必要があります。これは、次を実行することで見つけることができます。

select * from dba_segments
where  tablespace_name = <tablespace to drop>;

これで何かが返される場合、テーブルスペースを削除する前にオブジェクトを保持する場合は、オブジェクトを別のテーブルスペースに移動します。

8
Elias Garcia