前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >ORA-00214、ORA-01207错误如何处理

ORA-00214、ORA-01207错误如何处理

作者头像
用户5921339
发布2025-05-20 16:48:51
发布2025-05-20 16:48:51
12800
代码可运行
举报
运行总次数:0
代码可运行

故障现象

oracle数据库启动失败,报错ORA-00214,如下所示

代码语言:javascript
代码运行次数:0
运行
复制
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

原因说明

参数文件中,控制文件路径如下

代码语言:javascript
代码运行次数:0
运行
复制
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状态下执行以下操作:

  • 将/data/oracle/app/oracle/oradata/orcl/control01.ctl重命名或删除
  • 复制/data/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl至/data/oracle/app/oracle/oradata/orcl/下,并重命名control01.ctl
  • 执行以下命令启动数据库
代码语言:javascript
代码运行次数:0
运行
复制
SQL> alter database mount;

Database altered.

SQL> alter database open;

Database altered.

(2)修改参数文件pfile

  • 生成新的pfile文件
代码语言:javascript
代码运行次数:0
运行
复制
SQL> create pfile='/data/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/initorcl.ora' from spfile;
  • 编辑initorcl.ora,修改control_files='/data/oracle/app/oracle/fast_recovery_area/orcl/control02.ctl'
  • 启动数据库
代码语言:javascript
代码运行次数:0
运行
复制
SQL> startup pfile='/data/oracle/app/oracle/product/12.2.0/dbhome_1/dbs/initorcl.ora'

情况二:两个控制文件的SCN一致,但是控制文件的SCN版本与数据文件不一致

代码语言:javascript
代码运行次数:0
运行
复制
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文件,用于重建控制文件

代码语言:javascript
代码运行次数:0
运行
复制
SQL> alter database backup controlfile to trace;

或者

代码语言:javascript
代码运行次数:0
运行
复制
SQL> alter database backup controlfile to trace as '/data/oracle/con.trace';

(2)关闭数据库

代码语言:javascript
代码运行次数:0
运行
复制
SQL> shutdown immediate
ORA-01109: database not open


Database dismounted.
ORACLE instance shut down.

(3)利用trace文件重新生成控制文件,在nomount状态下执行语句

代码语言:javascript
代码运行次数:0
运行
复制
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)启动数据库

代码语言:javascript
代码运行次数:0
运行
复制
SQL> ALTER DATABASE OPEN;

(5)临时表空间添加数据文件

重建控制文件后虽然虽然存在临时表空间,但是却没有数据文件,因此需要为TEMP临时表空间新增数据文件

代码语言:javascript
代码运行次数:0
运行
复制
SQL> alter tablespace temp add tempfile '/data/oracle/app/oracle/oradata/orcl/temp01.dbf' size 1024m reuse autoextend on next 100m maxsize 32767m;

通过如下SQL语句可查看临时表空间数据文件

代码语言:javascript
代码运行次数:0
运行
复制
SQL> SELECT FILE#,TS#,NAME FROM v$tempfile;
SQL> select tablespace_name,file_name from dba_temp_files;

最后可以查看数据库SCN和数据文件以及控制文件是否一致

代码语言:javascript
代码运行次数:0
运行
复制
SQL> select checkpoint_change# from v$database;
SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header;

今天的分享就到这里了,如果对文章的内容感兴趣,欢迎留言交流~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-07-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT人家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档