Email: service@parnassusdata.com 7 x 24 online support!
Oracle 如何从丢失的临时文件或空的临时表空间中恢复
如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!
诗檀软件专业数据库修复团队
服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com
目的
-------
在使用有临时文件的TEMPORARY 表空间时,你可能遇到2 种临时文件丢失的情况。本公告解释了如何快速地从两种情况中恢复。
1. TEMP01临时文件(默认名称)在OS级别丢失。
当一个用户尝试sort to 排序到TEMPORARY 表空间时,生成各种错误。
SQL> select * from dba_objects order by object_name;
select * from dba_objects order by object_name
*
ERROR at line 1:
ORA-01115: IO error reading block from file 201 (block # 3)
ORA-01110: data file 201: '/oracle/oradata/ORCL/temp2_01.tmp'
ORA-27041: unable to open file
SVR4 Error: 2: No such file or directory
Additional information: 3
或
SQL> select * from dba_objects order by object_name;
select * from dba_objects order by object_name
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 1026 - see DBWR trace file
ORA-01110: data file 1026: '/oracle/oradata/ORCL/temp2_01.tmp'
或
SQL> select * from dba_objects order by object_name;
select * from dba_objects order by object_name
*
ORA-01116: error in opening database file 202
ERROR at line 1:
ORA-01110: data file 202: '/oracle/oradata/ORCL/temp2_01.tmp'
ORA-27041: unable to open file
SVR4 Error: 2: No such file or directory
Additional information: 3
2. 临时文件在数据库级别被DROP命令意外drop:
当用户尝试排序到临时表空间时,生成各种错误。
SQL> alter table test add primary key (c);
alter table test add primary key (c)
*
ERROR at line 1:
ORA-25153: Temporary Tablespace is Empty
3. 确认哪些临时文件可能正在使用:
SQL> select * from database_properties where property_name =
'DEFAULT_TEMP_TABLESPACE';
SQL> select TEMPORARY_TABLESPACE from dba_users where username= ...
范围 & 应用
-------------------
适用于想要从临时表空间中恢复的DBA们。
1. 当临时文件在OS级别丢失时,如何恢复?
--------------------------------------------
情况
---------
临时文件位于一个崩溃,有坏的控制器,或者有其他类型媒体故障的磁盘上。由于Oracle不记录在临时文件中的检查点信息,Oracle可以使用一个丢失的临时文件启动数据库。如果当数据库联机时一个临时文件不存在,DBW0写入跟踪文件表明未发现临时文件,但数据库可以正常打开。
例如
-------
SQL> create temporary tablespace TEMP2
2 TEMPFILE '/oracle/oradata/ORCL/temp2_01.tmp' size 5M;
Tablespace created.
SQL> select tablespace_name, file_name from dba_temp_files;
TABLESPACE_NAME FILE_NAME
------------------ --------------------------------------
TEMP2 /oracle/oradata/ORCL/temp2_01.tmp
SQL> select tablespace_name, contents
2 from dba_tablespaces where tablespace_name = 'TEMP2';
TABLESPACE_NAME CONTENTS
------------------------------ ---------
TEMP2 TEMPORARY
SQL> select * from dba_objects order by object_name;
select * from dba_objects order by object_name
*
ORA-01116: error in opening database file 202
ERROR at line 1:
ORA-01110: data file 202: '/oracle/oradata/ORCL/temp2_01.tmp'
ORA-27041: unable to open file
SVR4 Error: 2: No such file or directory
Additional information: 3
SQL> connect / as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
....
Database opened.
SQL> connect scott/tiger
Connected.
SQL> select * from dba_objects order by object_name;
select * from dba_objects order by object_name
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 202 - see DBWR trace file
ORA-01110: data file 202: '/oracle/oradata/ORCL/temp2_01.tmp'
Solution : Drop the tempfile at the database level and add a new one
--------
SQL> alter database tempfile '/oracle/oradata/ORCL/temp2_01.tmp' drop;
Database altered.
SQL> select tablespace_name, file_name from dba_temp_files;
no rows selected.
SQL> alter tablespace temp2
2 add tempfile '/oracle/oradata/ORCL/temp2_01.tmp' size 5m;
Tablespace altered.
2. 当临时文件在数据库级别被意外drop时,如何恢复?
----------------------------------------------------------------------------------
情况
---------
临时文件被一个DROP命令意外drop:
可以从临时表空间中删除所有临时文件并保持为空。
但当用户尝试排序到TEMPORARY表空间时,生成错误。
例如
-------
=> in 8i: the drop clause only removes the logical entry from the
tablespace, but not the OS file
SQL> alter tablespace TEMP_TEMPFILE_LOCAL
2 add tempfile '/oracle/oradata/ORCL/temp2_01.tmp';
Tablespace altered.
SQL> alter database tempfile '/oracle/oradata/ORCL/temp2_01.tmp' drop;
Database altered.
=> From 9i: you can use the new clause INCLUDING DATAFILES to remove OS files
SQL> alter database tempfile '/oracle/oradata/ORCL/temp2_01.tmp'
2 drop including datafiles;
Database altered.
SQL> alter table test add primary key (c);
alter table test add primary key (c)
*
ERROR at line 1:
ORA-25153: Temporary Tablespace is Empty
解决方法 :添加一个新的临时文件
--------
8i中:在添加新的临时文件之前删除OS 临时文件
9i起:直接添加一个新的临时文件
要添加临时文件:
SQL> alter tablespace TEMP_TEMPFILE_LOCAL
2 add tempfile '/oracle/oradata/ORCL/temp2_01.tmp';
总结
-------
OS 临时文件丢失
----> 从临时表空间中drop逻辑临时文件
----> 将新的临时文件添加到临时表空间
逻辑临时文件丢失
----> 8i:从临时表空间中删除OS临时文件
将新的临时文件添加到临时表空间中
----> 9i及以上:将新的临时文件添加到临时表空间中
相关文档
-----------------
Note:160426.1 TEMPORARY Tablespaces : Tempfiles or Datafiles ?
其他搜索词
-----------------------
TEMPFILE TEMPORARY