环境:RHEL 6.5 Oracle 11.2.0.3
如果有RMAN备份的话,如果恢复数据文件就可以完成,本次我们测试在没有备份的情况下如何拉起数据库
[oracle@test-db orcl]$ mv undotbs02.dbf undotbs02.dbf_bak
SYS@orcl> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2232472 bytes
Variable Size 591400808 bytes
Database Buffers 188743680 bytes
Redo Buffers 2621440 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl_data/orcl/undotbs02.dbf'
ALTER DATABASE OPEN
Errors in file /u01/app/oracle/diag/rdbms/primary_orcl/orcl/trace/orcl_dbw0_2532.trc:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl_data/orcl/undotbs02.dbf'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Block change tracking file is current.
Errors in file /u01/app/oracle/diag/rdbms/primary_orcl/orcl/trace/orcl_ora_2621.trc:
ORA-01157: cannot identify/lock data file 7 - see DBWR trace file
ORA-01110: data file 7: '/u01/app/oracle/oradata/orcl_data/orcl/undotbs02.dbf'
ORA-1157 signalled during: ALTER DATABASE OPEN...
Sun Jan 13 15:32:08 2019
Checker run found 1 new persistent data failures
###########################################################################
开始强制拉起数据库
SYS@orcl> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SYS@orcl> startup mount;
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2232472 bytes
Variable Size 591400808 bytes
Database Buffers 188743680 bytes
Redo Buffers 2621440 bytes
Database mounted.
SYS@orcl> alter database datafile 7 offline drop;
Database altered.
SYS@orcl> alter database open;
Database altered.
SYS@orcl> create undo tablespace undotbs1 datafile '/u01/app/oracle/oradata/orcl_data/orcl/undotbs1.dbf' size 500m ;
Tablespace created.
SYS@orcl> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS2
SYS@orcl> alter system set undo_tablespace='UNDOTBS1' scope=spfile;
System altered.
SYS@orcl> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SYS@orcl> startup
ORACLE instance started.
Total System Global Area 784998400 bytes
Fixed Size 2232472 bytes
Variable Size 591400808 bytes
Database Buffers 188743680 bytes
Redo Buffers 2621440 bytes
Database mounted.
Database opened.
SYS@orcl> show parameter undo
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
undo_retention integer 900
undo_tablespace string UNDOTBS1
SYS@orcl>
总结:
这是最简单的一种情况下恢复undo表空间丢失的情况,也是很容易的。
直接 offile 相关数据文件,打开数据库重新创建UNDO表空间并默认为数据库默认表空间