Oracle 控制文件管理

 

  控制文件是一个很小的二进制文件(10MB左右),含有数据库结构信息,包括数据文件和日志文件信息。控制文件在数据库创建时被自动创建,并在数据库发生物理变数时更新。控制文件被不断更新,在任何时候都要保证控制文件可用,否则数据库将无法启动或者使用。

 

  1 控制文件包含的主要信息如下:

  数据库名称和SID标识;

  数据文件和日志文件列表;

  数据库创建的时间戳;

  表空间信息;

  当前重做日志文件序列号;

  归档日志信息;

  检查点信息;

  回滚段的起始与结束;

  备份数据文件信息;

 

  控制文件包含了如此多的重要信息,需要保护并及时备份控制文件,以便它被损坏或者磁盘介质损货时,能够及时恢复。目前保护控制文件的主要策略为多路复用控制文件与备份控制文件。

 

  2 查看目前系统的控制文件信息,主要是查看相关的字典视图

  v$controlfile  包含所有控制文件的名称和状态信息

  

 

  v$controlfile_record_section 包含控制文件中各个记录文档段的信息

  

  

  v$parameter 包含了系统所有初始化参数,可以查询到control_files的信息

   

 

  3 控制文件的多路复用

  为了提高数据库的安全性,至少要为数据库建立两个控制文件,而且这两个文件最好分别放在不同的磁盘中,这样可以避免产生由于某个磁盘故障而无法启动数据库的危险,该管理策略称为多路复用控制文件。当多路复用控制文件某个磁盘发生故障导致其包含的控制文件损坏,数据库将被关闭或者发生异常,此时可以用另一磁盘中保存的控制文件来恢复被损坏的控制位文件,然后再重启数据库,达到保护控制文件的目的。

  数据库建立时,一般会默认创建两个控制文件,我们可以手动的再创建多个控制文件且不要与默认的放在同一个磁盘中,首先我们可以修改control_files参数来增加控制文件。

  3.1 更改CONTROL_FILES

alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl','/home/oracle/ControlFiles/control03.ctl','/home/oracle/ControlFiles/control04.ctl'
scope=spfile;

   

 

  上面的代码中,前3个控制文件已经创建好,第4个文件是用户将要手动添加的,但是目前还没有创建该文件,创建该文件前需要关闭数据库,然后将第1个复制过去即可;

 

  3.2 复制控制文件

  其实添加控制文件就是将之前可用的控制文件复制过去,重命名即可,首先我们需要关闭数据库,然后将/usr/oracle/app/oradata/orcl/control01.ctl 复制为/home/oracle/ControlFiles/control04.ctl即可

  

  

  复制完之后,再重启数据库,重启之后查询v$control_files;

  

 

  到此我们控制文件多路复用的操作完成,过程中需要注意的就是,必须先关闭数据库才能把可用的控制文件复制过去,如果没有关闭就复制过去,在重启的时候会报错原控制文件与新增的不一致的错误: 

ORA-00214: control file '/usr/oracle/app/oradata/orcl/control01.ctl' version
7136 inconsistent with file '/home/oracle/ControlFiles/control04.ctl' version
7133

 

  4 创建控制文件

  当数据库所有的控制文件都丢失或者损坏,唯一补救方法就是手动创建一个新的控制文件。创建的语法如下:

  create controlfile

  reuse database db_name

  logfile

  group 1 redofiles_list1

  group 2 redofiles_list2

  group 3 redofiles_list3

  ...

  datafile

  datafile1

  datafile2

  datafile3

  ...

  maxlogfiles max_value1

  maxlogmembers max_value2

  maxinstances max_value3

  maxdatafiles max_value4

  noresetlogs|resetlogs

  archivelog|noarchivelog;

 

  db_name: 数据名称,通常是orcl

  redofiles_list: 重做日志组中的重做日志文件列表;

  datafile1: 数据文件路径;

  max_value1: 最大的重做日志文件数,这是一个永久性参数,一旦设置就不能修改,如果想要修改只有重建控制文件;

 

  4.1 创建过程

  创建之前要先对数据文件与重做日志文件备份,因为创建过程中可能会引起某些异常导致数据文件与日志文件损坏。

  查看日志文件,v$logfile

  

  查看数据文件

  

 

  根据上面的查询可以得到文件所在的路劲,然后备份日志文件与数据文件,备份之前一定先关闭数据库,不然会卡死或者出现异常情况。进入到数据文件与日志文件所在目录,测试系统正好这两个文件都在一个文件夹下,直接使用 cp 命令把它们备份到其他磁盘的文件夹下即可:

  

 

  备份完之后,将数据启动到nomount状态,即启动但不加载数据库,因为加载数据库时实例将会打开控制文件,无法达到创建新控制文件的效果。

  数据库启动到nomount状态之后,执行create controlfile 命令

create controlfile
reuse database "orcl"
logfile
group 1 '/usr/oracle/app/oradata/orcl/redo01.log',
group 2 '/usr/oracle/app/oradata/orcl/redo02.log',
group 3 '/usr/oracle/app/oradata/orcl/redo03.log'
datafile
'/usr/oracle/app/oradata/orcl/system01.dbf',
'/usr/oracle/app/oradata/orcl/sysaux01.dbf',
'/usr/oracle/app/oradata/orcl/undotbs01.dbf',
'/usr/oracle/app/oradata/orcl/users01.dbf',
'/usr/oracle/app/oradata/orcl/CTRR_DATA.dbf'

maxlogfiles 50
maxlogmembers 4
maxinstances 6
maxdatafiles 200
noresetlogs
noarchivelog;

 

  执行创建命令之后,新的控制文件还是被存放在原来的文件下,可以尝试备份然后将之前的控制文件删掉,会发现原来的文件下名字一样的控制文件又出现了,编辑SPFILE 文件中的初始化参数 CONTROL_FILES,使其指向新建的控制文件:

alter system set control_files = '/usr/oracle/app/oradata/orcl/control01.ctl','/usr/oracle/app/flash_recovery_area/orcl/control02.ctl'
scope=spfile;

 

  5 备份恢复控制文件

  5.1 备份控制文件

  直接将当前可用的任意一个多路复用下的控制文件复制到你想要备份的路劲即可;

  我们可以将控制文件备份成一个可读的数据文件,然后就可以查看里面的具体内容;

  alter database backup controlfile to trace; --备份成可读的文本文件,此方法备份之后,可以查看控制文件的具体内容,首先使用语句:

  select tracefile from v$process where addr in (select paddr from v$session where sid in (select sid from v$mystat)); 可以获取到备份之后的文件路劲与名称:

  

  

  得到路径之后,我们可以在linux去查看备份文件的具体内容:

  

  

  将其拷贝出来,主要内容就是创建控制文件的语法:

  

 

  

 

  5.2 恢复控制文件

  当控制文件所在磁盘损坏,只需要在初始化文件中重新设置control_files参数的值,使它指向备份的控制文件,就可以重启数据库,但是要保证control_files下对应的路劲下所有的控制文件版本一致才行,不然会报错误;

  如果是控制文件本身损坏,我们可以将备份文件复制到对应的目录下,然后重启数据库即可。

  

 

 

 

 

 

  

 

转载于:https://www.cnblogs.com/Latiny/p/6703141.html

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

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

相关文章

数组超过预设的最大数组大小_工作表数组大小的扩展及意义

朋友们好,今日给大家继续讲解VBA数组与字典解决方案的第17讲,数组大小的扩充问题。这一讲的内容相对比较简单,在之前的章节中讲了数组与数组的计算规律,也是利用了数组的扩展原理。其实,两个数组计算时,参与…

Android ANR 实例分析

什么是ANR? 以下四个条件都可以造成ANR发生: InputDispatching Timeout:5秒内无法响应屏幕触摸事件或键盘输入事件BroadcastQueue Timeout :在执行前台广播(BroadcastReceiver)的onReceive()函数时10秒没…

【GIT 基础篇六】分支管理(创建与合并)

上篇我们整理了如何创建远程仓库,以及如何将本地文件上传至远程仓库,仓库创建好了,我们接下来就要准备开发了,对于使用git而言,通常的习惯就是一人一个分支,等测试无误再合并;又或者根据需求创建…

git 命令汇总

瞎扯 最近有几个留言想让写下git的内容,git是一个工具,主要是用来管理码农的代码的,理由很简单,码农写的代码太多,自己都不知道可能哪里出现了Crash。Linux也是因为git的出现,可以让世界上越来越多的人维护…

我的最佳队友之K8无线蓝牙键盘深度使用测评( Keychron K8 )

K8 无线蓝牙键盘深度使用测评( Keychron K8 )——500 元左右最适配 Mac 电脑的机械键盘 0.键盘参数: 首先我们在实际测评之前,看下这个键盘的具体参数,心里有个大致的了解~ 87键 国产佳达隆G轴 可选茶轴/红轴/青轴 蓝…

你见过哪些操蛋的代码?

NO.1#define TRUE FALSE //Happy debugging suckers快乐的去调试你的代码吧,哈哈NO.2#define NULL (::rand() % 2) // would be quite nice aswell嗯,这个代码也很不错NO.3#define if( if(!卧槽,这个代码更加叼,哈哈&#xff…

后序线索树怎样画图_算法新解刘新宇(二)二叉搜索树:数据结构中的“hello world”...

二叉搜索树BST定义:基于广义二叉树,一颗二叉树定义:或者为空 或者包含三部分:一个值,一个左分支和一个右分支。这两个分支也都是二叉树分支。一颗二叉搜索树是满足下面条件的二叉树:所有左分支的值都小于本…

Android 亮屏速度分析总结

前面聊的 最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路。 计算按下power键到亮屏的时间 Android 唤醒时间统计 刚开始的时…

英语学习中总结的阅读、段落匹配、选词填空技巧

1 阅读题 一般五道题都是围绕主旨来问的,所以后四个问题也能帮助第一题的解答,找共有词~~~串起来 文章一般都是新旧观点的碰撞,所以有时候他问的是旧观点,要看清楚他问的是新观点还是旧观点,这是个陷阱~ 2 段落匹配 反…

sql 账号查询一个表查询权限_一个查询语句引发的问题以及巨型表相关操作探索与思考...

背景:关于这个标题想了试了好几个总觉得欠那么点意思。大致情况是,在某服务支持中,1张大表4.5T左右,该表也是分区表。其中一个执行频繁的SQL写法有很大问题,导致巨表全量扫描,造成IO负载很大,业…

Android 亮屏速度分析

前面聊的最近在调试项目的亮屏速度,我们希望在按下power键后到亮屏这个时间能达到500MS以内,在Rockchip 3399和3288上面的时间都不能达到要求,因此引发了一系列的调试之路。计算按下power键到亮屏的时间Android 唤醒时间统计刚开始的时候&…

container_of实例

1 前面说的 container_of 在linux内核代码里面使用非常多,对于喜欢linux编程的同学来说,对这个函数要非常清楚他的使用方法,而且还要知道他的原理,这对以后看内核代码,写内核驱动的帮助都非常大,当然&…

Git 分布式版本控制工具 03Git常用命令:Git全局设置+本地与远程仓库操作获取Git仓库+标签操作+忽略名单+工作区、暂存区、版本库+分支操作+暂时保存

Git常用命令目录4 Git常用命令4.1 Git全局设置4.2 获取Git仓库4.2.1 在本地初始化Git仓库4.2.2 从远程仓库克隆4.3 常见的概念:工作区、暂存区、版本库4.4 常见的概念:Git工作区中文件的状态4.5 本地仓库操作4.5.1 git status4.5.2 git add4.5.3 git res…

matlab dir函数_MATLAB自动管理文件

MATLAB自动管理文件1. MATLAB中路径设置(1)cd:用于切换当前工作目录示例:将当前工作目录切换到D:\Documents\MATLAB\Matlab test\study下。代码:cd (D:\Documents\MATLAB\Matlab test\study)(2)path:用于对搜索路径的操作示例:先查看当前所有的文件路径&…

Git 分布式版本控制工具 04Gitcode案例:多人协作开发流程+创建仓库+拉取操作+克隆仓库+拉取远程仓库中最新的版本+修改拉取的本地代码

文章目录5. Gitcode5.1 多人协作开发流程5.2 创建仓库5.3 拉取操作5.3.1 克隆仓库5.3.2 拉取远程仓库中最新的版本5.4 修改拉取的本地代码5.5 解决冲突5.6 跨团队协作5. Gitcode 在版本控制系统中,大约90%的操作都是在本地仓库中进行的:暂存&#xff0c…

rabbitmq如何保证消息不被重复消费_如何保证消息不被重复消费

一. 重复消息为什么会出现消息重复?消息重复的原因有两个:1.生产时消息重复,2.消费时消息重复。1.1 生产时消息重复由于生产者发送消息给MQ,在MQ确认的时候出现了网络波动,生产者没有收到确认,实际上MQ已经…

Git 分布式版本控制工具 06在IDEA中使用Git:获取Git仓库+本地仓库操作+远程仓库操作+创建/查看/切换/推送/合并分支操作

在IDEA中使用Git7. 在IDEA中使用Git7.1 在IDEA中配置Git7.2 获取Git仓库7.2.1 本地初始化仓库7.2.2 从远程仓库克隆7.3 Git忽略文件7.4 本地仓库操作7.4.1 将文件加入暂存区7.4.2 将暂存区文件提交到版本库7.4.3 查看日志7.5 远程仓库操作7.5.1 查看远程仓库7.5.2 添加远程仓库…

linux 内核宏container_of剖析

1、前面说的我在好几年前读linux 驱动代码的时候看到这个宏,百度了好久,知道怎么用了,但是对实现过程和原理还是一知半解。container_of宏 在linux内核代码里面使用次数非常非常多,对于喜欢linux编程的同学来说,了解其…

目录树 删除 数据结构_数据结构:B树和B+树的插入、删除图文详解

B树1.1B树的定义B树也称B-树,它是一颗多路平衡查找树。我们描述一颗B树时需要指定它的阶数,阶数表示了一个结点最多有多少个孩子结点,一般用字母m表示阶数。当m取2时,就是我们常见的二叉搜索树。一颗m阶的B树定义如下:1)每个结点最…

MMdetection框架速成系列 第01部分:学习路线图与步骤+优先学习的两个目标检测模型代码+loss计算流程+遇到问题如何求助+Anaconda3下的安装教程(mmdet+mmdet3d)

mmdetection 学习目录1 mmdetection 学习建议1.1 mmdetection 学习的第一件事1.2 mmdetection学习路线图1.2.1 优先看的两个库1.2.2 阅读代码1.2.3 代码学习步骤1.2.4 建议优先学习的两个目标检测模型代码1.2.5 loss计算流程的攻坚克难1.3 遇到问题如何求助2 Anaconda3下的安装…