暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

达梦数据库远程备份

十 2025-12-02
241

达梦数据库远程备份

使用场景

一般部署在专门的存储节点,和普通实例一样,也可对外提供数据库服务,启动服务时添加启动参数AUXILIARY_MODE=1说明该库作为辅助实例启动。目前仅支持辅助实例是普通的单机数据库

在日常运维中,若生产数据库发生误操作(如误删数据),传统恢复方式需在本地初始化新实例并还原备份,可能因资源紧张影响生产系统稳定性。

为提升恢复效率与安全性,我们采用 达梦数据库的“辅助实例”机制,将另一台服务器配置为专用备份存储节点

我认为的好处如下:

1.直接远程备份:源库通过 DEVICE TYPE remote 将备份集写入存储节点;

2.快速恢复验证:在辅助实例上直接还原备份,用于数据比对或应急接管;

3.避免生产干扰:无需在源服务器占用额外磁盘或内存资源。

设计 为了方便区分,我将用一台windows服务器和一台linux服务器

源端 windows dm8 生产数据库

目标端 linux dm8 备份存储 + 恢复验证

首先查询目标端默认备份路径

[dmdba@dca dmbak]$ cat /dmdata/data/DAMENG/dm.ini |grep -i bak_path

CTL_BAK_PATH = /dmdata/data/DAMENG/ctl_bak #dm.ctl backup path

BAK_PATH = /dmdata/data/DAMENG/bak #backup file path

[dmdba@dca dmbak]$

现在我们需要从windows备份远程备份到linux服务器上,等同于将这台linux服务器作为备份存储,直接远程备份在linux服务器上,无需在windows服务器上备份再传输过去。

首先我先讲述一下我备份中遇到的问题

这个报错原因是因为linux服务器没有加参数AUXILIARY_MODE=1启动数据库,该参数用户辅助实例,就好比专门的存储节点,和普通实例一样,也可对外提供数据库服务。

因此我们linux端需要重启一下数据库加上参数

/home/dmdba/dmdbms/bin/dmserver /dmdata/data/DAMENG/dm.ini AUXILIARY_MODE=1

Windows端数据库再执行

BACKUP DATABASE BACKUPSET 'dmbak_20251124' DEVICE TYPE remote

parms 'USER=SYSDBA;PASSWORD=Huangshixin123**; SVC_NAME=192.168.132.220:5236';

现在我们去linux端查看备份出来的文件

已经产生了dmbak_20251124这个文件,这下有同学会问,新产生的备份文件到底是windows的备份还是linux的备份怎么区分呢,很简单小黄来告诉你

我们进入dmrman来看

show backupset '/dmdata/data/DAMENG/bak/dmbak_20251124';

RMAN> show backupset '/dmdata/data/DAMENG/bak/dmbak_20251124';

show backupset '/dmdata/data/DAMENG/bak/dmbak_20251124';

<backupset [DEVICE TYPE:REMOTE, BACKUP_PATH: /dmdata/data/DAMENG/bak/dmbak_20251124] info start ..........>

<DB INFO>

system path: D:\dm8\dmdbs\data\DAMENG

pmnt_magic: 304417394

src_db_magic: 1408140384

db_magic: 1408140384

dsc node: 1

sys mode: 0

page check: 3

rlog encrypt: 0

rlog encrypt id: 0

external cipher[id/name]: 0/

external hash[id/name]: 0/

length in char: 0

use new hash: 1

page size: 32KB

extent size: 32

case sensitive: 1

log page size: 512B

unicode_flag/charset: 1

data version: 0x7000D

sys version: V8

pseg version: 0x7000B

enable policy: 0

archive flag: 1

blank_pad_mode: 0

crc_check: TRUE

page_enc_slice_size: 4096

char_fix_storage: 0

sql_log_forbid: 0

secur_flag: 2

db_enc_extend_size: 0

page_check_hash_size: 0

dpc_magic: 0

<META INFO>

backupset sig: BA

backupset version: 0x400A

backupset sub-version: 0xE

database name: DAMENG

backup name: DB_FULL_20251124_161005_257000

backupset description:

n_magic: 0x4144620A

bakset_magic: 1095000586

parent n_magic: 0xFFFFFFFF

bakset_seqno: 0

meta file size : 124416

compressed level: 0

encrypt type: 0

parallel num: 1

backup range: database

mpp_timestamp: 1763971805

with_huge: TRUE

backupset_type: NORMAL

mpp_flag: FALSE

backup level: online

backup type: full

without log: FALSE

without mirror: FALSE

use_bct: FALSE

end_lsn: 79623

max_trxid: 224661

base begin_lsn: -1

base end_lsn: -1

base n_magic: 0xFFFFFFFF

from lsn: 0

base name:

base backupset:

backup time: 2025-11-24 16:10:11

min exec ver: 0x08010227

min dct ver: 4

pkg size: 0x04000000

bak_magic: 0

l_term_id: 0

term_id: 0

c_seqno: 7207

c_lsn: 79623

h_seqno: 7207

h_lsn: 79623

<EP INFO>

EP[0]:

begin_pkg_seq: 7194

begin_lsn: 79557

end_pkg_seq: 7207

end_lsn: 79623

<FILE INFO>

backupset directory: /dmdata/data/DAMENG/bak/dmbak_20251124

backupset name: dmbak_20251124

backup data file num: 6

backup piece num: 2

backup huge file num: 0

backup image copy file num: 0

<backup_piece_list>

$file_seq |$size(KB) |$pos_desc |$content_type

0 |46185 |dmbak_20251124.bak |DATA

1 |61 |dmbak_20251124_1.bak |LOG

<data_file_list>

$file_seq |$group_id |$group_name |$file_id |$file_path |$mirror_path |$file_len |$copy_num |$size_flag|$asm_mirror|$asm_striping

1 |0 |SYSTEM |0 |D:\dm8\dmdbs\data\DAMENG\SYSTEM.DBF| |289406976 |0 |0 |1 |0

2 |1 |ROLL |0 |D:\dm8\dmdbs\data\DAMENG\ROLL.DBF| |201326592 |0 |0 |1 |0

3 |4 |MAIN |0 |D:\dm8\dmdbs\data\DAMENG\MAIN.DBF| |201326592 |0 |0 |1 |0

4 |5 |BOOKSHOP |0 |D:\dm8\dmdbs\data\DAMENG\BOOKSHOP.DBF| |157286400 |0 |0 |1 |0

5 |6 |DMHR |0 |D:\dm8\dmdbs\data\DMHR.DBF | |134217728 |0 |0 |1 |0

<arch_file_list>

$file_seq |$dsc_seq |$file_path |$file_len |$begin_seqno |$begin_lsn |$end_seqno |$end_lsn

6 |0 | |57344 |7194 |79557 |7207 |79623

<huge_file_list>

$group_id |$schema_id|$table_id |$column_id|$file_id |$file_len |$path

<img_copy_file_list>

$dst_file_path |$src_file_path |$file_type|$file_len

<TABLESPACE INFO>

<tablespace_list>

$ts_id |$name |$state |$cache |$copy_num |$size_flag|$cipher_name |$opt_node

0 |SYSTEM |0 | |0 |0 | |65535

1 |ROLL |0 | |0 |0 | |65535

4 |MAIN |0 | |0 |0 | |65535

5 |BOOKSHOP |0 | |0 |0 | |65535

6 |DMHR |0 | |0 |0 | |65535

<backupset [DEVICE TYPE:REMOTE, BACKUP_PATH: /dmdata/data/DAMENG/bak/dmbak_20251124] info end .>

show backupsets successfully.

time used: 35.134(ms)

RMAN>

我们可以看标红的这几处,很容易看出来这个是备份的windows数据库,然后存储在linux服务器上

我觉得这个方式的好处是,首先可以作为一个找误删数据的单实例,因为每个实例误删了都可以远程备份过去,然后恢复在这个实例上,就不需要额外在生产机器上再初始化一个实例再去恢复,怕因为内存原因造成生产数据库宕机

现在我们来恢复一下这个数据库吧,为了方便区分我放以下截图

Windows端模式

Linux端

现在我们去把windows的备份恢复到linux,首先需要把linux端数据库服务停了

RESTORE DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/data/DAMENG/bak/dmbak_20251124'

recover DATABASE '/dmdata/data/DAMENG/dm.ini' FROM BACKUPSET '/dmdata/data/DAMENG/bak/dmbak_20251124'

recover database '/dmdata/data/DAMENG/dm.ini' update db_magic ;

非常好小黄启动的时候又遇到问题了

报错数据库版本不一致,小黄一看差了半年的版本,然后又得去找linux相同版本来做这个恢复

我重新上传了一个同版本linux的软件包,重新初始化一个端口不同的实例

/home/dmdba/dmdbms1/bin/dminit PATH=/dmdata/data PAGE_SIZE=16 EXTENT_SIZE=32 DB_NAME=EXAMDB CHARSET=0 INSTANCE_NAME=EXAMSVR PORT_NUM=5238 LOG_SIZE=256 SYSDBA_PWD=Dameng123 SYSAUDITOR_PWD=Dameng123

还原成功

总结

场景

优势

误删数据恢复

快速在辅助实例还原,验证数据正确性后再决定是否回切

多系统统一备份中心

多个生产库(Windows/Linux)均可远程备份至同一辅助节点

审计与取证

保留历史备份快照,用于安全事件回溯

测试环境初始化

直接从生产备份恢复到测试库,保证数据一致性


https://eco.dameng.com

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论