临时表空间由于其特殊性,不能也不需要备份,在临时表空间出错时或者还原数据库到新环境需要新建临时表空间时,我们使用两种方法对其进行还原:
 
方法1)建立新的临时表空间文件,删除受损的临时表空间旧文件;
方法2)替换一个受损的临时表空间,修改系统默认表空间到新的临时表空间上;
 
 
方法1)建立新的临时表空间文件,删除受损的临时表空间旧文件;
SQL> alter tablespace temp begin backup;
alter tablespace temp begin backup
*
ERROR at line 1:
ORA-03217: invalid option for alter of TEMPORARY TABLESPACE
 
由于是临时表空间,所以不能进行备份,也不需要进行备份
 
 
SQL> alter tablespace temp add tempfile 'temp02.dbf' size 10M;
 
Tablespace altered.
 
SQL> select t.name, d.name, d.bytes / 1024 / 1024 from v$tablespace t, v$tempfile d where d.TS# = t.TS#;
 
NAME
------------------------------
NAME
------------------------------------------------------------------------------------------------------------------------
D.BYTES/1024/1024
-----------------
TEMP
D:\ORACLE\ORADATA\TEST\TEMP01.DBF
               29
 
TEMP
D:\ORACLE\PRODUCT\11.2.0\TEST\DATABASE\TEMP02.DBF
               10
 
NAME
------------------------------
NAME
------------------------------------------------------------------------------------------------------------------------
D.BYTES/1024/1024
-----------------
 
 
由于没有指定目录,所以添加临时表空间文件到默认位置;不是正确位置;
 
SQL> alter database tempfile 'temp01.dbf' offline;
alter database tempfile 'temp01.dbf' offline
*
ERROR at line 1:
ORA-01516: nonexistent log file, data file, or temporary file "temp01.dbf"
 
删除时需要先offline,并且填写完整路径;
 
SQL> alter database tempfile 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' offline;
 
Database altered.
 
SQL> ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' DROP;
ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' DROP
*
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time
 
 
SQL> ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' DROP;
ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' DROP
*
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time
 
是因为还有用户在,所以暂时无法删除;
 
 
SQL> alter database tempfile 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' offline;
 
Database altered.
 
SQL> ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' DROP;
ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' DROP
*
ERROR at line 1:
ORA-25152: TEMPFILE cannot be dropped at this time
 
 
 
 
 
SQL> EXIT
 
当前用户由于执行过查询命令,所以有可能使用到临时表空间,退出该用户;
 
 
Disconnected from Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PS D:\oracle\diag\rdbms\test\test\trace>
 
 
PS C:\Users\calvin> SQLPLUS / AS SYSDBA
 
SQL*Plus: Release 11.2.0.1.0 Production on Tue Jan 8 18:00:14 2013
 
Copyright (c) 1982, 2010, Oracle.  All rights reserved.
 
 
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
 
SQL> ALTER DATABASE TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP01.DBF' DROP;
 
Database altered.
 
重新连接后在此删除,成功;以上为通过替换一个受损的临时文件,还原临时表空间的方法;
 
方法2)替换一个受损的临时表空间,修改系统默认表空间到新的临时表空间上;
 
新建临时表空间 temp02;
SQL> CREATE temporary tablespace TEMP02 TEMPFILE 'D:\ORACLE\ORADATA\TEST\TEMP02_A.DBF' SIZE 10M;
 
Tablespace created.
 
将数据库默认的临时表空间修改为新建的临时表空间;
 
SQL> alter database default temporary tablespace TEMP02;
 
Database altered.
 
删除旧的临时表空间,一并将系统磁盘上的内容及数据文件删除;
 
SQL> drop tablespace temp including contents and datafiles;
 
Tablespace dropped.
 
SQL>