Oracle 12c+ 废弃 CREATE TEMPORARY TABLESPACE 语法,必须用 CREATE TEMPORARY TABLESPACE ... TEMPFILE;临时表空间不可删除除非先切换默认;TEMPFILE 路径需可写且无特殊字符;组内表空间唯一,损坏不自动降级。
CREATE TEMPORARY TABLESPACE 语句不支持 Oracle 12c 及以后版本
oracle 从 12c 开始彻底废弃了 create temporary tablespace 这个语法——它根本不会执行,直接报错 ora-00922: missing or invalid option。这不是权限或拼写问题,是语法被移除了。
你看到的旧文档、DBA 笔记或迁移脚本里还留着这条语句,大概率是没适配新版本。现在创建临时表空间,必须用 CREATE TEMPORARY TABLESPACE TEMPFILE 形式(注意多了 TEMPFILE 关键字)。
- 12c+ 必须显式指定
TEMPFILE,否则解析失败 - 11g 及更早版本两种写法都支持,但推荐统一用带
TEMPFILE的写法,方便后续升级 - 如果脚本里混用了
DATAFILE和TEMPFILE,Oracle 会报ORA-01119: error in creating database file—— 因为临时表空间只认TEMPFILE
TEMPFILE 路径和权限问题比 DATAFILE 更敏感
临时表空间的 TEMPFILE 文件由 Oracle 自动管理读写,但创建时仍需确保:数据库进程(如 oracle 用户)对目标路径有写权限,且文件系统有足够空间。一旦路径不可写或磁盘满,CREATE TEMPORARY TABLESPACE 会卡住几秒后报 ORA-25153: Temporary Tablespace is Empty 或更底层的 ORA-01119。
- 别用 NFS 或某些容器挂载路径做
TEMPFILE目录,容易触发异步 I/O 不兼容 - 路径中避免空格、中文、特殊符号;
/u01/app/oracle/oradata/ORCL/temp01.dbf安全,/mnt/temp space/高概率失败 - 建议提前用
touch /path/to/temp01.dbf && chmod 600 /path/to/temp01.dbf验证可写性
默认临时表空间不能删,也不能设为空
执行 DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES 前,必须先确认它不是当前数据库的默认临时表空间。否则会报 ORA-12906: cannot drop default temporary tablespace。
- 查当前默认值:
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE' - 切换前必须先用
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2指定另一个有效临时表空间 - 临时表空间即使没用户在用,只要被设为默认,就无法删除;也不能用
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE ''清空
临时表空间组(TABLESPACE GROUP)容易被忽略的限制
用 TABLESPACE GROUP 管理多个临时表空间时,CREATE TEMPORARY TABLESPACE ... TABLESPACE GROUP group1 是合法的,但要注意:组名不能是空字符串,也不能包含下划线以外的特殊字符;更重要的是,一个临时表空间只能属于一个组。
- 重复加到不同组?第二次
ALTER TABLESPACE ... TABLESPACE GROUP group2会自动从原组移出 - 查询组成员:用
SELECT * FROM DBA_TABLESPACE_GROUPS,不是DBA_TABLESPACES - 如果应用连接串里指定了
temp_tablespaces=group1,而 group1 里所有TEMPFILE都损坏或离线,会直接报ORA-01652: unable to extend temp segment,不会自动 fallback 到其他组
临时表空间的问题往往不出现在创建那一刻,而是在大量排序、哈希连接或全局临时表(GLOBAL TEMPORARY TABLE)写入时突然暴露——所以创建后务必用 SELECT /*+ USE_HASH(t1,t2) */ * FROM big_tab1 t1, big_tab2 t2 WHERE ... 类似语句压测一下实际使用路径。










