系统表空间损坏,启动实例会提示已下错误:数据库只能启动到mount状态。
SQL> startup
ORACLE instance started.
Total System Global Area 1048059904 bytes
Fixed Size 2235000 bytes
Variable Size 608175496 bytes
Database Buffers 432013312 bytes
Redo Buffers 5636096 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
警告日志提示文件头损坏:
ALTER DATABASE OPEN
Errors in file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_dbw0_3715.trc:
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-27048: skgfifi: file header information is invalid
这里利用数据库之前做好的全备份恢复system01.dbf文件:
回复步骤:
A、 启动实例到mount状态,恢复系统表空间数据文件必须在数据库mount状态下进行。
SQL> startup mount
B、 在RMAN中,执行restore命令还原损坏的系统表空间文件。
RMAN> restore datafile 1;
Starting restore at 02-DEC-12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=20 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to /u01/app/oracle/oradata/orcl/system01.dbf
channel ORA_DISK_1: reading from backup piece /u01/app/oracle/backup/full_ORCL_20121201_6_1.bak
channel ORA_DISK_1: piece handle=/u01/app/oracle/backup/full_ORCL_20121201_6_1.bak tag=TAG20121201T193434
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:35
Finished restore at 02-DEC-12
C、 在RMAN中,执行recover datafile 1 利用归档和在线日志恢复数据文件。
RMAN> recover datafile 1;
Starting recover at 02-DEC-12
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:02
Finished recover at 02-DEC-12
D、 打开数据库,恢复完成。
RMAN> alter database open;
database opened
如果数据库在运行过程中发现系统表空间数据文件损坏,要先关闭
实例(shutdown abort),再启动到mount状态下恢复,恢复方法相同。