ORA-01543 表示尝试创建已存在的表空间,需先清理冲突:临时表空间须先切换默认并迁移用户;普通表空间DROP需加INCLUDING CONTENTS AND DATAFILES;非空时建议重命名;验证存在性应查DBA_TABLESPACES并注意大小写。
ORA-01543 表示你正在尝试创建一个同名表空间,而该表空间已经存在于数据库中。直接重试 CREATE TABLESPACE 会失败,必须先清理冲突或换名 —— 但“先 DROP”不是万能解法,尤其对系统关键表空间。
临时表空间不能直接 DROP
如果你遇到的是 temp 或其他默认临时表空间(如 temp2),执行 drop tablespace temp 会报 ora-12906:不能删除默认的临时表空间。
- 必须先将数据库默认临时表空间切换到另一个已存在的临时表空间:
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2; - 再确认原临时表空间未被任何用户使用:
SELECT username, temporary_tablespace FROM dba_users WHERE temporary_tablespace = 'TEMP'; - 若仍有用户指向它,需先修改用户默认临时表空间:
ALTER USER xxx TEMPORARY TABLESPACE temp2; - 最后才能执行
DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
普通表空间可 DROP,但得带 INCLUDING CONTENTS AND DATAFILES
对非系统关键的普通表空间(如 USERS、APP_DATA),DROP TABLESPACE xxx 默认只删元数据,不删物理文件,下次建同名表空间时仍可能因文件存在而报错(尤其在 Windows 路径下)。
- 安全做法是显式加上
INCLUDING CONTENTS AND DATAFILES,确保数据文件一并清理 - 注意:该操作不可逆,且要求表空间当前为空(或加
INCLUDING CONTENTS强制清空) - 如果表空间非空又不想丢数据,改用重命名方式绕过冲突:
ALTER TABLESPACE old_name RENAME TO new_name;
创建时用不同名字最稳妥,但要注意依赖链
跳过删除步骤、直接换名创建看似省事,但容易埋坑:
- 应用配置、脚本、DBA 文档里硬编码了原表空间名,换名后会导致对象创建失败或用户无法分配配额
-
CREATE USER语句中指定的DEFAULT TABLESPACE或TEMPORARY TABLESPACE若指向旧名,用户建完即失效 - 某些中间件(如 WebLogic 连接池)会缓存表空间策略,重启前不会生效
检查表空间是否存在应查 DBA_TABLESPACES,别信 USER_TABLESPACES
USER_TABLESPACES 只返回当前用户有权限访问的表空间,权限受限时可能漏掉真实存在的表空间,导致误判“可创建”。
- 始终用
SELECT tablespace_name FROM dba_tablespaces WHERE tablespace_name = 'XXX'; - 注意大小写:Oracle 默认大写,但若建库时用了双引号定义小写名(如
"my_ts"),查询也得加引号匹配 - 区分临时表空间和永久表空间:
SELECT tablespace_name, contents FROM dba_tablespaces;
ORA-01543 很快会变成 ORA-01119 或 ORA-01950。


















