news 2026/11/5 15:08:07

达梦数据库主备部署(同步归档模式)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
达梦数据库主备部署(同步归档模式)

前提

“同步备库”一般用于对主库性能要求较高,想要避免因备库故障或异步恢复引发的Suspend 状态切换,但又希望备库的数据延迟不要太大的应用场景。

在达梦数据库DM8中,“同步备库”可以通过“同步归档模式”实现。与实时归档相比,同步归档时机为主库本地归档刷盘之后,主库发送归档到同步备库失败时,不会切换为 Suspend状态,而是直接将备库的归档状态设置为无效。

说明:同步归档模式是新版本特性(2023年第三季度以后版本支持),老版本不支持。

部署规划

IP规划:

服务ip

心跳ip

数据库名

实例名

192.168.231.133

192.168.231.133

dmdb

DW1

192.168.231.135

192.168.231.135

dmdb

DW2

端口规划:

实例名

实例端口

MAL 系统监听 TCP 连接的端口

实例本地的守护进程监听 TCP 连接的端口

实例监听守护进程 TCP 连接的端口

DW1

5236

7336

7436

7536

DW2

5236

7336

7436

7536

目录规划:(在对应服务器上创建目录owner为dmdba组为dinstall)

数据库软件安装目录

/home/dmdba/dmdbms

实例安装目录

/dmdata/

归档日志存放目录

/dmdata/arch

备份文件存放目录

/dmdata/dmbak/

数据库软件安装

查了一下数据库服务器的时区是正常的:

使用root用户挂载数据库软件的iso文件:

mkdir -p dmisomount -o loop dm8_xxx.iso dmiso

使用dmdba用户安装软件:

执行以下命令,切换到dmiso目录下执行DMInstall.bin文件开始安装,选择【-i】参数以命令行方式安装。

su - dmdbacd /dmiso./DMInstall.bin -i

选择安装程序的语言c/C为中文,e/E为英文。

提示是否安装key文件,输入N跳过。

选择时区,21即东8区。

选择安装类型,默认典型安装(包含所有内容)。

选择软件安装目录,默认/home/dmdba/dmdbms

确认安装

安装完成提示使用root执行脚本:

/home/dmdba/dmdbms/script/root/root_installer.sh

配置同步主备

解决方法:修改dm_svc.conf配置文件,将多余的+去掉。注意:这个system32下的配置文件不可直接修改,需要在外面修改好后复制进去,替换掉原来的文件。

3.1初始化实例

主库:

dminit path=/dmdata page_size=32 extent_size=32 log_size=2048 db_name=dmdb instance_name=dw1

备库:

dminit path=/dmdata page_size=32 extent_size=32 log_size=2048 db_name=dmdb instance_name=dw2

3.2脱机备份数据库

主库启动数据库出现system is ready后输入exit停止数据库:

dmserver dmdata/dmdb/dm.ini

执行全备:

dmrmanbackup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull’;

3.3备份还原备库

将主库备份文件scp到备库,进行备份还原备库:

dmrman use_ap=2

执行restore:

restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';

完成后执行 recover:

recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';

最后执行recover update db_magic:

recover database '/dmdata/dmdb/dm.ini' update db_magic;

3.4修改dm.ini

主备上修改以下参数值:

vi dmdata/dmdb/dm.ini

MAL_INI = 1ARCH_INI = 1ALTER_MODE_STATUS = 0ENABLE_OFFLINE_TS = 2

3.5配置归档文件dmarch.ini

vi dmdata/dmdb/dmarch.ini

主节点:

[ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = dmdata/archARCH_FILE_SIZE = 2048ARCH_SPACE_LIMIT = 102400[ARCHIVE_SYNC]ARCH_TYPE = SYNCARCH_DEST = dw2ARCH_RECOVER_TIME = 1

备节点:

ARCHIVE_LOCAL1]ARCH_TYPE = LOCALARCH_DEST = dmdata/archARCH_FILE_SIZE = 2048ARCH_SPACE_LIMIT = 102400

3.6配置MAL系统配置文件dmmal.ini

主备节点一致:

vi /dmdata/dmdb/dmmal.iniMAL_CHECK_INTERVAL = 5MAL_CONN_FAIL_INTERVAL = 15[MAL_INST1]MAL_INST_NAME = dw1MAL_HOST = 192.168.231.133MAL_PORT = 7336MAL_INST_HOST = 192.168.231.133MAL_INST_PORT = 5236MAL_DW_PORT = 7436MAL_INST_DW_PORT = 7536[MAL_INST2]MAL_INST_NAME = dw2MAL_HOST = 192.168.231.135MAL_PORT = 7336MAL_INST_HOST = 192.168.231.135MAL_INST_PORT = 5236MAL_DW_PORT = 7436MAL_INST_DW_PORT = 7536

3.7配置守护进程配置文件 dmwatcher.ini

主备节点一致:

vi dmdata/dmdb/dmwatcher.ini

[GRP_SN]DW_TYPE = LOCALDW_MODE = MANUALDW_ERROR_TIME = 30INST_RECOVER_TIME = 60INST_ERROR_TIME = 20INST_OGUID = 453331INST_INI = dmdata/dmdb/dm.iniINST_AUTO_RESTART = 1INST_STARTUP_CMD = home/dmdba/dmdbms/bin/dmserver

主备启动到mount:

dmserver dmdata/dmdb/dm.ini mount

主库执行:

disql SYSDBA/SYSDBA@localhost:5236sp_set_oguid(453331);alter database primary;

备库执行:

disql SYSDBA/SYSDBA@localhost:5236sp_set_oguid(453331);alter database standby;

主备启动守护进程:

dmwatcher dmdata/dmdb/dmwatcher.ini

3.8配置监视器配置文件dmmonitor.ini

vi dmdata/dmdb/dmmonitor.ini

MON_DW_CONFIRM = 0MON_LOG_PATH = home/dmdba/dmdbms/logMON_LOG_INTERVAL = 60MON_LOG_FILE_SIZE = 200MON_LOG_SPACE_LIMIT = 1024[GRP_SN]MON_INST_OGUID = 453331MON_DW_IP = 192.168.253.133:7436MON_DW_IP = 192.168.253.135:7436

登录监视器查看状态:

dmmonitor dmdata/dmdb/dmmonitor.ini

登录主库创建T1表测试:

CREATE TABLE T1 AS SELECT * FROM DBA_USERS;

登录备库查看T1表是否生成:

3.9注册服务

使用 root 用户,到数据库安装目录的script/root下。

注册守护进程服务(主备库都执行):

./dm_service_installer.sh -t dmwatcher -p dw -watcher_ini/dmdata/dmdb/dmwatcher.ini

注册数据库实例服务(主备库都执行):

./dm_service_installer.sh -t dmserver -p dw -dm_ini/dmdata/dmdb/dm.ini

主备执行以下命令,启动数据库实例:

su - dmdbaDmServicedw start

主备执行以下命令,启动守护进程:

su - dmdbaDmWatcherServicedw start

主备延迟测试

同步归档(Sync)在主库归档日志刷盘后,通过MAL系统将Redo日志发送到备库。同步备库的Redo日志重演过程与实时归档等其他类型的归档完全一致。同步归档的执行流程为:主库在归档日志刷盘后,将Redo日志发送到备库,备库收到Redo日志(RLOG_PKG)后,将其加入日志重演任务系统,并马上响应主库,不需要等待Redo日志重演结束后再响应主库。

4.1模拟测试数据

--模拟主库写入100w数据查看备库延迟情况create table t1(a int,b varchar2(100));declarebeginfor i in 1..1000000 loopinsert into t1 values(i,to_char(sysdate));end loop;commit;end;/

4.2检查备库同步情况

备库数据情况备库数据成功写入,用户无感知:

查看监视器状态:

故障模拟

同步备库的守护进程也需要配置为 LOCAL 类型,因此同步备库不支持主备库切换、备库接管等操作。若有将同步备库切换为主库的需要,可以手动执行 sql语句将其切换为 PRIMARY 模式,但此时数据守护系统并不能保证该操作的正确性,需要由用户自身确保操作正确。

5.1备库故障

模拟主库在持续写入数据,持续时间5分钟:

主库写入时kill掉备库守护和数据库进程:

查看备库归档,状态已并更为invalid:

查看压测运行结果,成功率100%:

查看响应时间平稳无明显波动:

备库恢复服务后查看监视器状态,归档状态async_send,待归档同步后变更为valid:

5.2主库故障

由于同步归档LOCAL 类型,因此同步备库不支持主备库切换,需通过sql手动建备库变更为主库。

模拟主库故障,kill掉守护和数据库服务:

查看监视器状态,主库实例为error状态:

通过sql将备库切换为主库:

1)停止备库守护服务

DmWatcherServicedw stop

2)执行命令将备库转换为PRIMARY模式

SP_SET_PARA_VALUE(1,'ALTER_MODE_STATUS',1);ALTER DATABASE MOUNT;ALTER DATABASE PRIMARY;ALTER DATABASE OPEN FORCE;

5.3集群恢复

如需恢复原主备集群需重新备份恢复,参考《配置同步主备》。

对比实时主备

比较类型

实时主备(最大性能模式)

同步主备

归档配置

实时备库

同步备库

主机日志

发送时机

写入联机日志前,发送到备库

归档日志刷盘之后

失败处理

Suspend 数据库,保持归档状态不变,等待守护进程干预

直接设置归档状态为无效,不会Suspend 数据库

故障切换

监视器自动或手动切换

手动将备库切换为主库

故障后恢复集群

自动加入守护集群

需重新搭建同步备库

以上为本期分享,希望能带给大家帮助。想要了解更多往期干货,可访问页面最下方#达梦技术干货攻略#合集。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/11/5 15:07:51

HTTP 429限流实战:OpenClaw调度系统的Rate Limit治理方案

深夜两点,告警群里突然跳出一条红色的“任务失败率飙升”通知。我翻身坐起来,打开日志平台,屏幕上整整齐齐刷着同一个错误——429 rate_limit_error。那一刻,心里“咯噔”一声:OpenClaw这套跨平台自动化编排系统&#…

作者头像 李华
网站建设 2026/10/20 15:51:25

一维光子晶体Zak相位计算:从Comsol能带到Matlab Wilson loop提取

最近在做一个关于一维光子晶体边界态的项目,最卡人的地方不是建模型,也不是仿真计算,而是算完能带之后别人问了一句话:“你这个结构的Zak相位是多少?”很多教程讲到能带图就停了,可拓扑性质恰恰藏在波函数的…

作者头像 李华
网站建设 2026/10/22 21:17:46

告别琐碎Review:Pylint与Flake8让Python代码质量自动化

代码评审的时候,我经常在 PR 里看到三类东西:缩进一会儿空格一会儿 Tab,几个没用的 import 堆在那里,还有一个函数参数多到要翻两屏才看完。这种问题不算致命,但会反复出现——只要项目里没有一套自动化的检查机制&…

作者头像 李华
网站建设 2026/11/3 14:53:11

ggggggggit

1.git介绍Git是一个开源的版本控制系统,常用于项目代码管理,文件管理等场景。可以简单理解为一个仓库,用来存储并管理你存入的东西。最重要的一个功能就是版本管理。git服务会记录每一次修改历史,用户可以翻看历史版本或者还原到某…

作者头像 李华
网站建设 2026/10/21 13:37:34

AI芯片软硬件协同设计全流程:从算力评估到流片验证的工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/22 8:06:23

Java数组操作实战:求和、极值与逆序优化

1. Java数组操作实战三部曲刚接触Java数组操作时,我曾被各种算法题绕得晕头转向。直到在项目中反复实践后,才发现数组处理的核心套路其实就那几个。今天分享三个经典案例的工业级实现方案,包含我踩过的坑和性能优化心得。2. 数组求和与奇偶分…

作者头像 李华