达梦数据库-实时主备集群部署详解(附图文)手工搭建一主一备数据守护集群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个节点完成实例初始化

执行以下命令

复制代码
./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) |

完整参数查看:

复制代码
./dminit HELP

常用端口对照表

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

主库:

备库:

复制代码
./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为主库,启动一次实例(启动一次后即可关停)

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

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

2.3 备库还原

传输备份文件

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

复制代码
# 主库
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 服务已启动:

复制代码
ps -ef|grep dmap

已启动:

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

备份还原备库

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

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

复制代码
./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参数

所有节点都要修改

执行以下命令:

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

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

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

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

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

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

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

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

主库dmdb01上添加以下内容:

复制代码
[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

然后输入以下命令:

复制代码
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上添加以下内容:

复制代码
[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个节点文件内容要相同。

复制代码
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,执行以下命令:

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

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

复制代码
[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下。

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

复制代码
./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

2.6 Mount状态启动集群

以 mount 方式启动数据库实例

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

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

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

2.7 修改数据库模式

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

复制代码
./disql SYSDBA/Password1

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

复制代码
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,执行以下命令:

vb 复制代码
`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 步。

复制代码
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 下执行以下命令(主备库都执行):

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

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

2.9 配置监视器

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

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

设置权限

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

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

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

复制代码
vi /dmdata/dmdb/dmmonitor.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

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

复制代码
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 客户端登录主库,创建测试表,插入数据,执行以下命令:

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

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

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

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

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

sql:

复制代码
select * from test;

如图,验证成功

3 可能遇到的问题

无法访问/dm8/data/

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

解决方案

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

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

复制代码
ps -ef | grep dmserver

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

2. 检查目录是否存在

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

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

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

3. 检查权限问题

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

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

4. 检查环境变量

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

复制代码
cat ~/.bash_profile

应该包含类似以下内容:

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

5. 初始化数据库实例

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

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

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

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

1. 检查当前权限状态

复制代码
ls -ld /dmarch

正常应该显示:

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

2. 授予dmdba用户完整权限

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

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

3. 验证权限修复

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

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

4. 特殊情况处理

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

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

情况2:文件系统只读

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

情况3:磁盘空间满

复制代码
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. 永久生效配置

复制代码
# 设置默认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. 验证达梦归档功能

复制代码
# 启动数据库到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. 基础路径验证方法

检查路径是否存在

复制代码
# 检查目录是否存在
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用户)

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

2. 高级验证方法

创建测试文件

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

检查磁盘空间

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

验证文件系统类型

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

3. 达梦专用验证命令

在数据库内验证归档配置

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

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

强制生成归档日志测试

复制代码
ALTER SYSTEM ARCHIVE LOG CURRENT;

4. 自动化验证脚本

复制代码
#!/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. 使用独立存储:归档目录最好放在独立磁盘

    mkfs.xfs /dev/sdb1 && mount /dev/sdb1 /dmarch

  2. 设置监控:检测归档目录空间

    echo "/dmarch 90%" >> /etc/monit/conf.d/space.conf

  3. 定期维护:设置归档清理策略

    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. 实际配置建议

正确配置示例

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

应避免的配置

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

3. 路径验证方法

复制代码
# 查看实际归档文件存储位置
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. 独立挂载点

    专为归档创建独立分区

    mkfs.xfs /dev/sdb1
    mount /dev/sdb1 /dmarch

  2. 权限设置

    chown -R dmdba:dinstall /dmarch
    chmod -R 775 /dmarch

  3. 监控配置

    监控归档空间使用率

    echo "/dmarch 85%" >> /etc/monit/conf.d/archive.conf

5. 技术原理图示

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

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

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

错误诊断

关键错误信息是:

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

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

错误原因

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

解决方案

1. 检查主库归档配置

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

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

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

2. 验证网络连接

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

3. 修复归档中断问题

复制代码
-- 在备库执行(需停止守护进程)
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. 停止集群服务

    主备库都执行

    systemctl stop DmWatcherServiceDW
    systemctl stop DmServiceDMSERVER

  2. 修正主库归档配置

    vi /dmdata/dmdb/dmarch.ini

添加:

复制代码
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME
ARCH_DEST = DM2
ARCH_TRACE_FLAG = ALL
  1. 启动服务(严格按顺序)

    1. 启动备库实例

    systemctl start DmServiceDMSERVER@DM2

    2. 启动主库实例

    systemctl start DmServiceDMSERVER@DM1

    3. 启动备库守护

    systemctl start DmWatcherServiceDW@DM2

    4. 启动主库守护

    systemctl start DmWatcherServiceDW@DM1

验证修复结果

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

正常输出应显示:

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

预防措施

  1. 设置归档监控

    监控归档间隔

    echo "*/5 * * * * dmdba /dm8/bin/check_archive.sh" >> /var/spool/cron/dmdba

  2. 定期检查同步状态

    -- 在备库执行
    SELECT ARCHIVED_SEQ, APPLIED_SEQ FROM V$ARCH_GAP;

  3. 配置告警规则

    在dmmonitor.ini中添加

    [ALARM]
    ARCHIVE_LAG = 5 # 允许的最大日志延迟数

相关推荐
2501_927773071 分钟前
Linux操作系统编程——网络
linux·运维·网络
奇树谦7 分钟前
WindowsAPI|每天了解几个winAPI接口之网络配置相关文档Iphlpapi.h详细分析9
网络·windowsapi
武汉誉天37 分钟前
学云计算还是网络,选哪个好?
网络·云计算
.Eyes1 小时前
OceanBase 分区裁剪(Partition Pruning)原理解读
数据库·oceanbase
MrZhangBaby2 小时前
SQL-leetcode— 2356. 每位教师所教授的科目种类的数量
数据库
Johny_Zhao3 小时前
Linux防止rm误操作防护方案
linux·网络·人工智能·网络安全·信息安全·云计算·yum源·系统运维
一水鉴天3 小时前
整体设计 之定稿 “凝聚式中心点”原型 --整除:智能合约和DBMS的在表层挂接 能/所 依据的深层套接 之2
数据库·人工智能·智能合约
翔云1234563 小时前
Python 中 SQLAlchemy 和 MySQLdb 的关系
数据库·python·mysql
孙霸天3 小时前
Ubuntu20系统上离线安装MongoDB
数据库·mongodb·ubuntu·备份还原
Java 码农3 小时前
nodejs mongodb基础
数据库·mongodb·node.js