达梦数据库-报错-05-Server Mode invalid(服务器模式不匹配)

目录

一、环境信息

二、介绍

三、排查过程

1、检查/etc/dm_svc.conf

(1)自验证

(2)LOGIN_MODE参数介绍

(3)客户反馈

2、编写JDBC连接DEMO

(1)源码

(2)编译

(3)运行

(4)生产模拟验证

3、用户侧验证


一、环境信息

|------|--------------------------|
| 名称 | 值 |
| CPU | x86 |
| 操作系统 | KylinV10 |
| DM版本 | DM Database Server 64 V8 |

二、介绍

客户新上线了一套一主多备,应用验证发现报错:Server Mode invalid。我们来记录一下这个文档的解决方法。

三、排查过程

1、检查/etc/dm_svc.conf

(1)自验证

我第一反应就是/etc/dm_svc.conf文件中的LOGIN_MODE参数配置不正确。下面是一个正确的例子我们看一下,DW_P只连接主机,DW_P只连接备机,客户有相关的需求,所以我们这么测试验证。

(2)LOGIN_MODE参数介绍

|------------|-----|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数名 | 默认值 | 描述 |
| LOGIN_MODE | 4 | 指定优先登录的服务器模式。 0:优先连接 Primary 模式的库,Normal 模式次之,最后选择 Stantby 模式; 1:只连接主库; 2:只连接备库; 3:优先连接 Standby 模式的库,Primary 模式次之,最后选择 Normal 模式; 4:优先连接 Normal 模式的库,Primary模式次之,最后选择 Standby 模式; |

(3)客户反馈

客户表示没有用/etc/dm_svc.conf文件,是JDBC连接串中配置的,那我们需要转换思路。

2、编写JDBC连接DEMO

(1)源码

java 复制代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class jdbc_conn {
    static Connection con = null;
    static String cname = "dm.jdbc.driver.DmDriver";
    static String url = "jdbc:dm://writemaster?writemaster=(XX.XX.XX.XX0:5236,XX.XX.XX.XX1:5236,XX.XX.XX.XX2:5236,XX.XX.XX.XX3:5236,XX.XX.XX.XX4:5236)&schema=CRMCLOUD&zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=utf-8&loginMode=1&rwSeparate=0";
    static String userid = "SYSDBA";
    static String pwd = "XXXXX";
    public static void main(String[] args) {
        try {
            Class.forName(cname);
            con = DriverManager.getConnection(url, userid, pwd);
            con.setAutoCommit(true);
            System.out.println("[SUCCESS]conn database");
        } catch (Exception e) {
            System.out.println("[FAIL]conn database:" + e.getMessage());
        }
    }
    public void disConn(Connection con) throws SQLException {
        if (con != null) {
            con.close();
        }
    }
}

(2)编译

java 复制代码
javac -cp ".:/dm/dmdbms/drivers/jdbc/DmJdbcDriver8.jar" jdbc_conn.java

(3)运行

bash 复制代码
java -cp ".:/dm/dmdbms/drivers/jdbc/DmJdbcDriver8.jar" jdbc_conn

(4)生产模拟验证

连接正常。

3、用户侧验证

业务老师将应用部署在docker中,docker与准生产环境主机连通,备机均不通,导致接口找不到符合的模式出现报错。

相关推荐
SudosuBash4 小时前
[CS:APP 3e] 关于对 第 12 章 读/写者的一点思考和题解 (作业 12.19,12.20,12.21)
linux·并发·操作系统(os)
jiayou6413 小时前
KingbaseES 实战:深度解析数据库对象访问权限管理
数据库
哈基咪怎么可能是AI14 小时前
为什么我就想要「线性历史 + Signed Commits」GitHub 却把我当猴耍 🤬🎙️
linux·github
十日十行1 天前
Linux和window共享文件夹
linux
李广坤1 天前
MySQL 大表字段变更实践(改名 + 改类型 + 改长度)
数据库
木心月转码ing2 天前
WSL+Cpp开发环境配置
linux
爱可生开源社区2 天前
2026 年,优秀的 DBA 需要具备哪些素质?
数据库·人工智能·dba
蝎子莱莱爱打怪3 天前
Centos7中一键安装K8s集群以及Rancher安装记录
运维·后端·kubernetes
崔小汤呀3 天前
最全的docker安装笔记,包含CentOS和Ubuntu
linux·后端
随逸1773 天前
《从零搭建NestJS项目》
数据库·typescript