Oracle的控制文件多路复用,控制文件备份,控制文件手工恢复

一.配置控制文件多路复用 

 1.查询Oracle的控制文件所在位置

SQL> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control01.ctl
/u01/app/oracle/fast_recovery_area/orcl/control02.ctl

 spfile多路复用控制文件

2.修改control_files参数:

SQL> alter system set 
control_files='/u01/app/oracle/oradata/orcl/control02.ctl',
'/u01/app/oracle/oradata/orcl/control03.ctl',
'/u01/app/oracle/oradata/orcl/control05.ctl' 
scope=spfile;

3.关闭数据库 

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down

 4. 进行文件拷贝(必须在数据库关闭下复制文件)

[oracle@cz ~]$ cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control02.ctl
[oracle@cz ~]$ cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control03.ctl
[oracle@cz ~]$ cp /u01/app/oracle/oradata/orcl/control01.ctl /u01/app/oracle/oradata/orcl/control05.ctl

5. 连接数据库 

[oracle@cz ~]$ sqlplus / as sysdba

6. 启动数据库

SQL> startup;
ORACLE instance started.Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
Database mounted.
Database opened.

 7.查询控制文件信息

SQL> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/oradata/orcl/control03.ctl
/u01/app/oracle/oradata/orcl/control05.ctl

二.控制文件的损坏模拟与重建

1.关闭数据库,并模拟损坏

关闭数据库
SQL> shutdown immediate;
模拟单个控制文件损坏
SQL> !rm -rf /u01/app/oracle/oradata/orcl/control05.ctl

 2.尝试启动数据库,显然报错

SQL> startup;
ORACLE instance started.Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
ORA-00205: error in identifying control file, check alert log for more info

3.拷贝其他路径在的控制文件给损坏的那个路径的控制文件

SQL> !cp /u01/app/oracle/oradata/orcl/control02.ctl /u01/app/oracle/oradata/orcl/control05.ctl

4.尝试启动数据库,显然成功了

SQL> startup
ORACLE instance started.Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
Database mounted.
Database opened.

5. 查看控制文件和实例状态

SQL> select name from v$controlfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/control02.ctl
/u01/app/oracle/oradata/orcl/control03.ctl
/u01/app/oracle/oradata/orcl/control05.ctl

 实例状态

SQL> select status from v$instance;STATUS
------------
OPEN

三.通过 TRACE 备份  

严格意义上来说,不是针对控制文件的备份,而是根据现在系统情况生成了一份 trace
文件,这个 trace 文件中记录了创建控制文件的基本信息。
SQL> alter database backup controlfile to trace as '/u01/app/oracle/oradata/orcl/controfiles.bak';Database altered.

四.所有控制文件损坏、丢失 

1.TRACE 备份  的优势与缺点

这种情况可以利用前面生成的 trace 文件进行手工重建。但是要注意,手工重建新
的,导致原来存在的一些备份资料库元数据丢失,如果采用 RMAN 则不会。
Trace 文件是我们事先导出的,如果在发生故障之前从来没有生成过该如何处理?需
要从其他好的机器上 trace 一份模板,然后按照模板把该库对应的所有数据文件、日志文
件等信息找出来,然后对应到模板上进行重建。
trace 文件中有两段代码:第一段 sql 是在所有 online redolog 没有丢失,以
noresetlogs 选项打开数据库的情况下使用的。第二段则是在丢失了 online redolog 需要
resetlogs 的情况下使用。

2.模拟所有控制文件丢失,手工重建。

SQL> !rm -rf /u01/app/oracle/oradata/orcl/control02.ctlSQL> !rm -rf /u01/app/oracle/oradata/orcl/control03.ctlSQL> !rm -rf /u01/app/oracle/oradata/orcl/control05.ctlSQL> startup
ORACLE instance started.Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
ORA-00205: error in identifying control file, check alert log for more info

 启动报错

QL> startup
ORACLE instance started.Total System Global Area 1169149952 bytes
Fixed Size		    2252624 bytes
Variable Size		  738197680 bytes
Database Buffers	  419430400 bytes
Redo Buffers		    9269248 bytes
Database mounted.
ORA-01122: database file 1 failed verification check
ORA-01110: data file 1: '/u01/app/oracle/oradata/orcl/system01.dbf'
ORA-01207: file is more recent than control file - old control file

 3.trace 文件第一段 sql 编辑成文件并执行。

把下面方框中的sql编辑成脚本并执行

 创建脚本文件

[oracle@cz orcl]$ vim control.sql

 把上面的sql粘贴进去作为脚本

 

 执行脚本

SQL> @control.sql
SP2-0734: unknown command beginning "TARTUP NOM..." - rest of line ignored.Control file created.

 查看实例状态数据库恢复正常

SQL> select status from v$instance;STATUS
------------
OPEN
这时,控制文件里面的 SCN 号就追平了数据文件头部的 SCN 号了。
SQL> select file#,checkpoint_change# from v$datafile;
SQL> select file#,checkpoint_change# from v$datafile_header;

 

数据库正常打开,注意:这时候还有一个临时表空间不要忘了重新创建,实际临时表
空间文件并没有删除,但是由于删除了控制文件,数据字典中无法查到临时表空间文件。
所以临时表空间也需要重新建立。

4.临时表空间是空值

SQL> select * from v$tempfile;no rows selected
数据字典查询是空值,但是 OS 系统层面依然存在 temp01.dbf 。所以需要重新建立。

5.重新建立临时表空间

SQL> ALTER TABLESPACE TEMP ADD TEMPFILE '/u01/app/oracle/oradata/orcl/temp01.dbf' SIZE 30408704 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;Tablespace altered.

6.再次查询$v$tempfile;

SQL> select name from v$tempfile;NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/orcl/temp01.dbf
总结:这个重建控制文件的过程主要有两大部分内容:
第一部分是脚本中的可见信息:定义了几个参数的最大值,在线日志的物理信息,数
据文件的物理信息,使用的字符集。
第二部分是隐含的不可见信息,比如 SCN 信息,重建最关键的是将当前所有数据文
件头部的最新 SCN 信息复制到了控制文件中,以便接下来打开数据库。

 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/207643.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

优思学院|质量管理怎样才能做好?

质量管理怎样才能做好?这是一个好问题,很多人第一时间会想到建立一个稳定的质量管理体系,例如ISO9001,又或者善用QC七大手法等等,虽然以上这些方法都是实用和正确的,绝大多数企业通常最忽略的,其…

数据结构学习笔记——多维数组、矩阵与广义表

目录 一、多维数组(一)数组的定义(二)二维数组(三)多维数组的存储(四)多维数组的下标的相关计算 二、矩阵(一)特殊矩阵和稀疏矩阵(二)…

专业远程控制如何塑造安全体系?向日葵“全流程安全闭环”解析

安全是远程控制的重中之重,作为国民级远程控制品牌,向日葵远程控制就极为注重安全远控服务的塑造。近期向日葵发布了以安全和核心的新版“向日葵15”以及同步发布《贝锐向日葵远控安全标准白皮书》(下简称《白皮书》),…

【LeetCode刷题】--40.组合总和II

40.组合总和II 本题详解&#xff1a;回溯算法 class Solution {public List<List<Integer>> combinationSum2(int[] candidates, int target) {int len candidates.length;List<List<Integer>> res new ArrayList<>();if (len 0) {return re…

Golang 中的良好代码与糟糕代码

最近&#xff0c;有人要求我详细解释在 Golang 中什么是好的代码和坏的代码。我觉得这个练习非常有趣。实际上&#xff0c;足够有趣以至于我写了一篇关于这个话题的文章。为了说明我的回答&#xff0c;我选择了我在空中交通管理&#xff08;ATM&#xff09;领域遇到的一个具体用…

计算机毕业设计 基于微信小程序的“共享书角”图书借还管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

shell脚本之循环语句(for、while、untli)

循环语句&#xff1a; 一定要有跳出循环条件 循环条件&#xff1a; 1.已知循环的次数&#xff08;新来十个人&#xff0c;就要新建十个账号 2.未知循环的次数&#xff0c;但是要有跳出循环条件&#xff08;对象生气&#xff0c;要道歉到原谅为止&#xff09; for&#xff…

maven打包可执行jar含依赖lib

修改pom.xml <build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!-- jdk8可用&#xff0c;其他jdk版本可能需改插件版本 --><version>2.3.7.RE…

CSS伪类选择器详细讲解

前言 伪类选择器在CSS中起到的作用可以说是至关重要的&#xff0c;如果CSS没有伪类选择器&#xff0c;有很多效果都要借助js来完成&#xff0c;这样不仅代码量增加&#xff0c;维护起来你难度也大。这样程序员的工作量大&#xff0c;也违背了CSS诞生的作用&#xff0c;就是提高…

JSP:Javabean

起初&#xff0c;JavaBean的目的是为了将可以重复使用的代码进行打包&#xff0c;在传统的应用中&#xff0c;JavaBean主要用于实现一些可视化界面&#xff0c;如一个窗体、按钮、文本框等&#xff0c;这样的JavaBean称之可视化的JavaBean。 随着技术的不断发展与项目的需求&am…

CentOS8安装MySQL

选择MySQL数据库的原因&#xff1a; 1、运行速度快&#xff1b; 2、开源免费&#xff1b; 3、易学易用&#xff1b; 4、可移植性&#xff0c;能够在众多不同的系统上工作&#xff1b; 5、丰富的接口&#xff0c;提供了用于C、C等语言的API&#xff1b; 6、支持查询语言&#xf…

设计循环队列(详解)

呀哈喽&#xff0c;我是结衣 今天给大家带来的内容如标题所述&#xff0c;我们来设计环形队列&#xff0c;虽然队列没有讲&#xff0c;但是我就是想讲啊。那么环形队列现在开始。 队列的属性 在设计环形队列前&#xff0c;我们先要了解队列的特点&#xff08;先进先出&#x…