oracle-Temporary Tablespace is Empty解决办法-009

 ORA-25153: Temporary Tablespace is Empty

执行查询或者其他操作出现ORA-25153: Temporary Tablespace is Empty

状况解决办法

原因:controlfile出现故障,通过备份恢复系统后,系统没有自动创建temp01.dbf

只创建了CONTROL01.CTL等文件。

1.查看表结构两中方法

1dsec table_name

2select 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 onlineonline不管它。

 

3)查看表空间和数据文件的对应关系

SQL> select file_name,tablespace_name from dba_temp_files;

 

no rows selected

//在这里我们没有看到temp这个表空间,说明temp这个表空间的数据文件在逻辑上面是不存在的。

4)先删除下orcltemp01.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

你可能感兴趣的:(oracle,数据库,职场,休闲)