• Oracle运维实用经验系列第十二期RAC+ADG环境中跨磁盘组扩容表空间失败案例分析


    前言:

    RAC+ADG是Oracle数据库部署的常见架构,RAC保证了数据库的集群性,避免单点故障带来的停机风险,而ADG又给数据带来了进一步的保护,但这样的部署架构势必会给运维带来一定的复杂度,在日常的运维工作中也需要不断的总结经验,整理适合这样部署架构的运维方法,本文介绍一个在RAC+ADG架构中进行跨磁盘组扩容表空间失败的一个案例。

    问题现象:

    一套RAC+ADG架构的Oracle数据库在扩容表空间时出现在主库添加datafile到表空间之后,备库数据文件添加到错误的磁盘组的现象,进而最终导致备库磁盘组空间不足,ADG复制关系停止。

    问题分析:

    主库已有DATA磁盘组,应用表空间的所有数据文件都存放在该磁盘组上。为了避免单个磁盘组过大和添加磁盘引发重平衡操作,故不再扩容原有磁盘组,而是准备新建一个磁盘组DATA02来存放应用表空间的新增数据文件。

    步骤大致如下:

    1.首先在主库和备库都新建了大小为1T的磁盘组,名称均为DATA02.

    2.在主库执行添加数据文件的操作,并指定添加路径为DATA02。

    此时发现备库出现同步失败的告警。检查相关日志发现主库新增的数据文件并没有按照预期同步在备库增加到DATA02磁盘组中,而是仍旧全部增加到DATA磁盘组,导致备库DATA磁盘组写满,继续增加数据文件失败,进而导致主备库无法正常同步。发现这个问题,我们第一时间检查主备库在文件存放目录转换的参数db_file_name_convert:

    发现参数保留默认值,并没有做任何设置。所以排除了该参数对于文件存放路径进行转换。后续继续查看可能也会导致路径不一致的参数db_create_file_dest:

    检查主备库在文件存放目录转换的参数db_file_name_convert:

    发现该参数设置为+DATA。如果当db_create_file_dest和db_file_name_convert都不设置并且主备库磁盘组名字保证一致,在主库增加数据文件,备库也会默认增加到与主库同名的磁盘组里。这种情况下是不会出现备库加错磁盘组的情况。但一旦设置了db_create_file_dest参数,备库则不会考虑其他磁盘组,并优先使用这个参数的设置,从而数据文件添加到+data磁盘组里。并且在这个时候,就算尽管设置了db_file_name_convert也没用,因为db_create_file_des它的优先级更高。从官方文档也提到这一点:

    问题的原因很快定位为参数db_create_file_dest设置不当导致的。接下来首先考虑把备库原已经成功添加的几个数据文件通过move的方式移动到DATA02里:

    alter database move datafile to ‘+data02’;

    但是move完之后准备将备库MRP进程启动的时发现备库无法正常同步,报错如下:

    报错提示无法识别到70号数据文件。原因是由于70号文件的信息残留在控制文件里,但是具体对应的实体文件并不存在。所以出现alert的报错。现在考虑重新创建新的数据文件,步骤如下:

    1.将备库重新启动到mount状态;

    2.设置参数standby_file_management为manual;

    3.ALTER DATABASE CREATE DATAFILE '错误数据文件名' as '+data02' SIZE 30g autoextend off;

    4.重新设置参数standby_file_management为auto;

    5.启动同步应用进程:alter database recover managed standby database disconnect from session;

    6.检查同步完成后,取消同步进程:alter database recover managed standby database cancel;

    7.打开数据库:alter database open;

    8.重新开启数据同步:alter database recover managed standby database disconnect from session;

    这样操作之后,整个主备库同步正常。

    总结:

    ADG出现数据文件增加到错误磁盘组的原因主要是因为参数db_create_file_dest设置不当导致的,通过这次经验,我们更新了配置规范,统一将这个参数在备库中设置为空,避免类似问题的发生。

    开放系统支持部 胡伟帅@ABCDC

    • 发表于: 2018-07-18
    • 原文链接:https://kuaibao.qq.com/s/20180718G0HDLU00?refer=cp_1026
  • 相关阅读:
    大学总结(一)
    关于数组名与指针的相互转换
    错误:无法执行操作,因为未将指定的 Storyboard 应用到此交互控件的对象
    延迟初始化 (Lazy Initialization)
    Sql Server 中 GAM、SGAM、PAM、IAM、DCM 和 BCM 的详解与区别
    Xml格式的字符串(string)到DataSet(DataTable)的转换
    Sql Server 内存用不上的解决办法
    Sql Server 管理区分配(GAM,SGAM)和可用空间(PAM)的原理
    Sql Server LightWeight Pooling(纤程) 选项
    在线 Sql Server 服务无法启动的解决办法
  • 原文地址:https://www.cnblogs.com/lkj371/p/16380966.html
Copyright © 2020-2023  润新知