ORA-25153: Temporary Tablespace is Empty
执行查询或者其他操作出现ORA-25153: Temporary Tablespace is Empty
状况解决办法
原因:在controlfile出现故障,通过备份恢复系统后,系统没有自动创建temp01.dbf
只创建了CONTROL01.CTL等文件。
1.查看表结构两中方法
1)dsec table_name
2)select dbms__metadata.get_ddl('TABLE','DEPT','SCOTT') from dual;
//(table关键字,dept表名,用户)from dual 从空表中读入
SQL>
SQL> desc emp;
Name Null? Type
----------------------------------------- -------- ----------------------------
EMPNO NOT NULL NUMBER(4)
ENAME VARCHAR2(10)
JOB VARCHAR2(9)
MGR NUMBER(4)
HIREDATE DATE
SAL NUMBER(7,2)
COMM NUMBER(7,2)
DEPTNO NUMBER(2)
SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;
ERROR:
//表空间为空了
ORA-25153: Temporary Tablespace is Empty
ORA-06512: at "SYS.DBMS_LOB", line 443
ORA-06512: at "SYS.DBMS_METADATA", line 2624
ORA-06512: at "SYS.DBMS_METADATA", line 4220
ORA-06512: at line 1
no rows selected
2.Temporary Tablespace is Empty问题解决办法
1)查看用户默认temporary表空间
SQL> select username,temporary_tablespace from dba_users ;
USERNAME TEMPORARY_TABLESPACE
------------------------------ ------------------------------
SYS TEMP
SYSTEM TEMP
OUTLN TEMP
DBSNMP TEMP
SYSMAN TEMP
MGMT_VIEW TEMP
MDSYS TEMP
ORDSYS TEMP
EXFSYS TEMP
DMSYS TEMP
WMSYS TEMP
USERNAME TEMPORARY_TABLESPACE
------------------------------ ------------------------------
WKSYS TEMP
WK_TEST TEMP
CTXSYS TEMP
ANONYMOUS TEMP
XDB TEMP
WKPROXY TEMP
ORDPLUGINS TEMP
SI_INFORMTN_SCHEMA TEMP
OLAPSYS TEMP
SCOTT TEMP
HR TEMP
USERNAME TEMPORARY_TABLESPACE
------------------------------ ------------------------------
WWW TEMP
BI TEMP
PM TEMP
MDDATA TEMP
IX TEMP
SH TEMP
DIP TEMP
OE TEMP
LWY TEMP
FLY TEMP
32 rows selected.
2)查看下表空间的状态
SQL> select tablespace_name,status from dba_tablespaces where tablespace_name='temp';
no rows selected
//temp oracle默认是大写 所以查不出来
SQL> select tablespace_name,status from dba_tablespaces where tablespace_name='TEMP';
TABLESPACE_NAME STATUS
------------------------------ ---------
TEMP ONLINE
//这里是online,如果是offline,我们就要alter tablespace temp online,online不管它。
3)查看表空间和数据文件的对应关系
SQL> select file_name,tablespace_name from dba_temp_files;
no rows selected
//在这里我们没有看到temp这个表空间,说明temp这个表空间的数据文件在逻辑上面是不存在的。
4)先删除下orcl的temp01.dbf文件
SQL> host del e:\oracle\product\ 10.1.0 \oradata\orcl;
e:\oracle\product\ 10.1.0 \oradata\orcl\*, 是否确认(Y/N)? y
e:\oracle\product\ 10.1.0 \oradata\orcl\CONTROL01.CTL
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\CONTROL02.CTL
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\CONTROL03.CTL
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\EXAMPLE01.DBF
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\REDO01.LOG
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\REDO02.LOG
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\REDO03.LOG
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\SYSAUX01.DBF
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\SYSTEM01.DBF
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\UNDOTBS01.DBF
另一个程序正在使用此文件,进程无法访问。
e:\oracle\product\ 10.1.0 \oradata\orcl\USERS01.DBF
另一个程序正在使用此文件,进程无法访问。
//结果显示这里没有temp01.dbf文件
4)说明物理上面是不存在的,逻辑上面也不存在,需要填加。
SQL> alter tablespace temp add tempfile 'e:\oracle\product\ 10.1.0 \oradata\orcl\temp01.dbf' size 512m ;
Tablespace altered.
5)查看表空间和数据文件的对应关系
SQL> select file_name,tablespace_name from dba_temp_files;
FILE_NAME
--------------------------------------------------------------------------------
TABLESPACE_NAME
------------------------------
E:\ORACLE\PRODUCT\ 10.1.0 \ORADATA\ORCL\TEMP01.DBF
TEMP
6)执行查询表结构的语句
SQL> select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;
DBMS_METADATA.GET_DDL('TABLE','EMP','SCOTT')
--------------------------------------------------------------------------------
CREATE TABLE "SCOTT"."EMP"
( "EMPNO" NUMBER(4,0),
"ENAME" VARCHAR2(10),
SQL>
SQL>
7)上一步中输出表结构不全可以用第三方软件登陆oracle 显示完整结构
使用PLSQL Developer工具以scott登陆在sql window 下执行
select dbms_metadata.get_ddl('TABLE','EMP','SCOTT') from dual;结果如下:
9-1