临时表空间数据文件丢失的恢复

临时表空间数据文件丢失数据库可以打开,可以通过重建一个临时表空间并设置为默认或者新建一个属于临时表空间的数据文件,并删除已经丢失的数据的方法来恢复。

1.丢失临时表空间的数据文件 ,数据库可以正常打开。

SQL> col file for a25

SQL> select  f.file#,t.ts#,f.name "file",t.name"tablespace" from v$tempfile f,v$tablespace t where f.ts#=t.ts#;

    FILE#        TS# file                      tablespace

---------- ----------------------------------- ------------------------------

        1          3 E:\SYSORADATA\TEMP01.DBF  TEMP

SQL> show user

USER 为 "SYS"

SQL> shutdown immediate;

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> host move e:\sysoradata\temp01.dbf  e:\sysoradata\temp01.dbfa



SQL> startup;

ORACLE 例程已经启动。

Total System Global Area  431038464 bytes

Fixed Size                  1375088 bytes

Variable Size             331351184 bytes

Database Buffers           92274688 bytes

Redo Buffers                6037504 bytes

数据库装载完毕。

数据库已经打开。


SQL> select  tablespace_name,status,contents,extent_management  from dba_tablespaces;

TABLESPACE_NAME      STATUS   CONTENTS  EXTENT_MAN

-------------------- --------- -------------------

SYSTEM               ONLINE    PERMANENT LOCAL

SYSAUX               ONLINE    PERMANENT LOCAL

UNDOTBS1             ONLINE    UNDO     LOCAL

TEMP                ONLINE    TEMPORARY LOCAL

USERS                ONLINE    PERMANENT LOCAL

BYS_UNDO             ONLINE    UNDO     LOCAL


数据库OPEN阶段部分ALERT日志:


SMON: enabling tx recovery

Re-creating tempfileE:\SYSORADATA\TEMP01.DBF

Database Characterset is ZHS16GBK

No Resource Manager plan active

##########################################################

2.不停机维护临时表空间

如大规模排序的SQL语句查询时临时文件出问题,临时表空间对应数据文件出错引起ORACLE出错。

此时,可以为临时表空间增加一个数据文件,并且删除出错的原临时表空间数据文件。

SQL> selecttablespace_name,status,contents,extent_management from dba_tablespaces;

TABLESPACE_NAME      STATUS   CONTENTS  EXTENT_MAN

-------------------- --------- -------------------

SYSTEM               ONLINE    PERMANENT LOCAL

SYSAUX               ONLINE    PERMANENT LOCAL

UNDOTBS1             ONLINE    UNDO     LOCAL

TEMP                 ONLINE    TEMPORARY LOCAL

USERS                ONLINE    PERMANENT LOCAL

BYS_UNDO             ONLINE    UNDO     LOCAL

SQL> alter  tablespace temp add tempfile 'e:\sysoradata\temp02.dbf' size 20m;

表空间已更改。

SQL> select  f.file#,t.ts#,f.name"file",t.name "tablespace"  from  v$tempfile f,v$tablespace t where f.ts#=t.ts#;

    FILE#        TS# file                      tablespace

---------- ----------------------------------- ------------------------------

        2          3 E:\SYSORADATA\TEMP02.DBF  TEMP

        1          3E:\SYSORADATA\TEMP01.DBF  TEMP

SQL> selecttablespace_name,status,contents,extent_management from dba_tablespaces;

TABLESPACE_NAME      STATUS   CONTENTS  EXTENT_MAN

-------------------- --------- -------------------

SYSTEM               ONLINE    PERMANENT LOCAL

SYSAUX               ONLINE    PERMANENT LOCAL

UNDOTBS1             ONLINE    UNDO     LOCAL

TEMP                 ONLINE    TEMPORARY LOCAL

USERS                ONLINE    PERMANENT LOCAL

BYS_UNDO             ONLINE    UNDO     LOCAL

SQL> alter tablespace temp drop tempfile 'e:\sysoradata\temp01.dbf';

表空间已更改。

SQL> select  f.file#,t.ts#,f.name"file",t.name "tablespace" from v$tempfile f,v$tablespace t where  f.ts#=t.ts#;

     FILE#       TS# file                     tablespace

---------- ----------------------------------- ------------------------------

        2          3E:\SYSORADATA\TEMP02.DBF  TEMP

SQL> select  tablespace_name,status,contents,extent_management from dba_tablespaces;

TABLESPACE_NAME      STATUS   CONTENTS  EXTENT_MAN

-------------------- --------- -------------------

SYSTEM               ONLINE    PERMANENT LOCAL

SYSAUX               ONLINE    PERMANENT LOCAL

UNDOTBS1             ONLINE    UNDO     LOCAL

TEMP                 ONLINE    TEMPORARY LOCAL

USERS                ONLINE    PERMANENT LOCAL

BYS_UNDO             ONLINE    UNDO     LOCAL

SQL> col tablespace for a20

SQL> select   f.file#,t.ts#,f.name"file",t.name "tablespace",bytes/1024/1024 MB from v$tempfile f,v$tablespace t wheref.ts#=t.ts#;

    FILE#        TS# file                      tablespace                   MB

---------- ----------------------------------- -------------------- ----------

        2          3E:\SYSORADATA\TEMP02.DBF  TEMP                         20

相关ALERT日志 :

alter tablespace temp add tempfile'e:\sysoradata\temp02.dbf' size 20m

Completed: alter tablespace temp addtempfile 'e:\sysoradata\temp02.dbf' size 20m

Sun Feb 10 20:16:44 2013

 alter tablespace temp drop tempfile'e:\sysoradata\temp01.dbf'

WARNING: Cannot delete fileE:\SYSORADATA\TEMP01.DBF

Errors in filec:\app\administrator\diag\rdbms\orcl\orcl\trace\orcl_ora_1716.trc:

ORA-01265: 无法删除 TEMP FILE E:\SYSORADATA\TEMP01.DBF

ORA-27056: 无法删除文件

OSD-04024: 无法删除文件。

O/S-Error: (OS 32) 另一个程序正在使用此文件,进程无法访问。

Completed: alter tablespace temp drop tempfile 'e:\sysoradata\temp01.dbf'