达梦数据库主从备份
一、环境准备
1、IP地址规划
主库:192.168.18.205实例名its1 数据库名称its
备库:192.168.18.206 实例名its2 数据库名称its
监视器:192.168.18.206
2、端口规划
MAL_INST_PORT 5236 数据库实例监听端口
MAL_PORT 61141 MAL 系统监听 TCP 连接的端口
MAL_DW_PORT 33141 实例监听守护进程 TCP 连接的端口
MAL_INST_DW_PORT 52141 实例本地的守护进程监听 TCP 连接的端口
3、目录配置
数据库软件安装目录 /home/dmdba/dmdbms
实例安装目录 /home/dmdba/dmdata
归档日志存放目录 /home/dmdba/dmarch
备份文件存放目录 /home/dmdba/dmbak
4、用户组
系统用户:dmdba,密码:System@123,用户组:dinstall
groupadd -g 12349 dinstall
useradd -u 12345 -g dinstall -m -d /home/dmdba -s /bin/bash dmdba
passwd dmdba
# 密码最少8位,本次使用System@123
5、关闭防火墙
systemctl status firewalld.service
systemctl stop firewalld.service
systemctl disable firewalld.service
二、安装达梦数据库
1、上传达梦数据库安装包
使用dmdba用户登录系统,在/home/dmdba下创建dm文件夹
将达梦数据库安装包dm8_setup_rh6_64_ent_8.1.0.147_20190327.iso上传至/home/dmdba/dm
2、挂载安装包
使用root用户登录系统,在/home/dmdba/dm文件夹下执行命令
mount dm8_setup_rh6_64_ent_8.1.0.147_20190327.iso /home/dmdba/dm
3、安装
挂载完之后,目录下会生成DMInstall.bin文件
[dmdba@localhost dm]$ pwd
/home/dmdba/dm
[dmdba@localhost dm]$ ls
DMInstall.bin DM_Install_en.pdf DM_Install_zh.pdf release_en.txt release_zh.txt
[dmdba@localhost dm]$
使用dmdba用户登录,进入/home/dmdba/dm目录下,执行以下命令进行安装
./DMInstall.bin -i
以下是整个安装过程的选择
安装完成后,使用root用户执行
/home/dmdba/dmdbms/script/root/root_installer.sh
到此达梦数据库安装完成,备库可以安装以上步骤执行,安装目录要保持一致。
三、初始化数据库实例
主库进入/home/dmdba/dmdbms/bin目录下执行:
./dminit PATH=/home/dmdba/dmdata db_name=its instance_name=its1
[dmdba@localhost dm]$ cd /home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./dminit PATH=/home/dmdba/dmdata db_name=its instance_name=its1
initdb V8.1.0.147-Build(2019.03.27-104581)ENT
db version: 0x7000a
file dm.key not found, use default license!
License will expire on 2023-06-14
log file path: /home/dmdba/dmdata/its/its01.log
log file path: /home/dmdba/dmdata/its/its02.log
write to dir [/home/dmdba/dmdata/its].
create dm database success. 2023-05-31 22:04:00
[dmdba@localhost bin]$
备库进入/home/dmdba/dmdbms/bin目录下执行
./dminit PATH=/home/dmdba/dmdata db_name=its instance_name=its2
前台启动实例,生成实例对应文件,启动后关闭即可。
./dmserver /home/dmdba/dmdata/its/dm.ini
四、主库进行脱机备份
脱机备份前要关闭数据库实例,否则备份会出错
备份的目的是为了确保主备数据库在自动同步前数据是一致的
在/home/dmdba/dmdbms/bin目录下执行一下命令
BACKUP DATABASE '/home/dmdba/dmdata/its/dm.ini' FULL BACKUPSET '/home/dmdba/dmbak/full_database';
[dmdba@localhost bin]$ ./dmrman
dmrman V8.1.0.147-Build(2019.03.27-104581)ENT
RMAN> BACKUP DATABASE '/home/dmdba/dmdata/its/dm.ini' FULL BACKUPSET '/home/dmdba/dmbak/full_database';
BACKUP DATABASE '/home/dmdba/dmdata/its/dm.ini' FULL BACKUPSET '/home/dmdba/dmbak/full_database';
file dm.key not found, use default license!
EP[0] max_lsn: 36592
BACKUP DATABASE [its],execute......
CMD CHECK LSN......
BACKUP DATABASE [its],collect dbf......
CMD CHECK ......
DBF BACKUP SUBS......
total 1 packages processed...
total 3 packages processed...
total 4 packages processed...
DBF BACKUP MAIN......
BACKUPSET [/home/dmdba/dmbak/full_database] END, CODE [0]......
META GENERATING......
total 5 packages processed...
total 5 packages processed...
total 5 packages processed!
CMD END.CODE:[0]
backup successfully!
time used: 959.356(ms)
RMAN>
主库复制备份文件到备库
scp -r /home/dmdba/dmbak/full_database 192.168.18.206:/home/dmdba/dmbak/full_database
备库进入/home/dmdba/dmdbms/bin进行恢复
./dmrman
RESTORE DATABASE '/home/dmdba/dmdata/its/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/full_database';
RECOVER DATABASE '/home/dmdba/dmdata/its/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/full_database';
RECOVER DATABASE '/home/dmdba/dmdata/its/dm.ini' UPDATE DB_MAGIC;
[dmdba@localhost bin]$ ./dmrman
dmrman V8.1.0.147-Build(2019.03.27-104581)ENT
RMAN> RESTORE DATABASE '/home/dmdba/dmdata/its/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/full_database';
RESTORE DATABASE '/home/dmdba/dmdata/its/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/full_database';
file dm.key not found, use default license!
RESTORE DATABASE CHECK......
total 0 packages processed...
RESTORE DATABASE,dbf collect......
RESTORE DATABASE,dbf refresh ......
RESTORE BACKUPSET [/home/dmdba/dmbak/full_database] START......
total 4 packages processed...
total 6 packages processed...
RESTORE DATABASE,UPDATE ctl file......
RESTORE DATABASE,REBUILD key file......
RESTORE DATABASE,CHECK db info......
RESTORE DATABASE,UPDATE db info......
total 6 packages processed...
total 6 packages processed!
CMD END.CODE:[0]
restore successfully.
time used: 876.805(ms)
RMAN> RECOVER DATABASE '/home/dmdba/dmdata/its/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/full_database';
RECOVER DATABASE '/home/dmdba/dmdata/its/dm.ini' FROM BACKUPSET '/home/dmdba/dmbak/full_database';
EP[0] max_lsn: 36592
RESTORE RLOG CHECK......
total 0 packages processed...
CMD END.CODE:[603],DESC:[备份集[/home/dmdba/dmbak/full_database]备份过程中未产生日志]
备份集[/home/dmdba/dmbak/full_database]备份过程中未产生日志
recover successfully!
time used: 163.026(ms)
RMAN> RECOVER DATABASE '/home/dmdba/dmdata/its/dm.ini' UPDATE DB_MAGIC;
RECOVER DATABASE '/home/dmdba/dmdata/its/dm.ini' UPDATE DB_MAGIC;
EP[0] max_lsn: 36592
EP[0]'s begin_lsn[36592] >= end_lsn[36592]
recover successfully!
time used: 922.349(ms)
RMAN>
五、配置文件设置
实例配置文件:dm.ini
归档配置文件:dmarch.ini
MAL系统配置文件:dmmal.ini
守护进程配置文件:dmwatcher.ini
监视器配置文件:dmmonitor.ini
为了便于管理,将所有配置文件都与dm.ini配置文件放在同一个目录下。
1、实例配置文件 dm.ini
主备库进入/home/dmdba/dmdata/its目录下修改dm.ini文件
vi /home/dmdba/dmdata/its/dm.ini
主库:
INSTANCE_NAME = ITS1 #修改实例名
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
备库:
INSTANCE_NAME = ITS2 #修改实例名
MAL_INI = 1 #打开 MAL 系统
ARCH_INI = 1 #打开归档配置
ALTER_MODE_STATUS = 0 #不允许手工方式修改实例模式/状态/OGUID
ENABLE_OFFLINE_TS = 2 #不允许备库 OFFLINE 表空间
注意:dm.ini的配置信息比较多,请注意,不要修改错了
2、归档配置文件dmarch.ini
vi /home/dmdba/dmdata/its/dmarch.ini
主库:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #归档类型
ARCH_DEST = ITS2 #归档目标实例名(主库侧填写备库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
备库:
[ARCHIVE_REALTIME]
ARCH_TYPE = REALTIME #归档类型
ARCH_DEST = ITS1 #归档目标实例名(备库侧填写主库实例名)
[ARCHIVE_LOCAL1]
ARCH_TYPE = LOCAL #本地归档类型
ARCH_DEST = /home/dmdba/dmarch #本地归档文件存放路径
ARCH_FILE_SIZE = 128 #单位 MB,本地单个归档文件最大值
ARCH_SPACE_LIMIT = 0 #单位 MB,0 表示无限制,范围 1024~4294967294 MB
3、MAL系统配置文件 dmmal.ini
vi /home/dmdba/dmdata/its/dmmal.ini
主库与备库内容一致
MAL_CHECK_INTERVAL = 5 # MAL链路检测时间间隔
MAL_CONN_FAIL_INTERVAL = 5 # 判定 MAL链路断开的时间
[MAL_INST1]
MAL_INST_NAME = its1 #与 dm.ini中的 INSTANCE_NAME一致
MAL_HOST = 192.168.18.205 # MAL系统监听 TCP 内部网络 IP
MAL_PORT = 61141 # MAL系统监听 TCP连接的端口
MAL_INST_HOST = 192.168.18.205 #实例的对外服务 IP地址
MAL_INST_PORT = 5236 #与 dm.ini中的 PORT_NUM一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP 端口
MAL_INST_DW_PORT = 33141
[MAL_INST2]
MAL_INST_NAME = its2 #与 dm.ini中的 INSTANCE_NAME 一致
MAL_HOST = 192.168.18.206 # MAL系统监听 TCP内部网络 IP
MAL_PORT = 61141 # MAL系统监听 TCP连接的端口
MAL_INST_HOST = 192.168.18.206 #实例的对外服务 IP地址
MAL_INST_PORT = 5236 #与 dm.ini中的 PORT_NUM一致
MAL_DW_PORT = 52141 #实例对应的守护进程监听 TCP端口
MAL_INST_DW_PORT = 33141
4、守护进程配置文件 dmwatcher.ini
vi /home/dmdba/dmdata/its/dmwatcher.ini
主库与备库内容一致
[GRP_RW]
DW_TYPE = GLOBAL #全局守护类型
DW_MODE = AUTO #自动切换模式
DW_ERROR_TIME = 10 #远程守护进程故障认定时间
INST_RECOVER_TIME = 60 #主库守护进程启动恢复的间隔时间
INST_ERROR_TIME = 10 #本地实例故障认定时间
INST_OGUID = 453331 #守护系统唯一 OGUID 值
INST_INI = /home/dmdba/dmdata/its/dm.ini # dm.ini 配置文件路径
INST_AUTO_RESTART = 1 #打开实例的自动启动功能
INST_STARTUP_CMD = /home/dmdba/dmdbms/bin/dmserver #命令行方式启动
5、监视器配置文件 dmmonitor.ini
集群任意节点(一般在备库),配置监视器配置文件 dmmonitor.ini。
本文配置在备库服务器上。
vi /home/dmdba/dmdata/its/dmmonitor.ini
MON_DW_CONFIRM = 1 #确认监视器模式
MON_LOG_PATH = /home/dmdba/dmdata/dmmonitor_auto/log #监视器日志文件存放路径
MON_LOG_INTERVAL = 60 #每隔 60 s 定时记录系统信息到日志文件
MON_LOG_FILE_SIZE = 32 #每个日志文件最大 32 MB
MON_LOG_SPACE_LIMIT = 0 #不限定日志文件总占用空间
[GRP_RW]
MON_INST_OGUID = 453331 #组 GRP_RW 的唯一 OGUID 值
#以下配置为监视器到组 GRP_RW 的守护进程的连接信息,以“IP:PORT”的形式配置
#IP 对应 dmmal.ini 中的 MAL_HOST,PORT 对应 dmmal.ini 中的 MAL_DW_PORT
MON_DW_IP = 192.168.18.205:52141
MON_DW_IP = 192.168.18.206:52141
六、启动主备服务
1、启动数据库实例
主备库在/home/dmdba/dmdbms/bin目录下执行
./dmserver /home/dmdba/dmdata/its/dm.ini mount
注意:后面一定要加mount
[dmdba@localhost bin]$ ./dmserver /home/dmdba/dmdata/its/dm.ini mount
file dm.key not found, use default license!
version info: develop
Use normal os_malloc instead of HugeTLB
Use normal os_malloc instead of HugeTLB
DM Database Server x64 V8.1.0.147-Build(2019.03.27-104581)ENT startup...
License will expire on 2023-06-14
ckpt lsn: 36592
ndct db load finished
ndct fill fast pool finished
nsvr_startup end.
aud sys init success.
aud rt sys init success.
systables desc init success.
ndct_db_load_info success.
SYSTEM IS READY.
另外开一个新的终端,使用 disql 工具连接数据库。
[dmdba@localhost bin]$ pwd
/home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于普通配置状态
登录使用时间: 5.992(毫秒)
disql V8.1.0.147-Build(2019.03.27-104581)ENT
SQL>
主库执行:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453331); #修改 oguid
SQL> alter database primary; #修改为 primary 模式
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
备库执行:
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 1);
SQL> sp_set_oguid(453331); #修改 oguid
SQL> alter database standby; #修改为 standby 模式
SQL> SP_SET_PARA_VALUE(1, 'ALTER_MODE_STATUS', 0);
2、启动守护进程
守护进程启动后,会将 Mount 的实例 Open。
主备执行相同的操作。
cd /home/dmdba/dmdbms/bin
./dmwatcher /home/dmdba/dmdata/its/dmwatcher.ini
此时会提示一下错误:
[dmdba@localhost bin]$ ./dmwatcher /home/dmdba/dmdata/its/dmwatcher.ini
DMWATCHER[3.0] V8.1.0.147-Build(2019.03.27-104581)ENT
[!!! read dmwatcher.ctl failed, open file fail. path: '/home/dmdba/dmdata/its/dmwatcher.ctl' !!!]
[dmdba@localhost bin]$
需要通过命令生成dmwatcher.ctl,在bin目录下执行
./dmctlcvt TYPE=3 SRC=/home/dmdba/dmdata/its/dmwatcher.ini DEST=/home/dmdba/dmdata/its
[dmdba@localhost bin]$ ./dmctlcvt TYPE=3 SRC=/home/dmdba/dmdata/its/dmwatcher.ini DEST=/home/dmdba/dmdata/its
DMCTLCVT V8.1.0.147-Build(2019.03.27-104581)ENT
convert txt to ctl success!
[dmdba@localhost bin]$
/home/dmdba/dmdata/its目录下会生成一个GRP_RW的文件夹,dmwatcher.ctl在此文件夹下面,GRP_RW是dmwatcher.ini配置文件的组名。
拷贝文件到its目录下,进入/home/dmdba/dmdata/its/GRP_RW,执行
cp -r dmwatcher.ctl ../
注意:主备数据库需要使用相同的dmwatcher.ctl,需要将生成的dmwatcher.ctl拷贝到备库相同的目录下
scp -r /home/dmdba/dmdata/its/GRP_RW/dmwatcher.ctl 192.168.18.206:/home/dmdba/dmdata/its/dmwatcher.ctl
主备库再次执行命令,启动守护进程:
cd /home/dmdba/dmdbms/bin
./dmwatcher /home/dmdba/dmdata/its/dmwatcher.ini
[dmdba@localhost GRP_RW]$ cd /home/dmdba/dmdbms/bin
[dmdba@localhost bin]$ ./dmwatcher /home/dmdba/dmdata/its/dmwatcher.ini
DMWATCHER[3.0] V8.1.0.147-Build(2019.03.27-104581)ENT
DMWATCHER[3.0] IS READY
守护进程启动成功!
3、启动监视器
在192.168.18.206备库机器上启动监视器
重新打开一个连接,执行:
cd /home/dmdba/dmdbms/bin
./dmmonitor /home/dmdba/dmdata/its/dmmonitor.ini
监视器显示以上数据,说明主备搭建成功。需要注意的数据有WSTATUS(OPEN)、ISTATUS(OPEN)、RTYPE(REALTIME)、RSTAT(VALID)。
七、验证数据同步
主库:使用 disql 客户端登录,创建测试表,插入数据。
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA
SQL> create table test(id int, name varchar2(20));
SQL> insert into test values (1, 'one');
SQL> select * from test;
SQL> commit;
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于主库打开状态
登录使用时间: 8.318(毫秒)
disql V8.1.0.147-Build(2019.03.27-104581)ENT
SQL> create table test(id int, name varchar2(20));
操作已执行
已用时间: 26.494(毫秒). 执行号:6.
SQL> insert into test values (1, 'one');
影响行数 1
已用时间: 0.525(毫秒). 执行号:7.
SQL> select * from test;
行号 ID NAME
---------- ----------- ----
1 1 one
已用时间: 1.532(毫秒). 执行号:8.
SQL> commit;
操作已执行
已用时间: 1.052(毫秒). 执行号:9.
SQL>
**备库:**使用 disql 客户端登录,查询测试表验证。
cd /home/dmdba/dmdbms/bin
./disql SYSDBA/SYSDBA
select * from test;
[dmdba@localhost bin]$ ./disql SYSDBA/SYSDBA
服务器[LOCALHOST:5236]:处于备库打开状态
登录使用时间: 6.507(毫秒)
disql V8.1.0.147-Build(2019.03.27-104581)ENT
SQL> select * from test;
行号 ID NAME
---------- ----------- ----
1 1 one
已用时间: 5.536(毫秒). 执行号:4.
数据正常同步。
八、服务注册
上述服务启动都是前台启动,关闭窗口服务就会退出,可以将启动命令注册为系统服务,便于操作。
使用 root 用户,到数据库安装目录的 script/root 下,执行。
注册守护进程服务(主备库都执行)
./dm_service_installer.sh -t dmwatcher -p dmrw -i /home/dmdba/dmdata/its/dmwatcher.ini
注册数据库实例服务(主备库都执行)
./dm_service_installer.sh -t dmserver -p dmrw -i /home/dmdba/dmdata/its/dm.ini
注册监视器服务(只需在监视器服务器上执行
./dm_service_installer.sh -t dmmonitor -p confirm -i /home/dmdba/dmdata/its/dmmonitor.ini
启动服务
启动数据库实例
systemctl start DmServicedmrw
启动守护进程
systemctl start DmWatcherServicedmrw
启动监视器
systemctl start DmMonitorServiceconfirm
重启顺序
主备集群重启有顺序要求:
1.关闭监视器:systemctl stop DmMonitorServiceconfirm
2.关闭主库守护进程:systemctl stop DmWatcherServicedmrw
3.关闭备库守护进程:systemctl stop DmWatcherServicedmrw
4.关闭主库实例:systemctl stop DmServicedmrw
5.关闭备库实例:systemctl stop DmServicedmrw
6.启动主库实例:systemctl start DmServicedmrw
7.启动备库实例:systemctl start DmServicedmrw
8.启动主库守护进程:systemctl start DmWatcherServicedmrw
9.启动备库守护进程:systemctl start DmWatcherServicedmrw
10.启动监视器:systemctl start DmMonitorServiceconfirm
注意启动和关闭顺序!!
启动:主备库实例 → 主备库守护进程 → 监视器
关闭:监视器 → 主备库守护进程 → 主备库实例
九、程序连接达梦数据库集群
新建dm_svc.conf文件,将该文件放在程序运行的机器上,不同的操作系统,文件存放的位置不同。
Linux:将dm_svc.conf文件放在应用服务器和中间件服务器/etc目录下。
Windows32位:将dm_svc.conf文件放在应用服务器system32目录下。
Windows64位:将dm_svc.conf文件放在应用服务器system32和syswow64目录下。
TIME_ZONE=(480)
LANGUAGE=(cn)
DMDW=(主节点ip:5236,主节点ip2:5236)
[DMDW]
LOGIN_ENCRYPT=(0)
LOGIN_MODE=(1)
SWITCH_TIME=(300)
SWITCH_INTERVAL=(200)
程序的JDBC连接窜改为jdbc:dm://DMDW (对应上面的文件)
以下是java测试代码, 在部署完数据库软件后,在$DM_HOME/drivers/jdbc下有连接达梦的JDBC 驱动 jar
注意
使用DmJdbcDriver16.jar 对应 JDK 6
使用 DmJdbcDriver17.jar 对应 JDK 7
使用 DmJdbcDriver18.jar 对应 JDK 8
使用 请根据开发环境选择合适的 DM JDBC 驱动包
package com.test;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class jdbc_insert {
// 定义 DM JDBC 驱动串
static String jdbcString = "dm.jdbc.driver.DmDriver";
// 定义 DM URL 连接串
static String urlString = "jdbc:dm://DMDW";
// 定义连接用户名
static String userName = "SYSDBA";
// 定义连接用户口令
static String password = "SYSDBA";
// 定义连接对象
static Connection conn = null;
// 定义 SQL 语句执行对象
static Statement state = null;
// 定义结果集对象
static ResultSet rs = null;
public static void main(String[] args) {
try {
//1.加载 JDBC 驱动程序
System.out.println("Loading JDBC Driver...");
Class.forName(jdbcString);
//2.连接 DM 数据库
System.out.println("Connecting to DM Server...");
conn = DriverManager.getConnection(urlString, userName, password);
//3.通过连接对象创建 java.sql.Statement 对象
state = conn.createStatement();
//------------------------------------------------------------------------------
//基础操作:此处对应的操作代码为示例库中 SYSDBA 模式中的
//test 表
//增加
//定义增加的 SQL 这里由于此表中的结构为主键,自增,只需插入 name 列的值
String sql_insert = "insert into test values (2, 'liushun')";
//执行添加的 SQL 语句
state.execute(sql_insert);
// //删除
// //定义删除的 SQL 语句
// String sql_delete = "delete from test where name = 'liushun'";
// //执行删除的 SQL 语句
// state.execute(sql_delete);
// //修改
// String sql_update = "update test set name = 'two' where name = 'one'";
// state.executeUpdate(sql_update);
//查询表中数据
//定义查询 SQL
String sql_selectAll = "select * from test";
//执行查询的 SQL 语句
rs = state.executeQuery(sql_selectAll);
displayResultSet(rs);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
//关闭资源
rs.close();
state.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
//显示结果集
public static void displayResultSet(ResultSet rs) throws SQLException {
while (rs.next()) {
int i = 1;
Object id = rs.getObject(i++);
Object name = rs.getObject(i++);
System.out.println(id + " " + name);
}
}
}
十、故障切换
通过上述配置,达梦数据库在主库故障后,会自动切换到备库。故障恢复后会自动加入到集群中,不过不再是主库,而是备库。
十一、参考资料
[1]https://blog.csdn.net/weixin_61878106/article/details/127384442?spm=1001.2014.3001.5506 Linux环境下达梦数据库实时主备+异步备库的搭建
[2]https://blog.csdn.net/weixin_44559140/article/details/125364709?spm=1001.2014.3001.5506【达梦数据库】DM 实时主备系统部署
[3]https://eco.dameng.com/document/dm/zh-cn/ops/DW-installation-cluster.html 数据守护集群安装部署
[4]https://blog.csdn.net/zhoubxyz/article/details/128397152?spm=1001.2014.3001.5506 达梦数据库主备集群节点基本操作