这里上传图片一直失败,想要查看详细信息和截图的可以下载附件
首先看一下控制文件的理解:
控制文件是一个二进制文件,用于记录数据库的物理结构。一个控制文件只属于一个数据库。创建数据库时,创建控制文件。当数据库的物理结构改变的时候,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这个也恢复成功了。
总结:
两种恢复方式基本一样,只有在启动数据库的时候有差别,可以根据数据库当时情况具体操作。
但是一般情况下不可能出现控制文件丢失。而且控制文件最少要备份两份以上放在不同的位置。
如有不足或缺漏请一起讨论,共同进步
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
软考中级精品资料免费领
- 历年真题答案解析
- 备考技巧名师总结
- 高频考点精准押题
- 资料下载
- 历年真题
193.9 KB下载数265
191.63 KB下载数245
143.91 KB下载数1148
183.71 KB下载数642
644.84 KB下载数2756
相关文章
发现更多好内容- 如何在 Java 中向 MySQL 数据库添加数据?(java怎么向mysql数据库中添加)
- 如何获取 Java 枚举类的值?(java枚举类的值怎么获取)
- 如何在 Java 中向数据库添加一条数据?(java怎么向数据库添加一条数据)
- Uncomtrade数据库异地备份指南
- CORS 在微服务架构中的应用场景有哪些?(cors在微服务架构中的应用场景)
- 如何在 Java 中创建 Maven 项目?(java怎么创建maven项目)
- 如何高效使用Uncomtrade数据库进行查询
- Java 配置环境变量后如何进行使用操作?(java配置环境变量后如何使用)
- Java 中防止接口重复提交的方法有哪些?(java接口防止重复提交的方法是什么)
- 如何提高 Java Office 的性能?(java office 怎样提高性能 )