为什么 Oracle DROP 用户级联不从磁盘中删除用户的所有内存?



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

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

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

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

但是我也打开了包含.DBF文件的文件夹,并且我注意到即使Oracle SQL Developer界面告诉我上述两个命令都成功了,也不会删除.DBF文件。

为了

从 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文件。

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

不要直接从文件系统中删除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>;

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

最新更新