【问题标题】:Why isn't Oracle DROP USER CASCADE removing all remants of a user from disk?为什么 Oracle DROP USER CASCADE 不从磁盘中删除用户的所有残余?
【发布时间】:2016-06-10 09:56:53
【问题描述】:

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

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

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

然后我输入 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 文件。

【问题讨论】:

    标签: sql oracle oracle11g oracle-sqldeveloper


    【解决方案1】:

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

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

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

    【讨论】:

    • 您的第一个命令 ``select tablespace_name from dba_data_files where file_name = 'file_include_path'` 没有产生任何结果,因为我的 OP 中显示的两个命令删除了表空间。鉴于我必须删除用户以及与用户相关的所有对象,您能否展示如何将 OP 方法与您的方法相结合?;
    • OP 要求类似DROP USER username CASCADE INCLUDING CONTENTS AND DATAFILES;
    • Oracle 不会删除数据文件,尽管including 子句中有语法。如果您删除了表空间,您可以使用操作系统手动删除它,或者您可以简单地使用:CREATE SMALLFILE TABLESPACE dev_01 DATAFILE 'C:\Oradata\db1\devdata\dev_01.dbf' SIZE 500M REUSE; 这将重用现有文件(如果存在)。
    • 我想彻底消除该文件,但我需要以不会导致问题的方式执行此操作。您是在说1.) manually delete this one .dbf 文件,因为它的表空间已经消失,然后 2.) 为其他表空间运行命令,然后是 OP 级联用户删除的命令?
    • 请注意,您的第二个命令实际上在我的 OP 中。此外,在不同的表空间上运行命令也不会从磁盘中删除 .dbf 文件,因此您还没有真正添加任何内容。
    猜你喜欢
    • 1970-01-01
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    • 2016-01-12
    • 2021-10-04
    • 2016-07-29
    • 1970-01-01
    • 2020-04-26
    相关资源
    最近更新 更多