千家信息网

ORACLE之重建控制文件

发表于:2026-10-31 作者:千家信息网编辑
千家信息网最后更新 2026年10月31日,这里上传图片一直失败,想要查看详细信息和截图的可以下载附件首先看一下控制文件的理解:控制文件是一个二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据
千家信息网最后更新 2026年10月31日ORACLE之重建控制文件

这里上传图片一直失败,想要查看详细信息和截图的可以下载附件


首先看一下控制文件的理解:

控制文件是一个二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,Oracle会更新控制文件,不能手动修改内容。


控制文件内容有:数据库名、数据库创建的时间戳、数据文件的名字和位置、redo log (联机重做日志文件)的名字和位置、表空间信息、当前日志的序列号、checkpoint 信息、最新的 RMAN备份信息、归档日志信息

当这些信息更改或者变动时,oracle数据库会自动把最新信息更新到controlfile文件里面。

启动数据库时,Oracle从初始化参数文件(pfile/spfile)中获得控制文件的名字及位置,打开控制文件,然后从控制文件中读取数据文件和联机日志文件的信息,最后打开数据库。数据库运行时,Oracle会修改控制文件,所以,一旦控制文件损坏,数据库将不能正常运行。


创建控制文件有几个前提和几个区别:

前提:

1.如果是RAC下,则需要关闭群集:

alter system set cluster_database=FALSE scope=spfile sid='*';

否则恢复的时候会报错;

2.数据库在mount或者OPEN状态下,才能够重建。

区别:

重建控制文件有两种1.resetlogs恢复和noresetlogs恢复方式

下面还是着手恢复步骤:


重建控制文件,

备份方式

Sql>alter database backup controlfile to trace as '/u01/controlfile.trcd';

创建controlfile备份文件到本地

alter database backup controlfile to '+UNDO/ORCL/control';

这个是备份控制文件到ASM管理存储里面

如果不知道当前控制文件在哪里

查看位置:select * from v$controlfile;


首先,库能够进入mount状态或者处于OPEN状态:

SQL>startup mount; 或者直接open状态

SQL> alter database backup controlfile to trace as '/u01/controlfile.trc';

进入/u01/下面

然后编辑这个控制文件

里面包含两部分恢复脚本

一个就是使用norestlogs和另外一个是使用resetlogs恢复的脚本:

内容就不详细全部列出来了:

标识Set #1.NORESETLOGS case的是使用noresetlogs恢复的

标识Set #1.RESETLOGS case的是使用resetlogs恢复的

内容如下:

第一个是noresetlogs恢复的脚本

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS ARCHIVELOG

MAXLOGFILES 192

MAXLOGMEMBERS 3

MAXDATAFILES 1024

MAXINSTANCES 32

MAXLOGHISTORY 292

LOGFILE

GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307' SIZE 50M BLOCKSIZE 512,

GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307' SIZE 50M BLOCKSIZE 512,

GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453' SIZE 50M BLOCKSIZE 512,

GROUP 4'+UNDO/orcl/onlinelog/group_4.260.912261453' SIZE 50M BLOCKSIZE 512

DATAFILE

'+DATA/orcl/datafile/system.256.912261237',

'+DATA/orcl/datafile/sysaux.257.912261239',

'+DATA/orcl/datafile/undotbs1.258.912261239',

'+DATA/orcl/datafile/users.259.912261239',

'+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

RECOVER DATABASE

ALTER SYSTEM ARCHIVE LOG ALL;

ALTER DATABASE OPEN;

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

下面这就是一个resetlog恢复的脚本:

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS ARCHIVELOG

MAXLOGFILES 192

MAXLOGMEMBERS 3

MAXDATAFILES 1024

MAXINSTANCES 32

MAXLOGHISTORY 292

LOGFILE

GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307' SIZE 50M BLOCKSIZE 512,

GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307' SIZE 50M BLOCKSIZE 512

DATAFILE

'+DATA/orcl/datafile/system.256.912261237',

'+DATA/orcl/datafile/sysaux.257.912261239',

'+DATA/orcl/datafile/undotbs1.258.912261239',

'+DATA/orcl/datafile/users.259.912261239',

'+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8

;

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','ON');

RECOVER DATABASE USING BACKUP CONTROLFILE

ALTER DATABASE ADD LOGFILE THREAD 2

GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453' SIZE 50M BLOCKSIZE 512 REUSE,

GROUP 4'+UNDO/orcl/onlinelog/group_4.260.912261453' SIZE 50M BLOCKSIZE 512 REUSE;

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

SIZE 33554432 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;


好了,下面开始停库恢复:

启动到nomount状态下:

Startup nomount

直接在nomount状态下复制粘贴下面这段脚本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" NORESETLOGS ARCHIVELOG

MAXLOGFILES 192

MAXLOGMEMBERS 3

MAXDATAFILES 1024

MAXINSTANCES 32

MAXLOGHISTORY 292

LOGFILE

GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307' SIZE 50M BLOCKSIZE 512,

GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307' SIZE 50M BLOCKSIZE 512,

GROUP 3'+UNDO/orcl/onlinelog/group_3.259.912261453' SIZE 50M BLOCKSIZE 512,

GROUP 4 '+UNDO/orcl/onlinelog/group_4.260.912261453' SIZE 50M BLOCKSIZE 512

DATAFILE

'+DATA/orcl/datafile/system.256.912261237',

'+DATA/orcl/datafile/sysaux.257.912261239',

'+DATA/orcl/datafile/undotbs1.258.912261239',

'+DATA/orcl/datafile/users.259.912261239',

'+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8;

好了

现在控制文件创建好了;如果有报错,查看是不是RAC状态下没有关闭集群

查看当前状态:已经到了MOUNTED状态下了

执行后面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','YES');

在后面的

RECOVERY DATABASE就不用执行了,因为已经有数据文件了。

这里仅仅只是控制文件没有而已

直接ALTER DATABASE OPEN;

成功启动数据库

最后执行以下TEM表空间

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

SIZE33554432 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;


resetlogs方式重建controlfile

数据文件在,但是日志文件没有是可以用这个方式回复

启动到nomount状态下:

Startup nomount

直接在nomount状态下复制粘贴下面这段脚本:

CREATE CONTROLFILE REUSE DATABASE"ORCL" RESETLOGS ARCHIVELOG

MAXLOGFILES 192

MAXLOGMEMBERS 3

MAXDATAFILES 1024

MAXINSTANCES 32

MAXLOGHISTORY 292

LOGFILE

GROUP 1'+UNDO/orcl/onlinelog/group_1.257.912261307' SIZE 50M BLOCKSIZE 512,

GROUP 2'+UNDO/orcl/onlinelog/group_2.258.912261307' SIZE 50M BLOCKSIZE 512

DATAFILE

'+DATA/orcl/datafile/system.256.912261237',

'+DATA/orcl/datafile/sysaux.257.912261239',

'+DATA/orcl/datafile/undotbs1.258.912261239',

'+DATA/orcl/datafile/users.259.912261239',

'+DATA/orcl/datafile/undotbs2.261.912261395'

CHARACTER SET UTF8;

好了

查看当前状态:已经到了MOUNTED状态下了

执行后面的:

VARIABLE RECNO NUMBER;

EXECUTE :RECNO :=SYS.DBMS_BACKUP_RESTORE.SETCONFIG('CONTROLFILE AUTOBACKUP','YES');

这里因为是用resetlogs恢复的所以启动数据库的时候也要resetlogs

ALTER DATABASE OPEN resetlogs;

成功启动数据库

最后执行以下TEM表空间

ALTER TABLESPACE TEMP ADD TEMPFILE'+DATA/orcl/tempfile/temp.260.912261313'

SIZE33554432 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

Ok这个也恢复成功了。


总结:

两种恢复方式基本一样,只有在启动数据库的时候有差别,可以根据数据库当时情况具体操作。

但是一般情况下不可能出现控制文件丢失。而且控制文件最少要备份两份以上放在不同的位置。



如有不足或缺漏请一起讨论,共同进步

附件:http://down.51cto.com/data/2367810
文件 控制 数据 数据库 状态 信息 脚本 位置 备份 方式 日志 内容 时候 成功 名字 空间 前提 就是 情况 标识 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广东猪兼强互联网科技有限公司 科技互联网龙头 互联网科技公司官网 致骋互联网科技 紫鲸互联网科技 朗涯互联网科技 未来的互联网科技 深圳期待互联网科技 互联网金融监管科技 老年人脱离互联网科技的作文 银川新华互联网科技学校地址 温州喔噻互联网科技有限公司 互联网为啥属于高科技 智腾互联网科技有限公司 互联网方面的科技前沿 互联网公司高科技产品 城市宝互联网科技有限公司 新氧科技和美国互联网有关系吗 玉溪新华互联网科技怎么选 北京瑞云互联网科技有限公司 湖北九亚互联网络科技有限公司 互联网科技的 现代互联网科技股 移动互联网年度科技创新 天津腾达互联网科技有限公司 浙南科技城互联网大厦建设工程 工业互联网展湾科技股份有限公司 山东星卡互联网科技有限公司官网 第三届互联网大会安防黑科技 互联网科技创业计划的风险分析
0