千家信息网

ORACLE之重建控制文件

发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,这里上传图片一直失败,想要查看详细信息和截图的可以下载附件首先看一下控制文件的理解:控制文件是一个二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据
千家信息网最后更新 2025年02月01日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安全错误 数据库的锁怎样保障安全 铁路网络安全五禁止 出纳软件开发 海外网络安全查询网 网络安全检测系统的设计实现 安卓清理缓存和数据库 神话互联网科技天津有限公司 网络安全敏感国家列表 我的世界网易版服务器雪球回城指令 无锡智能化软件开发哪家强 网络安全的关键技术包括 服务器cpu运行时间 多个房间用影音服务器有什么用 喋血复仇被服务器封禁 中山大学网络安全学院分数线 数据库中的fix是什么意思 黔西南租房软件开发 安徽合肥网络安全攻防演练 潍坊财务软件开发设计 冒险岛新版游戏数据库 企业级服务器的性能 服务器网络管理系统 学网络技术等基础知识 济宁手机软件开发哪家做的好 万方数据库使用方法 文字 漏洞扫描属于网络安全设备吗 数据库应用教程与实验 2网络安全插画接单 系统数据库无法登录怎么办 2018网络安全周青少年日 计算机网络技术全套ppt
0