如何使用 SQL 删除 Oracle 中的用户数据文件?

How can I delete the users datafile in Oracle using SQL?

我曾尝试单独删除数据文件,但出现此错误。

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.

如果您只想删除数据文件来模拟硬件故障,那么您只需将它们从机器中删除即可。

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

select name
from V$DATAFILE;

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

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

由于 USERS 是默认表空间,您不能删除它的任何数据文件,否则会出现错误 ORA-12919。 解决方案是创建另一个表空间,然后更改默认表空间:

SQL> 创建表空间 USERS_TEMP DATAFILE '/u01/app/oracle/oradata/orcl/users_temp_01.dbf' size 10M AUTOEXTEND ON;<br> SQL>改变数据库默认表空间USERS_TEMP;

现在您可以删除USERS:

SQL>DROP TABLESPACE USERS INCLUDING CONTENTS AND DATAFILES;

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