为什么Oracle DROP USER CASCADE不能从磁盘中删除用户的所有重新映射?

Her*_*ere 5 sql oracle oracle11g oracle-sqldeveloper

我需要从Oracle 11g R2数据库中删除特定用户的所有残余.这意味着不仅要逐个删除用户,还要删除与该用户关联的所有对象,以及磁盘上的所有物理残余,例如.dbf文件.

我阅读了几篇建议语法的文章,并针对每个用户确定了以下两行系列:

DROP USER <username> CASCADE;
DROP TABLESPACE <username> INCLUDING CONTENTS AND DATAFILES;  
Run Code Online (Sandbox Code Playgroud)

然后我输入SELECT USERNAME, DEFAULT_TABLESPACE FROM DBA_USERS;并确认具有特定用户名的USER未包含在结果中.

但我也有一个包含文件夹.DBF的文件打开,我注意到了.DBF,即使的Oracle SQL Developer接口告诉我,这两种以上两个命令的成功文件不会被删除.

为了从Oracle 11g R2数据库中删除用户及其关联模式等的每个残余,我需要采取哪些特定的语法或其他操作?


正在进行的研究:


在阅读了@ EliasGarcia的方法之后,我尝试了他的第一个命令select tablespace_name from dba_data_files where file_name = 'file_including_path',用于OP中前面命令中使用的相同用户名.但是这个查询没有产生任何结果,因为我的OP中上面显示的两个命令删除了表空间.

鉴于我必须删除用户以及与用户相关的所有对象,有人可以展示如何将OP方法与@EliasGarcia的方法结合起来吗?例如,OP正在寻求类似的东西DROP USER username CASCADE INCLUDING CONTENTS AND DATAFILES;

.dbf在运行上述命令后,我对删除文件犹豫不决.

Eli*_*cia 8

数据文件分配给表空间,而不是用户.删除用户将从表空间中删除表等,但底层存储不受影响.

不要直接从文件系统中删除dbf文件,否则会使数据库陷入混乱.要删除它们,请使用以下语句查找文件所属的表空间:

select tablespace_name
from   dba_data_files
where  file_name = <file name with full path>;
Run Code Online (Sandbox Code Playgroud)

然后,您可以通过删除表空间来删除​​文件:

drop tablespace <tablespace_name> including contents and datafiles;
Run Code Online (Sandbox Code Playgroud)

在执行此操作之前,您应该验证是否仍然没有为其他用户分配给表空间的任何对象.您可以通过运行找到:

select * from dba_segments
where  tablespace_name = <tablespace to drop>;
Run Code Online (Sandbox Code Playgroud)

如果这返回任何内容,如果要在删除表空间之前保留它们,请将对象移动到另一个表空间.