我们的文章会在微信公众号IT民工的龙马人生博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!

由于博客中有大量代码,通过页面浏览效果更佳。

运气爆棚,一套运行了差不多7年的数据库环境在今天遇到2个BUG,一个是Oracle BUG,一个是Linux操作系统的BUG,接下来就和大家先看看Oracle这个未知的重大BUG,因为时间紧,也没有详细去分析到底是什么原因触发的BUG,下面大概的描述一下过程。

环境介绍

数据库的版本为Oracle 11.2.0.4 PSU为2018年上线时最新的PSU,架构为单机的主从架构。这个环境的操作系统、数据库、硬件和迁移都是我在2018年一条龙服务弄的,是一个医院的环境。整个环境运行非常的稳定,曾经在某年早上9点业务高峰期故障时,仅用了2分钟(系统上线时就已经实现一键容灾切换和浮动IP地址的一键切换),就完成了数据库切换和业务系统的恢复。这里多说一句,对医院行业中单机环境可能比RAC的稳定性更高,故障恢复时间更短,并且成本可以做到很低。就如这家医院用不到15万的硬件费用购买2台X86服务器替换了原来的基于小机的HA和存储双活的架构。

操作过程

前面提到客户当前的架构为一主一从,其实最开始设计的是一主二从的架构,其中有一台服务器放到另外一栋楼的容灾机房,实现双数据中心数据库的容灾,但后来因为网络整改后出现网络异常,容灾机房的服务器就下线了。后来客户想把容灾机房的数据库同步恢复,由于就有了这次的需求,重新搭建DG环境。

这里没有采用常规的duplicate方式来搭建DG,而是通过将备库中最近一次全备及后面的增量备份和归档日志备份的RMAN备份文件复制到容灾机房服务器上,通过RMAN的restore和recover命令来恢复。

数据库恢复完成,启动实时同步,但是alert日志中报需要135的归档日志,这个就尴尬了,135那个时候的归档还在2018年,感觉非常的奇怪。于是查询数据文件头的信息,查询信息如下:

set lines 300
alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss';
col checkpoint_change# for 99999999999999 ;
select file#,checkpoint_time,checkpoint_change# from v$datafile_header; FILE# CHECKPOINT_TIME CHECKPOINT_CHANGE#
------- ------------------- ------------------
8 2025-08-13 00:50:02 37045059023994
11 2025-08-13 00:50:02 37045059023994
10 2025-08-13 00:50:02 37045059023994
9 2025-08-13 00:50:02 37045059023994
33 2023-03-07 15:45:31 36758410072244
23 2018-08-07 18:22:89 82399

这里看到数据文件23的checkpoint的信息还是2018年,scn的值也是非常的。这个不应该啊,RMAN备份文件是最近一次的备份,并且整个restore过程中没有报错。查询v$datafile控制文件中的SCN信息是正常的。

但是由于时间紧急,没有过多去分析原因,于是在重新执行了一次数据文件的还原:

restore datafile 23,33;
recover datafile 23,33;

通过利用同一份备份集文件在进行一次数据文件还原后数据文件的SCN的信息正常了。

不知道是什么BUG

由于后续的变更都需要依赖这套环境,所以也没有过多的去分析原因,但是可以肯定的是第一次restore database时是没有报错的,出现这个现象是真的很奇怪,最少目前没有发现任何已知的BUG。

这里提示大家,数据库一个有效的备份系统是由正确的备份策略、可还原的备份集和可还原的技术方案三部分组成,别以为只做了备份就有一个有效的备份系统了。

------------------作者介绍-----------------------

姓名:黄廷忠

现就职:Oracle中国高级服务团队

曾就职:OceanBase、云和恩墨、东方龙马等

电话、微信、QQ:18081072613

个人博客: (http://www.htz.pw)

CSDN地址: (https://blog.csdn.net/wwwhtzpw)

博客园地址: (https://www.cnblogs.com/www-htz-pw)


故障处理:偶遇Oracle备份与还原的未知重大BUG的更多相关文章

  1. Oracle 备份与还原

    oracle 备份与还原 一.备份数据库(exp) 1.完全备份 exp demo/demo@orcl buffer=1024 file=d:\back.dmp full=y demo:用户名.密码 ...

  2. C#oracle备份和还原

    最近公司的oracle备份工具不好使了,原来是公司的人用VB写的,由于我是主攻C#的,所以想着自己来写一个C#版本的oracle备份和还原工具. 一开始,我按照原来的设计思路来进行编写,想在pluss ...

  3. oracle 备份与还原 及相关操作

    drop user 用户名 cascade; ........删除用户 create user 用户名 identified by 密码 default tablespace 数据文件名 tempor ...

  4. oracle备份与还原(导入导出)

    Oracle数据导入导出imp/exp 功能:Oracle数据导入导出imp/exp相当于oracle数据还原与备份.说明:大多情况都可以用Oracle数据导入导出完成数据的备份和还原(不会造成数据的 ...

  5. oracle备份与还原数据

    一.表数据备份与还原 creat table  备份表   select * from  原表  where insert  into  原表  select  *  from  备份表 二.利用备份 ...

  6. oracle 备份和还原还有创建用户、表空间、授权

    --找到存放dbf文件的路径--E:\oracle\product\10.2.0\oradata\orcl--可以通过此语句进行查询select * from v$datafile; --创建表空间c ...

  7. oracle备份、还原

    ----第一步:设置空表导出 ----由于Oracle 11G在用EXPORT导出时,空表不能导出.解决方法如下:(11G中有个新特性,当表无数据时,不分配segment,以节省空间) select ...

  8. Oracle备份、还原数据库

    备份数据库 创建备份目录(用sys账号),若已创建备份目录,此步可忽略 create directory db_bak as 'D:\ ECIMS_DB' --查看创建的目录 select * fro ...

  9. oracle备份和还原

    用exp命令即可完成,但要看具体的备份方式. 1. 导出一个完整数据库 exp system/manager file=bible_db log=dible_db full=y 2. 导出数据库定义而 ...

  10. oracle数据泵备份与还原

    完整的常用的一套oracle备份以及还原方案 --在新库中新建数据目录,我没有特别说明在哪执行的语句都可在plsql中执行 CREATE OR REPLACE DIRECTORY dump_dir A ...

随机推荐

  1. L1-5、Prompt 写作中的常见误区

    语言很自然,但写法要"工程化". 为什么要重视 Prompt 的写作规范? Prompt 是"给 AI 的任务指令",不清不楚,AI 就会"乱猜&qu ...

  2. 在MySQL数据库中保存布尔型数据

       在存储数据时,经常会用到"是"."否"或者"有"."无"这种数据,这种时候就要应用布尔型这种数据类型了.那如何在M ...

  3. docker-compose用法

    以下的示例搭建龙一个wordpress博客 services: mysql: image: mysql:latest environment: - MYSQL_ROOT_PASSWORD=123456 ...

  4. Keil watch中数据不更新解决办法

    watch数据不更新解决办法 在使用keil的watch窗口观察寄存器里面的值进行调试时,有时候里面的值就是不会更新,经测试打开View中最下面的那个按键即可

  5. HTTP POST方式调用SOAP OPERATION类的接口

    wsdl地址或者接口地址中有多个方法(operation) 如下是soapui测试的例子,wsdl地址下包含多个operation,但是现在我想用http的方式,只做getKnowledgeParts ...

  6. Cursor 1.2重磅更新,这个痛点终于被解决了!

    大家好,我是程序员鱼皮.分享一个重磅消息,AI 编程工具 Cursor 1.2 版本正式发布了! 感觉最近 Cursor 团队像打了鸡血一样,从 1.0 到 1.1 再到 1.2,短短一个月更新了 2 ...

  7. VUE加Vite创建项目

    首先需要找到Vite 官网,然后点击开始 Vite 需要 Node.js 版本 >= 12.0.0. $ npm init vite@latest 不知道之前为什么不行,装了一下旧的版本,然后再 ...

  8. SQL Server 部分包含数据库的原理

    原文链接:https://blog.csdn.net/zhoujunah/java/article/details/103513426 包含是针对数据库独立性而来的,非包含数据库(SQL Server ...

  9. 解决 win11 等操作系统无法使用共享打印机 0x00000709

    前题 共享打印机的正确打开方式,我想大家都不陌生,从WIN XP 时代就开始广泛使用了,尤其是公司内部和企事业单位. 解题 我主要想说的是随着系统的升级,win10 和win11 考虑安全性方面,在一 ...

  10. Docker部署RestCloud ETL社区

    镜像说明 nriet/restcloud:latest version:1.3.0 os:slim-buster tomcat:基于官方镜像 tomcat:8.5.78-jdk8-openjdk-sl ...