达梦数据库主从备份搭建

达梦数据库主从备份

一、环境准备

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

以下是整个安装过程的选择

在这里插入图片描述

在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HRbdMZ8s-1688807159327)(.assets\image-20230531135735578.png)]

安装完成后,使用root用户执行

/home/dmdba/dmdbms/script/root/root_installer.sh

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mueZpfnF-1688807159328)(.assets\image-20230531135925305.png)]

到此达梦数据库安装完成,备库可以安装以上步骤执行,安装目录要保持一致。

三、初始化数据库实例

主库进入/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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-iAhmQaBb-1688807159330)(.assets\image-20230531140927136.png)]

四、主库进行脱机备份

脱机备份前要关闭数据库实例,否则备份会出错

备份的目的是为了确保主备数据库在自动同步前数据是一致的

在/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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VO0wGBju-1688807159331)(.assets\image-20230531143810686.png)]

备库进入/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);

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sq1wxWWW-1688807159333)(.assets\image-20230531152632773.png)]

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]$

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ChnpGDQB-1688807159335)(.assets\image-20230531152814869.png)]

需要通过命令生成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配置文件的组名。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0GOvQFWW-1688807159337)(.assets\image-20230531153211439.png)]

拷贝文件到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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gQc2cs8n-1688807159338)(.assets\image-20230531153629443.png)]

主备库再次执行命令,启动守护进程:

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-WfiiY1GG-1688807159339)(.assets\image-20230531154225416.png)]

监视器显示以上数据,说明主备搭建成功。需要注意的数据有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 达梦数据库主备集群节点基本操作

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值