【问题标题】:How can I delete the users datafile in Oracle using SQL?如何使用 SQL 删除 Oracle 中的用户数据文件?
【发布时间】:2015-01-29 22:30:17
【问题描述】:

我已尝试自行删除数据文件,但出现此错误。

SQL> alter tablespace USERS drop datafile '/u01/app/oracle/oradata/orcl/users01.dbf';
alter tablespace USERS drop datafile '/u01/app/oracle/oradata/orcl/users01.dbf'
*
ERROR at line 1:
ORA-03261: the tablespace USERS has only one file

我也尝试过使表空间脱机并删除整个表空间,但这也不起作用。

SQL> drop tablespace users including contents and datafiles;
drop tablespace users including contents and datafiles
*
ERROR at line 1:
ORA-12919: Can not drop the default permanent tablespace

编辑:这是用于模拟我将要恢复的数据文件故障的分配。我会手动删除它,但作业要求我使用 SQL。

【问题讨论】:

  • "不能删除默认的永久表空间" 很清楚不是吗?您需要先将不同的表空间设为默认表空间,然后才能删除 USERS
  • 一个(或多个)用户将USERS 表空间设置为默认表空间。您需要先更改它,然后才能删除表空间。
  • 我只想删除数据文件而不是整个表空间来模拟硬件故障。
  • 在该表空间中创建另一个文件,然后首先删除要删除的文件。如果任务是删除和恢复 1 个文件,那应该会很好。

标签: oracle ddl tablespace


【解决方案1】:

由于 USERS 是默认表空间,因此您不能删除它的任何数据文件,并且会收到错误 ORA-12919。 解决方法是创建另一个表空间,然后更改默认表空间:

SQL> CREATE TABLESPACE USERS_TEMP DATAFILE '/u01/app/oracle/oradata/orcl/users_temp_01.dbf' size 10M AUTOEXTEND ON;
SQL>alter database default tablespace USERS_TEMP;

现在您可以删除用户了:

SQL>DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;

要删除位于 'app\Ora11gHome\oradata\someName' 上的数据文件,您必须关闭数据库服务。打开 Oracle Administration Assistant 并停止服务,现在您可以删除该文件了。

【讨论】:

    【解决方案2】:

    如果您只想删除数据文件以模拟硬件故障,则可以简单地从机器中删除它们。

    您可以使用一个简单的查询知道您的数据文件存储在哪里:

    select name
    from V$DATAFILE;
    

    这将给出所有数据文件的路径。

    编辑:为了模拟一个更酷的系统故障以确保您的备份脚本或您正在测试的任何东西正常工作,您还可能破坏数据(打开一个文件并写一些随机的乱码在里面)

    【讨论】:

    • 是的,这就是我最终所做的。我们的导师意识到这不像一条 SQL 语句那么简单,所以他说我们可以手动删除它。
    猜你喜欢
    • 2015-10-31
    • 2010-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多