一个数据库报警的数据恢复(r11笔记第62天)
mhr18 2024-10-12 04:30 35 浏览 0 评论
今天在火车上接到一个电话说,数据库有个报警,让我看看是怎么回事。
看着报警信息一直重复出现,看来是有些问题了。
这是一个统计库,出现了DG相关的报警(自定义配置的),看起来是备库端接收归档的时候出现了问题。
Error 270 creating remote archivelog file 'sgstatdb3'
我们知道备库端其实是有一个80%的阈值控制闪回区的,当时限于在火车上,网络,信号不顺畅,所以让同事帮忙看了下,大体是说闪回区满了,但是系统层面设置了crontab定期去删除归档,每个小时会触发一次。
这样听起来闪回区依旧满好像也没有道理啊。我联系其之前碰到的类似问题,大体有几个猜测,一个是发生了SQL的性能问题,导致产生了大量的归档,导致闪回区使用率暂时还恢复不过来。另外一种就是闪回区设置太小,一些例行操作可能短时间生成归档,闪回区还一时应付不过来。
结果没过一会,我发现自己的设想都不对,那是什么问题呢。
首先尝试手工运行定时任务脚本来删除过期归档,竟然抛出了警告。
RMAN-08120: WARNING: archived log not deleted, not yet applied by standby
archived log file name=+ARCH/sgstatdb3/archivelog/2017_01_31/thread_1_seq_176745.384.934727315 thread=1 sequence=176745
我们在RMAN中设置了归档的删除策略是必须要应用到备库之后才可以删除。所以目前基本断定应该是在之前出现了一个断点。
接着查看数据库日志发现近期的归档接收都是没有问题的,最新的归档都传输过来了,最后归档满了,新的归档接收不了了。
原本的ADG现在状态是READ ONLY了。SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
那么我们就需要找到之前是在哪个时间点出现了断点。
我读到了下面的一段日志内容,原来是在之前的一个时间点创建数据文件的时候报错了。
Datafile #872: '+DATA/sgstatdb3/datafile/tlbb_data.1197.933781165'
Fri xxx 15:41:40 2017
Errors in file /U01/app/oracle/diag/rdbms/sgstatdb3/statdb2/trace/statdb2_pr00_28125.trc:
ORA-01119: error in creating database file '+data'
ORA-17502: ksfdcre:4 Failed to create file +data
ORA-15041: diskgroup "DATA" space exhausted
File #873 added to control file as 'UNNAMED00873'.
Originally created as:
'/U01/app/oracle/oradata/statdb29/tlbb_data16.dbf'
Recovery was unable to create the file as a new OMF file.
MRP0: Background Media Recovery terminated with error 1274
Errors in file /U01/app/oracle/diag/rdbms/sgstatdb3/statdb2/trace/statdb2_pr00_28125.trc:
ORA-01274: cannot add datafile '/U01/app/oracle/oradata/statdb29/tlbb_data16.dbf' - file could not be created
Managed Standby Recovery not using Real Time Apply
Recovery interrupted!
通过这段日志可以看出,创建数据文件其实是这样一个动作,创建的时候空间慢了无法创建就会生成一个句柄,会默认在$ORACLE_HOME/dbs下生成。
我在备库端查看的情况如下:
SQL> select name from v$datafile where file#=873;
/U01/app/oracle/product/11.2.3/db_1/dbs/UNNAMED00873
文件管理的设置如下:
SQL> show parameter standby_file_management
NAME TYPE VALUE
------------------------------------ ----------- --------
standby_file_management string AUTO
当然问题的原因到底是什么呢,是磁盘组的里出现了问题,备库端使用了ASM,才两个磁盘组,数据文件的磁盘组剩余16G左右,而归档所在的磁盘组剩余56M,而问题的原因是在哪里呢。是在数据文件的磁盘组+DATA上。
NAME TOTAL_MB FREE_MB
----------------- ----------
ARCH 204800 56
DATA 6383104 16214
这个问题该怎么解释呢,因为主库创建一个数据文件,大概是30G,这个操作会映射到备库,也会在备库创建一个30G的数据文件,唯一的不同是数据文件名可以根据映射规则不同,但是在主库中空间充足,创建没有问题,在备库数据文件所在的磁盘组满了,创建不了一个30G的文件,所以这个操作就会生成一个断点,导致MRP直接异常退出,而我们设定的归档删除策略是保证归档应用到备库才可以删除,所以闪回区就会越放越满,直到几百GB的空间都满了。
问题原因已经说明清楚了,接下来该怎么处理呢。这就是一个不太常规的思路了。我们就得做减法。备库空间不足,目前还无法直接扩容,所以问题处理的空间就有一定的局限性。
我们知道主库和备库其实是有一些文件是不同的,比如temp文件,主库为30G,备库为1G也没有问题,是一种插件式的功能,而且不是必须的。所以要紧缩空间,temp就是一个首要考虑的选择,如果空间还不够怎么办,我们直接resize文件是不行的,因为主库resize的操作得等到之前的变更在备库应用完成之后才可以。那么还有哪些文件是可以暂时可清理,来应急处理这个问题呢。还有就是standby logfile了。一般是建议2*n+1的公式,我们可以在这个情况下先删掉几组,把空间先省出来,后续再调整。简单来说就是删temp文件,删除部分备库日志文件。
SQL> alter tablespace temp drop tempfile '+DATA/sgstatdb3/tempfile/temp.910.840550051';
Tablespace altered
.删除备库日志文件,如果报错,可以使用如下的方式处理。
SQL> alter database drop logfile group 26;
alter database drop logfile group 26
*
ERROR at line 1:
ORA-01624: log 26 needed for crash recovery of instance statdb2 (thread 1)
ORA-00312: online log 26 thread 1: '+DATA/sgstatdb3/onlinelog/group_26.907.840501783'
ORA-00312: online log 26 thread 1: '+DATA/sgstatdb3/onlinelog/group_26.908.840501785'
这样处理即可。
SQL> alter database clear unarchived logfile group 26;
Database altered.
SQL> alter database drop standby logfile group 26;
Database altered.
然后使用如下的方式重置数据文件,比如下面的例子:
alter database create datafile '/U01/app/oracle/product/11.2.3/db_1/dbs/UNNAMED00874' as '+DATA/sgstatdb3/datafile/tlbb_data17.dbf';
然后重新开启日志应用,但是发现RMAN开始不听话了。
$ rman target /
RMAN-00554: initialization of internal recovery manager package failed
RMAN-04005: error from target database:
ORA-00604: error occurred at recursive SQL level 1
ORA-01219: database not open: queries allowed on fixed tables/views only
ORA-06508: PL/SQL: could not find program unit being called: "SYS.X$DBMS_BACKUP_RESTORE"
ORA-06512: at line 1
RMAN-04015: error setting target database character set to ZHS16GBK
看错误是在x$的一个对象上过不去了。这个时候简单想想x$是内存表,是在数据库启动的过程中初始化的,我们可以采用如下的策略来解决。
先让MRP开启归档日志应用,应用一部分归档,然后重启数据库到Mount状态,开启RMAN清理。这样闪回区的问题就解决了,都得算计着用空间。
就这样花了个把小时的时间,问题总算是顺利解决了。
----------------------------------------------------------------------------------------
最后发起一个小活动,最近读了一些书,也交了一些书友,如果有愿意一起来参与读书的小伙伴们,咱们一起来吧,不限职业年龄,要求只有一个,喜爱读书即可。当然入群要推荐一本书。
因为微信群扫码已满,需要加入的同学可以加我微信 jeanron100,说明来意和你推荐的一本书即可,我来加你入群。
没啥目的,没啥动机,读书的事情我就不强求了,丰富自己,也可以互相聊聊。
相关推荐
- 【推荐】一个开源免费、AI 驱动的智能数据管理系统,支持多数据库
-
如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!.前言在当今数据驱动的时代,高效、智能地管理数据已成为企业和个人不可或缺的能力。为了满足这一需求,我们推出了这款开...
- Pure Storage推出统一数据管理云平台及新闪存阵列
-
PureStorage公司今日推出企业数据云(EnterpriseDataCloud),称其为组织在混合环境中存储、管理和使用数据方式的全面架构升级。该公司表示,EDC使组织能够在本地、云端和混...
- 对Java学习的10条建议(对java课程的建议)
-
不少Java的初学者一开始都是信心满满准备迎接挑战,但是经过一段时间的学习之后,多少都会碰到各种挫败,以下北风网就总结一些对于初学者非常有用的建议,希望能够给他们解决现实中的问题。Java编程的准备:...
- SQLShift 重大更新:Oracle→PostgreSQL 存储过程转换功能上线!
-
官网:https://sqlshift.cn/6月,SQLShift迎来重大版本更新!作为国内首个支持Oracle->OceanBase存储过程智能转换的工具,SQLShift在过去一...
- JDK21有没有什么稳定、简单又强势的特性?
-
佳未阿里云开发者2025年03月05日08:30浙江阿里妹导读这篇文章主要介绍了Java虚拟线程的发展及其在AJDK中的实现和优化。阅前声明:本文介绍的内容基于AJDK21.0.5[1]以及以上...
- 「松勤软件测试」网站总出现404 bug?总结8个原因,不信解决不了
-
在进行网站测试的时候,有没有碰到过网站崩溃,打不开,出现404错误等各种现象,如果你碰到了,那么恭喜你,你的网站出问题了,是什么原因导致网站出问题呢,根据松勤软件测试的总结如下:01数据库中的表空间不...
- Java面试题及答案最全总结(2025版)
-
大家好,我是Java面试陪考员最近很多小伙伴在忙着找工作,给大家整理了一份非常全面的Java面试题及答案。涉及的内容非常全面,包含:Spring、MySQL、JVM、Redis、Linux、Sprin...
- 数据库日常运维工作内容(数据库日常运维 工作内容)
-
#数据库日常运维工作包括哪些内容?#数据库日常运维工作是一个涵盖多个层面的综合性任务,以下是详细的分类和内容说明:一、数据库运维核心工作监控与告警性能监控:实时监控CPU、内存、I/O、连接数、锁等待...
- 分布式之系统底层原理(上)(底层分布式技术)
-
作者:allanpan,腾讯IEG高级后台工程师导言分布式事务是分布式系统必不可少的组成部分,基本上只要实现一个分布式系统就逃不开对分布式事务的支持。本文从分布式事务这个概念切入,尝试对分布式事务...
- oracle 死锁了怎么办?kill 进程 直接上干货
-
1、查看死锁是否存在selectusername,lockwait,status,machine,programfromv$sessionwheresidin(selectsession...
- SpringBoot 各种分页查询方式详解(全网最全)
-
一、分页查询基础概念与原理1.1什么是分页查询分页查询是指将大量数据分割成多个小块(页)进行展示的技术,它是现代Web应用中必不可少的功能。想象一下你去图书馆找书,如果所有书都堆在一张桌子上,你很难...
- 《战场兄弟》全事件攻略 一般事件合同事件红装及隐藏职业攻略
-
《战场兄弟》全事件攻略,一般事件合同事件红装及隐藏职业攻略。《战场兄弟》事件奖励,事件条件。《战场兄弟》是OverhypeStudios制作发行的一款由xcom和桌游为灵感来源,以中世纪、低魔奇幻为...
- LoadRunner(loadrunner录制不到脚本)
-
一、核心组件与工作流程LoadRunner性能测试工具-并发测试-正版软件下载-使用教程-价格-官方代理商的架构围绕三大核心组件构建,形成完整测试闭环:VirtualUserGenerator(...
- Redis数据类型介绍(redis 数据类型)
-
介绍Redis支持五种数据类型:String(字符串),Hash(哈希),List(列表),Set(集合)及Zset(sortedset:有序集合)。1、字符串类型概述1.1、数据类型Redis支持...
- RMAN备份监控及优化总结(rman备份原理)
-
今天主要介绍一下如何对RMAN备份监控及优化,这里就不讲rman备份的一些原理了,仅供参考。一、监控RMAN备份1、确定备份源与备份设备的最大速度从磁盘读的速度和磁带写的带度、备份的速度不可能超出这两...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle位图索引 (63)
- oracle批量插入数据 (62)
- oracle事务隔离级别 (53)
- oracle 空为0 (50)
- oracle主从同步 (55)
- oracle 乐观锁 (51)
- redis 命令 (78)
- php redis (88)
- redis 存储 (66)
- redis 锁 (69)
- 启动 redis (66)
- redis 时间 (56)
- redis 删除 (67)
- redis内存 (57)
- redis并发 (52)
- redis 主从 (69)
- redis 订阅 (51)
- redis 登录 (54)
- redis 面试 (58)
- 阿里 redis (59)
- redis 搭建 (53)
- redis的缓存 (55)
- lua redis (58)
- redis 连接池 (61)
- redis 限流 (51)