物理备份还原恢复和逻辑备份还原。
逻辑备份还原--dexp和dimp命令行工具和MANAGER图形化工具。
物理备份还原与恢复
--操作系统级别物理文件方式拷贝与还原。
--disql工具(对应图形化工具MANAGER):执行联机数据备份与还原,包括联机的数据库备份、归档备份、表空间备份与还原、表备份与还原。
--DMRMAN工具(对应图形化工具CONSOLE ):执行脱机数据备份、还原与恢复,包括脱机的数据库备份、还原与恢复,脱机还原表空间,归档的备份、还原与修复。
1DISQL联机全备+增量备份+归档进行不完全恢复或完全恢复-实践示例
对达梦数据库模拟生产环境进行在线联机备份,然后拷贝到异机测试环境使用备份和归档对数据库进行还原恢复是日常中常见的需求操作。
环境说明
准备主机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 "HUN_admin2026"
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_ bak full0 1 ';

--(6)继续构造数据
insert into test1.test1 values(2,now(),'INCREMENT2');
commit;
select * from test1.test1;
--( 7 )disql登录 数据库联机进行 增量备份
BACKUP DATABASE INCREMENT BASE ON BACKUPSET '/data/dmbak/dmdb_ bak full0 1 ' BACKUPSET '/data/dmbak/dmdb_ bak increment0 1 ';

--(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_ bak full0 1 ' BACKUPSET '/data/dmbak/dmdb_ bak increment0 2 ';

--(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 V$ARCH_FILE;
#ARCH_LSN 归档文件起始 LSN、CLSN 已归档的最大 LSN
SELECT FILE_LSN,FLUSH_LSN,CUR_LSN FROM V$RLOG;
#FILE_LSN 已经到盘上的 LSN、FLUSH_LSN 当前准备刷盘的 LSN、CUR_LSN 当前的 LSN

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=HUN_admin2026 SYSAUDITOR_PWD=HUN_admin2026
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备份信息
--数据库表空间目录

--目标端show backupset备份信息
show backupset '/data/dmbak/DAMENG/dmdb_bakfull01';

1.2.2只还原恢复全备份
--(1)提前创建目录并授权
root@192 dmsoft# mkdir /datas
root@192 dmsoft# chown -R dmdba:dinstall /datas
否则直接还原时报错,可以提前创建与源端相同目录或者还原时使用映射文件mappedfile。

--(2)全备还原
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;

--(4)启动数据库,登录查询,查询结果为全备份时数据

1.2.3只还原恢复全备份--使用映射文件改变文件路径
--(1)主机2上dmrman中根据全备份生成映射文件
DUMP BACKUPSET '/data/dmbak/DAMENG/dmdb_bakfull01' MAPPED FILE '/data/dmbak/DAMENG/map_file_01.txt'

--(2)修改映射文件

--(3)全备还原时指定
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;

--(5)启动数据库,登录后查询到表空间test1的数据文件路径已改变。

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;

--(4)启动数据库,登录查询结果为备份dmdb_bakincrement01时数据

1.2.4全备份+增量备份+归档进行完全恢复
--(1)查看最后1个增量备份信息,拷贝需要的归档日志
CHECK BACKUPSET '/data/dmbak/DAMENG/dmdb_bakincrement02';
show backupset '/data/dmbak/DAMENG/dmdb_bakincrement02';

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,应用归档中所有
RMAN>RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' WITH ARCHIVEDIR '/data/dmbak/DAMENG/';
--(3)update db_magic
RMAN>RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' update db_magic;

--(4)启动数据库后查询
dmdba@192 bin$ ./dmserver /data/dmdata/DAMENG/dm.ini
select * from test1.test1;
SELECT N_EP, APPLY_LSN_ARR FROM V$RAPPLY_LSN_INFO;
--(5)对比原库日志文件中最新写LSN
SELECT CKPT_LSN,FILE_LSN from V$rlog;--53053
--查原库归档日志中相关信息
select * from V$ARCHIVED_LOG ;

1.2.4全备份+增量备份+归档进行不完全恢复
--(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;

--(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';

发现数据已经出现。
--(5)关闭数据库更新update db_magic,正常启动数据库,查询数据
RMAN>RECOVER DATABASE '/data/dmdata/DAMENG/dm.ini' update db_magic;

--(6)启动数据库后查询
select * from test1.test1;
更多达梦数据库运维指南、在线文档、相关资料、社区在线提问以及技术分享