先做一个实验:
今日查看oracle控制文件移动和修改,发现本机安装oracle数据库启动时只使用了一个控制文件。
如下:SQL> select * from V$controlfile;
STATUS NAME IS_ BLOCK_SIZE FILE_SIZE_BLKS
------- -------------------- --- ---------- --------------
/opt/oracle/oradata/ NO 16384 450
orcl/control02.ctl
1、决定将控制文件01和03加入进去,于是执行命令那个如下:
SQL> alter system set control_files = '/opt/oracle/oradata/orcl/control01.ctl',
2 '/opt/oracle/oradata/orcl/control02.ctl',
3 '/opt/oracle/oradata/orcl/control03.ctl' SCOPE=SPFILE;
System altered.
2、关闭数据库 SQL> shutdown immediate;
3、再次启动数据库,数据无法启动,报错ORA-00214如下:
SQL> startup
ORACLE instance started.
Total System Global Area 1258291200 bytes
Fixed Size 1219160 bytes
Variable Size 318768552 bytes
Database Buffers 922746880 bytes
Redo Buffers 15556608 bytes
ORA-00214: control file '/opt/oracle/oradata/orcl/control02.ctl' version 599
inconsistent with file '/opt/oracle/oradata/orcl/control01.ctl' version 541
故障分析
1、根据错误提示为控制文件版本不一致导致。控制文件原理为维护数据库的当前物理状态,为二进制的文件,数据库打开的时候控制文件一致变化。主要记录数据库名字、标示、当前日志SCN、表空间信息等。理论上3个控制文件应该一致。
2、因为版本不一致,且控制文件2版本最新为version 599.
故障解决
1、在操作系统上,备份所有控制文件,同时使用控制文件control02.ctl覆盖重命名control01.ctl、control03.ctl,保证版本一致。
2、操作后,数据库启动正常,可以使用,问题解决。
问题延伸
在先前如果过覆盖控制文件方法无法解决,
这种情况就是控制文件已经损坏了。
可以重新建立控制文件来解决,具体操作步骤如下:
1、startup nomount;
2、备份控制文件.SQL >ALTER DATABASE BACKUP CONTROLFILE TO TRACE;
所以注意:运用这个 命令数据库至少要在mount状态上。
这时候会在udump目录下生成SID_ora_*.trc文件,该文件中有创建控制文件的脚本,一般分为
归档模式和非归档模式,
3、我的数据库为非归档模式,选择如下:
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "ORCL9" NORESETLOGS NOARCHIVELOG
-- SET STANDBY TO MAXIMIZE PERFORMANCE
MAXLOGFILES 5
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 1
MAXLOGHISTORY 907
LOGFILE
GROUP 1 'D:\ORACLE9I\ORA92\ORADATA\ORCL9\REDO01.LOG' SIZE 1M,
GROUP 2 'D:\ORACLE9I\ORA92\ORADATA\ORCL9\REDO02.LOG' SIZE 1M,
GROUP 3 'D:\ORACLE9I\ORA92\ORADATA\ORCL9\REDO03.LOG' SIZE 1M
-- STANDBY LOGFILE
DATAFILE
'D:\ORACLE9I\ORA92\ORADATA\ORCL9\SYSTEM01.DBF',
'D:\ORACLE9I\ORA92\ORADATA\ORCL9\UNDOTBS01.DBF'
CHARACTER SET ZHS16GBK
;
# Recovery is required if any of the datafiles are restored backups,
# or if the last shutdown was not normal or immediate.
RECOVER DATABASE
# Database can now be opened normally.
ALTER DATABASE OPEN;
# Commands to add tempfiles to temporary tablespaces.
# Online tempfiles have complete space information.
# Other tempfiles may require adjustment.
ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE9I\ORA92\ORADATA\ORCL9\TEMP01.DBF'
SIZE 52428800 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
# End of tempfile additions.
#
# Set #2. RESETLOGS case
#
# The following commands will create a new control file and use it
# to open the database.
# The contents of online logs will be lost and all backups will
# be invalidated. Use this only if online logs are damaged.
4、startup nomount 启动数据库
5、在SQL模式下:执行如下命令。
STARTUP NOMOUNT
CREATE CONTROLFILE REUSE DATABASE "APTS" NORESETLOGS NOARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 1 '/opt/oracle/oradata/orcl/redo01.log' SIZE 50M,
GROUP 2 '/opt/oracle/oradata/orcl/redo02.log' SIZE 50M,
GROUP 3 '/opt/oracle/oradata/orcl/redo03.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/opt/oracle/oradata/orcl/system01.dbf',
'/opt/oracle/oradata/orcl/undotbs01.dbf',
'/opt/oracle/oradata/orcl/sysaux01.dbf',
'/opt/oracle/oradata/orcl/users01.dbf',
'/opt/oracle/oradata/orcl/example01.dbf'
CHARACTER SET ZHS16GBK;
6、执行:SQL > RECOVER DATABASE
必须recover ,要不然会报
7、执行: SQL > ALTER DATABASE OPEN;
8、执行: SQL > ALTER TABLESPACE TEMP ADD TEMPFILE 'E:\ORACLE\PRODUCT\10.2.0\ORADATA\APTS\TEMP01.DBF'
SIZE 20M REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;
9、问题解决,控制文件重建成功。
10、如果遇到失败情况,请按照上述步骤重新确认在执行。
最后,重建好后,建议重新备份一次。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25116248/viewspace-1293445/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25116248/viewspace-1293445/