意外断电开库触发ORA-01207
来源:互联网 发布:七雄战记更新网络错误 编辑:程序博客网 时间:2024/05/21 08:00
故障描述
数据库服务器异常断电,启动数据库报错:
报错解析
ORA-01122:database filestring failed verification check
Cause: The information in this file is inconsistent withinformation from the control file. See accompanying message for reason.
Action: Make certain that the db files and control files are thecorrect files for this database.
以上报错描述的是存在的问题引发的报错,不用考虑,下面的ora-01207是问题所在。
ORA-01207: fileis more recent than control file - old control file
Cause:The control filechange sequence number in the data file is greater than the number in thecontrol file.
This impliesthat the wrong control file is being used. Note that repeatedly causing thiserror can make it stop happening without correcting the real problem.
Everyattempt to open the database will advance the control file change sequencenumber until it is great enough.
Action: Use the current control file or do backup control filerecovery to make the control file current. Be sure to follow all restrictionson doing a backup control file recovery.
意思是说,控制文件中记录的在数据文件中的更改序列号大于控制文件本身的更改序列号。
解决方案
重建控制文件恢复
SQL>startup mount;
SQL>!date #记录该时间
SQL>alter database backup controlfile totrace;
SQL>show parameter user_dump
SQL>archive log list ; #显示没开归档
在显示出的目录找到备份控制文件时间点的*.trc文件,在该trc文件中找到创建controlfile的脚本。
CREATE CONTROLFILE REUSE DATABASE "XSZC" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 800
MAXINSTANCES 8
MAXLOGHISTORY 83880
LOGFILE
GROUP 1'/oracle/app/oradata/xszc/redo01.log' SIZE 50M,
GROUP 2'/oracle/app/oradata/xszc/redo02.log' SIZE 50M,
GROUP 3'/oracle/app/oradata/xszc/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oracle/app/oradata/xszc/system01.dbf',
'/oracle/app/oradata/xszc/undotbs01.dbf',
'/oracle/app/oradata/xszc/sysaux01.dbf',
'/oracle/app/oradata/xszc/users01.dbf',
………
CHARACTER SET ZHS16GBK
;
SQL>startup nomount;
SQL>@createCtl.sql #执行控制文件创建脚本。
之后,按着给出的以下提示操作:
RECOVER DATABASE;
ALTER DATABASE OPEN;
ALTER TABLESPACE TEMP ADD TEMPFILE'/oracle/app/oradata/xszc/temp01.dbf' REUSE;
操作:
SQL> alter database open ;
alter database open
*
ERROR at line 1:
ORA-01113: file 1 needs media recovery
ORA-01110: data file 1: '/oracle/app/oradata/xszc/system01.dbf'
SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.
至此,当再次查看数据库时,发现数据库已经关闭。查看告警日志:出现ORA-00600报错。
修正ORA-01207,引发ORA-00600+[4194]
做完控制文件的恢复之后,发现开库之后,数据库立即自动关闭,查看alert告警日志,发现如下报错信息:
ORA-12012: error on auto execute of job 42568
ORA-00607: Internal error occurred while making a change to adata block
ORA-00607: Internal error occurred while making a change to adata block
Tue Oct 18 11:31:00 2016
Errors in file /oracle/app/admin/xszc/bdump/xszc_j003_6783.trc:
ORA-00600: internal error code, arguments: [4194], [58], [11], [], [], [], [], []
故障解析
遇到ora-00600报错,比如: ORA-00600:internal error code, arguments: [4194],当 alertlog里出现 ORA-600 + [4194] 时,基本就可以断定,是 undo 表空间出现了损坏。 对于 Undo 损坏的情况,能用备份恢复最好,如果不能,就只能通过一些特殊的方法来恢复。出现 undo 损坏的情况, 大多数是因为异常宕机,在启动的时候报的错误。 DB 不能启动。
重建undo表空间
当UNDO表空间出现损坏时,可以先用 systemsegment 启动 DB, 启动之后,再重新创建 UNDO 表空间,之后再使用UNDO表空间来启动。 步骤如下:
(1)用 spfile 创建 pfile,然后修改参数:
SQL>create pfile from spfile;
(2)编辑initSID.ora文件,将有关UNDO参数信息注释增加标红两行,使用手工管理undo段,回滚段使用system segment:
#*.undo_tablespace='UNDOTBS1'
#*.undo_management='AUTO'
#*.undo_retention=1800
undo_management='MANUAL'
rollback_segments='SYSTEM'
( 2)用修改之后的pfile,重启 DB
SQL>STARTUP MOUNT pfile='$ORACLE_HOME/dbs/initSID.ora' ;
( 3)删除原来的表空间,创建新的 UNDO 表空间
SQL>alter database open;
SQL> drop tablespace undotbs01;
#du –sh /data/oradata/undotbs01.dbf #显示为826M
SQL> create undo tablespace undotbs1 datafile '/data/oradata/undotbs1.dbf'size 900M;
( 4)关闭数据库,修改pfile 参数,然后用新的 pfile 创建 spfile,在正常启动数据库。
SQL>shutdown immediate;
$vi $ORACLE_HOME/dbs/initSID.ora
*.undo_tablespace='UNDOTBS1'
*.undo_management='AUTO'
*.undo_retention=1800
#undo_management='MANUAL'
#rollback_segments='SYSTEM'
SQL>create spfile from pfile;
SQL>startup
记得添加好临时数据文件:
SQL>ALTER TABLESPACE TEMP ADD TEMPFILE'/oracle/app/oradata/xszc/temp01.dbf' REUSE;
至此数据库恢复完毕。
总结:
本次故障是由于异外断电,导致数据库中数据文件头记录的信息与控制文件记录的相关信息不匹配,也就是说,我们需要做实例恢复的那部分数据,
在意外断电的瞬间,并没有写到相关的文件中,而是在内存中被丢失了。
这样的话,我们需要将控制文件恢复到与数据文件一致的状态。可以使用控制文件的备份来做恢复(足够新),也可以重建控制文件。
当我们恢复完控制文件,能够正常开库了,发现undo出现问题;那说明数据库中有一部分undo信息也被丢失,那只能通过重建undo来解决问题。
- 意外断电开库触发ORA-01207
- 虚拟机意外断电解决办法
- Ubuntu Server 意外断电
- 断电造成数据库文件损坏的解决方法,适用于ora-01122,ora-01110,ora-01207等错误
- MySQl的意外断电后无法启动
- 回车意外触发button事件
- 意外断电 。服务器出现 无法正常家在硬盘
- AndroidStudio意外断电,再起动后全部报错
- 断电与ORA-600错误处理
- 记一次断电恢复ORA-01033错误
- 记断电引发的ORA-00600错误
- 记录一些意外:ORA-01653
- 记录一些意外:ora-09817
- oracle断电重启之ORA-01033和ORA-01172
- Ctrl热键意外触发的问题
- truncate表触发ORA-00600
- 断电后数据库启动报ora-600[kcratr1_lastbwr]错误
- oracle断电后报 ora-01033错误处理
- Android-属性动画
- Servlet的请求转发和重定向
- 263. Ugly Number
- 【小组】探空气球项目的分工与目标
- Android-Fragment 切换属性动画
- 意外断电开库触发ORA-01207
- Tomcat:基础安装和使用教程
- C++中的继承特性(2)
- JavaWeb实现文件上传下载功能实例解析
- 源码开放学ARM—DM9000网卡驱动
- 第八周拓展实践(1)小明借书
- 定点乘法运算之原码一位乘法
- Git 安装配置
- php 生成器 入门理解