ORA-25153: Temporary Tablespace is Empty

本文介绍了一种在Oracle数据库中遇到ORA-25153错误的情况及解决方案。该错误与临时表空间丢失有关,在进行控制文件重建后出现。通过检查临时表空间的状态、文件系统和数据库日志,最终确定问题原因并成功添加回缺失的临时文件。

在一测试环境做测试的时候发生以下错误:

SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'TT',method_opt=>'for columns size 1 id',cascade=>true);
BEGIN dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'TT',method_opt=>'for columns size 1 id',cascade=>true); END;

*
ERROR at line 1:
ORA-25153: Temporary Tablespace is Empty
ORA-06512: at "SYS.DBMS_STATS", line 24281
ORA-06512: at "SYS.DBMS_STATS", line 24332
ORA-06512: at line 1


SQL>

 

查看临时表空间:temp表空间是处于online状态

SQL> select tablespace_name,status from dba_tablespaces;

TABLESPACE_NAME                STATUS
------------------------------ ---------
SYSTEM                         ONLINE
SYSAUX                         ONLINE
UNDOTBS1                       ONLINE
TEMP                           ONLINE
USERS                          ONLINE
EXAMPLE                        ONLINE
TEST                           ONLINE

7 rows selected.

SQL>

但是没有发现临时文件:

SQL> select name from v$tempfile;    --发现临时文件丢失
no rows selected

查看物理文件:文理文件仍然存在

$ ll
total 2678324
-rw-r----- 1 ora11 oinstall  10076160 Oct 25 14:39 control01.ctl
-rw-r----- 1 ora11 oinstall  10076160 Oct 25 14:39 control02.ctl
-rw-r----- 1 ora11 oinstall 363077632 Oct 25 14:33 example01.dbf
-rw-r----- 1 ora11 oinstall  52429312 Oct 25 14:33 redo01.log
-rw-r----- 1 ora11 oinstall  52429312 Oct 25 14:33 redo02.log
-rw-r----- 1 ora11 oinstall  52429312 Oct 25 14:38 redo03.log
-rw-r----- 1 ora11 oinstall 587210752 Oct 25 14:38 sysaux01.dbf
-rw-r----- 1 ora11 oinstall 922755072 Oct 25 14:38 system01.dbf
-rw-r----- 1 ora11 oinstall  62922752 Aug 14 06:02 temp01.dbf
-rw-r----- 1 ora11 oinstall  52436992 Oct 25 14:33 test01.dbf

从物理文件的时间戳可以看出temp文件最后一次访问时间

根据时间查看alert日志,发现在对应的时间做个重建控制文件操作,并且在重建控制完成后启动数据库后在alert日志中发现以下内容:

*********************************************************************
WARNING: The following temporary tablespaces contain no files.
         This condition can occur when a backup controlfile has
         been restored.  It may be necessary to add files to these
         tablespaces.  That can be done using the SQL statement:
 
         ALTER TABLESPACE <tablespace_name> ADD TEMPFILE
 
         Alternatively, if these temporary tablespaces are no longer
         needed, then they can be dropped.
           Empty temporary tablespace: TEMP
*********************************************************************

说明是重建控制文件后,丢失了临时文件。(rman恢复数据库时也会发生类似现象)

只要把临时文件重新添加即可。

SQL> alter tablespace temp add tempfile '/u01/app/oracle/oradata/db11/temp01.dbf';

Tablespace altered.

 
SQL> select * from v$tempfile;

     FILE# CREATION_CHANGE# CREATION_        TS#     RFILE# STATUS  ENABLED         BYTES     BLOCKS CREATE_BYTES BLOCK_SIZE NAME
---------- ---------------- --------- ---------- ---------- ------- ---------- ---------- ---------- ------------ ---------- ----------------------------------------
         1          1727770 25-OCT-16          3          1 ONLINE  READ WRITE   62914560       7680     62914560       8192 /u01/app/oracle/oradata/db11/temp01.dbf

SQL> select tablespace_name,file_name from dba_temp_files;

TABLESPACE_NAME                FILE_NAME
------------------------------ ------------------------------------------------------------------------------------------- 
TEMP                           /u01/app/oracle/oradata/db11/temp01.dbf

SQL> exec dbms_stats.gather_table_stats(ownname=>'SYS',tabname=>'TT',method_opt=>'for columns size 1 id',cascade=>true);

PL/SQL procedure successfully completed.

SQL> 

  

转载于:https://www.cnblogs.com/abclife/p/5998675.html

<think>好的,我现在需要解决用户关于Oracle 23c Free版遇到ORA-02180错误的问题。首先,用户提到这个错误是“create tablespace选项已禁用”,所以我要先理解这个错误的具体原因和可能的解决方案。 首先,我应该回忆一下ORA-02180的错误代码。ORA-02180通常与创建表空间时使用了无效的选项有关。但在Oracle的不同版本中,某些功能可能被禁用或修改,尤其是在免费版本中可能存在限制。用户提到的是Oracle 23c Free版,我需要确认这个版本是否对创建表空间的某些选项做了限制,或者是否有权限问题。 接下来,我需要考虑可能的原因。可能包括: 1. **权限不足**:用户可能没有创建表空间的必要权限,比如需要SYSDBA权限或者特定的系统权限如CREATE TABLESPACE。 2. **语法错误**:用户可能在CREATE TABLESPACE语句中使用了不支持的选项,或者在Free版中被禁用的功能,比如某些存储选项或加密选项。 3. **版本限制**:Oracle的免费版本可能限制了某些高级功能,比如表空间的管理选项,导致某些CREATE TABLESPACE的参数不可用。 4. **配置问题**:数据库的初始化参数可能禁用了某些表空间创建选项,例如某些存储参数被限制。 然后,我需要验证这些可能性。首先检查权限,用户需要具有CREATE TABLESPACE权限。可以通过查询DBA_SYS_PRIVS视图来确认用户的权限。如果权限不足,需要授予相应的权限。 接下来,检查用户使用的SQL语句是否有语法错误或不支持的选项。例如,Oracle 23c Free版是否支持特定的数据文件路径、大小设置,或者是否允许使用某些扩展选项。可能需要查阅Oracle 23c Free的官方文档,确认CREATE TABLESPACE的可用选项。 另外,考虑到Free版通常用于开发和测试,可能有一些限制。例如,可能不支持某些高级存储选项,或者最大文件大小的限制,导致创建表空间时出错。需要确认用户尝试的选项是否符合Free版的限制。 可能的解决方案步骤包括: 1. **检查权限**:确认用户是否有CREATE TABLESPACE权限,如果没有,使用SYSDBA账户授予权限。 2. **简化SQL语句**:尝试使用最基本的CREATE TABLESPACE语法,排除可能的选项冲突。 3. **查阅文档**:查看Oracle 23c Free版的文档,确认支持的选项和已知限制。 4. **错误日志分析**:检查数据库的告警日志,获取更详细的错误信息,帮助定位问题。 5. **联系支持**:如果以上步骤无效,建议用户向Oracle社区或官方支持寻求帮助。 另外,可能用户在使用CREATE TABLESPACE时,无意中启用了某些需要额外许可的功能,比如高级压缩或加密,这在免费版中可能不可用,导致选项被禁用。 最后,需要确保用户的环境配置正确,例如数据文件路径是否存在,存储空间是否足够等,但这些可能更多导致其他错误,如ORA-01119或ORA-27040,而不是ORA-02180。 总结,处理这个问题的步骤应该是先检查权限和SQL语法,排除简单问题,然后考虑版本限制和配置问题,逐步排查可能的原因。</think>以下是关于Oracle 23c Free版中**ORA-02180: create tablespace选项已禁用**的逐步分析与解决方案: --- ### **1. 错误背景** - **ORA-02180**表示在`CREATE TABLESPACE`语句中使用了当前环境不支持的选项。 - **Oracle 23c Free版**作为免费开发版,可能对某些高级功能进行了限制。 --- ### **2. 可能原因** #### **(1) 权限不足** - 用户缺少`CREATE TABLESPACE`权限。 - **验证方法**: ```sql SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE = '当前用户名'; ``` - **解决方案**: ```sql GRANT CREATE TABLESPACE TO 用户名; ``` #### **(2) 语法或选项不兼容** - 使用了Free版禁用的选项(如加密、特定存储参数)。 - **示例**: ```sql CREATE TABLESPACE tbs1 DATAFILE 'file.dbf' SIZE 100M ENCRYPTION USING 'AES256'; -- 若加密功能被禁用 ``` - **解决方法**:简化语句,仅使用基础选项: ```sql CREATE TABLESPACE tbs1 DATAFILE 'file.dbf' SIZE 100M; ``` #### **(3) 版本功能限制** - Free版可能禁用以下功能: - 高级压缩 (`COMPRESS`) - 加密 (`ENCRYPTION`) - 特定文件存储类型(如`BIGFILE`)。 - **验证方法**:查阅[Oracle 23c Free文档](https://www.oracle.com/database/technologies/)确认支持的功能。 #### **(4) 初始化参数限制** - 检查是否禁用了某些存储选项: ```sql SHOW PARAMETER enable_pluggable_database; -- 若使用PDB需确认配置 ``` --- ### **3. 排查步骤** 1. **检查权限**: - 使用`SYSDBA`账户验证权限是否授予。 2. **简化SQL语句**: - 移除所有非必要选项(如加密、压缩),逐步测试。 3. **查阅日志**: - 检查`alert.log`获取详细错误信息: ``` SELECT VALUE FROM V$DIAG_INFO WHERE NAME = 'Diag Trace'; -- 获取日志路径 ``` 4. **确认Free版限制**: - 对比[官方文档](https://docs.oracle.com/en/database/oracle/oracle-database/23/)中的功能列表。 --- ### **4. 示例解决方案** ```sql -- 步骤1: 授予权限 CONNECT / AS SYSDBA; GRANT CREATE TABLESPACE TO scott; -- 步骤2: 尝试最简语法 CREATE TABLESPACE tbs_test DATAFILE '/u01/app/oracle/oradata/ORCL/tbs_test01.dbf' SIZE 100M AUTOEXTEND ON; ``` --- ### **5. 若问题仍存在** - **联系支持**: - 访问[Oracle社区](https://community.oracle.com/)提交问题。 - 提供完整错误信息、SQL语句及日志片段。 --- ### **总结** ORA-02180通常由权限或功能限制引起。在Oracle 23c Free版中,建议优先使用基础语法,逐步排查选项兼容性。若需高级功能,需升级至企业版。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值