资讯专栏INFORMATION COLUMN

记一次Oracle控制文件分析情况

hersion / 2932人阅读

摘要:如果一个数据库的所有控制文件都出了问题,那么这个数据库就需要进行恢复。因此,实际的商用数据库至少需要个一般为个控制文件,为了防止磁盘的物理故障,这些控制文件最好放在不同的物理磁盘上,而且最好放在不同的物理磁盘控制器上。

最近两天在从头看一些与DBA有关的书籍,有一章讲到了控制文件,现在整理一下有关的知识点及实际对照生产库对比的情况

控制文件的定义及引入的目的

Oracle数据库的控制文件是数据库中极其重要的文件,该文件是一个比较小的二进制文件,它记载了物理数据库的当前状态,每一个控制文件只属于一个数据库,但为了防止控制文件丢失,一个数据库一般有不止一个控制文件,这些控制文件中的内容完全一样,在数据库装载或打开之前,Oracle服务器不必须能够访问控制文件。当数据库在打开状态下,Oracle服务器会随时修改控制文件中的内容,任何用户,包括数据库管理员都不能修改控制文件中的数据。

如果由于某种原因Oracle服务器不能访问控制文件了,那么数据库也就无法正常工作了。如果一个数据库的所有控制文件都出了问题,那么这个数据库就需要进行恢复。因此,实际的商用数据库至少需要2个(一般为3个)控制文件,为了防止磁盘的物理故障,这些控制文件最好放在不同的物理磁盘上,而且最好放在不同的物理磁盘控制器上。

实际对比一个生产库来看一下
我们先执行命令:
select name from v$controlfile;
输出结果:

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

接下来我们登陆到服务器路径下,看一下说的是否跟书上一样。

[oracle@oradb1 orcl]$ du -ks *
9616    control01.ctl
9616    control02.ctl

这里发现,2个控制文件,大小是一样的。

之后按照书上的说法,目前看来,这2个控制文件都在一个目录下,是有安全隐患的,如果磁盘坏了的话两个控制文件都没办法访问了,那么数据库就启动不了了。(注意,这里同理,Redo文件也一样需要在不同的磁盘下)

接下来问题来了
我们怎么知道实际在Linux下,这些文件系统都挂载在哪些盘上了呀?好像印象中,我们都是做的Raid1或者Raid5,并且这台生产系统,还是在云上的虚拟机,貌似没办法知道哪个磁盘是给我们这台服务器用的,这样的话,这个风险岂不是很高么?
关于这里,我询问了比较懂Linux存储的同事,也上网找了一下相关资料,得到如下结论:

在oracle文档上强烈建议将使用多个控制文件并放置在不同的硬盘上。这样的建议和架构对控制文件的保护上没错,但是在实际的生产系统中这样的架构似乎并不合理。加入放在两个硬盘上,那么两块硬盘中有故障的概率要比一块硬盘大。而在oracle系统中,无论哪个contorlfile失效都会导致系统宕掉。这可能到增加了系统故障的可能。所以达不到高可用的要求。而一些实际的系统架构是依赖于硬件的冗余,比如raid1或者raid5/raid6的配置来保证系统的高可用运行和controlfile在硬盘出现故障时不会丢失。
另外,对controlfile的备份也需要重视。

看起来Oracle官方的推荐,跟实际生产情况还是有差异的,我们能做到的就是在备份数据库的时候,一定要注意把控制文件备份出来,这样不管通过什么方式恢复了数据库,如果磁盘有问题的话,我们可以拿备份的控制文件来用。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/35086.html

相关文章

  • 一次升级Oracle驱动引发的死锁

    摘要:问题描述近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了次死锁的问题,部分关键日志如下日志还是挺明显的,线程获得了锁,等待获取而正好相反,从而导致死锁问题分析以上的错误 问题描述 近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了2次死锁(deadlock)的问题,部分关键日志如下: Found one ...

    aaron 评论0 收藏0
  • 一次升级Oracle驱动引发的死锁

    摘要:问题描述近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了次死锁的问题,部分关键日志如下日志还是挺明显的,线程获得了锁,等待获取而正好相反,从而导致死锁问题分析以上的错误 问题描述 近期项目需要从虚拟机环境迁移到容器环境,其中有一个项目在迁移到容器环境之后的两天之内出现了2次死锁(deadlock)的问题,部分关键日志如下: Found one ...

    Caicloud 评论0 收藏0
  • 一次错误卸载软件包导致Linux系统崩溃的修复解决过程

    摘要:于是检查时发现,拼写错误,应为。第个问题,是真真切切错误卸载重要软件包,导致系统崩溃,修复系统的方法自然也就是利用原镜像在下把该装的都装回去,前提是日志存在,万幸没有执行过。 首先问题产生的缘由很简单,是我一同事在安装oracle一套软件时,按照要求需要binutils软件包的32位版本,然而在Oracle Linux已经装有64位,按理说是可以安装i686的,我猜应该是32位的版本低...

    warnerwu 评论0 收藏0
  • 一次错误卸载软件包导致Linux系统崩溃的修复解决过程

    摘要:于是检查时发现,拼写错误,应为。第个问题,是真真切切错误卸载重要软件包,导致系统崩溃,修复系统的方法自然也就是利用原镜像在下把该装的都装回去,前提是日志存在,万幸没有执行过。 首先问题产生的缘由很简单,是我一同事在安装oracle一套软件时,按照要求需要binutils软件包的32位版本,然而在Oracle Linux已经装有64位,按理说是可以安装i686的,我猜应该是32位的版本低...

    dreamGong 评论0 收藏0
  • 一次oracle数据库redolog全部丢失的恢复

    摘要:执行导入之前,需要先使用工具重新创建一个名为的数据库。执行下面操作进行数据导入执行完上面操作之后,数据库就恢复完了。在数据库日常使用过程中,做好备份和谨慎操作是保护系统安全最有效的手段。 查看redolog的状态 $ sqlplus / as sysdba SQL> select GROUP#, STATUS from v$log; GROUP# STATUS ------...

    IamDLY 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<