达梦数据库(DM Database)是一款由中国公司自主研发的关系型数据库管理系统。它在安全性、性能、易用性等方面具有许多独特的优势。本文简单记录其基本特性,下载安装。

参考文章:

达梦数据库的基础认识与使用

达梦技术文档

达梦数据库基础

DM 特点

达梦数据库在安全性、高性能、高可用、易用性、可扩展性等方面具有许多独特的优势,具体如下。

  1. 高安全性
    多层安全机制:达梦数据库提供了多层次的安全机制,包括用户认证、权限管理、审计日志等。
    加密技术:支持数据传输加密和存储加密,确保数据在传输和存储过程中的安全性。
    合规性:符合国家信息安全标准,支持国密算法(如SM2、SM3、SM4),适用于政府、金融等高安全要求的行业。
  2. 高性能
    并行处理:支持并行查询和并行加载,能够高效处理大规模数据。
    优化器:智能查询优化器能够自动选择最优的查询计划,提高查询性能。
    缓存机制:高效的缓存机制减少了磁盘I/O操作,提高了整体性能。
  3. 高可用性
    集群支持:支持多种高可用架构,如主备复制、分布式集群等,确保系统的高可用性和故障恢复能力。
    自动故障切换:在发生故障时,系统可以自动切换到备用节点,保证业务连续性。
    在线扩容:支持在线添加节点和扩展存储,无需停机维护。
  4. 易用性
    图形化管理工具:提供了丰富的图形化管理工具,方便用户进行数据库管理和维护。
    兼容性:支持标准SQL语言和多种编程接口(如ODBC、JDBC),易于与其他应用系统集成。
    文档和支持:提供了详细的用户手册和技术支持,帮助用户快速上手和解决问题。
  5. 高可扩展性
    水平扩展:支持横向扩展,通过增加节点来提升系统的处理能力。
    垂直扩展:支持纵向扩展,通过增加单节点的资源(如CPU、内存)来提升性能。
  6. 完善的生态系统
    丰富的工具:提供了数据迁移工具、备份恢复工具、性能监控工具等多种工具,帮助用户高效管理数据库。
    社区和合作伙伴:拥有活跃的社区和广泛的合作伙伴生态,提供技术支持和解决方案。
  7. 国产化优势
    自主可控:完全自主研发,不受国外技术限制,适合对自主可控有严格要求的场景。
    本地化服务:提供专业的本地化服务和技术支持,响应速度快,服务质量高。
  8. 强大的开发支持
    存储过程和触发器:支持存储过程和触发器,方便实现复杂的业务逻辑。
    多种编程接口:支持多种编程接口,如ODBC、JDBC、ADO.NET等,方便开发人员进行应用开发。

DM 安装

Windows 环境

安装前准备

  1. 检查系统信息

    在安装 DM 数据库前需要检查当前操作系统信息,确认 DM 数据库安装程序与当前操作系统匹配,可通过 Win+R 然后输入 cmd,打开命令行工具,输入 systeminfo 命令进行查询。

  2. 检查系统内存

    要尽量保证操作系统至少 2 GB 以上的可用内存 (RAM)。可用内存过少可能导致 DM 数据库安装或启动失败。可通过【任务管理器】查看可用内存。

  3. 检查存储空间

    DM 完全安装需要至少 1 GB 以上的存储空间,用户需要提前规划好安装目录,预留足够的存储空间。数据库在安装完成后用户还需要注册数据库实例用来管理和保存数据,所以还需要规划好实例的保存路径,同时还需要规划好备份保存路径,评估数据量的大小为实例和备份文件预留足够的空间。

数据库安装

  1. 下载安装包

    点击开发版 (X86平台)的下载,根据操作系统和 CPU 类型选择相应安装包下载。

    下载得到的是压缩包dm8_20250430_x86_win_64.zip,解压后得到镜像文件dm8_20250430_x86_win_64.iso。

    选择镜像文件,右键装载或者直接 Enter,弹出安全警告窗口后点击【打开】,挂载成功后会弹出安装程序 setup.exe。

  2. 安装数据库

    双击 setup.exe,系统可能出现保护提示,阻止安装数据库,点击警告中的【更多信息】选择【仍要运行】即可开始安装。

    根据系统配置选择相应语言与时区,点击【确定】继续安装向导,之后点击【下一步】阅读并接受许可证协议

    点击【下一步】验证 Key 文件,如果没有 Key 文件,点击【下一步】即可。如有则点击【浏览】按钮,选取 Key 文件,安装程序将自动验证 Key 文件合法性,点击继续安装。

    点击【下一步】安装组件,提供“典型安装”、“服务器安装”、“客户端安装”和“自定义安装”四种安装方式,建议选择【典型安装】

    典型安装包括:服务器、客户端、驱动、用户手册、数据库服务。

    服务器安装包括:服务器、驱动、用户手册、数据库服务。

    客户端安装包括:客户端、驱动、用户手册。

    自定义安装包括:用户根据需求勾选组件,可以是服务器、客户端、驱动、用户手册、数据库服务中的任意组合。

    点击【下一步】选择安装目录,DM 默认安装在 C:\dmdbms 目录下,不建议使用默认目录,以 D:\dmdba\dmdbms 为例。

    安装路径里的目录名由英文字母、数字和下划线等组成,不建议使用包含空格和中文字符的路径等

    点击【下一步】进入安装前小结,显示即将进行的数据库安装信息,如产品名称、安装类型、安装目录、所需空间、可用空间、可用内存等信息,检查无误后点击【安装】按钮进行 DM 数据库的安装。

    点击【安装】耐心等待 1~2 分钟,数据库安装完成后,选择【初始化】会弹出数据库配置助手,使用助手开始配置实例。

  3. 配置实例

    • 选择操作方式:选择【创建数据库实例】,点击【开始】进入下一步骤

    • 创建数据库模板:可根据实际需求选择合适的数据库模板,一般建议选择【一般用途】其它保持默认即可

    • 选择数据库实例目录:比如数据库目录为 D:\dmdba\dmdbms\data,需要在安装路径下

    • 输入数据库标识:可自定义输入或保持默认数据库名称(DAMENG)、实例名(DMSERVER)、端口号(5236)等参数。

    • 数据库文件所在位置:可选择自定义或保持默认配置路径。可通过选择或输入确定数据库控制文件、数据文件、redo 日志文件、初始化日志等文件的所在位置,并可通过右侧功能按钮,对文件进行添加或删除。

      D:\dmdba\dmdbms\data\DAMENG 目录下, *.ini、控制文件 dm.ctl、数据文件 *.DBF、日志文件 *.log

    • 数据库初始化参数:可根据实际需求进行配置。

      需要注意的是页大小 、簇大小 、大小写敏感 、字符集 、空格填充模式等部分参数, 一旦确定无法修改 ,需谨慎设置。

      常见参数说明:

      1. 数据文件使用的簇大小:默认值 16,可选值: 16、 32、 64,单位:页。
      2. 数据页大小:默认值 8,可选值: 4、 8、 16、 32,单位: KB。
      3. 日志文件大小:默认值 256,单位为: MB,范围为: 64 MB~2 GB。
      4. 大小敏感:默认值 Y,可选值: Y/N, 1/0。
      5. 字符集:默认值 0,可选值: 0[GB18030], 1[UTF-8], 2[EUC-KR]。
  • 口令管理在数据库初始化实例时,需设置数据库系统用户的密码,并保证密码强度,以保障数据安全性。用户可输入 SYSDBA,SYSAUDITOR 的密码,如果安装版本为安全版,将会增加 SYSSSO 用户的密码修改。
  • 选择创建示例库:建议勾选创建示例库 BOOKSHOPDMHR,作为测试环境。
  • 创建数据库摘要:在安装之前,将显示通过数据库配置工具设置的相关参数。点击【完成】进行数据库实例的初始化工作,耐心等待安装完成,安装完成后将弹出数据库相关参数及文件位置,然后点击【完成】即可。
  1. 启停数据库

    启动达梦服务查看器:在计算机【开始】栏找到【DM 服务查看器】快捷方式并打开,或者在数据库安装目录下 tool 目录例如 D:\dmdba\dmdbms\tool 中找到 dmservice 应用程序并双击启动。

    启、停数据库服务:通过【DM 服务查看器】查看到对应的 DM 服务,可选择【启动】或【停止】对应的服务。

Linux 环境

安装前准备

  1. 在安装 DM 数据库之前需要检查或修改操作系统的配置。

  2. 新建 dmdba 用户,禁止使用 root 用户安装数据库。

    1
    2
    3
    4
    5
    6
    # 创建用户所在的组
    groupadd dinstall -g 2001
    # 创建用户
    useradd -G dinstall -m -d /home/dmdba -s /bin/bash -u 2001 dmdba
    # 修改用户密码
    passwd dmdba
  3. 修改文件打开最大数

    在 Linux、Solaris、AIX 和 HP-UNIX 等系统中,操作系统默认会对程序使用资源进行限制。如果不取消对应的限制,则数据库的性能将会受到影响。有永久修改和临时修改两种方式,建议使用永久修改方式进行配置。

    重启服务器后永久生效:使用 root 用户打开 /etc/security/limits.conf 文件进行修改,在最后添加如下配置:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    vi /etc/security/limits.conf

    dmdba soft nice 0
    dmdba hard nice 0
    dmdba soft as unlimited
    dmdba hard as unlimited
    dmdba soft fsize unlimited
    dmdba hard fsize unlimited
    dmdba soft nproc 65536
    dmdba hard nproc 65536
    dmdba soft nofile 65536
    dmdba hard nofile 65536
    dmdba soft core unlimited
    dmdba hard core unlimited
    dmdba soft data unlimited
    dmdba hard data unlimited

    修改配置文件后重启服务器生效。然后,切换到 dmdba 用户,查看是否生效:

    1
    2
    3
    su - dmdba
    ulimit -a
    # 出现 open files (-n)65536,max user processes (-u)65536等信息说明参数配置已生效

    可使用 dmdba 用户执行如下命令,使设置临时生效:

    1
    2
    ulimit -n 65536
    ulimit -u 65536
  4. 目录规划

    根据实际需求规划安装目录,此处采用默认配置 DM 数据库安装在 /home/dmdba 文件夹下。

    规划创建实例保存目录、归档保存目录、备份保存目录。

    1
    2
    3
    4
    5
    6
    ##实例保存目录
    mkdir -p /dmdata/data
    ##归档保存目录
    mkdir -p /dmdata/arch
    ##备份保存目录
    mkdir -p /dmdata/dmbak

    使用 root 用户建立文件夹,待 dmdba 用户建立完成后需将文件所有者更改为 dmdba 用户,否则无法安装到该目录下

    修改目录权限

    1
    2
    3
    4
    5
    6
    7
    8
    # 将新建的路径目录权限的用户修改为 dmdba,用户组修改为 dinstall
    chown -R dmdba:dinstall /dmdata/data
    chown -R dmdba:dinstall /dmdata/arch
    chown -R dmdba:dinstall /dmdata/dmbak
    # 给路径下的文件设置 755 权限
    chmod -R 755 /dmdata/data
    chmod -R 755 /dmdata/arch
    chmod -R 755 /dmdata/dmbak
  5. 安装包准备

    **下载安装包**点击开发版 (X86平台)的下载,根据操作系统和 CPU 类型选择相应安装包下载压缩包,解压得到镜像文件。连接 Linux 系统,切换到 root 用户,将dm8_20250506_x86_rh7_64.iso 保存到任意位置,如 /opt 目录下,执行如下命令挂载镜像:

    1
    2
    cd  /opt
    mount -o loop dm8_20250506_x86_rh7_64.iso /mnt

数据库图形化安装

  1. 安装包准备好之后,开始安装安装

    启用图形化安装界面前需要通过如下命令将图形界面权限放开:

    1
    2
    3
    4
    5
    [root@localhost mnt]# xhost +
    access control disabled, clients can connect from any host
    [root@localhost mnt]# echo $DISPLAY
    [root@localhost mnt]# su - dmdba
    [dmdba@localhost ~]$ export DISPLAY=:0.0

    切换到 dmdba 用户,进入 /mnt 目录下,执行命令开始图形化安装。

    1
    2
    3
    4
    [dmdba@localhost ~]$ cd /mnt
    [dmdba@localhost mnt]$ ./DM
    DM8 Install.pdf DMInstall.bin
    [dmdba@localhost mnt]$ ./DMInstall.bin

    该方法为本地调用图形化界面,若希望通过其它机器调用该图形化界面需设置 export DISPLAY=调用图形化机器的IP:0.0,例如,数据库安装机器 IP 为 10.10.12.25,需要在 IP : 192.132.32.12 机器上调用图形化界面,需设置 export DISPLAY=192.132.32.12:0.0

    若初始化图形界面失败,当前监视器窗口不支持图形界面,请进入安装文件所在文件夹并使用”./DMInstall.bin -i”进行命令行安装。

    图形化界面启动成功后,将弹出【选择语言与时区】页面,默认为简体中文和中国标准时间,确定后弹出 DM 数据库安装程序,之后一直点击【下一步】(和Windows环境下安装基本完全一样),不一样的是到达确认安装信息页面点击【安装】后,等待 1~2 分钟安装完成,之后会弹出执行配置脚本页面,按照页面要求执行该脚本即可。

    1.打开终端窗口
    2.以”root”身份登录
    3.运行脚本命分
    4.单击确定,关闭对话框

    重新打开一个终端,切换到 root 用户,执行弹出页面中的脚本命令

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

    脚本执行完成后,点击执行配置脚本页面中的【完成】,弹出提示框,提示是否关闭窗口,选择是,提示数据库安装完成,再点击【完成】,会弹出选择是否初始化数据库页面,选择【初始化】后会弹出数据库配置助手,选择创建数据库实例开始配置实例。

    若需要主动打开配置助手,可使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 tool 目录中,使用 ./dbca.sh 命令打开数据库配置助手。

    启用图形界面前需要和之前一样将图形界面权限放开,然后进入 DM 安装目录下的 tool 目录,使用如下命令打开 DM 数据库配置助手,选择创建数据库实例,点击【开始】配置实例。

    1
    2
    3
    [dmdba@localhost ~]$ cd /home/dmdba/dmdbms/tool/
    [dmdba@localhost tool]$ ll
    [dmdba@localhost tool]$ ./dbca.sh
  2. 配置实例

    配置实例和Windows环境下安装基本完全一样,不同的是到达创建数据库摘要页面点击【完成】,会提示执行脚本完成实例配置。

    和数据库安装时执行脚本一样,只需要按提示执行脚本命令即可。

    执行完成后会提示参数修改完成,会提示数据库性能参数已修改完成,请按提示重启数据库,重启数据库后参数生效。

    以 root 用户执行提示的脚本重启数据库使自动优化的参数生效。

    1
    systemctl restart DmServiceDMSERVER.service

    脚本执行完成后,点击执行配置脚本页面中的【完成】,创建实例就完成了。

  3. 注册服务

    进入 DM 安装目录下的 tool 目录,使用 ./dbca.sh 命令打开达梦数据库配置助手,选择【注册数据库服务】,单击【开始】,弹出注册数据库服务页面,对于INI配置文件,点击浏览选择对应实例的dm.ini文件,数据库名、实例名、端口、数据库目录会自动生成,实例名可改,点击【完成】后,弹出执行配置脚本页面,按页面要求执行脚本即可。

    执行脚本成功后,该实例已启动,会提示 Active: active (running) since …….

  4. 启停数据库

    先将图形界面权限放开,进入 DM 安装目录下的 tool 目录,使用如下命令打开 DM 服务查看器

    1
    2
    3
    [dmdba@localhost ~]$ cd /home/dmdba/dmdbms/tool/
    [dmdba@localhost tool]$ ll
    [dmdba@localhost tool]$ ./dmservice.sh

    然后通过【DM 服务查看器】查看到对应的 DM 服务,可选择【启动】或【停止】对应的服务。

数据库命令行安装

  1. 安装包准备好之后,开始安装安装

    切换至 dmdba 用户下,在 /mnt 目录下使用命令行安装数据库程序,依次执行以下命令安装 DM 数据库

    1
    2
    3
    su - dmdba
    cd /mnt
    ./DMInstall.bin -i

    按需求选择安装语言,没有 key 文件选择 “n”,时区按需求选择一般选择 “21”,安装类型选择“1”,安装目录按实际情况配置,选择“y”使用默认安装位置,选择“n“则需要按实际配置。

    等待 1~2 分钟数据库安装完成后,会提示是否确认安装,选择”y”,若提示配置文件/etc/dm svc.conf已存在,选择“n”不做替换。

    数据库安装完成后,会提示

    1
    2
    请以root系统用户执行命令:
    /home/dmdba/dmdbms/script/root/root installer.sh

    需要切换至 root 用户执行上述命令 /home/dmdba/dmdbms/script/root/root_installer.sh 创建 DmAPService,否则会影响数据库备份。数据库安装完成后还需注册实例才能使用数据库。

  2. 配置实例

    1
    2
    3
    4
    5
    6
    # 使用 dmdba 用户配置实例
    su - dmdba
    # 进入到 DM 数据库安装目录下的 bin 目录中
    cd /home/dmdba/dmdbms/bin
    # 使用 dminit 命令初始化实例,dminit 命令可设置多种参数,可执行如下命令查看可配置参数。
    ./dminit help

    需要注意的是 页大小 (page_size)、簇大小 (extent_size)、大小写敏感 (case_sensitive)、字符集 (charset) 、空格填充模式 (BLANK_PAD_MODE) 、页检查模式(PAGE CHECK) 等部分参数,一旦确定无法修改,在初始化实例时确认需求后谨慎设置。

    • page_size:数据文件使用的页大小。取值范围 4、8、16、32,单位:KB。缺省值为 8。可选参数。选择的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降。数据库创建成功后无法再修改页大小,可通过系统函数 SF_GET_PAGE_SIZE()获取系统的页大小。
    • extent_size:数据文件使用的簇大小,即每次分配新的段空间时连续的页数。取值范围 16、32、64。单位:页数。缺省值为 16。可选参数。数据库创建成功后无法再修改簇大小,可通过系统函数 SF_GET_EXTENT_SIZE()获取系统的簇大小。
    • case_sensitive: 标识符大小写敏感。当大小写敏感时,小写的标识符应用””括起,否则被系统自动转换为大写;当大小写不敏感时,系统不会转换标识符的大小写,系统比较函数会将大写字母全部转为小写字母再进行比较。取值:Y、y、1 表示敏感;N、n、0 表示不敏感。缺省值为 Y。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_CASE_SENSITIVE_FLAG()或 CASE_SENSITIVE()查询设置的参数值。
    • charset:字符集选项。取值范围 0、1、2。0 代表 GB18030,1 代表 UTF-8,2 代表韩文字符集 EUC-KR。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过系统函数 SF_GET_UNICODE_FLAG()或 UNICODE()查询设置的参数值。
    • BLANK_PAD_MODE:设置字符串比较时,结尾空格填充模式是否兼容 ORACLE。1:兼容;0:不兼容。缺省值为 0。可选参数。此参数在数据库创建成功后无法修改,可通过查询 V$PARAMETER 中的 BLANK_PAD_MODE 参数名查看此参数的设置值。
    • PAGE_CHECK:PAGE_CHECK 为页检查模式。取值范围 0、1、2、3。0:禁用页校验;1:开启页校验并使用 CRC 校验;2:开启页校验并使用指定的 HASH 算法进行校验;3:开启页校验并使用快速 CRC 校验。缺省值为 3。可选参数。在数据库创建成功后无法修改。

    更多 dminit 参数解释可参考达梦数据库安装目录下 doc 目录中《DM8_dminit 使用手册》

    实际使用中,初始化参数完成后如需兼容其他数据库,建议提前在 dm.ini 中设置好 COMPATIBLE_MODE 的参数值,便于更好的兼容其他数据库。参数说明:是否兼容其他数据库模式。

    0:不兼容,1:兼容 SQL92 标准,2:部分兼容 ORACLE,3:部分兼容 MS SQL SERVER

    4:部分兼容 MYSQL,5:兼容 DM6,6:部分兼容 TERADATA,7:部分兼容 POSTGRES。

    如果需要附加实例存放路径。此处以初始化实例到 /dmdata/data 目录下为例(执行初始化命令前,需要使用 root 用户授予 /dmdata/data 目录相应权限,可以参考修改目录权限),初始化命令如下:

    1
    ./dminit path=/dmdata/data  SYSDBA_PWD=****** SYSAUDITOR_PWD=******

    也可以自定义初始化实例的参数,如果自定义了初始化参数,在后面的注册服务和启动数据库等步骤中,请按实际的自定义参数进行操作。自定义参考如下示例:

    1
    ./dminit path=/dmdata/data PAGE_SIZE=32 EXTENT_SIZE=32 CASE_SENSITIVE=y CHARSET=1 DB_NAME=DMTEST INSTANCE_NAME=DBSERVER PORT_NUM=5237 SYSDBA_PWD=******  SYSAUDITOR_PWD=******

    设置页大小为 32 KB,簇大小为 32 KB,大小写敏感,字符集为 utf_8,数据库名为 DMTEST,实例名为 DBSERVER,端口为 5237。

  3. 注册服务

    DM 提供了将 DM 服务脚本注册成操作系统服务的脚本,同时也提供了卸载操作系统服务的脚本。注册和卸载脚本文件所在目录为安装目录的“/script/root”子目录下。可以使用注册服务脚本 dm_service_installer.sh 将服务脚本注册成为操作系统服务:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    # 注册服务需使用 root 用户进行注册
    su - root
    # 使用 root 用户进入数据库安装目录的 `/script/root` 下
    cd /home/dmdba/dmdbms/script/root/
    # 注册实例服务
    ./dm_service_installer.sh -t dmserver -dm_ini /dmdata/data/DMTEST/dm.ini -p DMTEST
    # 进入数据安装目录下 bin 目录中可以看到已经注册好的服务 DmServiceDMTEST
    cd /home/dmdba/dmdbms/bin
    ls
    标志 参数 说明
    -t 服务类型 注册服务类型,支持一下服务类型:dmap、dmamon、dmserver、dmwatcher、dmmonitor、dmasmsvr、dmasmsvrm、dmcss、dmcssm。
    -dm_ini INI 文件路径 指定服务所需要的 dm.ini 文件路径。
    -p 服务名后缀 指定服务名后缀,生成的操作系统服务名为“服务脚本模板名称 + 服务名后缀”。此参数只针对 dmserver、dmwatcher、dmmonitor、dmasmsvr、dmasmsvrm、dmcss、dmcssm 服务脚本生效。
  4. 启停数据库

    服务名方式

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    # 使用 dmdba 用户进入 DM 安装目录下的 bin 目录下
    cd /home/dmdba/dmdbms/bin
    # 启动数据库
    ./DmServiceDMTEST start
    # 停止数据库
    ./DmServiceDMTEST stop
    # 重启数据库
    ./DmServiceDMTEST restart
    # 查看数据库状态
    ./DmServiceDMTEST status

    前台方式

    前台方式启动数据库后如果启动界面会话关闭数据库也相应会关闭所以一般情况下建议采用服务的方式启动数据库。

    1
    2
    3
    4
    # dmdba 用户使用前台的方式启动数据库,进入 DM 安装目录下的 bin 目录下
    [dmdba@localhost ~]$ cd /home/dmdba/dmdbms/bin
    [dmdba@localhost bin]$ ls
    [dmdba@localhost bin]$ ./dmserver /dmdata/data/DMTEST/dm.ini

    该启动方式为前台启动,界面输出“SYSTEM IS READY”后表示前台启动成功,若想关闭数据库,输入 exit 退出即可。

配置环境变量

切换到 root 用户进入 dmdba 用户的根目录下,配置对应的环境变量。DM_HOME 变量和动态链接库文件的加载路径在程序安装成功后会自动导入。命令如下:

1
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

编辑 .bash_profile,使其最终效果如下所示:

1
2
3
4
5
6
cd /home/dmdba/
vim .bash_profile

export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/home/dmdba/dmdbms/bin"
export DM_HOME="/home/dmdba/dmdbms"
export PATH=$PATH:$DM_HOME/bin:$DM_HOME/tool

切换至 dmdba 用户下,执行以下命令,使环境变量生效。

1
2
su - dmdba
source .bash_profile

若需要主动打开配置助手,先将图形界面权限放开,再使用 dmdba 用户配置实例,进入到 DM 数据库安装目录下的 tool 目录中,使用 ./dbca.sh 命令打开数据库配置助手。

数据库安装目录结构

/home/dmdba/dmdbms/bin 目录存放 DM 数据库的可执行文件,例如 disql 命令、dminit 命令、dmrman 工具等。

/home/dmdba/dmdbms/desktop/icons 存放 DM 数据库各个工具的桌面图标。

/home/dmdba/dmdbms/doc 存放 DM 数据库用户手册。

/home/dmdba/dmdbms/drivers 存放连接 DM 数据库的驱动文件。

/home/dmdba/dmdbms/log 存放 DM 数据库日志,包括工具的日志、数据库日志、服务日志等。

/home/dmdba/dmdbms/samples 存放 DM 数据库各类配置文件的示例文件。

/home/dmdba/dmdbms/script/root 存放注册、注销 DM 数据库服务的工具,例如 dm_service_installer.sh 等。

/home/dmdba/dmdbms/tool 存放 DM 数据库的各个工具,例如 manager 管理工具、dbca 数据库配置助手等。

/home/dmdba/dmdbms/uninstall 目录存放卸载 DM 数据库的脚本。

/home/dmdba/dmdbms/web 目录存放 DM 数据库 dem 工具的 web 环境。

数据库实例目录结构

/dmdata/data 为数据库实例目录,该目录存放各个实例的文件。

以实例 DAMENG 为例,该目录下存放 DAMENG 实例的配置文件 *.ini、控制文件 dm.ctl、数据文件 *.DBF、日志文件 *.log 等。

SQLark

简介

SQLark 数据库开发、管理和迁移工具。

SQLark 百灵连接是一款面向信创应用开发者的数据库开发和管理工具,由达梦数据历时三年自主研发,致力于帮助信创应用开发人员更加高效、安全地完成数据库的开发和管理任务。目前 SQLark 支持在 Windows,Linux,macOS 等多种操作系统上进行部署。

支持达梦数据库/Oracle/MySQL/PostgreSQL。每种数据库均支持丰富的数据库对象:模式、表、视图、物化视图、函数、存储过程、序列、触发器、包、DBLink、自定义类型。

SQL 智能编辑器

基于语法语义解析实现代码补全能力,为用户提供精准的 SQL 编码提示,包括但不限于:

(1)代码提示和补全:基于 SQL 语法实现对关键字、对象名、别名、 代码块的智能提示和代码补全;通过外键关系自动补全整个 JOIN 联表查询语句;代码内快速查看对象 DDL、支持对系统函数的语法和示例查询等。

(2)辅助开发:SQL 格式化 、快速注释 、大小写转换。

(3)PL/SQL 对象支持:支持函数、存储过程、包等 PL/SQL 对象的实时语法结构解析,快速定位代码。

丰富的应用市场

SQLark 不断更新的应用市场,助力将信创应用开发工作化繁为简。

**(1)数据生成**:快速生成千万级/亿级仿真表数据,助力大型项目 POC 测试

**(2)数据导入**:从外部文件快速导入数据到目标表

**(3)执行计划分析器**:辅助分析复杂的执行计划,快速定位慢 SQL 问题

**(4)ER 图**:根据数据库/模式/表生成逆向 ER 图,帮助开发者快速厘清数据库的表结构设计

数据迁移

提供全生命周期的数据迁移解决方案,一次迁移成功率 90% 以上

(1)迁移评估:分析源库对象、兼容性、大表大字段表等迁移重难点情况,生成源库画像和迁移策略,评估迁移需要的工作量。

(2)迁移实施:基于迁移策略对数据库对象和表数据开展自动化迁移和语法转换,为迁移异常提供错误分析和修改建议,以任务管理的方式保障迁移工作完成。

(3)迁移校验:通过比对源库和目标库的对象数量、表数据量是否一致,检验迁移工作是否正确、完整。

安装

通过 PC 端访问 SQLark 官网 www.sqlark.com,下载安装 SQLark 最新客户端。

Windows 环境(7以上)

  1. 下载完成后,双击打开 .exe 文件。
  2. 点击 SQLark 许可协议与服务条款,阅读协议,勾选【阅读并同意】,点击【自定义安装】。
  3. 点击【浏览】,选择安装位置(如 D:\database\SQLark)。
  4. 等待安装界面显示安装完成,点击【立即体验】

Linux 环境

操作系统 :Kylin V10 Server、Kylin V10-SP1 Desktop、统信 UOS V20 Server、统信 UOS V20 Desktop

CPU 架构:x86_64(海光、兆芯、AMD、Intel)、ARM(鲲鹏、飞腾、海思麒麟)

SQLark 提供 rpm、deb、tar.gz 三种安装包,以下为安装 rpm 包的操作步骤,了解更多请点击:安装 SQLark

  1. 下载 rpm 安装包后,可通过【我的电脑 | 下载文件夹】 查看;右键单击目录空白处,点击【在终端中打开】。

  2. 打开终端后,输入以下安装命令,并按下回车键。

    1
    sudo rpm -ivh [SQLark_version] # 其中 [SQLark_version] 为 SQLark 安装包名称及版本号信息。
  3. 等待安装进程加载至 100% 后,显示如下界面,则安装完成。

  4. 点击【开始菜单 | 所有程序 | 系统工具】,即可查看 SQLark 应用程序已安装。

连接达梦数据库

连接数据库

SQLark 使用 JDBC 驱动程序连接到达梦数据库,安装包里内置驱动程序。点击工具栏“连接” — 选择“达梦” — 弹出“新建连接”对话框。
填写 连接名、主机、端口、用户名、 密码,确保以上信息正确,点击“连接”按钮,即可连接上达梦数据库。

成功连接达梦数据库后,您将在左侧对象导航栏中看到达梦数据库的对象列表(模式、表、视图、物化视图、函数、存储过程、序列、触发器、包、同义词、外部链接、自定义类型)。此外,左侧对象导航栏还可以进行角色、用户、表空间的管理。选择需要管理的对象名称,点击右键,可通过弹出菜单选择执行各种管理操作。

编写 SQL 代码

SQLark 提供代码智能提示和自动补全,包括:

  • 支持对关键词和模式名、表名、表别名、字段名等对象名的补全;
  • 支持对联表语句等代码段的智能提示;
  • 支持对函数常用的形参格式的提示;
  • 支持对 DMSQL 的智能提示;
  • 支持一键格式化、快速注释和转换为大小写等辅助功能。

执行 SQL 代码

在 SQL 编辑窗口中选中需要执行的语句,点击“执行”按钮或 Ctrl+Enter 快捷键,即可完成代码执行,可通过执行信息和结果集窗口来进行代码开发工作。


Java 连接 数据库

JDBC

DM JDBC 驱动

达梦 24 年第三季度版及之后版本,DM JDBC 驱动 jar 包在 DM 安装目录 /dmdbms/drivers/jdbc,新加入 DmJdbcDriver11.jar。

由于 DM JDBC 驱动遵照 JDBC 标准规范设计与开发,因此 DM ODBC 接口提供的函数与标准 JDBC 一致。DM JDBC 主要接口和函数:

  1. java.sql.DriverManager:用于管理驱动程序、并可与数据库建立连接。其类中的方法均为静态方法。

    getConnection:创建连接
    setLoginTimerout:设置登录超时时间
    registerDriver:注册驱动
    deregisterDriver:卸载驱动

  2. java.sql.Connection:数据库连接类,作用是管理执行数据库的连接,可用于提交和回滚事务、创建Statement对象等操作。

    createStatement:创建一个 Statement对象
    setAutoCommit:设置自动提交
    close:关闭数据库连接
    commit:提交事务
    rollback:回滚事务

  3. java.sql.Statement:用于在连接上运行SQL 语句,并可访问结果。

    execute:运行 SQL 语句
    executeQuery:执行一条返回 ResultSet的 SQL 语句
    executeUpdate:执行 INSERT、UPDATE、DELETE 或一条没有返回数据集的 SQL 语句
    getResultSet:用于得到当前 ResultSet的结果

  4. java.sql.ResultSet:结果集对象,主要用于查询结果访问。

    absolute:将结果集的记录指针移动到指定行
    next:将结果集的记录指针定位到下一行
    last:将结果集的记录指针定位到最后一行
    close:释放 ResultSet 对象

  5. java.sql.DatabaseMetaData:用于获取数据库元数据信息的类,如模式信息、表信息、表权限信息、表列信息、存储过程信息。

    getTables:得到指定参数的表信息
    getColumns:得到指定表的列信息
    getPrimaryKeys:得到指定表的主键信息
    getTypeInfo:得到当前数据库的数据类型信息
    getExportedKeys:得到制定表的外键信息

  6. java.sql.ResultSetMetaData:用于获取结果集元数据信息的类,如结果集的列数、列名、列的数据类型、列大小等信息。

    getColumnCount:得到数据集中的列数
    getColumnName:得到数据集中指定的列名
    getColumnLabel:得到数据集中指定的标签
    getColumnType:得到数据集中指定的数据类型

数据库连接实践

  1. DM 数据库扩展连接串的使用
    DM JDBC 数据库连接驱动具体位置是 dm.jdbc.driver.DmDriver。

  2. 连接串的两种书写格式:

host、port 不作为连接属性,此时只需输入值即可:

1
jdbc:dm [: //host][:port][?propName1=propValue1][& propName2=propValue2]...

若 host 不设置,则默认为‘localhost’。
若 port 不设置,则默认为‘5236’。
若 host 不设置,则 port 一定不能设。
若 user、password 没有单独作为参数传入,则必须在连接属性中传入。
若 host 为 ipv6 地址,则应包含在[]中。

1
jdbc:dm://192.168.0.96:5236?resultSetType=1003
  1. host、port 作为连接属性,此时必须按照下表中说明进行设置,且属性名称大小写敏感。

host:主库地址,包括 IP、localhost 或者配置文件中主库地址, 列表对应的变量名,如 dm_svc.conf 中的“o2000”,非必须设置。

port:端口号,服务器登录端口号,非必须设置。

连接串格式格式如下:

1
jdbc:dm:// [?propName1=propValue1] [ & propName2=propValue2] [&…]…

host、port 设置与否与在属性串中的位置没有限制。若 user、password 没有单独作为参数传入,则必须在连接属性中传入。

1
jdbc:dm:// ?host=192.168.0.96&port=5236

案例:

在 D 盘根目录下,创建 DM8 特点 .jpg、达梦产品简介 .txt 两个文件,作为大字段存储

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
public class jdbc_operate_bigData {
static String jdbcString = "dm.jdbc.driver.DmDriver"; // 定义 DM JDBC 驱动串
static String urlString = "jdbc:dm://localhost:5236"; // 定义 DM URL 连接串
static String userName = "SYSDBA"; // 定义连接用户名
static String password = "*****"; // 定义连接用户口令
static Connection conn = null; // 定义连接对象
static PreparedStatement pstate = null; // 定义 SQL 语句执行对象
static Statement state = null; // 定义 SQL 语句执行对象
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);
// -------------------------------- 普通操作 ------------------------------------------------
// 定义增加的 SQL 这里由于此表中的结构为主键,自增,只需插入 name 列的值
String sql_insert = "insert into PRODUCTION.PRODUCT_CATEGORY(name)values('厨艺')";
state.execute(sql_insert); // 执行添加的 SQL 语句
// ------------------------------- 绑定操作 -------------------------------------------------
// 根据指定 id 修改 PRODUCT_CATEGORY 表中的 name 的值,这里 name 和 id 不确认用?代替
String sql_updateNameById = "update PRODUCTION.PRODUCT_CATEGORY "
+ "set name = ? where PRODUCT_CATEGORYID = ?";
// 3.通过连接对象和修改语句的模板,创建 java.sql.PreparedStatement 对象
pstate = conn.prepareStatement(sql_updateNameById);
// 4.绑定?对应的参数:理论上有多少个?就要绑定多少个值;
// 把 id 为 3 所对应的 name 值修改为 "魔幻"
pstate.setString(1, "魔幻");
pstate.setInt(2, 3);
pstate.executeUpdate(); // 执行 SQL 语句
// -------------------------------- 插入大字段信息------------------------------------------
String sql_insert = "INSERT INTO production.BIG_DATA (\"photo\","
+ "\"describe\",\"txt\")VALUES(?,?,?);";
pstate = conn.prepareStatement(sql_insert);
String filePath = "D:\\DM8特点.jpg";// 加载图片为输入流
File file = new File(filePath);
String filePath2 = "D:\\达梦产品简介.txt";
File file2 = new File(filePath2);
InputStream in = new BufferedInputStream(new FileInputStream(file));
InputStream in2 = new BufferedInputStream(new FileInputStream(file));
BufferedReader reader = new BufferedReader(
new InputStreamReader(new FileInputStream(file2),"UTF-8"));
pstate.setBinaryStream(1, in); // 1.绑定 stream 流信息到第一个?
pstate.setBlob(2, in2);// 2.绑定 Inputstream 对象到第二个?这里
pstate.setClob(3, reader);// 3.绑定 Reader 对象到第三个?
pstate.executeUpdate();
// --------------------------------- 结束 -----------------------------------------------
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} finally { // 关闭资源
try {
state.close();
pstate.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

SpringBoot 连接 DM

首先找到驱动jar包,所在目录 D:\dmdba\dmdbms\drivers\jdbc\,没有线上的,只能本地maven安装,如果没有maven环境 可以使用idea安装,安装命令如下(其中 -Dpackaging=jar -Dfile=D:\xapp\dm\DmJdbcDriver18.jar 为你自己的这个驱动jar的目录):

1
mvn install:install-file -DgroupId=com.dm -DartifactId=DmJdbcDriver -Dversion=1.8.0 -Dpackaging=jar -Dfile=D:\xapp\dm\DmJdbcDriver18.jar

安装成功后,在你项目的pom文件里面添加jar指向:

1
2
3
4
5
<dependency>
<groupId>com.dm</groupId>
<artifactId>DmJdbcDriver</artifactId>
<version>1.8.0</version>
</dependency>

配置数据库相关信息:

1
2
3
4
5
6
7
8
9
10
11
# 连接数据库
datasource:
driverClassName: dm.jdbc.driver.DmDriver
url: jdbc:dm://127.0.0.1:5236/test?zeroDateTimeBehavior=convertToNull&useUnicode=true&characterEncoding=UTF-8
username: SYSDBA
password: SYSDBA
# 分页插件,需要在 MybatisConfig/MybatisPlusConfig 中配置
# MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
# interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.DM));
pagehelper:
helperDialect: oracle

测试

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
// TestController
@RestController
@RequestMapping("/dmtest")
public class TestController {
@Autowired
TeacherService teacherService;
@GetMapping("/list")
public ResponseMsg list(int page, int limit) {
Map<String, Object> query = new HashMap<>();
List<Teacher> res = teacherService.dmlist(query);
return new ResponseMsg(res);
}
}
// Service
List<Teacher> dmlist(Map<String, Object> query);
// ServiceImpl
@Override
public List<Teacher> dmlist(Map<String, Object> query) {
return teacherMapper.dmlist(query);
}
// Mapper (注意还得使用双引号 不然会报错)
@Select("select \"id\", \"name\" from \"test\".\"dm_user\" ")
List<Teacher> dmlist(Map<String, Object> query);

表的实体类映射,【访问形式:模式名.表名】

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@EqualsAndHashcode(callsuper = false)
@TableName("模式名.表名")
@ApiModel(value="Teacher对象",description="教师表”)
public class Teacher extends BaseEntity {
private static final long serialversionUID = 1L;
@ApiModelProperty(value ="ID")
@TableId(value ="id",type = IdType.AUTO)
private Long id;

@ApiModelProperty(value ="名字")
@TableId(value ="name")
private String name;
}

xml文件,查询表【模式名.表名】

1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- 命名空间会映射到接口 -->
<mapper namespace="dameng.dao.TeacherMapper">
<sql id="dmlist"></sql>
</mapper>