暂无图片
暂无图片
6
暂无图片
暂无图片
暂无图片

Oracle数据库RMAN备份导致宕机

原创 陈举超 2025-05-14
662

问题现象:

Oracle RAC 数据库实例在运行RMAN备份时崩溃。

问题分析:

检查崩溃前的等待事件是:

change tracking file synchronous read

日志错误如下:

Block change tracking failed to initialize (1) with error 0.

问题原因:

怀疑Block Change Tracking (BCT) 文件存在问题。

解决方案:

检查块更改跟踪文件的位置,以确保它不是存储在I/O负载较重的磁盘。例如,不要将change-tracking文件与重做或存档文件放在同一磁盘上。
如果large_pool_size参数已经设置,考虑是否需要增加值。如果不是,则将large_pool_size的值显式设置为2GB或更高。
如果上述方法不能解决问题。考虑以下内容:

1.禁用 BCT:

SQL>  alter database disable block change tracking;

2.确认已通过disable命令删除现有BCT文件,否则删除BCT。
3.如果必须启动BCT,更换到空闲的磁盘:

SQL> alter database enable block change tracking using file '/<path>/bct.ora';

Block Change Tracking 介绍:

什么是Block Change Tracking:

Block change tracking(块更改跟踪)跟踪受每次数据库更新影响的数据文件块。
如果在主数据库或备用数据库上启用了块更改跟踪,则RMAN将使用块更改跟踪文件来标识增量备份的更改块。
通过读取这个小位图文件来确定哪些块发生了更改,RMAN避免了扫描它正在备份的数据文件中的每个块。
默认情况下,块更改跟踪已禁用。
然而,在备份过程中避免完整数据文件扫描的好处是相当大的,特别是在备份之间只更改了一小部分数据块的情况下。
如果您的备份策略涉及增量备份,则建议使用块更改跟踪。
块更改跟踪不会更改用于执行增量备份的命令。
初始配置后,块更改跟踪文件不需要维护。
如果启用了Oracle Active Data Guard选项的许可证,则只能在物理备用数据库上启用块更改跟踪。

关于块更改跟踪文件中的空间管理:

Oracle数据库自动管理更改跟踪文件中的空间,以保留涵盖八个最新备份的块更改数据。
达到最多八个位图后,最旧的位图将被跟踪当前更改的位图覆盖。
块更改跟踪文件维护了标记备份之间数据文件更改的位图。
数据库在每次备份之前执行位图切换。
第一级0增量备份扫描整个数据文件。
后续增量备份使用块更改跟踪文件仅扫描自上次备份以来标记为已更改的块。
只有当增量备份基于在块更改跟踪文件中最旧位图开始后进行的父备份时,才能对其进行优化。
在制定增量备份策略时,请考虑八个位图的限制。
例如,如果先进行0级数据库备份,然后进行7次差异增量备份,则块更改跟踪文件现在包括8个位图。
如果随后进行累积级别1增量备份,则RMAN无法优化备份,因为与父级别0备份对应的位图将被跟踪当前更改的位图覆盖。

块变更跟踪文件的位置:

默认情况下,块更改跟踪文件在DB_CREATE_FILE_DEST初始化参数指定的目标中创建为Oracle管理的文件。
还可以通过在启用块更改跟踪时指定其名称,将块更改跟踪文件放置在您选择的任何位置。
为整个数据库创建一个块更改跟踪文件。
Oracle建议不要将原始设备(即没有文件系统的磁盘)用作更改跟踪文件。
在Oracle RAC环境中,更改跟踪文件必须位于可从群集中所有节点访问的共享存储上。
RMAN不支持备份和恢复更改跟踪文件。
当数据库确定更改跟踪文件无效时,它会重置更改跟踪文件。
如果还原和恢复整个数据库或子集,则数据库会重置块更改跟踪文件并再次开始跟踪更改。
进行0级增量备份后,下一次增量备份可以使用更改跟踪数据。

关于块更改跟踪文件的大小:

块更改跟踪文件的大小与数据库的大小和启用的重做线程数成正比。
块更改跟踪文件的大小可以随着数据库的更改而增加和减少。
大小与数据库更新的频率无关。
通常,单个实例的块变化跟踪所需的空间大约是要跟踪的数据块大小的1/30000。
对于Oracle RAC环境,它是数据库大小的1/30000乘以启用的线程数。
以下因素可能导致文件大于此估计值:
为了避免随着数据库的增长而分配空间的开销,块更改跟踪文件的大小从10 MB开始。
新空间以10MB为增量分配。
因此,对于高达约300GB的任何数据库,文件大小不小于10MB,对于高达约600GB的数据库,文件尺寸不小于20MB,以此类推。
对于每个数据文件,在块变化跟踪文件中分配至少320千字节的空间,而不管数据文件的大小如何。
因此,如果您有大量相对较小的数据文件,则更改跟踪文件比包含相同数据的较大数据文件数量较少的数据库更大。

Enabling Block Change Tracking

SHOW PARAMETER DB_CREATE_FILE_DEST

ALTER SYSTEM SET 
  DB_CREATE_FILE_DEST = '/disk1/bct/'
  SCOPE=BOTH SID='*';

  ALTER DATABASE ENABLE BLOCK CHANGE TRACKING;

ALTER DATABASE ENABLE BLOCK CHANGE TRACKING 
  USING FILE '/mydir/rman_change_track.f' REUSE;

Disabling Block Change Tracking:

ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;

检查 Change Tracking 是否启用:

COL STATUS   FORMAT A8
COL FILENAME FORMAT A60
 
SELECT STATUS, FILENAME FROM V$BLOCK_CHANGE_TRACKING;

STATUS   FILENAME
-------- ------------------------------------------------------------
ENABLED  /disk1/bct/RDBMS/changetracking/o1_mf_2f71np5j_.chg

更改位置:

SQL> SELECT FILENAME FROM V$BLOCK_CHANGE_TRACKING;
SQL> SHUTDOWN IMMEDIATE
SQL> ALTER DATABASE DISABLE BLOCK CHANGE TRACKING;
SQL> ALTER DATABASE ENABLE BLOCK CHANGE TRACKING USING FILE 'new_location';
SQL> ALTER DATABASE RENAME FILE
   '/disk1/bct/RDBMS/changetracking/o1_mf_2f71np5j_.chg' TO 
   '/disk2/bct/RDBMS/changetracking/o1_mf_2f71np5j_.chg';
SQL> ALTER DATABASE OPEN;

V$BLOCK_CHANGE_TRACKING视图介绍:

图片.png

参考:

RAC Instance Crash While Running RMAN Backup with Wait Event: change tracking file synchronous read (Doc ID 2758472.1)
https://docs.oracle.com/en/database/oracle/oracle-database/23/bradv/backing-up-database.html#BRADV8125
https://docs.oracle.com/en/database/oracle/oracle-database/23/refrn/V-BLOCK_CHANGE_TRACKING.html

###chenjuchao 20250514###
欢迎关注我的公众号《IT小Chen

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论