找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

1545

积分

0

好友

233

主题
发表于 4 天前 | 查看: 14| 回复: 0

一、安装前准备

1.1 集群规划
主库 备库
业务 IP 192.168.6.142 192.168.6.143
实例名 DMGRID1 DMGRID2
实例端口 5236 5236
MAL 端口 5336 5336
MAL 守护进程端口 5436 5436
守护进程端口 5536 5536
OGUID 45331 45331
守护组 GRP1 GRP1
安装目录 /dm8/dmdbms /dm8/dmdbms
实例目录 /dm8/dmdbms/data /dm8/dmdbms/data
归档上限 51200 51200
1.2 集群架构

搭建的主备集群架构如下图:
主备集群架构图

1.3 切换模式说明
  • 故障手动切换
    • ARCH_WAIT_APPLY = 0
    • DW_MODE = MANUAL
    • MON_DW_CONFIRM = 0
    • 配置说明:集群各节点的 bin 目录中,存放非确认监视器配置文件。
  • 故障自动切换
    • ARCH_WAIT_APPLY = 0
    • DW_MODE = AUTO
    • MON_DW_CONFIRM = 1
    • 配置说明:
      1. 配置手动切换:集群各节点的 bin 目录中,存放非确认监视器配置文件。
      2. 配置自动切换:在确认监视器上(非集群节点),存放确认监视器配置文件,并注册后台自启服务。

参数说明

  • ARCH_WAIT_APPLY 参数:设置为 0 表示高性能模式;设置为 1 表示事务一致模式。
  • 故障手动切换情境下 ARCH_WAIT_APPLY 只能为 0。故障自动切换情境下 ARCH_WAIT_APPLY 可以为 0,也可以为 1
  • ARCH_WAIT_APPLY 参数设置的判断依据为业务是否要查询备机最新数据。如果需要,则配置为 1(会有较大性能衰减);如果不需要,则配置为 0

二、集群搭建

2.1 配置主库

2.1.1 初始化实例并备份数据
  1. 初始化实例
    [dmdba@dm1 ~]$ /dm8/dmdbms/bin/dminit PATH=/dm8/dmdbms/data/ INSTANCE_NAME=DMGRID1 PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y DB_NAME=DAMENG INSTANCE_NAME=DMGRID1 PORT_NUM=5236 LOG_SIZE=2048 SYSDBA_PWD=Oracle2025! SYSAUDITOR_PWD=Oracle2025!
  2. 启动服务
    /dm8/dmdbms/bin/dmserver /dm8/dmdbms/data/DAMENG/dm.ini

    启动实例服务

  3. 开启归档
    SQL> ALTER DATABASE MOUNT;
    SQL> ALTER DATABASE ARCHIVELOG;
    SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/dm8/dmdbms/data/DAMENG/arch, TYPE=LOCAL, FILE_SIZE=1024, SPACE_LIMIT=51200';
    SQL> ALTER DATABASE OPEN;
  4. 备份数据
    SQL> BACKUP DATABASE BACKUPSET '/dm8/dmdbms/data/DAMENG/bak/BACKUP_FILE';

    备份数据库

  5. 修改 dm.ini 参数
    SQL> SP_SET_PARA_VALUE (2,'PORT_NUM',5236);
    SQL> SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);
    SQL> SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
    SQL> SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
    SQL> SP_SET_PARA_VALUE (2,'MAL_INI',1);
    SQL> SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
  6. 关闭前台实例服务 (Ctrl+C)
2.1.2 修改 dmarch.ini
[dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmarch.ini

配置文件内容:

ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMGRID2 #实时归档目标实例名
2.1.3 创建 dmmal.ini
[dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmmal.ini

配置文件内容:

MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /dm8/dmdbms/data/malpath/ #临时文件目录
MAL_BUF_SIZE = 512 #单个 MAL 缓存大小,单位 MB
MAL_SYS_BUF_SIZE = 2048 #MAL 总大小限制,单位 MB
MAL_COMPRESS_LEVEL = 0 #MAL 消息压缩等级,0 表示不压缩

[MAL_INST1]
MAL_INST_NAME = DMGRID1 #实例名,和 dm.ini 的 INSTANCE_NAME 一致
MAL_HOST = 192.168.6.142 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 5336 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.6.142 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口,和 dm.ini 的 PORT_NUM 一致
MAL_DW_PORT = 5436 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 5536 #实例监听守护进程 TCP 连接的端口

[MAL_INST2]
MAL_INST_NAME = DMGRID2
MAL_HOST = 192.168.6.143
MAL_PORT = 5336
MAL_INST_HOST = 192.168.6.143
MAL_INST_PORT = 5236
MAL_DW_PORT = 5436
MAL_INST_DW_PORT = 5536
2.1.4 创建 dmwatcher.ini
[dmdba@dm1 ~]$ vi /dm8/dmdbms/data/DAMENG/dmwatcher.ini

配置文件内容:

[GRP1]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL:故障手切 AUTO:故障自切
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 45331 #守护系统唯一 OGUID 值
INST_INI = /dm8/dmdbms/data/DAMENG/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /dm8/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阈值,默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阈值,默认关闭
2.1.5 拷贝备份文件到备库
[dmdba@dm1 fullback]$ scp * dmdba@192.168.6.143:/dmdata/dm8/backup

拷贝备份文件

2.1.6 注册后台服务

将数据库实例和守护进程注册为Linux系统的后台服务,便于管理。

[root@~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMGRID1 -dm_ini /dm8/dmdbms/data/DAMENG/dm.ini -m mount
[root@~]# /dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini

注册服务

2.2 配置备库

2.2.1 初始化实例

初始化一个空实例,实例名配置为 DMGRID2,用于后续恢复。
初始化备库实例

2.2.2 恢复数据

使用从主库拷贝过来的备份文件进行数据恢复。

/dm8/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' FROM BACKUPSET '/dm8/dmdbms/data/DAMENG/bak/BACKUP_FILE'"
/dm8/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/dm8/dmdbms/data/DAMENG/dm.ini' UPDATE DB_MAGIC"
2.2.3 替换 dmarch.ini
[dmdba@dm2 DAMENG]$ vi /dm8/dmdbms/data/DAMENG/dmarch.ini

配置文件内容:

ARCH_WAIT_APPLY = 0 #0:高性能 1:事务一致

[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /dm8/dmdbms/data/DAMENG/arch/ #本地归档存放路径
ARCH_FILE_SIZE = 1024 #单个归档大小,单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限,单位 MB

[ARCHIVE_REALTIME1]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DMGRID1 #实时归档目标实例名
2.2.4 配置 dm.ini、dmmal.ini 和 dmwatcher.ini
  1. 修改 dm.ini:在备库机器上手动修改 dm.ini 文件,确保以下参数正确:
    INSTANCE_NAME = DMGRID2
    PORT_NUM = 5236 #数据库实例监听端口
    DW_INACTIVE_INTERVAL = 60 #接收守护进程消息超时时间
    ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
    ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
    MAL_INI = 1 #打开 MAL 系统
    ARCH_INI = 1 #打开归档配置
    RLOG_SEND_APPLY_MON = 64 #统计最近 64 次的日志重演信息
  2. 配置 dmmal.ini 和 dmwatcher.ini:将主库上配置好的 dmmal.inidmwatcher.ini 文件内容,完全复制到备库对应的文件路径下。这两个文件的配置在主备库间需要保持一致。
2.2.5 注册服务

同样将备库的数据库实例和守护进程注册为服务。

/dm8/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DMGRID2 -dm_ini /dm8/dmdbms/data/DAMENG/dm.ini -m mount
/dm8/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p Watcher -watcher_ini /dm8/dmdbms/data/DAMENG/dmwatcher.ini

提示:若要删除服务,可使用以下命令:

[root@~]# /dm8/dmdbms/script/root/dm_service_uninstaller.sh -n DmServiceDMGRID2
[root@~]# /dm8/dmdbms/script/root/dm_service_uninstaller.sh -n DmWatcherServiceWatcher

2.3 配置确认监视器 (用于自动切换模式)

2.3.1 创建 dmmonitor.ini

在计划运行监视器的节点上(可以是独立于数据库集群的第三台机器)创建配置文件。

vi /dm8/dmdbms/bin/dmmonitor.ini

配置文件内容:

MON_DW_CONFIRM = 1 #0:非确认(故障手切) 1:确认(故障自切)
MON_LOG_PATH = ../log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 512 #单个日志大小,单位 MB
MON_LOG_SPACE_LIMIT = 2048 #日志上限,单位 MB

[GRP1]
MON_INST_OGUID = 45331 #组 GRP1 的唯一 OGUID 值
MON_DW_IP = 192.168.6.142:5436 #IP 对应 MAL_HOST,PORT 对应 MAL_DW_PORT
MON_DW_IP = 192.168.6.143:5436

三、测试主从同步

  1. 启动主备库实例(以 Mount 模式启动):

    /dm8/dmdbms/bin/dmserver /dm8/dmdbms/data/DAMENG/dm.ini mount

    (主库备库都需要执行)

  2. 设置主库模式 (在主库执行):

    /dm8/dmdbms/bin/disql sysdba/'"Oracle2025!"'
    SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
    SP_SET_OGUID(45331);
    ALTER DATABASE PRIMARY;
    SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);

    设置主库模式

  3. 设置备库模式 (在备库执行):

    SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
    SP_SET_OGUID(45331);
    ALTER DATABASE STANDBY;
    SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
    select status$ from v$instance;
  4. 启动主备库的守护进程

    /dm8/dmdbms/bin/dmwatcher /dm8/dmdbms/data/DAMENG/dmwatcher.ini
  5. 查看数据库状态

    SQL> select status$,mode$ from v$instance;

    主库状态
    主库状态
    备库状态
    备库状态

  6. 启动监视器 (在配置了监视器的节点执行):

    /dm8/dmdbms/bin/dmmonitor /dm8/dmdbms/bin/dmmonitor.ini

    监视器状态

  7. 测试数据同步
    在主库创建测试对象并插入数据,在备库验证是否同步。

    -- 在主库执行
    create tablespace test datafile '/dm8/dmdbms/data/DAMENG/test.DBF' size 128 autoextend on maxsize 10240;
    create user testdb identified by "Oracle2025!" default tablespace test default index tablespace test;
    grant dba to testdb;

    主库登录 testdb 用户
    主库操作
    备库查询验证

    [dmdba@dm2 log]$ disql sysdba/'"Oracle2025!"'

    备库验证

至此,一个完整的达梦数据库主备守护集群搭建与同步测试完成。通过合理配置,该集群可以实现高可用性与数据可靠性保障。




上一篇:SQL注入实战:手工探测到WAF绕过与sqlmap自动化利用详解
下一篇:Oracle数据库数据文件物理删除恢复指南:MOUNT状态DBA操作解析
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-24 21:10 , Processed in 0.197901 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表