DM达梦数据库-DMRMAN-备份与还原实战
DMRMAN(DM RECOVERY MANEGER)是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作,该工具支持命令行指定参数方式和控制台交互方式执行,降低了用户的操作难度。通过 DMRMAN 工具执行脱机操作过程中,仅会使用通过关键字 DATABASE 指定的目标库的本地归档配置信息,不会对本地归档配置文件中其他类型归档配置信息进行校验。
- 环境配置:
虚拟机版本:VMware WORKSTATION 14PRO
虚机系统版本:Centos7
数据库版本:DM V8 (x86平台)
数据库工具:disql命令行工具,DM管理工具
1 DMRMAN概述
DMRMAN 是 DM 提供的命令行工具,无需额外地安装。
DMRMAN 的结构比较复杂,接下来将对 DMRMAN 的重要组成部分进行介绍。
- 源库
源库是待备份的数据库。使用 DMRMAN 工具只可对数据库进行脱机备份,联机备份需要通过 DIsql 工具实现。DMRMAN 可以针对整个数据库执行脱机完全备份和增量备份,数据库可以配置归档也可以不配置。
- 目标库
目标库是待还原的数据库,即是用来做还原的库,也称为目标还原库。目标库可以是通过 dm.ini 文件指定的数据库,也可以是目标文件目录。通过 dm.ini 指定库时,dm.ini及其配置中的 CTL_PATH 必须有效,且库必须处于关闭状态;指定文件目录时,指定目录作为 SYSTEM_PATH 处理,可以存在,也可以不存在,但必须有效。目前目标库的还原仅支持脱机还原,可通过 DMRMAN 和 CONSOLE 工具实现。
- DMRMAN 客户端
DMRMAN 客户端是 DM 软件的一部分,用来执行目标数据库的备份和恢复操作。DMRMAN客户端是一个命令行工具。
- 备份集
利用 DMRMAN 工具将数据库中的一个或多个数据文件、数据库信息等备份到一个称为“备份集”的逻辑结构中,备份集的格式是特定的只能由 DMRMAN 创建和访问。一个备份集中会包含一个或多个二进制文件,这个二进制文件被称为备份片。备份数据库会产生一个备份集,这个备份集可能包含一个或者多个备份片。
2 启动和配置 DMRMAN
2.1 启动和退出
安装 DM 数据库后,DMRMAN 可执行程序与数据库其他可执行程序一样位于安装路径的执行码目录下,转到执行码目录直接在操作系统的命令行中输入以下命令就可启动 DMRMAN。若配置了环境变量DM_HOME,可直接命令行执行。
[dmdba@centos7_6_33 bin]$ ./dmrman
dmrman V8
RMAN> exit
time used: 0.002(ms)
[dmdba@centos7_6_33 bin]$
2.2 DMRMAN命令
DMRMAN 工具支持控制台输入命令、命令行设置参数两种操作方式。
- DMRMAN 控制台输入命令
当 DMRMAN 客户端已经启动且可以输入命令时会显示命令提示符,之后可输入执行命令。
RMAN> backup database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini';
backup database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini';
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[71801]
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 0 packages processed...
total 0 packages processed...
total 0 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/home/dmdba/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200914_224803_297573] END, CODE [0]......
META GENERATING......
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.077
- DMRMAN 命令行设置参数执行
RMAN> help
格式: ./dmrman KEYWORD=value
例程: ./dmrman CTLFILE=/opt/dm7data/dameng/res_ctl.txt
必选参数:
关键字 说明
--------------------------------------------------------------------------------
CTLFILE 指定执行语句所在的文件路径
CTLSTMT 指定待执行语句
DCR_INI 指定dmdcr.ini路径;若未指定且当前目录中dmdcr.ini存在,则使用当前目录中的dmdcr.ini。
可单独使用,也可与其他参数配合使用
DFS_INI 指定dmdfs.ini路径;若未指定且当前目录中dmdfs.ini存在,则使用当前目录中的dmdfs.ini。
可单独使用,也可与其他参数配合使用
USE_AP 指定备份、还原执行载体,1/2:DMAP/进程自身,默认是DMAP。
AP_PORT 连接AP时用的端口号。默认是4236。可单独使用,也可与其他参数配合使用
HELP 打印帮助信息
time used: 0.033(ms)
设置 CTLFILE 参数启动 DMRMAN 工具,指定脚本文件中的命令将被执行
[dmdba@centos7_6_33 bin]$ ./dmrman CTLFILE=/home/dmdba/script/rman/full_database.txt
命令执行完后 DMRMAN 工具会自动退出。
命令行执行语句执行,是 DMRMAN 工具设置 CTLSTMT 参数,参数后面执行需要执行的
DMRMAN 命令。
[dmdba@centos7_6_33 bin]$ ./dmrman CTLSTMT="backup database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini';"
注意:
CTLFILE 中存在多条语句或 CTLSTMT 中一次输入多条语句时,每条语句都必须以分号结尾;执行单条语句,语句结尾可以加分号也可以不加。
CTLSTMT 中,待执行语句外层双引号一定要加。执行完毕后工具自动退出。
3 数据备份
3.1 备份数据库
- 创建完全备份
执行数据库备份要求数据库处于脱机状态。与联机备份数据库不同的是,脱机备份不需归档。
RMAN> backup database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' full backupset '/home/dmdba/dm_bak/dmrman_db_bak_01';
backup database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' full backupset '/home/dmdba/dm_bak/dmrman_db_bak_01';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[71801]
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 0 packages processed...
total 0 packages processed...
total 0 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/home/dmdba/dm_bak/dmrman_db_bak_01] END, CODE [0]......
META GENERATING......
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.136
- 创建增量备份
增量备份指基于指定的库的某个备份(完全备份或者增量备份),备份自该备份以来所有发生修改了的数据页。脱机增量备份要求两次备份之间数据库必须有操作,否则备份会报错。
RMAN> backup database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' increment with backupdir '/home/dmdba/dm_bak/' backupset '/home/dmdba/dm_bak/dmrman_db_increment_bak_02';
backup database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' increment with backupdir '/home/dmdba/dm_bak/' backupset '/home/dmdba/dm_bak/dmrman_db_increment_bak_02';
file dm.key not found, use default license!
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[75717]
BACKUP DATABASE [DAMENG],execute......
CMD CHECK LSN......
BACKUP DATABASE [DAMENG],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 0 packages processed...
total 0 packages processed...
total 0 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/home/dmdba/dm_bak/dmrman_db_increment_bak_02] END, CODE [0]......
META GENERATING......
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.011
3.2 备份归档
- 创建归档备份
执行归档备份要求数据库处于脱机状态。与联机备份数据库一样,脱机归档备份需要配置归档。
RMAN> backup archive log all database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' backupset '/home/dmdba/dm_bak/dmrman_arch_bak_01';
backup archive log all database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' backupset '/home/dmdba/dm_bak/dmrman_arch_bak_01';
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[75717]
BACKUP ARCHIVE LOG ALL, execute......
CMD CHECK LSN......
BACKUP ARCHIVE LOG ALL,collect dbf......
CMD CHECK ......
ARCH BACKUP SUBS......
total 0 packages processed...
total 0 packages processed...
total 0 packages processed...
total 0 packages processed...
total 0 packages processed...
total 0 packages processed...
ARCH BACKUP MAIN......
BACKUPSET [/home/dmdba/dm_bak/dmrman_arch_bak_01] END, CODE [0]......
META GENERATING......
CMD END.CODE:[0]
backup successfully!
time used: 00:00:01.014
- 创建设置条件的归档备份
设置条件的归档备份指通过设置 LSN 或者时间点,控制归档需要备份归档的范围。脱机设置条件归档备份。
RMAN>BACKUP ARCHIVE LOG LSN BETWEEN 50000 AND 120000DATABASE
'/opt/dmdbms/data/DAMENG/dm.ini'BACKUPSET '/home/dm_bak/db_increment_bak_02';
命令中的 LSN BETEEWN start AND end 参数表示执行的备份为执行备份的区间,或者设置 FROM LSN(TIME)以及 UNTIL LSN(TIME)。
4 管理备份
4.1 备份信息查看
- 查看指定的备份集信息
SHOW BACKUPSET…命令用于显示特定的备份集信息,每次只能显示一个备份集。当仅需要查看某个特定备份集信息时可以使用此命令。
RMAN> show backupset '/home/dmdba/dm_bak/deptno_bak_01';
- 批量显示备份集信息
SHOW BACKUPSETS…命令用于批量显示指定搜索目录下的备份集信息。如需要查看的多个备份集不在同一个目录下,可通过多次指定 WITHBACKUPDIR 参数同时查看所有的备份集。
RMAN> show backupsets with backupdir '/home/dmdba/dm_bak/deptno_bak_01','/home/dmdba/dm_bak/emp_bak_01';
- 查看指定数据库所有备份集的信息
如果指定的备份搜索目录下包含不同数据库的备份集,而我们只想查看某个特定数据库的所有备份集信息,此时可以使用 SHOW BACKUPSETS…USE DB_MAGIC 命令实现。
RMAN> show backupsets with backupdir '/home/dmdba/dm_bak/deptno_bak_01' use db_magic 1040931148;
可通过查看对应数据库备份集信息或者在相应数据库执行命令查看DB_MAGIC信息。
SQL> select db_magic from v$rlog;
行号 DB_MAGIC
---------- --------------------
1 1040931148
- 指定查看备份集的元数据信息
SHOW BACKUPSET…INFO META命令用于查看备份集的元数据信息。
RMAN> show backupset '/home/dmdba/dm_bak/deptno_bak_01' info meta;
这里获取的是单个备份集的元数据信息,也可以使用 SHOW BACKUPSETS…INFO META 命令批量获取元数据信息。同样地,我们可以使用类似的命令指定获取备份集的数据库信息、文件信息和表信息,或这些信息的任意组合。
RMAN> show backupset '/home/dmdba/dm_bak/dmrman_arch_bak_01' to '/tmp/bkp_news.txt' format xml;
4.2 备份集校验和删除
- 校验特定的备份集
DMRMAN 中使用 CHECK 命令对备份集进行校验,校验备份集是否存在及合法。CHECK BACKUPSET…命令用于校验特定备份集,每次只能检验一个备份集。
RMAN> check backupset '/home/dmdba/dm_bak/dmrman_arch_bak_01' ;
check backupset '/home/dmdba/dm_bak/dmrman_arch_bak_01';
CMD END.CODE:[0]
check backupset successfully.
time used: 42.032(ms)
若备份集在默认备份路径下,可指定相对路径校验备份集。
RMAN> check backupset '/home/dmdba/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200914_224803_297573' database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' ;
check backupset '/home/dmdba/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200914_224803_297573' database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini';
file dm.key not found, use default license!
CMD END.CODE:[0]
check backupset successfully.
time used: 40.407(ms)
- 删除特定的备份集
使用 REMOVE BACKUPSET…命令可删除特定备份集,每次只能删除一个备份集。
RMAN> remove backupset '/home/dmdba/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200914_224803_297573' ;
remove backupset '/home/dmdba/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200914_224803_297573';
CMD END.CODE:[0]
remove backupset successfully.
time used: 41.426(ms)
- 批量删除所有备份集
使用 REMOVE BACKUPSETS…命令可批量删除备份集。批量删除可选择删除的备份类型,数据库备份、表空间备份、表备份,以及归档备份,不指定则全部删除。
RMAN> remove backupsets with backupdir '/home/dmdba/opt/dmdbms/data/DAMENG/bak/' ;
remove backupsets with backupdir '/home/dmdba/opt/dmdbms/data/DAMENG/bak/';
CMD END.CODE:[0]
remove backupsets successfully.
time used: 32.305(ms)
- 批量删除指定时间之前的备份集
REMOVE BACKUPSETS…UNTIL TIME 命令用来批量删除指定时间的备份集。
RMAN> remove backupsets with backupdir '/home/dmdba/opt/dmdbms/data/DAMENG/bak/' until time '2020-09-15 17:45:00';
remove backupsets with backupdir '/home/dmdba/opt/dmdbms/data/DAMENG/bak/' until time '2020-09-15 17:45:00';
CMD END.CODE:[0]
remove backupsets successfully.
time used: 33.140(ms)
5 数据库还原和恢复
5.1 数据库还原
使用 RESTORE 命令完成脱机还原操作,在还原语句中指定库级备份集,可以是脱机库级备份集,或是联机库级备份集。数据库的还原包括数据库配置文件还原和数据文件还原。
根据已存在的备份,对目前已初始化完成的数据库进行还原。
RMAN> restore database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200915_174731_323965' ;
5.2 数据库恢复
使用 RECOVER 命令完成数据库恢复工作,可以是基于备份集的恢复工作,也可以是使用本地归档日志的恢复工作。如果还原后,数据已经处于一致性状态了,则可以使用更新DB_MAGIC 方式恢复,前提是不需要重做日志。
RMAN> recover database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' from backupset '/home/dmdba/opt/dmdbms/data/DAMENG/bak/DB_DAMENG_FULL_20200915_174731_323965' ;
5.3 数据库更新
数据库更新是指更新数据库的 DB_MAGIC,并将数据库调整为可正常工作状态,与数据库恢复一样使用 RECOVER 命令完成。数据库更新发生在重做 REDO 日志恢复数据库后,或者目标库不需要执行重做日志已经处于一致状态的情况。
RMAN> recover database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' update db_magic;
注意:DM7数据库不需要更新DB_MAGIC,执行数据库restore和recover即可。
6 表空间还原和恢复
6.1 表空间还原
使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集 。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。
表空间还原后,表空间状态被置为 RES_OFFLINE , 并设置数据标记FIL_TS_RECV_STATE_RESTORED,表示已经过还原但数据不完整。
1)联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。
SQL> BACKUP TABLESPACE MAIN BACKUPSET '/home/dmdba/dm_bak/ts_main_bak_001';
操作已执行
已用时间: 00:00:01.027. 执行号:1569.
2)还原表空间。需要注意脱机状态,表空间还原的目标库只能是备份集产生的源库,否则将报错。
RMAN> restore database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' TABLESPACE main from BACKUPSET '/home/dmdba/dm_bak/ts_main_bak_001';
6.2 表空间恢复
表空间恢复通过重做 REDO 日志,以将数据更新到一致状态。
恢复完成后,表空间状态置为 ONLINE ,并设置数据标记为FIL_TS_RECV_STAT_RECOVERED,表示数据已恢复到一致状态。
接上一步还原步骤进行恢复
3)恢复表空间。启动 DMRMAN
RMAN> recover database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' TABLESPACE main;
7 归档还原和修复
7.1 归档还原
使用 RESTORE 命令完成脱机还原归档操作,在还原语句中指定归档备份集。备份集可以是脱机归档备份集,也可以是联机归档备份集。
1)联机备份归档,保证数据库运行在归档模式及 OPEN 状态。
SQL> backup archive log all backupset '/home/dmdba/dm_bak/arch_full_bak_001';
操作已执行
已用时间: 865.307(毫秒). 执行号:1228.
2)还原归档。启动 DMRMAN,设置 OVERWRITE 为 2,如果归档文件已存在,会报错。
RMAN> restore archive log from backupset '/home/dmdba/dm_bak/arch_full_bak_001' to database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' overwrite 2;
7.2 归档修复
使用 REPAIR 命令完成指定数据库的归档修复,归档修复会将目标库 dmarch.ini 中配置的所有本地归档日志目录执行修复。若目标库没有配置本地归档,则不执行修复。执行修复时,目标库一定不能处于运行状态。一般建议在数据库故障后,应立即执行归档修复,否则后续还原恢复导致联机日志中未刷入本地归档的 REDO 日志丢失,届时再利用本地归档恢复将无法恢复到故障前的最新状态。
RMAN> repair archivelog database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini' ;
repair archivelog database '/home/dmdba/opt/dmdbms/data/DAMENG/dm.ini';
Database mode = 0, oguid = 0
EP[0]'s cur_lsn[98389]
repair archive log successfully.
repair time used: 164.096(ms)
time used: 164.156(ms)