DMRMAN备份与还原

一、DMRMAN环境变量配置

      使用 CONFIGURE 命令进行 DMRMAN 的默认参数配置

1. 语法

        CONFIGURE | 
        CONFIGURE CLEAR | 
        CONFIGURE DEFAULT <sub_conf_stmt> 
        <sub_conf_stmt>::= 
        DEVICE [[TYPE <介质类型> [PARMS '<介质参数>']]|CLEAR] | 
        TRACE [[FILE '<跟踪日志文件路径>'][TRACE LEVEL <跟踪日志等级>]|CLEAR] | 
        BACKUPDIR [[ADD|DELETE] '<基备份搜索目录>'{,'<基备份搜索目录>' }|CLEAR] | 
        ARCHIVEDIR [[ADD|DELETE] '<归档日志目录>'{,'<归档日志目录>'}|CLEAR] |
        OPEN FILES [<文件句柄个数> | [CLEAR]]

2. 示例

2.1显示所有配置项当前值

RMAN> configure;
THE DMRMAN DEFAULT SETTING:

DEFAULT DEVICE:
        MEDIA : DISK
DEFAULT TRACE :
        FILE  : 
        LEVEL : 1
DEFAULT BACKUP DIRECTORY:
        TOTAL COUNT  :0

DEFAULT ARCHIVE DIRECTORY:
        TOTAL COUNT  :0

DEFAULT OPEN FILES:
        OPEN FILES   : 65535

2.2 恢复所有配置项到默认值

RMAN> configure clear;
configure default device clear successfully!
configure default trace clear successfully!
configure default backupdir clear successfully!
configure default archivedir clear successfully!
configure default open files clear successfully!

2.3 恢复任意一个配置项到默认值

RMAN> configure default open files clear;
configure default open files clear successfully!

2.4 显示任意一个配置项的值

RMAN> configure default device;
THE DMRMAN DEFAULT DEVICE SETTING:DEFAULT DEVICE:
        MEDIA : DISK

2.5 配置存储介质

RMAN> configure default device type disk;
configure default device successfully!

2.6 配置跟踪文件

  • 显示TRACE文件的默认配置

RMAN> configure default trace;
THE DMRMAN DEFAULT TRACE SETTING:

DEFAULT TRACE :
        FILE  :
        LEVEL : 1

  • 配置默认 TRACE 文件

RMAN> configure default trace file '/dmdata/trace.log';
configure default trace successfully!

  • 配置默认TRACE级别

RMAN>CONFIGURE DEFAULT TRACE LEVEL 2;

二、数据备份

1.数据库备份


在 DMRMAN 工具中使用 BACKUP 命令可以备份整个数据库。使用 DMRMAN 脱机备份数据库需要关闭数据库实例。若是正常退出的数据库,则脱机备份前不需要配置归档;若是故障退出的数据库,则备份前,需先进行归档修复。在 DMRMAN 中输入以下命令即可备份数据库:

RMAN> BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini';

命令执行完后会在默认的备份路径下生成备份集目录。默认的备份路径为 dm.ini 中 BAK_PATH 配置的路径,若未配置 BAK_PATH,则默认使用 SYSTEM_PATH 下的 bak 目录。这是最简单的脱机数据库备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。

1.1 语法

BACKUP DATABASE '<INI文件路径>' [<备份类型>][<指定备份集子句>][TO <备份名>] [BACKUPSET '<备份集路径>']
[DEVICE TYPE <介质类型>[PARMS '<介质参数>'] 
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] 
[LIMIT <read_limit>|<write_limit>] 
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]][WITHOUT LOG][WITHOUT MIRROR]
[TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
[USE BAK_MAGIC <备份集魔数>];
<备份类型>、<read_limit>、<write_limit>::

1.2 完全备份

完全备份数据库步骤如下:

  1. 保证数据库处于脱机状态;
  2. 启动 DMRMAN 命令行工具;
  3. DMRMAN 中输入以下命令:

RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' FULL BACKUPSET '/dmdata/dmbak/db_full_bak_01';

备份语句中的参数 FULL 可以省略,不指定备份类型会默认指定备份类型为完全备份。

1.3 增量备份

增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。

RMAN>BACKUP DATABASE '/dmdata/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR
'/dmdata/dmbak'BACKUPSET '/dmdata/dmbak/db_increment_bak_02';

命令中的 INCREMENT 参数表示执行的备份为增量备份,增量备份时该参数不可省略。如果增量备份的基备份不在默认备份目录中,则必须指定 WITH BACKUPDIR 参数用于搜索基备份集,或者使用 CONFIGURE DEFAULT BACKUPDIR 命令配置默认的基备份集搜索目录。

DSC 环境下的脱机库备份与联机库备份存在相同的使用限制。由于脱机备份无法推进检查点,当不满足该约束时,备份将失败。

2、归档备份

在 DMRMAN 工具中使用 BACKUP 命令可以备份库的归档。使用 DMRMAN 备份归档需要设置归档,否则会报错。关闭数据库实例,在 DMRMAN 中输入以下命令即可备份归档:

RMAN>BACKUP ARCHIVE LOG DATABASE '/dmdata/data/DAMENG/dm.ini';

命令执行完后会在默认的备份路径下生成备份集目录,默认的备份路径为 dm.ini 中 BAK_PATH 的配置值,若未配置,则使用 SYSTEM_PATH 下的 bak 目录。这是最简单的脱机归档备份语句,如果要设置其他备份选项请参考下文的语法及使用说明。

2.1 语法


BACKUP <ARCHIVE LOG | ARCHIVELOG> [ALL | [FROM LSN <lsn>]|[UNTIL LSN <lsn>] | [LSN BETWEEN < lsn> AND < lsn>] | [FROM TIME '<time>'] | [UNTIL TIME '<time>'] | [TIME BETWEEN '<time>' AND '<time>']] [<notBackedUpSpec>][<指定备份集子句>][DELETE INPUT]
DATABASE '<INI文件路径>' [TO <备份名>][<备份集子句>];
<备份集子句>::= [BACKUPSET '<备份集路径>'] [DEVICE TYPE <介质类型>[PARMS '<介质参数>'] 
[BACKUPINFO '<备份描述>'] [MAXPIECESIZE <备份片限制大小>] 
[LIMIT <read_limit>|<write_limit>]
[IDENTIFIED BY <密码>|"<密码>" [WITH ENCRYPTION <TYPE>][ENCRYPT WITH <加密算法>]]
[COMPRESSED [LEVEL <压缩级别>]][TASK THREAD <线程数>][PARALLEL [<并行数>][READ SIZE <拆分块大小>]]
<read_limit>::= READ SPEED <读速度上限> [WRITE SPEED <写速度上限>]
<write_limit>::= WRITE SPEED <写速度上限>

2.2备份步骤 
  1. 配置归档;
  2. 保证数据库处于脱机状态;
  3. 启动 DMRMAN 命令行工具;
2.3 创建归档备份

RMAN>BACKUP ARCHIVE LOG ALL DATABASE '/dmdata/data/DAMENG/dm.ini' BACKUPSET '/dmdata/dmbak/arch_all_bak_01';

命令中的 ALL 参数表示执行的备份为备份所有的归档,也可以不指定该参数,DMRMAN 默认执行的备份类型为 ALL 类型归档备份。

三、数据还原 

1、数据库还原

数据库还原分为两个步骤:

  • 数据库还原
  • 数据库恢复一致性
1.1 数据库还原

使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,也可以是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原,目前可能需要还原的数据库配置文件包括 dm.ini、dm.ctl、服务器秘钥文件(dm_service.prikey 或者 dm_external.config,若备份库指定 usbkey 加密,则无秘钥文件)、联机日志文件。

1.1.1 语法

RESTORE DATABASE <restore_type> FROM BACKUPSET '<备份集路径>' 
[<device_type_stmt>] 
[IDENTIFIED BY <密码>|"<密码>" [ENCRYPT WITH <加密算法>]] 
[WITH BACKUPDIR '<基备份搜索目录>'{,'<基备份搜索目录>'}] 
[MAPPED FILE '<映射文件路径>'][TASK THREAD <任务线程数>] 
[RENAME TO '<数据库名>'] [USE BAK_MAGIC <备份集魔数>]; 
<restore_type>::=<type1>|<type2> 
<type1>::='<ini_path>'[TO SHADOW] [WITH CHECK] [REUSE DMINI] [WITHOUT MIRROR][WITHOUT SPACE] [AUTO EXTEND] [OVERWRITE]
<type2>::= TO '<system_dbf_dir>' [TO SHADOW] [WITH CHECK] [OVERWRITE] [WITHOUT MIRROR] 
<device_type_stmt>::= DEVICE TYPE <介质类型> [PARMS '<介质参数>']

1.1.2 使用举例

通过 RESTORE 命令还原后的数据库不可用,需进一步执行 RECOVER 命令,将数据库恢复到备份结束时的状态。

数据库备份集分为联机和脱机两种类型。通常情况下,用户会在联机状态下备份数据库,因此下面以联机数据库备份为例说明使用 DMRMAN 如何执行数据库还原操作。

        1.联机备份数据库,保证数据库运行在归档模式及 OPEN 状态;

SQL> BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore';

        2.准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。如下所示:

dminit path=/dmdata/data db_name=DAMENG_FOR_RESTORE

        3.校验备份集

        4.还原数据库

        直接指定还原目标库的 dm.ini 进行数据库还原
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_restore';

        指定 REUSE DMINI 子句进行数据库还原
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' REUSE DMINI 

1.2 数据库恢复一致性

使用 RECOVER 命令完成数据库恢复工作,数据库恢复是指重做 REDO 日志。可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。

如果还原后,不需要重做日志,数据就已经处于一致性状态了(例如正常关闭库的脱机备份还原),则可以跳过这一步,直接进入数据库更新阶段。

数据库恢复是指重做 REDO 日志,有两种方式:从备份集恢复,即重做备份集中的 REDO 日志;从归档恢复,即重做归档中的 REDO 日志。由于日志重做过程中,修改好的数据页首先存入缓冲区,缓冲区分批次将修改好的数据页写入磁盘,如果在此过程中发生异常中断,可能导致缓冲区中的数据页无法写入磁盘,造成数据的不一致,数据库启动时校验失败,所以数据库恢复过程中不允许异常中断。数据库恢复后,还需要执行数据库更新操作,将数据库调整为可正常工作的库才算完成。下面逐一进行说明。

1.2.1 从备份集恢复

如果备份集在备份过程中生成了日志,且这些日志在备份集中有完整备份(如联机数据库备份),在执行数据库还原后,可以重做备份集中备份的日志,将数据库恢复到备份时的状态,即从备份集恢复。完整的示例如下:

1.启动 DIsql 联机备份数据库;
BACKUP DATABASE BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';

2.准备目标库,可以使用备份库,也可以重新生成库;
重新生成库操作如下:

./dminit path=/dmdata/data db_name=DAMENG_FOR_RESTORE auto_overwrite=1

3.启动 RMAN,校验备份;
RMAN> CHECK BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';

4.还原数据库;
RMAN> RESTORE DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';

5.恢复数据库。
RMAN> RECOVER DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/dmdata/dmbak/db_full_bak_for_recover_backupset';

1.2.2 从归档恢复

从归档恢复是利用重做本地归档日志来恢复数据的过程。从归档恢复允许恢复到指定的时间点及指定的 LSN 值。若同时指定了时间点和 LSN,则以较早的为结束点。

PS:

  1. 使用DDL CLONE方式备份的数据库,不支持指定归档恢复。
  2. 指定归档恢复时,不建议使用联机状态下源库的归档,此时无法保证归档的完整性。
  3. 由于从本地归档恢复允许使用 USE DB_MAGIC 指定待收集归档的 DB_MAGIC,那么就会存在跨库恢复情况,所以,归档日志的正确使用完全由用户保证。因此,为了保证用户能正确使用从归档恢复,除了下文这两种情况,其他情况(可能导致数据被破坏)不建议用户使用从本地归档恢复。

使用异常退出源库的归档文件进行恢复

数据库运行过程中,持续写入 REDO 日志到本地联机日志文件,并同步到归档文件。一般认为,源库故障后,使用备份集和归档文件可以将目标库数据恢复到最新状态,这样的假设并不总是成立,考虑如下场景:

  1. 创建数据库 D1;
  2. 操作数据库并执行备份,产生备份集 B1;
  3. 继续操作数据库,操作过程中数据库故障,产生归档 A1。

如果故障发生在 REDO 日志已写入联机日志,但未写入归档文件时,由于归档文件缺少部分 REDO 日志,此时使用备份集 B1 及归档 A1 无法将目标数据库恢复到最新状态。

对于这样的情况,需要使用联机日志修复归档后,才可使用归档文件将目标数据库恢复到最新状态。

1.联机备份D1全库

SQL> backup database backupset 'B1';

2.循环插入100W条记录

CREATE TABLE TABLE_1
(
    i int
);

begin
    for i in 1..1000000
    loop
        insert into TABLE_1 values(i);
         if i%50 = 0 THEN
             commit;
         end if;
    end loop;
end;

3.强杀达梦进程,异常退出

4.准备目标库D2,即待还原的库

dminit path=/dmdata/data db_name=D2

5.修复D1归档日志

RMAN> REPAIR ARCHIVELOG DATABASE '/dmdata/data/D1/dm.ini';

 6.使用备份集 B1 及归档 A1 将目标库 D2 恢复到最新状态

# 还原数据库到D2
RMAN> RESTORE DATABASE '/dmdata/data/D2/dm.ini' FROM BACKUPSET '/dmdata/dmbak/B1';
# 使用归档文件恢复到最新状态
RMAN> RECOVER DATABASE '/dmdata/data/D2/dm.ini' WITH ARCHIVEDIR '/dmdata/dmbak/arch';

1.3 更新DB_MAGIC

RMAN>RECOVER DATABASE '/dmdata/data/D2/dm.ini' UPDATE DB_MAGIC;

2 、归档还原

使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。

1.联机备份归档,保证数据库运行在归档模式及 OPEN 状态;

BACKUP ARCHIVE LOG ALL BACKUPSET '/dmdata/dmbak/arch_all_for_restore';

2.校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验;

RMAN> CHECK BACKUPSET '/dmdata/dmbak/arch_all_for_restore';

3.还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。

指定还原的目标归档日志目录:

RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET '/dmdata/dmbak/arch_all_for_restore' TO ARCHIVEDIR'/dmdata/data/DAMENG_FOR_RESTORE/arch_dest' OVERWRITE 2;

 指定还原目标库的 dm.ini 文件路径:

RMAN> RESTORE ARCHIVE LOG FROM BACKUPSET '/dmdata/dmbak/arch_all_for_restore' TO DATABASE '/dmdata/data/DAMENG_FOR_RESTORE/dm.ini' OVERWRITE 2;

根据达梦官网文档整理,达梦社区:https://eco.dameng.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值