注册
达梦数据库-备份恢复-DISQL联机全备+增量备份+归档进行不完全恢复或完全恢复-实践记录总结
技术分享/ 文章详情 /

达梦数据库-备份恢复-DISQL联机全备+增量备份+归档进行不完全恢复或完全恢复-实践记录总结

田WJ 2026/05/22 380 1 0

达梦数据库-备份恢复-DISQL联机全备+增量备份+归档进行不完全恢复或完全恢复-实践记录总结

备份还原主要分物理备份还原恢复和逻辑备份还原。

逻辑备份还原:dexp和dimp(dexpdp和dimpdp)命令行工具和MANAGER图形化工具中进行操作,可以将指定对象(库级、用户级、模式级、表级)的数据联机逻辑导出和导入。其中:dexp/dimp和dexpdp/dimpdp的主要区别是使用dexp/dimp导出导入时文件必须存放在客户端,而使用dexpdp/dimpdp导出导入文件时存放在服务器端。dexpdp/dimpdp是将客户端命令发给服务器启动dexp/dimp执行。

物理备份还原与恢复
操作系统级别物理文件方式拷贝与还原。
disql工具(对应图形化工具MANAGER)中进行操作,可执行联机数据备份与还原,包括联机的数据库备份、归档备份、表空间备份与还原、表备份与还原;
DMRMAN工具(对应图形化工具CONSOLE)中进行操作,可执行脱机数据备份、还原与恢复,包括脱机的数据库备份、还原与恢复,脱机还原表空间,归档的备份、还原与修复;

这里主要介绍日常生产实际过程中经常碰到的物理备份还原实践操作
对达梦数据库模拟A测试环境进行在线联机全备份、在线联机增量备份,然后拷贝备份文件和归档到异机B测试环境使用该备份文件和归档文件对数据库进行还原恢复是日常中常见的需求操作。

环境说明
准备主机1(IP 192.168.118.236)与主机2(IP 192.168.118.237),都安装相同版本达梦数据库软件。
主机1上初始化达梦数据库实例、配置归档。

1.1主机1数据库环境构造数据与备份操作

–(1)创建目录
[root@192 dmsoft]# mkdir /datas
[root@192 dmsoft]# chown -R dmdba:dinstall /datas
–(2)创建表空间使用非默认实例路径(非数据库实例目录)
create tablespace test1 datafile ‘/datas/TEST1.DBF’ size 128 autoextend on next 2 maxsize 10240 CACHE = NORMAL;
–(3)创建用户,创建用户时默认表空间和索引表空间指定自定义表空间
create user TEST1 identified by “TEST_qweasd1000”
default tablespace test1
default index tablespace test1;
–(4)创建测试表,并插入测试数据
CREATE TABLE test1.test1( c1 INT,sjtime DATETIME, c3 CHAR(100));
insert into test1.test1 values(1,now(),‘1’);
commit;
select * from test1.test1;
–(5)disql登录数据库后进行在线联机全备数据库操作
BACKUP DATABASE FULL BACKUPSET ‘/data/dmbak/dmdb_bakfull01’;
1.png
–(6)继续构造数据
insert into test1.test1 values(2,now(),‘INCREMENT2’);
commit;
select * from test1.test1;
–(7)disql登录数据库后进行在线联机增量备份,可以使用参数BASE ON指定基全备份
BACKUP DATABASE INCREMENT BASE ON BACKUPSET ‘/data/dmbak/dmdb_bakfull01’ BACKUPSET ‘/data/dmbak/dmdb_bakincrement01’;
2.png
–(8)继续构造数据
insert into test1.test1 values(3,now(),‘INCREMENT3’);
commit;
select * from test1.test1;
–(9)disql登录数据库后继续进行在线联机增量备份
BACKUP DATABASE INCREMENT BASE ON BACKUPSET ‘/data/dmbak/dmdb_bakfull01’ BACKUPSET ‘/data/dmbak/dmdb_bakincrement02’;
3.png
–(10)继续构造数据
insert into test1.test1 values(4,now(),‘INCREMENT4’);
commit;
insert into test1.test1 values(5,now(),‘INCREMENT5’);
commit;
insert into test1.test1 values(6,now(),‘INCREMENT6’);
commit;
select * from test1.test1;
select STATUS,PATH,ARCH_LSN,CLSN from VARCH_FILE; #ARCH_LSN 归档文件起始 LSN #CLSN 已归档的最大 LSN SELECT FILE_LSN,FLUSH_LSN,CUR_LSN FROM VRLOG;
#FILE_LSN 已经到盘上的 LSN
#FLUSH_LSN 当前准备刷盘的 LSN
#CUR_LSN 当前的 LSN
4.png

1.2主机2进行还原和恢复

1.2.1准备工作

–主机2(192.168.23.237)数据库环境准备,初始化实例,启动完全后关闭
[dmdba@192 bin]$ dminit path=/data/dmdata page_size=32 extent_size=32 port_num=5237 CASE_SENSITIVE=0 charset=1 log_size=1024 SYSDBA_PWD=TEST_qweasd1000 SYSAUDITOR_PWD=TEST_qweasd1000
[dmdba@192 bin]$ dmserver /data/dmdata/DAMENG/dm.ini
–拷贝全备份和增量备份到主机2目录/data/dmbak/DAMENG/
[root@192 dmbak]# scp -r dmdb_bakfull01 dmdb_bakincrement01 dmdb_bakincrement02 dmdba@192.168.118.237:/data/dmbak/DAMENG/
–原库查询表空间相关信息或者目标端show backupset备份信息
–数据库表空间目录
5.png
–目标端show backupset备份信息
show backupset ‘/data/dmbak/DAMENG/dmdb_bakfull01’;
6.png

1.2.2只还原恢复全备份

–(1)提前创建目录并授权
[root@192 dmsoft]# mkdir /datas
[root@192 dmsoft]# chown -R dmdba:dinstall /datas
否则使用dmrman工具直接还原时报错,可以提前创建与源端相同目录或者还原时使用映射文件mappedfile。
7.png
–(2)全备还原
注意
使用dmdba用户启动dmrman工具
使用dmrman工具进行数据库还原时,被还原的数据库实例必须处于关闭状态。
RMAN>RESTORE DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakfull01’;
如果指定REUSE DMINI参数,可恢复dm.ini中除路径相关的INI参数。
RMAN>RESTORE DATABASE ‘/data/dmdata/DAMENG/dm.ini’ REUSE DMINI FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakfull01’;
–(3)全备恢复
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakfull01’;
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ update db_magic;
8.png
–(4)启动数据库,登录查询,查询到结果为原库全备份时刻数据
9.png

1.2.3只还原恢复全备份–使用映射文件改变文件路径

–(1)在主机2上dmrman中根据全备份文件生成映射文件
DUMP BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakfull01’ MAPPED FILE ‘/data/dmbak/DAMENG/map_file_01.txt’
10.png
–(2)修改映射文件中需要更改的路径,这里更改test1表空间数据库文件路径为/data/dmbak/DAMENG/TEST1.DBF,然后保存。
11.png
–(3)全备还原时MAPPED FILE指定映射文件
RMAN>RESTORE DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakfull01’ MAPPED FILE ‘/data/dmbak/DAMENG/map_file_01.txt’;
–(4)全备恢复
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakfull01’;
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ update db_magic;
12.png
–(5)启动数据库,登录数据库后查询到表空间test1的数据文件路径已改变为修改后的路径。
13.png

1.2.4只还原恢复到某个增量备份文件

–(1)使用某个增量备份文件还原,自动会还原其依赖的基全备份
RMAN>RESTORE DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakincrement01’;
–(2)增量备份的恢复
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakincrement01’;
–(3)更新db_magic
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ update db_magic;
14.png
–(4)启动数据库,登录查询结果为备份这个增量备份dmdb_bakincrement01时刻的数据
15.png

1.2.5全备份+最后1个增量备份+归档进行完全恢复

–(1)查看最后1个增量备份信息,主要是查看LSN信息,然后拷贝需要的归档日志到主机2指定目录
CHECK BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakincrement02’;
show backupset ‘/data/dmbak/DAMENG/dmdb_bakincrement02’;
16.png
[root@192 dmbak]# scp -r /data/dmarch/DAMENG/ARCHIVE_LOCAL1_0x75F29E38_EP0_2026-05-12_19-59-57.log dmdba@192.168.118.237:/data/dmbak/DAMENG/
–(2)使用最后1个增量备份还原,自动会还原基全备份
RMAN>RESTORE DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakincrement02’;
–(3)恢复归档,不指定恢复到某个时间点或者LSN,如果不指定恢复到某个时间点或者LSN会应用归档中所有日志
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ WITH ARCHIVEDIR ‘/data/dmbak/DAMENG/’;
–(4)更新update db_magic
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ update db_magic;
17.png
–(5)启动数据库后查询
[dmdba@192 bin]$ ./dmserver /data/dmdata/DAMENG/dm.ini
select * from test1.test1;
SELECT N_EP, APPLY_LSN_ARR FROM VRAPPLY_LSN_INFO; --(6)对比原库日志文件中最新的写LSN SELECT CKPT_LSN,FILE_LSN from Vrlog;–53053
–查原库归档日志中相关信息
select * from V$ARCHIVED_LOG ;
可以查询到主机2已经应用到的LSN和原主机1保持一致,都为53503.
18.png

1.2.6全备份+增量备份+归档进行不完全恢复

不完成恢复是指只恢复到某个时间点的日志数据。
–(1)使用最后1个增量备份还原,自动会还原基全备份
RMAN>RESTORE DATABASE ‘/data/dmdata/DAMENG/dm.ini’ FROM BACKUPSET ‘/data/dmbak/DAMENG/dmdb_bakincrement02’;
–(2)恢复归档到某个时间点或者LSN
–查询原库数据信息
–UNTIL LSN xxx
–示例需求为恢复到UNTIL TIME ‘2026-05-16 21:24:12’ c1为5的数据,假如不清楚想要的数据具体时间时,可以逐步恢复推进,直到恢复出自己想要的数据
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ WITH ARCHIVEDIR ‘/data/dmbak/DAMENG/’ UNTIL TIME ‘2026-05-16 21:24:10’;
–(3)恢复完成后,不更新update db_magic,使用dmserver启动时配置recover_check=0,这种状态下是以备库配置状态启动数据库,对数据库进行只读操作,然后登录数据库后查询,如下示例语句
./dmserver /data/dmdata/DAMENG/dm.ini recover_check=0
alter database open force;
select * from test1.test1;
19.png
–(4)发现没有查询到c1=5的数据,关闭数据库继续recover到下一个可能的时间点,然后不更新update db_magic,使用dmserver启动时配置recover_check=0后,登录数据库中继续查询
RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ WITH ARCHIVEDIR ‘/data/dmbak/DAMENG/’ UNTIL TIME ‘2026-05-16 21:24:20’;
./dmserver /data/dmdata/DAMENG/dm.ini recover_check=0
alter database open force;
select * from test1.test1;
20.png
发现数据已经出现。
–(5)关闭数据库更新update db_magic,然后正常启动数据库,登录数据库中查询数据
RMAN>RECOVER DATABASE ‘/data/dmdata/DAMENG/dm.ini’ update db_magic;
21.png
–(6)启动数据库后正常查询使用
select * from test1.test1;

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服