达梦:开发 ODBC配置指南

目录

  • 达梦数据库DM8 ODBC配置指南(Linux环境)
    • ODBC
    • 一、环境准备
    • 二、核心配置步骤
      • 1. 安装unixODBC
      • 2. 配置ODBC驱动(odbcinst.ini)
      • 3. 配置数据源(odbc.ini)
    • 三、连接测试与验证
      • 1. 使用isql工具测试
      • 2. 执行基础SQL验证
    • 四、常见问题排查
      • 1. 驱动加载失败
      • 2. 认证失败
      • 3. 端口不通
    • 五、配置优化建议
    • 六、扩展应用场景
  • 扩展:如何在C程序中调用 `SQLGetTypeInfo` 函数
    • 一、函数功能
    • 二、函数原型
    • 三、完整调用示例(C语言)
    • 四、关键参数说明
      • 1. `DataType` 参数
      • 2. 结果集列详解
    • 五、编译与执行
    • 六、常见问题
      • 1. 如何过滤特定数据类型?
      • 2. 如何处理达梦特有类型?
      • 3. 性能优化建议

达梦数据库DM8 ODBC配置指南(Linux环境)

ODBC

ODBC 提供访问不同类型的数据库的途径。结构化查询语言 SQL 是一种用来访问数据库的语言。通过使用 ODBC,应用程序能够使用相同的源代码和各种各样的数据库交互。这使得开发者不需要以特殊的数据库管理系统 DBMS 为目标,或者了解不同支撑背景的数据库的详细细节,就能够开发和发布客户/服务器应用程序。

在 DM 客户端软件安装过程中,如果选择了安装 ODBC 驱动程序的相关选项,安装工具可完成将 DM ODBC 3.0 驱动程序复制到硬盘,并在 Windows 注册表中登记 DMODBC 驱动程序信息的工作

一、环境准备

  1. 操作系统:支持主流Linux发行版(如CentOS、Kylin V10等)
  2. 依赖组件
    • unixODBC 2.3.7或更高版本
    • DM8数据库服务(已正确安装且服务已启动)
  3. 驱动文件
    DM8 ODBC驱动位于数据库安装目录/opt/dmdbms/bin/libdodbc.so(实际路径需与安装位置一致)

二、核心配置步骤

1. 安装unixODBC

源码安装
在这里插入图片描述
yum 安装

# CentOS/RHEL
yum install unixODBC unixODBC-devel# 验证安装
odbcinst -j  # 显示配置文件路径及版本信息 

2. 配置ODBC驱动(odbcinst.ini)

vi /etc/odbcinst.ini
[DM8 ODBC DRIVER]
Description = ODBC DRIVER FOR DM8
Driver      = /opt/dmdbms/bin/libdodbc.so  # 必须与实际路径一致 

关键参数说明

  • [DM8 ODBC DRIVER]:驱动标识名,需与数据源配置中的Driver字段对应
  • Driver:指定动态库文件绝对路径,权限需为755

3. 配置数据源(odbc.ini)

vi /home/dmdba/.odbc.ini  # 用户级配置
# 或 /etc/odbc.ini        # 系统级配置
[dm8]
Description     = DM ODBC DSN
Driver          = DM8 ODBC DRIVER  # 必须与odbcinst.ini中的[]标识匹配
SERVER          = localhost       # 支持IP或域名
UID             = SYSDBA          # 数据库账号
PWD             = d7mrdr5srrnqI@fW # 数据库密码
TCP_PORT        = 5236            # DM8默认端口 

高级配置建议

  • 多实例场景可配置INSTANCE_NAME参数
  • 网络超时可添加LoginTimeout=30

三、连接测试与验证

1. 使用isql工具测试

su - dmdba
isql dm8  # 或 isql dm8 -v 显示详细连接过程

成功输出示例

+---------------------------------------+| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> 

2. 执行基础SQL验证

SELECT * FROM V$VERSION;  -- 查看数据库版本
SELECT NAME FROM V$DATABASE; -- 显示当前数据库名

在这里插入图片描述


四、常见问题排查

1. 驱动加载失败

  • 现象[01000][unixODBC][Driver Manager]Can't open lib [...]
  • 解决方案
    1. 检查libdodbc.so路径是否正确
    2. 执行ldd /opt/dmdbms/bin/libdodbc.so验证依赖库完整性
    3. 设置LD_LIBRARY_PATH环境变量:
      export LD_LIBRARY_PATH=/opt/dmdbms/bin:$LD_LIBRARY_PATH
      

2. 认证失败

  • 现象[28000][DM][ODBC]Invalid username or password
  • 解决方案
    1. 检查UID/PWD是否与数据库用户一致
    2. 确认是否启用密码策略(如特殊字符需转义)
    3. 使用disql工具直接连接数据库验证凭据

3. 端口不通

  • 排查步骤
telnet localhost 5236      # 测试端口连通性
netstat -tunlp | grep 5236 # 查看端口监听状态

五、配置优化建议

  1. 性能调优

    • odbc.ini中增加UseServerPrepStmts=1启用服务端预处理
    • 设置PrefetchCount=1000优化批量查询性能
  2. 安全增强

    • .odbc.ini文件权限设置为600
    • 通过DM管理工具定期修改SYSDBA密码

六、扩展应用场景

  1. 编程接口调用

    • C/C++:使用<sql.h>头文件开发
    • Python:通过pyodbc库连接
      import pyodbc
      conn = pyodbc.connect('DSN=dm8;UID=SYSDBA;PWD=d7mrdr5srrnqI@fW')
      
  2. 第三方工具集成

    • Zabbix:配置ODBC监控项
    • Logstash:使用jdbc插件定时同步数据

文档参考

  • 达梦官方ODBC开发指南
  • ODBC编程手册

扩展:如何在C程序中调用 SQLGetTypeInfo 函数

以下是如何在C程序中调用 SQLGetTypeInfo 函数获取达梦数据库(DM8)支持的数据类型信息的详细指南:


一、函数功能

SQLGetTypeInfo 是ODBC API函数,用于获取数据源支持的数据类型元数据。返回结果集包含如下关键信息:

  • 类型名称(TYPE_NAME
  • 数据类型(DATA_TYPE
  • 列最大长度(COLUMN_SIZE
  • 精度/小数位数(DECIMAL_DIGITS
  • 是否可为NULL(NULLABLE

二、函数原型

SQLRETURN SQLGetTypeInfo(SQLHSTMT     StatementHandle,  // 语句句柄SQLSMALLINT  DataType           // 数据类型标识符(SQL_ALL_TYPES表示获取全部)
);

三、完整调用示例(C语言)

#include <sql.h>
#include <sqlext.h>
#include <stdio.h>int main() {SQLHENV henv;       // 环境句柄SQLHDBC hdbc;       // 连接句柄SQLHSTMT hstmt;     // 语句句柄SQLRETURN retcode;// 1. 初始化环境SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &henv);SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER)SQL_OV_ODBC3, 0);// 2. 建立连接(替换DSN、UID、PWD为实际值)SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc);SQLConnect(hdbc, (SQLCHAR*)"dm8", SQL_NTS, (SQLCHAR*)"SYSDBA", SQL_NTS, (SQLCHAR*)"d7mrdr5srrnqI@fW", SQL_NTS);// 3. 分配语句句柄SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &hstmt);// 4. 调用SQLGetTypeInfo获取所有数据类型retcode = SQLGetTypeInfo(hstmt, SQL_ALL_TYPES);if (SQL_SUCCEEDED(retcode)) {SQLCHAR typeName[256];SQLSMALLINT dataType, nullable;SQLINTEGER columnSize;SQLSMALLINT decimalDigits;// 绑定结果集列SQLBindCol(hstmt, 1, SQL_C_CHAR, typeName, sizeof(typeName), NULL);SQLBindCol(hstmt, 2, SQL_C_SSHORT, &dataType, 0, NULL);SQLBindCol(hstmt, 3, SQL_C_SLONG, &columnSize, 0, NULL);SQLBindCol(hstmt, 4, SQL_C_SSHORT, &decimalDigits, 0, NULL);SQLBindCol(hstmt, 5, SQL_C_SSHORT, &nullable, 0, NULL);// 遍历结果集printf("Type Name\tData Type\tSize\tNullable\n");while (SQLFetch(hstmt) == SQL_SUCCESS) {printf("%-12s\t%-8d\t%-4d\t%s\n", typeName, dataType, columnSize,(nullable == SQL_NULLABLE) ? "YES" : "NO");}} else {// 错误处理SQLCHAR sqlstate[6], message[SQL_MAX_MESSAGE_LENGTH];SQLINTEGER native_error;SQLSMALLINT msg_len;SQLError(henv, hdbc, hstmt, sqlstate, &native_error, message, sizeof(message), &msg_len);printf("Error: %s\n", message);}// 5. 释放资源SQLFreeHandle(SQL_HANDLE_STMT, hstmt);SQLDisconnect(hdbc);SQLFreeHandle(SQL_HANDLE_DBC, hdbc);SQLFreeHandle(SQL_HANDLE_ENV, henv);return 0;
}

四、关键参数说明

1. DataType 参数

含义
SQL_ALL_TYPES获取所有支持的数据类型
SQL_CHAR仅获取字符类型信息
SQL_INTEGER仅获取整数类型信息
其他ODBC标准类型标识符

📌 达梦特有类型:DM8可能包含如 BITBLOB 等特有类型,需参考其数据类型文档。


2. 结果集列详解

列索引列名数据类型描述
1TYPE_NAMESQL_CHAR类型名称(如 VARCHAR)
2DATA_TYPESQL_SMALLINTODBC数据类型标识符
3COLUMN_SIZESQL_INTEGER列最大长度
4DECIMAL_DIGITSSQL_SMALLINT小数位数(数值类型专用)
5NULLABLESQL_SMALLINT是否允许NULL值

五、编译与执行

gcc -o type_info type_info.c -lodbc
./type_info

输出示例

Type Name    Data Type  Size  Nullable
VARCHAR      12         255   YES
INTEGER      4          10    NO
DATE         9          10    YES
...

六、常见问题

1. 如何过滤特定数据类型?

// 获取数值类型信息
SQLGetTypeInfo(hstmt, SQL_NUMERIC);

2. 如何处理达梦特有类型?

  • 结果集中的 TYPE_NAME 字段会返回DM8特有的类型名称(如 BITBINARY
  • 需要结合达梦文档确认类型的实际存储特性

3. 性能优化建议

  • 缓存结果集:若程序频繁查询类型信息,建议将结果缓存到内存中
  • 按需查询:避免使用 SQL_ALL_TYPES 获取不必要的数据

完整ODBC数据类型映射参考:达梦ODBC编程手册

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/23335.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python游戏编程之赛车游戏6-1

通过Python的pygame模块可以实现赛车游戏&#xff0c;如图1所示。 图1 赛车游戏 从图1中可以看出&#xff0c;玩家通过键盘的左右键操作蓝色汽车躲避红色汽车的撞击&#xff0c;每成功躲避过一辆红色汽车&#xff0c;则玩家得一分。当蓝色汽车被红色汽车撞击后&#xff0c;游戏…

【Linux网络】序列化、守护进程、应用层协议HTTP、Cookie和Session

⭐️个人主页&#xff1a;小羊 ⭐️所属专栏&#xff1a;Linux 很荣幸您能阅读我的文章&#xff0c;诚请评论指点&#xff0c;欢迎欢迎 ~ 目录 1、序列化和反序列化2、守护进程2.1 什么是进程组&#xff1f;2.2 什么是会话&#xff1f; 3、应用层协议HTTP3.1 HTTP协议3.2 HT…

【Java消息队列】应对消息丢失、重复、顺序与积压的全面策略

应对消息丢失、重复、顺序与积压的全面策略 引言kafka消息丢失生产者消费者重复消费顺序消费消息积压生产者消费者其他RabbitMQ消息丢失生产者事务机制,保证生产者发送消息到 RabbitMQ Server发送方确认机制,保证消息能从交换机路由到指定队列保证消息在 RabbitMQ Server 中的…

Windows 上源码安装 FastGPT

FastGPT 是一个强大的 AI RAG 平台&#xff0c;值得我们去学习了解。与常见的 Python 体系不同&#xff0c;Fast GPT 采用 Node.js/Next.js 平台&#xff08;对于广大 JS 开发者或前端开发者比较亲切友好&#xff09;&#xff0c;安装或部署比较简单。虽然一般情况下推荐简单的…

【HeadFirst系列之HeadFirstJava】第5天之超强力方法 —— 从战舰游戏到循环控制

编写程序&#xff1a;超强力方法 —— 从战舰游戏到循环控制 在《Head First Java》的第五章节中&#xff0c;作者通过一个简单的战舰游戏示例&#xff0c;深入讲解了如何编写Java程序&#xff0c;并重点介绍了方法和循环控制的使用。这一章节的核心思想是&#xff1a;通过模块…

软件单元测试的技术要求

文章目录 一、软件单元测试的概念二、测试对象三、测试目的四、进入条件五、测试内容六、测试环境七、测试实施方一、软件单元测试的概念 单元测试(Unit Testing),是指对软件中的最小可测试单元进行测试验证。单元测试是白盒测试,主要依据软件详细设计和软件代码进行,不仅…

‌挖数据平台对接DeepSeek推出一键云端部署功能:API接口驱动金融、汽车等行业智能化升级

云端部署 引言&#xff1a;当数据生产力遇上云端智能化 2025年2月23日&#xff0c;国内领先的数据服务商挖数据平台宣布与人工智能巨头DeepSeek达成战略合作&#xff0c;正式推出“一键云端部署”功能。这一功能以API&#xff08;应用程序接口&#xff09;为核心&#xff0c;通…

QPainter绘制3D 饼状图

先展示图片 核心代码如下&#xff1a; pie.h #ifndef Q3DPIE_H #define Q3DPIE_H#include <QtGui/QPen> #include <QtGui/QBrush>class Pie { public:double value; QBrush brush; QString description; double percentValue;QString p…

VMWare安装Debian操作系统

参考链接 https://blog.csdn.net/weixin_61536532/article/details/129778310 注意 如果希望折腾Linux&#xff0c;建议缺省使用英语。在极端情况下&#xff0c;系统可能会只能输出ASCII码&#xff0c;使用中文可能会导致无法正常打印log 本文使用VMWare WorkStation Pro&a…

Compose 常用UI组件

Compose 常用UI组件 概述Modifier 修饰符常用Modifier修饰符作用域限定Modifier Modifier 实现原理Modifier.Element链的构建链的解析 常用基础组件文字组件图片组件按钮组件选择器对话框进度条 常用布局组件线性布局帧布局 列表组件 概述 Compose 预置了很多基础组件&#xf…

基于Python+django+mysql旅游数据爬虫采集可视化分析推荐系统

2024旅游推荐系统爬虫可视化&#xff08;协同过滤算法&#xff09; 基于Pythondjangomysql旅游数据爬虫采集可视化分析推荐系统 有文档说明 部署文档 视频讲解 ✅️基于用户的协同过滤推荐算法 卖价就是标价~ 项目技术栈 Python语言、Django框架、MySQL数据库、requests网络爬虫…

R 语言科研绘图 --- 散点图-汇总

在发表科研论文的过程中&#xff0c;科研绘图是必不可少的&#xff0c;一张好看的图形会是文章很大的加分项。 为了便于使用&#xff0c;本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中&#xff0c;获取方式&#xff1a; R 语言科研绘图模板 --- sciRplothttps://mp.…

3分钟idea接入deepseek

DeepSeek简介 DeepSeek 是杭州深度求索人工智能基础技术研究有限公司开发的一系列大语言模型&#xff0c;背后是知名量化资管巨头幻方量化3。它专注于开发先进的大语言模型和相关技术&#xff0c;拥有多个版本的模型&#xff0c;如 DeepSeek-LLM、DeepSeek-V2、DeepSeek-V3 等&…

【数据结构】(12) 反射、枚举、lambda 表达式

一、反射 1、反射机制定义及作用 反射是允许程序在运行时检查和操作类、方法、属性等的机制&#xff0c;能够动态地获取信息、调用方法等。换句话说&#xff0c;在编写程序时&#xff0c;不需要知道要操作的类的具体信息&#xff0c;而是在程序运行时获取和使用。 2、反射机制…

基于Flask的去哪儿网海南旅游攻略数据分析系统的设计与实现

【Flask】基于Flask的去哪儿网海南旅游攻略数据分析系统的设计与实现&#xff08;完整系统源码开发笔记详细部署教程&#xff09;✅ 目录 一、项目简介二、项目界面展示三、项目视频展示 一、项目简介 随着旅游业的蓬勃发展&#xff0c;如何高效地整合、分析并呈现旅游数据&am…

从零开始构建一个小型字符级语言模型的完整详细教程(基于Transformer架构)

最近特别火的DeepSeek,是一个大语言模型,那一个模型是如何构建起来的呢?DeepSeek基于Transformer架构,接下来我们也从零开始构建一个基于Transformer架构的小型语言模型,并说明构建的详细步骤及内部组件说明。我们以构建一个字符级语言模型(Char-Level LM)为例,目标是通…

MyBatisPlus学习

MyBatisPlus 今日目标 基于MyBatisPlus完成标准Dao的增删改查功能 掌握MyBatisPlus中的分页及条件查询构建 掌握主键ID的生成策略 了解MyBatisPlus的代码生成器 本节主要讲的内容如下&#xff1a; 1&#xff0c;MyBatisPlus入门案例与简介 这一节我们来学习下MyBatisPlus的入…

golang内存泄漏

golang也用了好几年了&#xff0c;趁着有空 整理归纳下&#xff0c;以后忘了好看下 一般认为 Go 10次内存泄漏&#xff0c;8次goroutine泄漏&#xff0c;1次是真正内存泄漏&#xff0c;还有1次是cgo导致的内存泄漏 1:环境 go1.20 win10 2:goroutine泄漏 单个Goroutine占用内存&…

计算机毕业设计SpringBoot+Vue.jst房屋租赁系统(源码+LW文档+PPT+讲解)

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

DevEco Studio常用快捷键以及如何跟AndroidStudio的保持同步

DevEco Studio快捷键 DevEco Studio是华为推出的用于开发HarmonyOS应用的集成开发环境&#xff0c;它提供了丰富的快捷键以提高开发效率&#xff0c;以下为你详细介绍不同操作场景下的常用快捷键&#xff1a; 通用操作快捷键 操作描述Windows/Linux 快捷键Mac 快捷键打开设置窗…