Oracle重建控制文件的实例教程

作者:AlfredZhao 时间:2024-01-25 11:02:16 

前言

控制文件(control file)是一个相当小的文件(最多能增长到64M左右),其中包含Oracle需要的其他文件的一个目录。参数文件告知实例控制文件的位置,控制文件则告知示例数据库和在线重做日志文件的位置。控制文件还告知了Oracle其他一些事情,如已发生检查点的有关信息、数据库名(必须和db_name参数匹配)、创建数据库的时间戳、归档重做日志的历史(有时这会让控制文件变大)、RMAN信息等。

环境:OEL 5.7 + Oracle 10.2.0.5

背景:在Oracle的运维过程中,时常会遇到一些场景是需要重建控制文件才可以解决的。本文的场景可以通过复制控制文件到新路径,运行一段时间后,再用老的控制文件启动数据库重现。

1.当前故障现象

在使用旧的控制文件启动数据库时,报错ORA-01122、ORA-01110、ORA-01207:


SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 599785472 bytes
Fixed Size   2098112 bytes
Variable Size  218106944 bytes
Database Buffers  373293056 bytes
Redo Buffers  6287360 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/oradata/cxywdb/system01.dbf'
ORA-01207: file is more recent than control file - old control file

2.分析故障原因

根据报错信息查找MOS文档:

ORA-1122, ORA-1110, ORA-1207 while open the database after crash (文档 ID 283927.1)

延伸思考一下,为什么会这样?

主要错误是ORA-01207,利用oerr工具看到Oralce对这个错误的详细描述是:

01207, 00000, "file is more recent than control file - old control file"
// *Cause:  The control file change sequence number in the data file is
//         greater than the number in the control file. This implies that
//         the wrong control file is being used. Note that repeatedly causing
//         this error can make it stop happening without correcting the real
//         problem. Every attempt to open the database will advance the
//         control file change sequence number until it is great enough.
// *Action: Use the current control file or do backup control file recovery to
//         make the control file current. Be sure to follow all restrictions
//         on doing a backup control file recovery.

一般遇到这种情况,当前的控制文件肯定是找不到了。那么就得考虑重建控制文件来解决,MOS给出的建议也是重建控制文件。

3.重建控制文件

重建控制文件的核心步骤:

3.1 备份控制文件到trace


startup mount
alter database backup controlfile to trace;
oradebug setmypid
oradebug tracefile_name

3.2 启动数据库到nomount状态


shutdown abort
startup nomount;

3.3 确认重建控制文件的语句


vi control.sql
CREATE CONTROLFILE REUSE DATABASE "CXYWDB" NORESETLOGS FORCE LOGGING ARCHIVELOG
MAXLOGFILES 16
MAXLOGMEMBERS 3
MAXDATAFILES 100
MAXINSTANCES 8
MAXLOGHISTORY 292
LOGFILE
GROUP 5 '/oradata2/cxywdb/redo11.log' SIZE 50M,
GROUP 6 '/oradata2/cxywdb/redo12.log' SIZE 50M,
GROUP 7 '/oradata2/cxywdb/redo13.log' SIZE 50M
-- STANDBY LOGFILE
DATAFILE
'/oradata/cxywdb/system01.dbf',
'/oradata/cxywdb/undotbs01.dbf',
'/oradata/cxywdb/sysaux01.dbf',
'/oradata/cxywdb/users01.dbf',
'/oradata/cxywdb/alfred01.dbf',
'/oradata/cxywdb/alfred02.dbf',
'/oradata/cxywdb/alfred03.dbf',
'/oradata/cxywdb/alfred04.dbf',
'/oradata/cxywdb/alfred05.dbf',
'/oradata/cxywdb/dbs_i_alfred01.dbf'
CHARACTER SET ZHS16GBK
;

3.4 恢复并打开数据库


SQL> recover database;
Media recovery complete.
SQL> alter database open;
Database altered.

附:实际解决过程如下:


SQL> shutdown abort  
ORACLE instance shut down.
SQL> startup mount

ORACLE instance started.

Total System Global Area 599785472 bytes
Fixed Size     2098112 bytes
Variable Size    218106944 bytes
Database Buffers   373293056 bytes
Redo Buffers    6287360 bytes
Database mounted.
SQL> alter database backup controlfile to trace;

Database altered.

SQL> oradebug setmypid
Statement processed.
SQL> oradebug tracefile_name
/s01/oracle/admin/cxywdb/udump/cxywdb_ora_3983.trc
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup nomount;
ORACLE instance started.

Total System Global Area 599785472 bytes
Fixed Size     2098112 bytes
Variable Size    218106944 bytes
Database Buffers   373293056 bytes
Redo Buffers    6287360 bytes
SQL> @control

Control file created.
SQL> select status from v$instance;

STATUS
------------
MOUNTED

SQL> recover database;
Media recovery complete.
SQL> alter database open;

Database altered.

来源:https://www.cnblogs.com/jyzhao/p/9075427.html

标签:oracle,重建,控制文件
0
投稿

猜你喜欢

  • Bad Tags — html有害的标签

    2008-10-13 19:47:00
  • Config服务端连接Git配置的技巧

    2023-03-12 02:32:59
  • Python 对象序列化与反序列化之pickle json详细解析

    2021-09-06 23:44:06
  • eBay 打造基于 Apache Druid 的大数据实时监控系统

    2022-12-25 21:54:37
  • MSSQL数据类型及长度限制详细说明

    2024-01-25 06:01:09
  • python中的一些类型转换函数小结

    2021-11-01 10:42:11
  • Mysql5.6修改root密码教程

    2024-01-20 01:10:23
  • Hadoop 文件系统命令行基础详解

    2023-08-31 13:57:03
  • 眼未动,心已动【碳酸饮料会】

    2009-09-01 19:32:00
  • Python多线程结合队列下载百度音乐的方法

    2022-12-01 11:43:18
  • Vue 通过自定义指令回顾v-内置指令(小结)

    2023-07-02 16:56:42
  • vscode中配置jupyter的详细步骤(彻底解决Failed to start the Kernel问题)

    2022-06-21 06:56:26
  • C#调用python.exe使用arcpy方式

    2021-03-30 05:41:13
  • Python面向对象编程基础解析(一)

    2021-08-10 15:05:12
  • python使用glob检索文件的操作

    2022-04-26 19:05:49
  • 编写SQL需要注意的细节Checklist总结

    2012-10-07 10:43:57
  • Python批量添加图片水印的实现

    2021-11-04 17:53:12
  • JS添加删除一组文本框并对输入信息加以验证判断其正确性

    2024-05-03 15:30:54
  • python实现坦克大战游戏 附详细注释

    2023-06-26 07:58:13
  • gin 获取post请求的json body操作

    2023-04-22 13:47:30
  • asp之家 网络编程 m.aspxhome.com