达梦数据库技术文档:产品手册 | 达梦技术文档 (dameng.com)
一、安装达梦数据库软件
./DMinstall.bin -i
首先,在主服务器和从服务器上都需要安装达梦数据库软件。确保两台服务器上的数据库软件版本一致。其次,虚拟机内存必须够4096MB。
二、集群规划
一主一备,在备机器上安装非确认监视器
A机器 | B机器 | |
业务IP | 192.168.31.200 | 192.168.31.201 |
心跳IP | 192.168.31.200 | 192.168.31.201 |
实例名 | DW_01 | DW_02 |
实例端口 | 5236 | 5236 |
MAL 端口 | 61141 | 61142 |
MAL 守护进程端口 | 33141 | 33142 |
守护进程端口 | 51141 | 51142 |
OGUID | 16811 | |
守护组 | DW | |
安装目录 | /data/dmdbms | |
实例目录 | /data/dmdata | |
归档目录 | /data/dmarch | |
备份目录 | /data/dmbak | |
归档上限 | 51200MB |
说明: 具体规划及部署方式以现场环境为准。
1. OGUID 取值范围为 0-2147483647。 建议统一取为主库心跳 ip 的后三组数字。 例: 主库心跳 ip 为 192.168.1.1, 则 OGUID 取为 16811
2. 数据库名建议与应用系统名保持一致, 实例名为“业务名_01”, 实例名长度不超过 16 个字符。 例: 应用系统名为 DW,库名为 DW, 守护组名为 DW,主库实例名为 DW_01,备库实例名为 DW_02。
3. 对 于 ipv4 , 直 接 使 用 ip 地 址 即 可 , 例 如 : MAL_INST_HOST = 192.168.100.109。
4. 对于 ipv6, 若当前环境存在多块网卡, 需要用%号指定具体有效的网卡序号; 若只有一块网卡或者已配置默认网卡, 则可以不指序号。 例如: MAL_INST_HOST = fe80::6aa7:3f02:59b3:bcb4%3。 其中, %3 为实际网卡序号
三、模式切换说明
实时归档的读写分离, 其事务一致模式 仅在 dmwatcher.ini 配置自动切换, 才会生效。
ARCH_WAIT_APPLY 0: 高性能模式 1: 事务一致模式
故障手动切换的 ARCH_WAIT_APPLY 只能=0。
故障自动切换的 ARCH_WAIT_APPLY 可以=0 也能=1。 判断依据: 业务要不要查询备机最新数据。 如果要查询, 配置为 1(较大性能衰减) , 如果不需要, 配置为 0。
四、配置主机器
有些操作必须要切换到达梦DBA用户,如果用root操作会各种操作系统的执行文件权限报错,导致数据库起不来,这个点很重要。如果你操作过程中忘了切换用户,那需要全部重来很麻烦!!
1. 初始化实例,备份数据
-- 初始化实例
一个达梦数据库在常规情况下只能有一个实例
1. 确保/data/目录属主属组是dmdba:dinstall
2. 确保是dmdba用户
[dmdba@~]# /data/dmdbms/bin/dminit PATH=/data/dmdata/ INSTANCE_NAME=DW_01 DB_NAME=DW PAGE_SIZE=32 LOG_SIZE=2048
# PATH=/data/dmdata/:这个参数指定了数据库实例的存储路径
# INSTANCE_NAME=DW_01:这个参数设置了数据库实例的名称,确保它与dmmal.ini中的MAL_INST_NAME等配置保持一致
# DB_NAME=DW:这个参数设置了数据库的名称
# PAGE_SIZE=32:这个参数设置了数据库页面的大小,单位是KB
# LOG_SIZE=2048:这个参数设置了重做日志文件的大小,单位是MB
执行这个命令后,dminit
会创建一个新的数据库实例,并在指定的路径下生成相关的配置文件和数据文件。这包括dm.ini
(主配置文件)、dmarch.ini
(归档配置文件)、dmmal.ini
(MAL配置文件)等,以及数据库的初始数据文件。
-- 启动服务
[dmdba@~]# /data/dmdbms/bin/dmserver /data/dmdata/DW/dm.ini
-- 开启归档
![](https://img-blog.csdnimg.cn/direct/81bb035120f047fa80ffcb800294cc95.png)
[dmdba@~]# /data/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.31.200:5236
SQL> ALTER DATABASE MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=51200';
SQL> ALTER DATABASE OPEN;
# ALTER DATABASE MOUNT; 将数据库挂载到实例上
# ALTER DATABASE ARCHIVELOG; 将数据库设置为归档模式
# ALTER DATABASE ADD ARCHIVELOG 'DEST=/data/dmarch, TYPE=LOCAL, FILE_SIZE=2048, SPACE_LIMIT=51200'; 用于向数据库添加一个新的归档日志目的地。归档日志将被写入到/data/dmarch目录下,类型为本地存储(LOCAL),单个归档日志文件的大小限制为2048MB,总空间限制为51200MB
# ALTER DATABASE OPEN; 打开数据库,使其可以接受客户端的连接请求,在数据库处于MOUNT状态或NOMOUNT状态时,可以使用此命令打开数据库。
--备份数据
SQL> BACKUP DATABASE BACKUPSET '/data/dmdata/DW/bak/BACKUP_FILE';
--修改 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);
- SP_SET_PARA_VALUE (2,'PORT_NUM',5236); 这条命令将数据库实例的监听端口设置为5236
- SP_SET_PARA_VALUE (2,'DW_INACTIVE_INTERVAL',60);这里设置的是数据守护的不活跃间隔,单位为秒,定义主从数据库之间的心跳检测间隔
- SP_SET_PARA_VALUE (2,'ALTER_MODE_STATUS',0);
- SP_SET_PARA_VALUE (2,'ENABLE_OFFLINE_TS',2);
- SP_SET_PARA_VALUE (2,'MAL_INI',1);
- SP_SET_PARA_VALUE (2,'RLOG_SEND_APPLY_MON',64);
注意: SP_SET_PARA_VALUE (2,参数名,参数值);对dm.ini 文件的参数修改说明如下。
-- 关闭服务
2. 修改dmarch.ini(归档配置文件)
1)要用于配置本地归档和远程归档,其中本地归档在DM备份与还原过程中使用的日志均为本地归档日志
2)dmarch.ini文件中的配置项包括归档类型(ARCH_TYPE)、归档目标路径(ARCH_DEST)、单个归档文件大小(ARCH_FILE_SIZE)以及归档空间限制(ARCH_SPACE_LIMIT)等
3)dmarch.ini文件的生效需要依赖于dm.ini文件中的ARCH_INI参数。只有将ARCH_INI参数设置为1,dmarch.ini文件才能生效
[dmdba@~]# vi /data/dmdata/DW/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmarch/ #本地归档存放路径
ARCH_FILE_SIZE = 2048 #单个归档大小, 单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限, 单位 MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DW_02 #实时归档目标实例名
# [ARCHIVE_LOCAL] 本地归档
# ARCH_TYPE = LOCAL 指定归档类型为本地归档
# ARCH_DEST = /data/dmarch/ 定义归档日志的存放路径
# ARCH_FILE_SIZE = 2048 设置单个归档文件的大小为2048MB
# ARCH_SPACE_LIMIT = 51200 设置归档空间的限制为51200MB
# [ARCHIVE_REALTIME] 实时归档
# ARCH_TYPE = REALTIME 指定归档类型为实时归档
# ARCH_DEST = DW_02 定义实时归档的目标实例名,在这个例子中,归档日志将被实时传输到名为 DW_02
的数据库实例。
1 .归档日志空间上限根据实际要求调整 ARCH_SPACE_LIMIT 参数即可;
2 .主备节点的 dmarch.ini 配置文件差异在 ARCH_DEST
3. 创建 dmmal.ini
MAL(消息自动负载)配置文件
[dmdba@~]# vi /data/dmdata/DW/dmmal.ini
MAL_CHECK_INTERVAL = 10 #MAL 链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 10 #判定 MAL 链路断开的时间
MAL_TEMP_PATH = /data/dmdata/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 = DW_01 #实例名, 和 dm.ini 的 INSTANCE_NAME一致
MAL_HOST = 192.168.31.200 #MAL 系统监听 TCP 连接的 IP 地址
MAL_PORT = 61141 #MAL 系统监听 TCP 连接的端口
MAL_INST_HOST = 192.168.31.200 #实例的对外服务 IP 地址
MAL_INST_PORT = 5236 #实例对外服务端口, 和 dm.ini 的 PORT_NUM一致
MAL_DW_PORT = 33141 #实例对应的守护进程监听 TCP 连接的端口
MAL_INST_DW_PORT = 52141 #实例监听守护进程 TCP 连接的端口
[MAL_INST2]
MAL_INST_NAME = DW_02
MAL_HOST = 192.168.31.201
MAL_PORT = 61142
MAL_INST_HOST = 192.168.31.201
MAL_INST_PORT = 5236
MAL_DW_PORT = 33142
MAL_INST_DW_PORT = 52142
# MAL_CHECK_INTERVAL = 10 MAL 链路检测时间间隔
# MAL_CONN_FAIL_INTERVAL = 10 判定 MAL 链路断开的时间
# MAL_TEMP_PATH = /data/dmdata/malpath/ 临时文件目录,用于存放 MAL 通信过程中的临时文件
# MAL_BUF_SIZE = 512 单个 MAL 缓存大小
# MAL_SYS_BUF_SIZE = 2048 MAL 总大小限制
# MAL_COMPRESS_LEVEL = 0 MAL 消息压缩等级。0 表示不压缩,其他值表示不同程度的压缩
# [MAL_INST1] 两个 MAL 实例的配置部分
# MAL_INST_NAME = DW_01 实例名
# MAL_HOST = 192.168.31.200 MAL 系统监听 TCP 连接的 IP 地址
# MAL_PORT = 61141 MAL 系统监听 TCP 连接的端口
# MAL_INST_HOST = 192.168.31.200 实例的对外服务 IP 地址
# MAL_INST_PORT = 5236 实例对外服务端口
# MAL_DW_PORT = 33141 实例对应的守护进程监听 TCP 连接的端口
# MAL_INST_DW_PORT = 52141 实例监听守护进程 TCP 连接的端口
1. 主备节点的 dmmal.ini 配置文件是完全一致的
2. 对 于 ipv4 , 直 接 使 用 ip 地 址 即 可 , 例 如 : MAL_INST_HOST = 192.168.100.109。
4. 创建 dmwatcher.ini
![](https://img-blog.csdnimg.cn/direct/6adf7ab8176c4729804822442df77e36.png)
[dmdba@~]# mkdir /data/dmdata/DW1
[dmdba@~]# vi /data/dmdata/DW1/dmwatcher.ini
[DW] #守护进程组名( 长度不能超过 16 个字符)
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #MANUAL: 故障手动切换模式 AUTO: 故障动切换模式
DW_ERROR_TIME = 20 #远程守护进程故障认定时间
INST_ERROR_TIME = 20 #本地实例故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_OGUID = 16811 #守护系统唯一 OGUID 值 , 同一守护进程组中的所有数据库、 守护进程和监视器, 都必须配置相同的 OGUID 值, 取值范围为 0-2147483647
INST_INI = /data/dmdata/DW/dm.ini #dm.ini 文件路径
INST_AUTO_RESTART = 1 #实例的自动启动功能 0: 不自动启动 1: 自动启动
INST_STARTUP_CMD = /data/dmdbms/bin/dmserver #命令行方式启动
RLOG_SEND_THRESHOLD = 0 #指定主库发送日志到备库的时间阀值, 配置为 0时此功能关闭, 默认关闭
RLOG_APPLY_THRESHOLD = 0 #指定备库重演日志的时间阀值, 配置为 0 时此功能关闭, 默认关闭
[DW] 守护进程组名( 长度不能超过 16 个字符)
DW_TYPE = GLOBAL 守护类型设置为全局守护,这意味着守护进程组管理的是全局的数据复制和故障切换
DW_MODE = AUTO MANUAL: 故障手动切换模式 AUTO: 故障动切换模式
DW_ERROR_TIME = 20 远程守护进程故障认定时间
INST_ERROR_TIME = 20 本地实例故障认定时间
INST_RECOVER_TIME = 60 主库守护进程启动恢复的间隔时间
INST_OGUID = 16811 守护系统唯一的 OGUID 值,用于在守护进程组中唯一标识每个数据库实例、守护进程和监视器
INST_INI = /data/dmdata/DW/dm.ini
INST_AUTO_RESTART = 1 #实例的自动启动功能 0: 不自动启动 1: 自动启动
INST_STARTUP_CMD = /data/dmdbms/bin/dmserver
RLOG_SEND_THRESHOLD = 0
RLOG_APPLY_THRESHOLD = 0
1.守护进程名必须和监视器里面的守护进程名一致
5. 拷贝实例及备份集
先把B机器下的/data/dmdata/DW/ 删掉在copy
[dmdba@~]$ scp -r /data/dmdata/DW/ dmdba@192.168.1.2:/data/dmdata/DW
6. 注册服务
[root@~]# /data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DW_01 -dm_ini /data/dmdata/DW/dm.ini -m mount
[root@~]# /data/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /data/dmdata/DW1/dmwatcher.ini
1.注册服务必须是root
五、配置份机器
1. 初始化实例和修改 dm.ini
[dmdba@~]$ /data/dmdbms/bin/dminit PATH=/data/dmdata/ INSTANCE_NAME=DW_02 DB_NAME=DW PAGE_SIZE=32 LOG_SIZE=2048
[dmdba@~]$ vi /data/dmdata/DW/dm.ini
INSTANCE_NAME = DW_02 #数据库实例名
2. 替换 dmarch.ini
![](https://img-blog.csdnimg.cn/direct/5bd28ef2a82c4643a9547cfb61a0be28.png)
[dmdba@~]$ vi /data/dmdata/DW/dmarch.ini
[ARCHIVE_LOCAL]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /data/dmarch/ #本地归档存放路径
ARCH_FILE_SIZE = 2048 #单个归档大小, 单位 MB
ARCH_SPACE_LIMIT = 51200 #归档上限, 单位 MB
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #实时归档类型
ARCH_DEST = DW1_01 #实时归档目标实例名
3. 相同配置项
与 A 机器 DW1_01 的 dmmal.ini、 dmwatcher.ini 相同。
4. 恢复数据
[dmdba@~]$ /data/dmdbms/bin/dmrman CTLSTMT="RESTORE DATABASE '/data/dmdata/DW/dm.ini' FROM BACKUPSET '/data/dmdata/DW/bak/BACKUP_FILE'"
[dmdba@~]$ /data/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/data/dmdata/DW/dm.ini' FROM BACKUPSET '/data/dmdata/DW/bak/BACKUP_FILE'"
[dmdba@~]$ /data/dmdbms/bin/dmrman CTLSTMT="RECOVER DATABASE '/data/dmdata/DW/dm.ini' UPDATE DB_MAGIC"
5. 注册服务
[root@~]# /data/dmdbms/script/root/dm_service_installer.sh -t dmserver -p DW_02 -dm_ini /data/dmdata/DW/dm.ini -m mount
[root@~]# /data/dmdbms/script/root/dm_service_installer.sh -t dmwatcher -p DW -watcher_ini /data/dmdata/DW1/dmwatcher.ini
六、配置监视器
1. 配置服务
在A机器或者B机器任意搭配监视器,建议在B机器
[dmdba@~]$ vi /data/dmdbms/bin/dmmonitor.ini
MON_DW_CONFIRM = 1 #0 为非确认, 1 为确认
MON_LOG_PATH = /data/dmdbms/log/dmmonitorlog #监视器日志文件存放路径
MON_LOG_FILE_SIZE = 256 #每个日志文件为 256M, 取值 16~2048, 单位为 M, 默认值为 64, 达到最大值后, 会自动生成并切换到新的日志文件中, 如果达到设定的总空间限制, 会自动删除创建时间最早的日志文件。
MON_LOG_SPACE_LIMIT = 4096 #日志总空间大小, 取值 0 或者 256~4096, 单位为 M,默认值为 0, 表示没有空间限制
[DW]
MON_INST_OGUID = 16811 #组 GRP1 的唯一 OGUID 值, 同一守护进程组中的所有数据库、 守护进程和监视器, 都必须配置相同的 OGUID 值, 取值范围为0-2147483647
#以下配置为监视器到组 GRP1 的守护进程的连接信息, 以―IP:PORT‖ 的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST, PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.1.1:33141
MON_DW_IP = 192.168.1.2:33142
2. 注册服务
[root@~]# /data/dmdbms/script/root/dm_service_installer.sh -t dmmonitor -p DW -monitor_ini /data/dmdbms/bin/dmmonitor.ini
七、启动服务并查看信息
1. 启动数据库并修改参数
A机器:
[dmdba@~]$ /data/dmdbms/bin/dmserver /data/dmdata/DW/dm.ini mount
[dmdba@~]$ /data/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.31.200:5236
SQL> SP_SET_OGUID(16811);
SQL> ALTER DATABASE PRIMARY;
B机器:
[dmdba@~]$ /data/dmdbms/bin/dmserver /data/dmdata/DW/dm.ini mount
[dmdba@~]$ /data/dmdbms/bin/disql SYSDBA/SYSDBA@192.168.31.201:5236
SQL> SP_SET_OGUID(16811);
SQL> ALTER DATABASE STANDBY;
2. 启动守护进程
A/B机器:
[dmdba@~]# /data/dmdbms/bin/DmWatcherServiceDW start
3. 启动监视器
[dmdba@~]$ /data/dmdbms/bin/DmMonitorServiceDW start
前台启动: [dmdba@~]$ /data/dmdbms/bin/dmmonitor /data/dmdbms/bin/dmmonitor.ini