注册
达梦数据库备份还原
培训园地/ 文章详情 /

达梦数据库备份还原

DM_041961 2025/08/14 29 0 0

一、达梦数据库备份策略
达梦数据库的备份分为物理备份和逻辑备份,物理备份又分为联机备份(继续生产,不停服务)和脱机备份,需要注意的是,物理备份必须要开启归档模式。
1.1 开启归档模式
1.1.1 联机配置本地归档
修改数据库为 mount 状态
ALTER DATABASE MOUNT;
配置本地归档
ALTER DATABASE ADD ARCHIVELOG 'TYPE = local, DEST = /dm/data/DMDB/arch, FILE_SIZE = 1024, SPACE_LIMIT = 10240';
开启归档模式
ALTER DATABASE ARCHIVELOG;
修改数据库为 open 状态
ALTER DATABASE OPEN;
1.1.2 脱机配置本地归档
关闭数据库
systemctl stop DmServiceDMSERVER.service
在 dm.ini 文件所在的路径创建 dmarch.ini 文件,内容如下
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL
ARCH_DEST = /dm/data/DMDB/arch
ARCH_FILE_SIZE = 1024
ARCH_SPACE_LIMIT = 10240
编辑 dm.ini 文件,设置参数 ARCH_INI=1
启动数据库实例,此时数据库已经处于归档模式
systemctl start DmServiceDMSERVER.service
1.3 物理备份
1.3.1 联机备份
确认备份目录权限,最好保证目录归属dmdba:dminstall
(1) 数据库备份
备份全库
BACKUP DATABASE FULL TO db_full_bak BACKUP SET '/dm/backup/db_full_bak';
#TO db_full_bak 可以用 TO 指定备份集的文件的名字,如果不指定,则备份集文件的名字和它所在的目录同名
增量备份
#基于 /dm/backup/db_full_bak_01/db_full_bak 全量备份的增量备份
BACKUP DATABASE INCREMENT WITH BACKUPDIR '/dm/backup/db_full_bak_01/db_full_bak' BACKUPSET '/dm/backup/db_full_bak_01/db_increment_bak_01';
增量备份的目录一定要和全量备份放在同一个目录下
恢复时只需要恢复第三次增量备份即可,系统会自动寻找所有的增备和全备,就可以全部恢复
(2) 表空间备份
系统处于归档模式下时,才允许进行表空间备份;Mount 状态下,不允许进行表空间备份
完全备份单个表空间
表空间备份只能在本服务器进行还原
BACKUP TABLESPACE MAIN FULL BACKUPSET '/dm8/dm_bak/ts_full_bak_01';
增量备份表空间
以备份MAIN 表空间为例
BACKUP TABLESPACE MAIN INCREMENT WITH BACKUPDIR '/dm8/dm_bak' BACKUPSET '/dm8/dm_bak/ts_increment_bak_02';
(3) 表备份
表备份均为联机完全备份,不需要配置归档日志,没有增量备份
以备份 TAB_01 为例

BACKUP TABLE TAB_01 BACKUPSET '/dm8/dm_bak/tab_bak_01';
(4) 备份归档
BACKUP ARCHIVE LOG ALL to ARCHBAK BACKUPSET '/dm8/backup/full/ARCHBAK';
对于归档的备份,只需要执行还原操作即可,不需要恢复和更新数据库魔数
1.3.2 脱机备份
(1) 启动DMRMAN
DMRMAN (DM RECOVERY MANEGER) 是 DM 的脱机备份还原管理工具,由它来统一负责库级脱机备份、脱机还原、脱机恢复等相关操作
启动 DMRMAN
进入数据库安装目录的 bin 目录下面
./dmrman
退出 DMRMAN
exit
(2) 备份数据库
全库备份
在 DMRMAN 下执行以下命令
BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' FULL BACKUPSET '/dm8/dm_bak/db_full_bak_01';
增量备份
增量备份时,期间必须有所改变,否则报错
BACKUP DATABASE '/dm8/data/DAMENG/dm.ini' INCREMENT WITH BACKUPDIR '/dm8/dm_bak' BACKUPSET '/dm8/dm_bak/db_increment_bak_02';
1.4 物理备份还原
1.4.1 联机还原
DM 仅仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。执行表还原,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行表还原。表还原不需要配置归档,因为表还原是联机完全备份还原,所以不需要借助本地归档日志进行恢复。
假设备份的表的数据目录是:/dm8/dm_bak/tab_bak_for_res_01
还原表结构
RESTORE TABLE STRUCT FROM BACKUPSET '/dm8/dm_bak/tab_bak_for_res_01';
还原表数据
RESTORE TABLE FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
1.4.2 脱机还原
应使用与 DM 的数据库版本配套的 DMRMAN 工具进行操作
对于库级的备份还原恢复需要在数据库关闭状态下
目标库的还原仅支持脱机还原,可通过 DMRMAN 和 CONSOLE 工具实现
按照下面六个步骤来
使用全量备份集恢复
(1) 关闭数据库服务
systemctl stop DmServiceDMSERVER.service
(2) 启动 DMRMAN
./dmrman
RMAN>
(3) 脱机校验备份
RMAN> CHECK BACKUPSET '/dm/data/DMDB/bak/db_full_bak/db_full_bak_01';
(4) 还原数据库
如果是用全备文件,这里直接使用全备文件恢复即可
如果要做增量恢复,直接恢复最后一次增量备份即可,但要保证增备和全备在同一个目录下
#全库级别还原
RMAN> RESTORE DATABASE '/dm8/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/backup/FULL_BACK/';

#表空间级还原
RMAN> RESTORE DATABASE '/dm8/data/DMDB/dm.ini' TABLESPACE WISENSE FROM BACKUPSET 'db_full_bak_01';
(5) 恢复数据库
可以用全库备份集恢复某个表空间,也可以用表空间备份集恢复表空间
全库级别恢复
指定归档恢复
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' WITH ARCHIVEDIR '/dm8/arch/';
这里的arch下面就是日志文件
指定备份集恢复
RMAN> RECOVER DATABASE '/dm/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/data/DMDB/bak/db_full_bak/db_full_bak_01';
#表空间级恢复
#表空间恢复自动使用归档恢复到最新状态
RMAN> RECOVER DATABASE '/dm8/data/DMDB/dm.ini' TABLESPACE WISENSE;
#WITH ARCHIVEDIR '/dm8/date/DMDB/arch' 是根据归档恢复,可以恢复到最新,而指定备份集只能恢复到备份之前,一般生产不用这种方式
(6) 恢复 db_magic
只有全库级别的恢复才需要更新魔数,表空间级的不需要
RMAN> RECOVER DATABASE '/dm8/data/DAMENG/dm.ini' UPDATE DB_MAGIC;
注意:库级备份集恢复一次后,就不能继续利用这个全量备份集继续做增量备份了,必须立刻重新做一个全量备份,再对新的全量备份做增量备份。如果是基于表空间的备份集,恢复一次后这个备份集就不能再在本机进行恢复了,因为更新了数据魔数
使用增量备份集恢复
如果增量备份集和所依赖的全量备份在同一个目录,那么还原与恢复的命令和上面全量备份集恢复的命令是一样的,但如果不在同一个目录,就需要用 WITH BACKUPDIR指定一下全量备份集目录所在的父目录

全库级别增量备份还原
RMAN> RESTORE DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/data/DMDB/bak/db_full_bak_01/db_increment_bak_01' WITH BACKUPDIR '/dm8/data/DMDB/bak/db_full_bak_01';
全量备份集在 /dm8/data/DMDB/bak/db_full_bak_01 下面,此目录是存放全量备份和对应增量备份的父目录
RMAN> RECOVER DATABASE '/dm8/data/DMDB/dm.ini' FROM BACKUPSET '/dm8/data/DMDB/bak/db_full_bak_01/db_increment_bak_01' WITH BACKUPDIR '/dm8/data/DMDB/bak/db_full_bak_01';
恢复魔数
RMAN> RECOVER DATABASE '/dm8/data/DMDB/dm.ini' UPDATE DB_MAGIC;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服