oracle不允许删除当前默认永久表空间,执行drop tablespace users报ora-12919即因users仍被设为default_permanent_tablespace;需先alter database default tablespace切至其他表空间,再确认pdb状态、数据文件丢失情况,并通过rman在mount状态下严格按restore→recover顺序恢复pdb1:users表空间。

不能直接“恢复已删除的默认表空间”——Oracle 不允许删除当前默认表空间,所谓“已删除”大概率是误操作导致表空间被 DROP,或用户误以为 USERS 是“系统强制默认”,实际只是创建时指定的默认。真正要做的,是还原该表空间的数据文件并重建其逻辑结构。
为什么 DROP TABLESPACE users 报 ORA-12919 错误
当你执行 DROP TABLESPACE users 时出现 ORA-12919: Can not drop the default permanent tablespace,说明该表空间当前仍是数据库的默认永久表空间(DEFAULT_PERMANENT_TABLESPACE)。Oracle 禁止直接删掉它,这是硬限制。
常见误解来源:
- 误把
CREATE USER ... DEFAULT TABLESPACE users当成“全局默认”,其实这只是用户级默认,不影响数据库级设置 - 没查过当前默认值:
SELECT PROPERTY_VALUE FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME = 'DEFAULT_PERMANENT_TABLESPACE' - 用
ALTER DATABASE DEFAULT TABLESPACE system切换后又忘了切回,结果 users 被 DROP 了但没人意识到它已非默认
确认表空间是否真被 DROP 且不可见
先验证现状,别凭记忆操作:
- 在
CDB$ROOT中运行:SELECT CON_ID, NAME, OPEN_MODE FROM V$PDBS,确认目标 PDB 是否在线(如pdb1) - 连入该 PDB:
sqlplus / as sysdba @pdb1(注意:不是用 PDB 服务名连 RMAN!) - 查表空间是否存在:
SELECT TABLESPACE_NAME, STATUS FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = 'USERS' - 查数据文件是否丢失:
SELECT FILE_NAME, STATUS FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USERS'—— 若返回空或STATUS = 'INVALID',说明物理文件已丢
RMAN 恢复 pdb1:USERS 的三步铁律
恢复不是写一条命令就完事。以下三个条件缺一不可,否则 RMAN-06023 或静默覆盖 CDB$ROOT 的同名表空间:
- CDB 必须处于
MOUNT状态:STARTUP MOUNT(不是 OPEN,也不是 NOMOUNT) - PDB 必须未被 DROP:
SHOW PDBS中仍能看到pdb1,状态为MOUNTED或READ WRITE(若 OPEN,先ALTER PLUGGABLE DATABASE pdb1 CLOSE IMMEDIATE) - 备份中必须含该 PDB 表空间:
LIST BACKUP OF TABLESPACE pdb1:USERS在 RMAN 中执行,有输出才可继续
执行顺序严格固定:
RMAN> RESTORE TABLESPACE pdb1:USERS; RMAN> RECOVER TABLESPACE pdb1:USERS;
注意:RECOVER 会自动将数据文件从 OFFLINE 置为 ONLINE,不要手动执行 ALTER DATABASE DATAFILE ... ONLINE。
恢复后 PDB 打不开?重点检查这三处
ALTER PLUGGABLE DATABASE pdb1 OPEN 报 ORA-01113 或 ORA-01157,不是恢复失败,而是状态未同步:
- 路径不一致:用
SELECT FILE_NAME FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USERS' AND CON_ID = (SELECT CON_ID FROM V$PDBS WHERE NAME = 'PDB1')查出的路径,和 RMAN 实际还原到的路径是否一致?不一致就得ALTER DATABASE MOVE DATAFILE或RENAME FILE - 归档日志断链:
RECOVER阶段若报ORA-19505或ORA-19625,说明目标 SCN 后的归档缺失,需从其他节点拷归档或启用SET UNTIL SCN - FAST_RECOVERY_AREA 空间不足:
RECOVER启动辅助实例时卡住,必须显式加AUXILIARY DESTINATION '/u01/oraaux'
最易被忽略的是:RMAN 默认不校验还原后文件权限。如果还原路径属主不是 oracle、权限不是 640,OPEN 时直接报 ORA-01157,且错误信息里不提示权限问题。











