中午搬迁了数据库服务器,点亮后启动数据库。
lsnrctl start
The listener supports no services
The command completed successfully
没问题。
然后启动数据库,报错:
SQL> startup
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 838862744 bytes
Database Buffers 1291845632 bytes
Redo Buffers 4923392 bytes
Database mounted.
ORA-01122: database file 11 failed verification check
ORA-01110: data file 11: '/data/oracle/oradata/orcl/xn_01.ora'
ORA-01210: data file header is media corrupt
看错误信息是有一个ora文件的文件头损坏。首先尝试recover操作:
SQL> recover datafile 11
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 11: '/data/oracle/oradata/orcl/xn_01.ora'
ORA-01122: database file 11 failed verification check
ORA-01110: data file 11: '/data/oracle/oradata/orcl/xn_01.ora'
ORA-01210: data file header is media corrupt
瞬间头大。百度资料发现修复过程很繁琐。因此决定采用简单粗暴的方式来处理,既然是表空间文件坏了,那就重建表空间文件。
注意:这种做法的前提是你这个表空间的数据是可以废弃的,我这边只是一个测试库,而且是着急要启动数据库,所以能重建。如果你的表空间文件是有重要数据的就要慎重。
首先另外找一个能用的数据库服务,用有dba权限的用户登录进去
创建一个新的表空间:
create tablespace xn_01
datafile '/data/oracle/oradata/orcl/xn_01.ora'
size 50m
autoextend on
next 5m maxsize 10000m
extent management local;
创建成功后,查询数据文件所在的位置
select d.FILE_NAME from dba_data_files d where d.FILE_NAME like '%xn_01%'
2 /data/oracle/oradata/orcl/xn_01.ora
然后去/data/oracle/oradata/orcl目录中拷贝出xn_01.ora文件,拷贝到有问题的数据库的datafile目录中,如果你的表空间文件可以废弃,就覆盖同名的xn_01.ora。如果有重要数据,那就把原来有问题的表空间先备份出来,然后再执行拷贝,等数据库能启动了,再想办法解决原来表空间损坏的问题
然后再次尝试打开数据库:
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.
Total System Global Area 2137886720 bytes
Fixed Size 2254952 bytes
Variable Size 838862744 bytes
Database Buffers 1291845632 bytes
Redo Buffers 4923392 bytes
Database mounted.
ORA-01157: cannot identify/lock data file 11 - see DBWR trace file
ORA-01110: data file 11: '/data/oracle/oradata/orcl/xn_01.ora'
目前提示信息已经是无法锁定文件,也就是表空间的文件数据没问题,但是ORACLE认不到这个表空间,既然认不到,就直接脱机:
SQL> alter database datafile 11 offline drop;
Database altered.
SQL> alter database open;
Database altered.
搞定。