达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群DW

1)手工搭建一主一备数据守护集群;

2)连接集群进行增删改查基本操作;

3)监视器查看集群状态;

1 准备工作

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

数据库软件安装目录 /home/dmdba/dmdbms

实例安装目录 /dmdata/

归档日志存放目录 /dmdata/arch

备份文件存放目录 /dmdata/dmbak/

IP规划:

类别 IP地址 实例名 实例端口号
主库A 10.137.88.59 dw1 5236
备库B 10.137.88.61 dw2 5237
监视器 10.137.88.58

【说明】这里将监视器配在独立的服务器上,三台服务器都要事先安装好dm8

端口规划:

实例名 实例端口 MAL 系统监听 TCP 连接的端口 实例本地的守护进程监听 TCP 连接的端口 实例监听守护进程 TCP 连接的端口
dw1 5236 7336 7436 7536
dw2 5236 7336 7436 7536

2 主备集群配置

2.1 初始化实例

2个节点完成实例初始化

执行以下命令

bash 复制代码
./dminit path=/home/dmdba/dm8/dmdbms/data db_name=dmdb instance_name=dw1 page_size=32 extent_size=32 log_size=2048 SYSDBA_PWD=Password1 SYSAUDITOR_PWD=Password1 PORT_NUM=5236

【注意】后面实例名需跟此处保持一致,端口号默认为5236(可以不写端口号),密码长度在闭区间[8,48]内,且需要包含大小写和数字。如果有特殊符号的话需要加引号,没有则不用。

常用参数说明

参数 说明 示例值
PATH 数据文件路径 /dm8/data
DB_NAME 数据库名 DAMENG
INSTANCE_NAME 实例名 DMSERVER
PORT_NUM 服务端口 5236
SYSDBA_PWD SYSDBA密码 Dameng123
PAGE_SIZE 页大小 8,16,32(默认8K)
CASE_SENSITIVE 大小写敏感 0(不敏感)/1(敏感)
CHARSET 字符集 0(GB18030)/1(UTF-8)/2(EUC-KR)

完整参数查看:

bash 复制代码
./dminit HELP

常用端口对照表

端口类型 默认端口 配置文件参数
数据库服务端口 5236 PORT_NUM
MAL通信端口 61141 MAL_PORT
守护进程端口 52141 DW_PORT
归档端口 5237 ARCH_PORT

主库:

备库:

bash 复制代码
./dminit path=/home/dmdba/dm8/dmdbms/data db_name=dmdb instance_name=dw1 page_size=32 extent_size=32 log_size=2048 SYSDBA_PWD=Password1 SYSAUDITOR_PWD=Password1 PORT_NUM=5236

2.2 启动实例

以主机dmdb01为主库,启动一次实例(启动一次后即可关停)

bash 复制代码
dmserver /dmdata/dmdb/dm.ini

如图,出现system is ready后输入exit停止数据库。

2.3 备库还原

传输备份文件

【说明】这里利用的是两台服务器,所以需要利用scp命令传输备份文件

ruby 复制代码
# 主库
scp -r /home/dmdba/bakfull dmdba@10.137.88.61:/home/dmdba/
# 备库
scp -r dmdba@10.137.88.59:/home/dmdba/bakfull /home/dmdba/ 

backup 全库

在主机dmdb01上执行以下命令,确认主库 dmap 服务已启动:

perl 复制代码
ps -ef|grep dmap

已启动:

bash 复制代码
dmdba用户 启动dmrman工具:
./dmrman use_ap=2
执行 backup 全库:
backup database '/dmdata/dmdb/dm.ini' backupset '/home/dmdba/bakfull';

备份还原备库

将备份的文件/home/dmdba/bakfull拷贝到备库服务器上。

在主机dmdb02上使用 dmrman 工具还原备库,dmdba 用户执行:

sql 复制代码
./dmrman use_ap=2
restore database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
recover database '/dmdata/dmdb/dm.ini' from backupset '/home/dmdba/bakfull';
recover database '/dmdata/dmdb/dm.ini'  update db_magic;

【说明】./dmrman use_ap=2这一步很关键,只输./dmrman,在接下来的步骤中会报一堆错

备库:

【说明】图中报错[603]显示为备份期间没有日志产生,可忽略

2.4 修改参数

如何修改去搜vim编辑器的用法

i 修改

esc + / 查找

esc + wq 保存并退出

esc +wq!强制保存并退出

esc + q 退出不保存

修改参数去安装数据库的目录下修改。

2.4.1 修改dm.ini参数

所有节点都要修改

执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dm.ini

主库dmdb01上修改以下参数值:

ini 复制代码
INSTANCE_NAME = dw1
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

备库dmdb02上修改以下参数值:

ini 复制代码
INSTANCE_NAME = dw2
MAL_INI = 1
ARCH_INI = 1
ALTER_MODE_STATUS = 0
ENABLE_OFFLINE_TS = 2

2.4.2 配置归档配置文件 dmarch.ini

在实例目录下新建文件 dmarch.ini,执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dmarch.ini

主库dmdb01上添加以下内容:

ini 复制代码
[ARCHIVE_REALTIME1]  
ARCH_TYPE     = REALTIME  
ARCH_DEST     = dw2   
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL 
ARCH_DEST     = /dmdata/arch    
ARCH_FILE_SIZE    = 2048
ARCH_SPACE_LIMIT  = 102400

【说明】如果后续ARCH_DEST这里报错的话,可以:

把配置文件改成:

ARCH_DEST = /dmarch

然后输入以下命令:

bash 复制代码
su - root
sudo mkdir -p /dmarch
sudo chown -R dmdba:dinstall /dmarch
sudo chmod -R 755 /dmarch
exit
touch /dmarch/test_file && echo "权限设置成功"||echo"仍有问题"
rm -f/dmarch/test_file

备库Dmdb02上添加以下内容:

ini 复制代码
[ARCHIVE_REALTIME1]  
ARCH_TYPE     = REALTIME 
ARCH_DEST     = dw1   
[ARCHIVE_LOCAL1]
ARCH_TYPE     = LOCAL
ARCH_DEST     = /dmdata/arch  
ARCH_FILE_SIZE    = 2048
ARCH_SPACE_LIMIT  = 102400    

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

在实例目录下新建文件 dmmal.ini,执行以下命令。

vi /dmdata/dmdb/dmmal.ini

主备库2个节点文件内容要相同。

ini 复制代码
MAL_CHECK_INTERVAL   = 5  
MAL_CONN_FAIL_INTERVAL  = 15  
[MAL_INST1]
  MAL_INST_NAME = dw1 
  MAL_HOST     = 10.137.88.59  
  MAL_PORT     = 7336
  MAL_INST_HOST   = 10.137.88.59  
  MAL_INST_PORT   = 5236 
  MAL_DW_PORT   = 7436
  MAL_INST_DW_PORT = 7536
[MAL_INST2]
  MAL_INST_NAME = dw2 
  MAL_HOST      = 10.137.88.61  
  MAL_PORT          = 7336
  MAL_INST_HOST         = 10.137.88.59  
  MAL_INST_PORT         = 5236 
  MAL_DW_PORT  = 7436
  MAL_INST_DW_PORT = 7536

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

在实例目录下新建文件 dmwatcher.ini,执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dmwatcher.ini

主备库2节点文件内容要相同。

ini 复制代码
[GRP_DW] 
DW_TYPE    = GLOBAL  
DW_MODE    = MANUAL 
DW_ERROR_TIME     = 30  
INST_RECOVER_TIME  = 60         
INST_ERROR_TIME   = 20  
INST_OGUID         = 453331 
INST_INI           = /dmdata/dmdb/dm.ini 
INST_AUTO_RESTART  = 1   
INST_STARTUP_CMD   = /home/dmdba/dmdbms/bin/DmServiceDW start

2.5注册服务

以上启动为前台方式启动,仅用户搭建过程中验证配置。配置没问题后需要将实例,守护进程和确认监视器注册为系统服务。

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

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

bash 复制代码
./dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /dmdata/dmdb/dmwatcher.ini	

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

bash 复制代码
./dm_service_installer.sh -t dmserver -p DW -dm_ini /dmdata/dmdb/dm.ini

2.6 Mount状态启动集群

以 mount 方式启动数据库实例

使用 dmdba 用户,执行以下命令(主备库都执行):

bash 复制代码
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmserver /dmdata/dmdb/dm.ini mount

主备库都要是ready状态,表示成功

2.7 修改数据库模式

在新的终端使用 disql 工具连接数据库:

bash 复制代码
./disql SYSDBA/Password1

主备库都修改 oguid,执行以下命令:

scss 复制代码
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 
SQL>sp_set_oguid(453331); 
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

系统通过OGUID值确定一个守护进程组,由用户保证OGUID值的唯一性,并确保数据守护系统中,数据库、守护进程和监视器配置相同的OGUID值。

主库dmdb01上修改数据库模式为 primary,执行以下命令:

scss 复制代码
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 	//第1步
SQL>alter database primary;					//第2步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); 	//第3步

主库:

备库dmdb02上修改数据库模式为 standby,执行以下命令:

如果当前数据库不是 Normal 模式,需要先修改 dm.ini 中 ALTER_MODE_STATUS 值为 1,允许修改数据库模式,修改 Standby 模式成功后再改回为 0。如果是 Normal 模式,请忽略下面的第 1 步和第 3 步。

scss 复制代码
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1); 	//第1步
SQL>alter database standby; 						//第2步
SQL>SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0); 	//第3步

备库:

2.8 启动守护进程

dmdba 用户下,到数据库安装目录的 bin 下执行以下命令(主备库都执行):

bash 复制代码
./dmwatcher /dmdata/dmdb/dmwatcher.ini

守护进程启动后,会将 Mount 的实例 Open。这里是前台启动的方式,因为我们前面注册了服务名称,所以就没必要前台启动,直接配好主从的主备关系后crtl+C退出两个实例的前台mount启动,然后调整实例启动服务脚本里的启动状态,依次按顺序启动主、备库实例、然后再主、备库的守护DmWatcher服务。

2.9 配置监视器

启动监视器(可以在任意节点配置)

守护进程配置为自动切换时,必须配置确认监视器。在主备服务器以外的服务器上(需安装有 DM 数据库软件,且与主备心跳网络端口开放)。

设置权限

bash 复制代码
# 查看当前权限
ls -l dmmonitor.ini

# 设置权限(使用分步法避免错误)
sudo chown dmdba dmmonitor.ini
sudo chgrp dinstall dmmonitor.ini
sudo chmod 640 dmmonitor.ini

新建确认监视器配置文件 dmmonitor.ini,执行以下命令:

bash 复制代码
vi /dmdata/dmdb/dmmonitor.ini

添加以下内容:

ini 复制代码
MON_DW_CONFIRM    = 0
MON_LOG_PATH    = /home/dmdba/dmdbms/log
MON_LOG_INTERVAL  = 60
MON_LOG_FILE_SIZE   = 200
MON_LOG_SPACE_LIMIT  = 1024
[GRP_DW] 
 MON_INST_OGUID    = 453331

 MON_DW_IP     = 10.137.88.59:7436
 MON_DW_IP     = 10.137.88.61:7436

执行以下命令,启动监视器。

bash 复制代码
su - dmdba
cd /home/dmdba/dmdbms/bin
./dmmonitor /dmdata/dmdb/dmmonitor.ini	

启动后输入 show 命令查看集群状态。

其中守护进程状态 WSTATUS 为 OPEN,实例状态 ISTATUS 为 OPEN,归档类型 RTYPE 为 TIMELY,归档状态 RSTAT 为VALID。

2.10 disql 客户端验证

使用 disql 客户端登录主库,创建测试表,插入数据,执行以下命令:

bash 复制代码
./disql SYSDBA/Password1@10.137.88.59:5236

SQL 提示符下执行以下命令:

sql 复制代码
create table test(id int);
insert into test values (1);
commit;

用 disql 客户端登录备库,查询测试表验证,执行以下命令:

bash 复制代码
./disql SYSDBA/Password1@10.137.88.61:5236

sql:

csharp 复制代码
select * from test;

如图,验证成功

3 可能遇到的问题

无法访问/dm8/data/

  1. 达梦数据库未正确安装或安装路径不正确
  2. /dm8/data/目录尚未创建
  3. 当前用户没有访问该目录的权限
  4. 环境变量配置不正确

解决方案

1. 确认达梦数据库安装情况

首先检查达梦数据库是否已正确安装:

perl 复制代码
ps -ef | grep dmserver

如果未找到相关进程,可能需要重新安装达梦数据库。

2. 检查目录是否存在

bash 复制代码
ls -ld /dm8/data/

如果目录不存在,需要创建:

bash 复制代码
sudo mkdir -p /dm8/data/
sudo chown -R dmdba:dinstall /dm8/

3. 检查权限问题

确保当前用户(通常是dmdba)有访问权限:

bash 复制代码
sudo chown -R dmdba:dinstall /dm8/data/
sudo chmod -R 755 /dm8/data/

4. 检查环境变量

确保已设置达梦数据库的环境变量:

bash 复制代码
cat ~/.bash_profile

应该包含类似以下内容:

bash 复制代码
export DM_HOME=/dm8
export PATH=$DM_HOME/bin:$PATH
export LD_LIBRARY_PATH=$DM_HOME/bin:$LD_LIBRARY_PATH

5. 初始化数据库实例

如果/data目录是空的,可能需要初始化数据库:

bash 复制代码
cd /dm8/bin
./dminit path=/dm8/data

解决达梦数据库归档目录权限不足问题

您在执行 touch /dmarch/test_file 时遇到权限不足的问题,这表明 dmdba 用户对 /dmarch 目录没有足够的权限。以下是完整的解决方案:

1. 检查当前权限状态

bash 复制代码
ls -ld /dmarch

正常应该显示:

bash 复制代码
drwxr-xr-x 2 dmdba dinstall 4096 Jan 1 10:00 /dmarch

2. 授予dmdba用户完整权限

bash 复制代码
# 使用root用户执行
sudo chown -R dmdba:dinstall /dmarch
sudo chmod -R 775 /dmarch  # 给属主和属组读写执行权限

# 如果存在SELinux限制
sudo chcon -R -t dm_db_data_t /dmarch

3. 验证权限修复

bash 复制代码
# 切换回dmdba用户
su - dmdba

# 再次测试
touch /dmarch/test_file && echo "权限设置成功" || echo "仍有问题"
rm -f /dmarch/test_file

4. 特殊情况处理

情况1:目录被其他进程占用

bash 复制代码
sudo lsof /dmarch
# 如果有进程占用,先停止相关服务
sudo systemctl stop DmServiceDMSERVER

情况2:文件系统只读

bash 复制代码
mount | grep "/dmarch"
# 如果是ro,重新挂载
sudo mount -o remount,rw /dmarch

情况3:磁盘空间满

bash 复制代码
df -h /dmarch
# 清理空间或扩展存储

5. 生产环境推荐权限设置

对象 推荐权限 命令示例
归档目录 775 chmod 775 /dmarch
归档文件 664 find /dmarch -type f -exec chmod 664 {} ;
归档子目录 775 find /dmarch -type d -exec chmod 775 {} ;

6. 永久生效配置

bash 复制代码
# 设置默认umask(添加到/etc/profile)
echo "umask 002" | sudo tee -a /etc/profile
source /etc/profile

# 设置开机自动修复权限(可选)
echo "chown -R dmdba:dinstall /dmarch" | sudo tee -a /etc/rc.local
sudo chmod +x /etc/rc.local

7. 验证达梦归档功能

sql 复制代码
# 启动数据库到mount模式
./dmserver /dmdata/dmdb/dm.ini mount

# 在disql中验证
./disql SYSDBA/SYSDBA
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
SQL> SELECT * FROM V$ARCHIVED_LOG;

如果仍有问题,请检查:

  1. 用户组是否正确:id dmdba 应显示属于 dinstall
  2. SELinux状态:getenforce 如果是Enforcing模式需要调整策略
  3. 磁盘inode是否耗尽:df -i /dmarch

验证达梦数据库归档路径(ARCH_DEST)正确性的完整指南

1. 基础路径验证方法

检查路径是否存在

bash 复制代码
# 检查目录是否存在
ls -ld /dmarch
  • 有效输出 :显示目录详细信息(如 drwxr-xr-x 2 dmdba dinstall 4096 Jan 1 10:00 /dmarch
  • 无效输出ls: cannot access '/dmarch': No such file or directory

测试路径可写性(使用dmdba用户)

bash 复制代码
su - dmdba
test -w /dmarch && echo "可写" || echo "不可写"

2. 高级验证方法

创建测试文件

bash 复制代码
# 测试文件创建/删除
touch /dmarch/test_file && rm /dmarch/test_file && echo "测试成功" || echo "测试失败"

检查磁盘空间

bash 复制代码
df -h /dmarch  # 查看挂载点和可用空间

验证文件系统类型

shell 复制代码
mount | grep "/dmarch"
# 应显示rw(读写)权限,如:/dev/sdb1 on /dmarch type xfs (rw,relatime)

3. 达梦专用验证命令

在数据库内验证归档配置

sql 复制代码
-- 查看归档参数
SELECT PARA_NAME, PARA_VALUE FROM V$DM_INI WHERE PARA_NAME LIKE '%ARCH%';

-- 查看归档日志记录
SELECT COUNT(*) FROM V$ARCHIVED_LOG;

强制生成归档日志测试

sql 复制代码
ALTER SYSTEM ARCHIVE LOG CURRENT;

4. 自动化验证脚本

bash 复制代码
#!/bin/bash
ARCH_PATH="/dmarch"

echo "===== 基础检查 ====="
[ -d "$ARCH_PATH" ] && echo "目录存在" || echo "目录不存在"
[ -w "$ARCH_PATH" ] && echo "目录可写" || echo "目录不可写"
df -h $ARCH_PATH

echo -e "\n===== 达梦归档测试 ====="
./disql SYSDBA/SYSDBA <<EOF
ALTER SYSTEM ARCHIVE LOG CURRENT;
SELECT DEST_NAME, DEST_PATH, STATUS FROM V$DM_ARCH_DEST WHERE DEST_PATH='$ARCH_PATH';
EOF

5. 常见问题排查

问题现象 解决方案
目录不存在 sudo mkdir -p /dmarch && chown dmdba:dinstall /dmarch
权限不足 sudo chmod -R 775 /dmarch
磁盘空间满 清理空间或扩展存储
SELinux限制 sudo chcon -t dm_db_data_t /dmarch
路径拼写错误 检查大小写和特殊字符

6. 生产环境建议

  1. 使用独立存储:归档目录最好放在独立磁盘
bash 复制代码
mkfs.xfs /dev/sdb1 && mount /dev/sdb1 /dmarch
  1. 设置监控:检测归档目录空间
bash 复制代码
echo "/dmarch 90%" >> /etc/monit/conf.d/space.conf
  1. 定期维护:设置归档清理策略
sql 复制代码
ALTER SYSTEM SET ARCHIVE_DELETE_POLICY='TIME,7' SCOPE=BOTH;

通过以上方法,您可以全面验证归档路径的正确性。如果仍有问题,建议检查 /dmdata/dmdb/dm_DMSERVER.log 获取详细错误信息。

达梦数据库归档路径(ARCH_DEST)配置

在达梦数据库的dmarch.ini配置文件中,ARCH_DEST参数指定归档日志的存储路径,关于"不需要以/arch结尾"的原因如下:

1. 技术本质原因

  1. 路径解析机制
    • 达梦数据库的归档模块会自动处理路径结尾
    • 系统内部会标准化路径格式(自动处理末尾斜杠)
  1. 文件生成规则
    • 归档文件实际存储在/dmarch/arch_XXX.log这样的子路径中
    • 数据库自动创建必要的子目录结构

2. 实际配置建议

正确配置示例

ini 复制代码
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL
ARCH_DEST = /dmarch       # 简洁形式(推荐)
# ARCH_DEST = /dmarch/    # 带斜杠也可工作但不必要

应避免的配置

ini 复制代码
ARCH_DEST = /dmarch/arch  # 冗余路径(不推荐)

3. 路径验证方法

sql 复制代码
# 查看实际归档文件存储位置
ls -l /dmarch/arch_*

# 在数据库内验证
./disql SYSDBA/SYSDBA <<EOF
SELECT DEST_PATH, ARCHIVED_SEQ FROM V$ARCHIVED_LOG 
WHERE DEST_PATH LIKE '%/dmarch%' FETCH FIRST 1 ROW ONLY;
EOF

4. 生产环境最佳实践

  1. 独立挂载点
bash 复制代码
# 专为归档创建独立分区
mkfs.xfs /dev/sdb1
mount /dev/sdb1 /dmarch
  1. 权限设置
bash 复制代码
chown -R dmdba:dinstall /dmarch
chmod -R 775 /dmarch
  1. 监控配置
bash 复制代码
# 监控归档空间使用率
echo "/dmarch 85%" >> /etc/monit/conf.d/archive.conf

5. 技术原理图示

c 复制代码
/dmarch/          ← ARCH_DEST指定的根目录
├── arch_0001.log  ← 数据库自动生成
├── arch_0002.log
└── arch_XXXX.log

达梦数据库会自动在指定路径下创建归档文件,无需人工指定arch子目录。这种设计使配置更简洁,同时降低因路径配置错误导致的问题风险。

实例(DM2)的归档信息在实例(DM1)中没有找到

错误诊断

关键错误信息是:

csharp 复制代码
[monitor] 2025-08-18 15:12:20: 实例(DM2)的归档信息在实例(DM1)中没有找到

这表明备库(DM2)无法从主库(DM1)获取归档日志,导致数据同步中断。以下是详细分析:

错误原因

  1. 归档配置不完整
    • 主库未正确配置归档到备库的路径
    • 备库未正确配置从主库接收归档
  1. 网络连通性问题
    • 主备库之间的MAL端口(7336)或守护端口(7436)不通
  1. 归档日志不连续
    • 主库生成的归档日志未完整传输到备库
  1. 配置不一致
    • 主备库的OGUID或归档参数不一致

解决方案

1. 检查主库归档配置

sql 复制代码
-- 在主库执行
SELECT DEST_NAME, DEST_TYPE, DEST_PATH FROM V$DM_ARCH_DEST;

确保包含备库的归档配置:

ini 复制代码
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM2  # 备库实例名
ARCH_TRACE_FLAG = ALL

2. 验证网络连接

yaml 复制代码
# 在备库测试连接主库端口
telnet 10.137.90.249 7336  # MAL端口
telnet 10.137.90.249 7436  # 守护端口

3. 修复归档中断问题

sql 复制代码
-- 在备库执行(需停止守护进程)
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

-- 重新注册归档
ALTER DATABASE REGISTER ARCHIVELOG '/path/to/missing/archive.log';

-- 重新启动恢复
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT;

4. 检查关键配置一致性

配置项 主库(DM1) 备库(DM2)
OGUID 453331 453331
MAL_PORT 7336 7336
DW_PORT 7436 7436
ARCH_INI 1 1

完整修复流程

  1. 停止集群服务
arduino 复制代码
# 主备库都执行
systemctl stop DmWatcherServiceDW
systemctl stop DmServiceDMSERVER
  1. 修正主库归档配置
bash 复制代码
vi /dmdata/dmdb/dmarch.ini

添加:

ini 复制代码
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM2
ARCH_TRACE_FLAG = ALL
  1. 启动服务(严格按顺序)
perl 复制代码
# 1. 启动备库实例
systemctl start DmServiceDMSERVER@DM2

# 2. 启动主库实例
systemctl start DmServiceDMSERVER@DM1

# 3. 启动备库守护
systemctl start DmWatcherServiceDW@DM2

# 4. 启动主库守护
systemctl start DmWatcherServiceDW@DM1

验证修复结果

bash 复制代码
dmmonitor /dmdata/dmdb/dmmonitor.ini
MON> SHOW DATABASE

正常输出应显示:

sql 复制代码
Database    Role     Status     OGUID    归档状态
----------  -------  ---------  -------  --------
DM1         PRIMARY  OPEN       453331   VALID
DM2         STANDBY  MOUNT      453331   VALID

预防措施

  1. 设置归档监控
bash 复制代码
# 监控归档间隔
echo "*/5 * * * * dmdba /dm8/bin/check_archive.sh" >> /var/spool/cron/dmdba
  1. 定期检查同步状态
sql 复制代码
-- 在备库执行
SELECT ARCHIVED_SEQ, APPLIED_SEQ FROM V$ARCH_GAP;
  1. 配置告警规则
ini 复制代码
# 在dmmonitor.ini中添加
[ALARM]
ARCHIVE_LAG = 5  # 允许的最大日志延迟数
相关推荐
cqsztech1 分钟前
ORACLE数据库中如何找到过去某个时间某个表被谁修改了
数据库·oracle
好记忆不如烂笔头abc13 分钟前
sql评估存储的速度和稳定性
数据库·sql
小鹏linux24 分钟前
《openGauss安全架构与数据全生命周期防护实践:从技术体系到行业落地》
数据库·opengauss·gaussdb
朝新_1 小时前
【实战】动态 SQL + 统一 Result + 登录校验:图书管理系统(下)
xml·java·数据库·sql·mybatis
装不满的克莱因瓶1 小时前
什么是脏读、幻读、不可重复读?Mysql的隔离级别是什么?
数据库·mysql·事务·隔离级别·不可重复读·幻读·脏读
aramae2 小时前
MySQL数据库入门指南
android·数据库·经验分享·笔记·mysql
Apache IoTDB2 小时前
时序数据库 IoTDB 集成 MyBatisPlus,告别复杂编码,简化时序数据 ORM 开发
数据库·struts·servlet·时序数据库·iotdb
isNotNullX3 小时前
怎么用数据仓库来进行数据治理?
大数据·数据库·数据仓库·数据治理
小坏讲微服务3 小时前
Spring Cloud Alibaba Gateway 集成 Redis 限流的完整配置
数据库·redis·分布式·后端·spring cloud·架构·gateway
HitpointNetSuite3 小时前
连锁餐饮行业ERP系统如何选择?
大数据·数据库·oracle·netsuite·erp