前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >热备份过程中对数据库崩溃的处理办法

热备份过程中对数据库崩溃的处理办法

作者头像
用户5921339
发布于 2025-05-20 08:43:31
发布于 2025-05-20 08:43:31
7700
代码可运行
举报
运行总次数:0
代码可运行

在热备份过程中,如果发生数据库崩溃该如何处理,我们分析一下这个场景,以热备份表空间TS01为例。此时数据文件表头都锁定,备份正在复制文件而系统崩溃,显然表空间的数据文件头的SCN与控制文件中的不一致。此时数据库无法打开,会要求介质恢复,其实此时需要的是结束表空间的备份模式,解锁数据文件头SCN。Oracle会自动使用实例恢复,或者使用recover datafile指令实现数据文件的恢复(recover)。下面模拟这个过程。

启动表空间的备份模式,如下例所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> alter tablespace ts01 begin backup;

Tablespace altered.

查看表空间对应的数据文件的备份模式:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from v$backup;

     FILE# STATUS     CHANGE# TIME         CON_ID
---------- ------------------ ---------- --------- ----------
   1 NOT ACTIVE     2442507 14-OCT-22      0
   3 NOT ACTIVE           0        0
   4 NOT ACTIVE           0        0
   5 ACTIVE     2773998 18-NOV-22      0
   7 NOT ACTIVE           0        0

对应数据文件的STATUS值为ACTIVE,说明数据文件正处于备份模式,此时的数据文件文件头SCN为2773998

查看数据文件的起始检验点

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#
---------- ------------------
   1        2773090
   3        2773090
   4        2773090
   5        2773998
   7        2773090

数据文件1、3、4、7的检验点为2773090,而数据文件5也就是我们设置备份模式的表空间TS01对应的数据文件的检验点SCN为2773998,比其他4个文件大,也就是比其他4个文件的文件头SCN新,原因是一旦使用alter tablespace ts01 begin backup就会触发检验点事件,刷新数据文件头的SCN,并冻结该SCN。

接下来模拟一个实例失败的故障,然后重启数据库:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> shutdown abort
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 2147483648 bytes
Fixed Size        8622776 bytes
Variable Size     1325403464 bytes
Database Buffers    805306368 bytes
Redo Buffers        8151040 bytes
Database mounted.
ORA-10873: file 5 needs to be either taken out of backup mode or media
recovered
ORA-01110: data file 5: '/u01/app/oracle/oradata/orcl/ts01.dbf'

此时报错了,首先发现数据文件5需要介质恢复,由于在表空间热备过程中实例故障,数据文件头依然锁定,数据文件头的SCN与控制文件中的SCN不同,此时数据库处于MOUNT状态,我们查询数据字典试图v$backup查看哪些数据文件处于备份状态。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> select * from v$backup;

     FILE# STATUS     CHANGE# TIME         CON_ID
---------- ------------------ ---------- --------- ----------
   1 NOT ACTIVE     2442507 14-OCT-22      0
   3 NOT ACTIVE           0        0
   4 NOT ACTIVE           0        0
   5 ACTIVE     2773998 18-NOV-22      0
   7 NOT ACTIVE           0        0

显然,数据文件5处于备份模式,这个文件需要介质恢复。下面使用recover指令恢复该文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> recover datafile 5;
Media recovery complete.

注意:上面数据文件的恢复也可以使用alter tablespace ts01 end backup来实现

数据文件5恢复之后,打开数据库,此时的数据文件已经是非备份模式。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SQL> alter database open;

Database altered.

SQL> select * from v$backup;

     FILE# STATUS     CHANGE# TIME         CON_ID
---------- ------------------ ---------- --------- ----------
   1 NOT ACTIVE     2442507 14-OCT-22      0
   3 NOT ACTIVE           0        0
   4 NOT ACTIVE           0        0
   5 NOT ACTIVE     2773998 18-NOV-22      0
   7 NOT ACTIVE           0        0

今天的分享就到这里啦~

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-11-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 IT人家 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档