故障现象
oracle数据库启动失败,报错ORA-00214,如下所示
SQL> startup
ORACLE instance started.
Total System Global Area 5368709120 bytes
Fixed Size 8804088 bytes
Variable Size 1241516296 bytes
Database Buffers 4110417920 bytes
Redo Buffers 7970816 bytes
ORA-00214: control file
'/data/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl' version 47807
inconsistent with file '/data/oracle/app/oracle/oradata/orcl/control01.ctl'
version 47790
原因说明
参数文件中,控制文件路径如下
control_files='/data/oracle/app/oracle/oradata/orcl/control01.ctl','/data/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl'
根据错误提示可以知是两个控制文件版本不一致造成的。正常情况下,两个控制文件互为镜像,内容完全一致,由于突然断电或其他因素导致两个文件没有完全同步,从而出现了数据不一致的情况。
解决方法
情况一:两个控制文件中,有一个控制文件的SCN与数据文件的SCN一致
本例中控制文件/data/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl的SCN与数据文件的SCN一致(control02.ctl的版本较新),此时有两种解决方法:
(1)修改控制文件
在nomount状态下执行以下操作:
SQL> alter database mount;
Database altered.
SQL> alter database open;
Database altered.
(2)修改参数文件pfile
SQL> create pfile='/data/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/initorcl.ora' from spfile;
SQL> startup pfile='/data/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/initorcl.ora'
情况二:两个控制文件的SCN一致,但是控制文件的SCN版本与数据文件不一致
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/data/oracle/app/oracle/oradata/orcl/system01.dbf'
ORA-01207: file is more recent than control file - old control file
以上这个报错说明数据文件比控制文件的版本新,即控制文件的SCN比数据文件的SCN要低。
该情况的处理方式如下:
(1)在mount模式下生成trace文件,用于重建控制文件
SQL> alter database backup controlfile to trace;
或者
SQL> alter database backup controlfile to trace as '/data/oracle/con.trace';
(2)关闭数据库
SQL> shutdown immediate
ORA-01109: database not open
Database dismounted.
ORACLE instance shut down.
(3)利用trace文件重新生成控制文件,在nomount状态下执行语句
CREATE CONTROLFILE REUSE DATABASE "ORCL" NORESETLOGS ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 1024
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/data/oracle/app/oracle/oradata/orcl/redo01.log' SIZE 200M BLOCKSIZE 512,
GROUP 2 '/data/oracle/app/oracle/oradata/orcl/redo02.log' SIZE 200M BLOCKSIZE 512,
GROUP 3 '/data/oracle/app/oracle/oradata/orcl/redo03.log' SIZE 200M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
'/data/oracle/app/oracle/oradata/orcl/system01.dbf',
'/data/oracle/app/oracle/oradata/orcl/sysaux01.dbf',
'/data/oracle/app/oracle/oradata/orcl/undotbs01.dbf',
'/data/oracle/app/oracle/oradata/orcl/pdbseed/system01.dbf',
'/data/oracle/app/oracle/oradata/orcl/pdbseed/sysaux01.dbf',
'/data/oracle/app/oracle/oradata/orcl/users01.dbf',
'/data/oracle/app/oracle/oradata/orcl/orclpdb/system01.dbf',
'/data/oracle/app/oracle/oradata/orcl/orclpdb/sysaux01.dbf',
'/data/oracle/app/oracle/oradata/orcl/orclpdb/users01.dbf',
'/data/oracle/app/oracle/oradata/orcl/ct.dbf'
CHARACTER SET AL32UTF8
;
(4)启动数据库
SQL> ALTER DATABASE OPEN;
(5)临时表空间添加数据文件
重建控制文件后虽然虽然存在临时表空间,但是却没有数据文件,因此需要为TEMP临时表空间新增数据文件
SQL> alter tablespace temp add tempfile '/data/oracle/app/oracle/oradata/orcl/temp01.dbf' size 1024m reuse autoextend on next 100m maxsize 32767m;
通过如下SQL语句可查看临时表空间数据文件
SQL> SELECT FILE#,TS#,NAME FROM v$tempfile;
SQL> select tablespace_name,file_name from dba_temp_files;
最后可以查看数据库SCN和数据文件以及控制文件是否一致
SQL> select checkpoint_change# from v$database;
SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header;
今天的分享就到这里了,如果对文章的内容感兴趣,欢迎留言交流~
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有