注册
dm8备份与还原原理与实践
专栏/技术分享/ 文章详情 /

dm8备份与还原原理与实践

。。 2025/10/11 132 0 0
摘要

dm8备份与还原原理与实践

备份与还原原理

1.1 归档技术

归档技术是备份与恢复的核心保障,通过保存REDO日志确保数据可恢复至故障前状态,主要包括归档种类、归档修复、归档备份还原三大模块。

1.1.1 归档种类

  • 本地归档(LOCAL)

    • 定义:REDO日志写入联机日志文件后,由专门归档线程异步写入本地归档日志文件的过程。
    • 关键特性:归档文件不可覆盖,需手动删除或通过ARCH_SPACE_LIMIT自动删除最老文件;磁盘空间不足时,第一路本地归档会强制挂起(ARCH_HANG_FLAG=1,非第一路可配置是否挂起),磁盘损坏会导致系统HALT。
    • 作用:为联机备份(库、表空间)提供日志支持,故障时可通过归档恢复至最新状态。
  • 远程归档(REMOTE ARCHIVE)

    • 适用场景:仅用于 DMDSC集群环境
    • 配置逻辑:集群节点需双向配置——将本节点远程归档目录设为另一节点的本地归档目录,实现归档日志共享。
    • 作用:确保DMDSC集群任一节点可访问所有节点的完整归档日志,故障节点恢复后无需手动修复归档。

1.1.2 归档修复

  • 适用场景:数据库 异常关闭 后,部分REDO日志未从联机日志写入归档日志,导致归档不完整,需修复后才能正常备份/恢复。
  • 核心逻辑:从联机日志中提取未写入归档的REDO日志,补齐本地归档。
  • 修复流程
    1. 收集本地归档日志文件;
    2. 扫描归档文件,获取最后一个有效RLOG_PKG(日志包)的偏移量;
    3. 截取最后一个归档文件的有效内容(删除偏移量后的无效部分),调整日志文件头信息;
    4. 新建空归档日志文件;
    5. 扫描联机日志文件,拷贝缺失的REDO日志至新归档文件。

1.1.3 归档备份还原

归档备份是数据备份的补充,归档还原用于恢复归档日志,支撑数据恢复流程:

1.1.3.1 归档备份

  • 定义:专门备份本地归档日志文件(不涉及数据文件),仅备份与当前数据库DB_MAGICPERMANENT_MAGIC匹配的归档日志。
  • 关键特性
    • 支持联机/脱机执行,支持加密(与数据备份加密规则一致)、压缩(级别0-9);
    • 可通过DELETE INPUT参数在备份后删除源归档日志,释放磁盘空间;
    • 可按LSN范围、时间范围过滤备份内容(如LSN BETWEEN 1000 AND 2000)。

1.1.3.2 归档还原

  • 定义:将归档备份集中的归档日志文件还原到指定目录(目标库归档目录或自定义目录)。
  • 核心流程
    1. 从归档备份集筛选符合条件(如LSN、时间)的归档日志;
    2. 在目标目录创建归档文件,处理同名文件策略(通过OVERWRITE参数:1-跳过、2-报错、3-强制覆盖);
    3. 从备份集拷贝REDO日志至目标归档文件(若备份时加密/压缩,需先解密/解压缩)。

1.2 数据备份还原

数据备份还原是核心流程,备份为数据容灾提供载体,还原为故障恢复提供基础,两者需配合归档日志实现数据一致性。

1.2.1 备份

  • 本质:从源库读取 有效数据页(数据文件描述页+已分配使用的数据页),经处理(加密、压缩)后写入备份集,同时根据配置备份REDO日志。
  • 关键技术细节
    1. 有效数据页智能抽取:仅拷贝已分配的数据页,剔除未使用页,减少备份集大小和IO开销;对RES_OFFLINE/CORRUPT状态表空间,仅记录表空间信息,不拷贝数据页。

    2. REDO日志备份

      • 适用范围:仅库备份、表空间备份支持(表备份不支持);
      • 默认行为:未指定WITHOUT LOG时,自动备份备份期间产生的REDO日志(范围:BEGIN_LSN-END_LSNBEGIN_LSN=备份开始时CKPT_LSNEND_LSN=备份结束时FILE_LSN);
      • 特殊场景:指定WITHOUT LOG生成非一致性备份集,还原后需依赖归档日志恢复;正常关闭库的脱机备份无需备份REDO日志。
    3. 压缩与加密

      • 压缩:支持0-9级(0不压缩,9压缩比最高但速度最慢),默认不压缩;
      • 加密:需指定三要素——加密密码(符合口令策略)、加密类型(0-不加密、1-简单加密、2-完全加密)、加密算法(默认AES256_CFB,支持DES、RC4等);增量备份加密需与基备份完全一致(密码、类型、算法)。
    4. 并行备份

      • 适用范围:库备份、表空间备份、归档备份;
      • 核心逻辑:以文件为单位拆分任务,生成1个主备份集+多个子备份集(子备份集仅含数据文件,无日志,不能单独还原/作为基备份);
      • 关键参数:PARALLEL指定并行数(默认4),READ SIZE指定大文件拆分块大小(默认1GB,最小512MB)。

1.2.2 还原

  • 本质:备份的逆过程——从备份集读取数据页,写入目标数据库对应数据文件的指定位置;还原后目标库可能处于非一致性状态,需通过“恢复”操作(重做REDO日志)才能正常启动。
  • 核心模块
    1. 数据还原

      • 库还原:重建目标库数据文件、控制文件、联机日志等,流程包括:清理目标库环境(删除旧数据文件,OVERWRITE参数控制覆盖)→ 重建数据文件(按SYSTEM_PATH或映射文件调整路径)→ 拷贝数据页→ 重建联机日志→ 重置目标库(更新CKPT_LSN、DB_MAGIC等);
      • 表空间还原:仅重建指定表空间数据文件,支持还原单个数据文件,还原后表空间状态为RES_OFFLINE,需恢复后联机;
      • 表还原:仅联机执行,还原表结构(建表语句、约束)和数据,无需重做日志,还原后直接可用(需目标表结构与备份表一致)。
    2. 数据恢复

      • 作用:重做REDO日志,将还原后的目标库恢复至一致性状态(备份结束时或指定时间点)。
      • 核心步骤
        • 恢复一致性:通过备份集(含REDO日志)或归档日志重做,覆盖BEGIN_LSN-END_LSN范围日志;
        • 更新DB_MAGIC:修改DB_MAGIC(每次还原恢复后变化,区分源库与目标库),PERMANENT_MAGIC永久不变(DDL_CLONE还原除外)。
      • 关键概念
        • PERMANENT_MAGIC(永久魔数):建库时生成,唯一标识数据库,永不改变;
        • DB_MAGIC(数据库魔数):每次还原恢复后更新,用于区分源库与目标库。
    3. 适用规则

      • 库还原、表空间还原后必须执行恢复;表还原无需恢复;
      • 恢复需保证REDO日志完整(覆盖BEGIN_LSN-END_LSN),缺失归档会导致恢复失败。

准备工作

  1. 安装dm8并进行归档配置
     /home/dmdba/data/DMDB/dmarch.ini
     [ARCHIVE_LOCAL]
     ARCH_TYPE = LOCAL #本地归档类型
     ARCH_DEST =/home/dmdba/dmarch #本地归档文件存放路径
     ARCH_FILE_SIZE = 512 #单位 Mb, 本地单个归档文件最大值
     ARCH_SPACE_LIMIT = 81920 #单位 Mb, 0 表示无限制,范围 1024~2147483647M
    
    同时还需要修改dm.ini的参数ARCH_INI=1

联机备份与还原

备份环节(库级备份)

  1. 拉起数据库实例并使用disql工具
    #启动ap服务
    ./DmAPService start 
    # mount状态不能进行备份
    ./dmserver /home/dmdba/data/DMDB/dm.ini
    ./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5237
    
  2. 创建测试表并添加一条新数据
     create table test (a int );
     insert into test values (1);
     commit;
    
  3. 第2次全量备份
    backup database full to "DB_DMDB_FULL_2025_09_30_15_46_15" backupset '/home/dmdba/dmbak/db_full_bak' compressed level 1;
    
  4. 第2次为增量备份
     ##插入数据2
     insert into test values(2);
     commit;
    
     ##执行增量备份
     backup database increment to "DB_DMDB_INCRE_2025_09_30_15_51_32" backupset '/home/dmdba/dmbak/db_incre_bak01' compressed level 1;
    
  5. 第3次为增量备份
    insert into test values(3);
    commit;
    backup database increment to "DB_DMDB_INCRE_2025_09_30_15_54_46" backupset '/home/dmdba/dmbak/db_incre_bak02' compressed level 1;
    

表备份

  1. 创建测试表
    CREATE TABLE TAB_FOR_RES_01(C1 INT); 
    
  2. 备份表数据
    BACKUP TABLE TAB_FOR_RES_01 BACKUPNAME TABLE_BAK_01 BACKUPSET '/home/dmdba/dmbak/tab_bak_for_res_01'; 
    
  3. 校验备份(可选)
    SELECT SF_BAKSET_CHECK('DISK','/home/dmdba/dmbak/tab_bak_for_res_01');
    

还原环节

  1. 通过dmrman还原(对应库级备份)
    # 需要先关闭数据库实例后再进行操作
    
    #启动ap服务
    ./DmAPService start
    # 启动dmrman
    ./dmrman
    
    # 还原
    check backupset '/home/dmdba/dmbak/db_full_bak'
    RESTORE DATABASE '/home/dmdba/data/DMDB/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak';
    RECOVER DATABASE '/home/dmdba/data/DMDB/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak';
    RECOVER DATABASE '/home/dmdba/data/DMDB/dm.ini' UPDATE DB_MAGIC;
    
    # 还原后可以再拉起数据库实例后查看表数据,如果只剩1就成功
    ./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5237
    SQL> select * from test;
    
     行号     a          
     ---------- -----------
     1          1
    
    
  2. disql还原(表还原)
    # 指定备份集路径进行还原
    RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPSET'/home/dmdba/dmbak/tab_bak_for_res_01';
    # 指定备份名称进行还原
    RESTORE TABLE TAB_FOR_RES_01 FROM BACKUPNAME TABLE_BAK_01; 
    

脱机备份与还原

DMRMAN脱机数据备份

DMRMAN支持脱机库备份(完全/增量)和脱机归档备份,需确保数据库处于关闭状态(正常退出或故障退出)。

1. 脱机库备份

1.1 适用场景

  • 正常退出的数据库:无需配置归档,直接备份;
  • 故障退出的数据库:需先执行归档修复,再备份。

1.2 操作步骤

  1. 关闭数据库(确保实例已停止)
  2. 启动DMRMAN(进入交互环境);
  3. 执行备份命令
    • 完全备份(默认类型,可省略FULL参数):
      RMAN> BACKUP DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FULL BACKUPSET '/home/dmdba/dmbak/db_full_bak' COMPRESSED LEVEL 1;
      
      • 参数说明:/home/dmdba/dmdbms/data/DAMENG/dm.ini为源库dm.ini路径;BACKUPSET指定备份集存储目录;COMPRESSED LEVEL 1表示1级压缩(可选)。
    • 增量备份(基于基备份,需指定基备份搜索目录):
      RMAN> BACKUP DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/home/dmdba/dmbak' BACKUPSET '/home/dmdba/dmbak/db_incre_bak';
      
      • 参数说明:INCREMENT指定增量备份;WITH BACKUPDIR指定基备份搜索目录(基备份可为完全备份或增量备份)。

2. 脱机归档备份

2.1 前提

  • 数据库已配置归档(dm.iniARCH_INI=1,且dmarch.ini配置本地归档);
  • 数据库处于关闭状态。

2.2 操作步骤

  1. 关闭数据库(同脱机库备份步骤1);
  2. 启动DMRMAN
  3. 执行归档备份命令
    # 备份所有归档日志
    RMAN> BACKUP ARCHIVE LOG ALL DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dmdba/dmbak/arch_full_bak';
    # 按LSN范围备份(如备份LSN 50000-120000的归档)
    RMAN> BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000 DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' BACKUPSET '/home/dmdba/dmbak/arch_lsn_bak';
    
  • 参数说明:ALL备份所有归档;LSN BETWEEN ... AND ...指定归档范围;DATABASE指定源库dm.ini路径。

DMRMAN备份管理(查看、校验、删除)

1. 查看备份集信息

通过SHOW命令查看单个/批量备份集的元数据、数据文件、表空间等信息:

  • 查看单个备份集
    RMAN> SHOW BACKUPSET '/home/dmdba/dmbak/db_full_bak' INFO DB,META;  # 查看数据库信息和元数据
    
  • 批量查看备份集(指定搜索目录):
    RMAN> SHOW BACKUPSETS WITH BACKUPDIR '/home/dmdba/dmbak1','/home/dmdba/dmbak2';  # 查看多个目录下的备份集
    
  • 输出到文件(支持TXT/XML格式):
    RMAN> SHOW BACKUPSET '/home/dmdba/dmbak/db_full_bak' TO '/home/dm_info/bak_info.txt' FORMAT XML;
    

2. 校验备份集合法性

通过CHECK命令校验备份集是否完整、合法(支持加密备份校验):

# 校验普通备份集
RMAN> CHECK BACKUPSET '/home/dmdba/dmbak/db_full_bak';
# 校验加密备份集(需指定密码和算法)
RMAN> CHECK BACKUPSET '/home/dmdba/dmbak/db_encrypt_bak' IDENTIFIED BY "Dmglydmm@2025" ENCRYPT WITH AES256_CFB LEVEL 2;
  • 参数说明:LEVEL指定校验级别(1-校验备份包CRC,2-校验数据页CRC,3-数据页解密校验)。

3. 删除备份集

通过REMOVE命令删除单个/批量备份集,并行备份的子备份集不允许单独删除:

  • 删除单个备份集
    RMAN> REMOVE BACKUPSET '/home/dmdba/dmbak/db_full_bak';
    
  • 批量删除指定时间前的备份集(如删除2025-09-30前的所有库备份):
    RMAN> REMOVE DATABASE BACKUPSETS WITH BACKUPDIR '/home/dmdba/dmbak' UNTIL TIME '2025-09-30 00:00:00';
    
  • 级联删除(删除基备份及引用它的增量备份):
    RMAN> REMOVE BACKUPSET '/home/dmdba/dmbak/db_full_bak' CASCADE;
    

DMRMAN脱机数据库还原与恢复(常规场景)

核心流程:还原(RESTORE)→ 恢复(RECOVER)→ 更新DB_MAGIC,需确保数据库关闭且备份集合法。

1. 准备工作

  • 关闭数据库(停止实例,避免文件占用);
  • 启动DMRMAN(进入交互环境);
  • (可选)配置备份集搜索目录(若基备份不在默认目录):
    RMAN> CONFIGURE DEFAULT BACKUPDIR ADD '/home/dmdba/dmbak';
    

2. 校验备份集(可选,确保备份可用)

RMAN> CHECK BACKUPSET '/home/dmdba/dmbak/db_full_bak';  # 校验待还原的备份集

3. 数据库还原(RESTORE)

将备份集中的数据页写入目标库,支持指定dm.ini路径或目标目录:

# 按dm.ini指定目标库还原(推荐)
RMAN> RESTORE DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak' OVERWRITE;
# 按目标目录还原(新建库目录)
RMAN> RESTORE DATABASE TO '/home/dm_new_data' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak' OVERWRITE;
  • 参数说明:OVERWRITE覆盖目标库中已存在的同名文件(谨慎使用,不可撤销);TO指定新库目录(自动创建dm.ini和控制文件)。

4. 数据库恢复(RECOVER)

还原后目标库处于非一致性状态,需通过RECOVER重做日志,分为“恢复一致性”和“更新DB_MAGIC”两步:

4.1 恢复一致性(重做日志)

  • 从备份集恢复(备份集含REDO日志,如联机备份的备份集):
    RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/db_full_bak';
    
  • 从归档恢复(备份集不含日志,需指定归档目录):
    RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/home/dm_arch' USE DB_MAGIC 1447060265;
    
    • 参数说明:WITH ARCHIVEDIR指定归档目录;USE DB_MAGIC指定归档对应的源库DB_MAGIC(可通过SHOW BACKUPSET查看)。

4.2 更新DB_MAGIC(标识还原完成)

恢复一致性后,需更新DB_MAGIC(区分源库与目标库),数据库才能启动:

RMAN> RECOVER DATABASE '/home/dmdba/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC;

5. 验证还原结果

  1. 启动数据库
    ./dmserver /home/dmdba/dmdbms/data/DAMENG/dm.ini
    
  2. 连接数据库查询数据(以disql为例):
    ./disql SYSDBA/'"Dmglydmm@2025"'@127.0.0.1:5237
    SQL> select * from test;  # 验证数据是否恢复到备份状态
    
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服