跳到主要内容返回博客列表效率翻倍!达梦数据库 disql 使用技巧全攻略
大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。 为了给大家提供一些技术交流的平台,目前已成立的技术交流群: - Oracle 数据库交流群 - 国产数据库交流群 - Linux 技术交流群 - ChatGPT 4o 免费体验群 需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。 @TOC目录 达梦数据库的 di
- 2738+ 篇实战文章
- 1500+ 步骤截图
- 10 大核心模块
大家好,这里是公众号 DBA学习之路,分享一些学习国产数据库路上的知识和经验。
社群交流
本章目标:掌握本章核心知识点
前置要求:完成前序章节学习
预计时长:60 分钟
为了给大家提供一些技术交流的平台,目前已成立的技术交流群:
- Oracle 数据库交流群
- 国产数据库交流群
- Linux 技术交流群
- ChatGPT 4o 免费体验群
需要进群(均已超过 200 人,需要邀请)可以添加号主微信:Lucifer-0622,备注对应的群名即可。
前言
达梦数据库的 disql 等同于 Oracle 数据库的 sqlplus,都是 DBA 最常用的客户端连接工具,但是都有一个共同的问题:不咋好用。
为什么不好用?根据我的使用经验,大致有以下几点原因:
- 连接方式复杂:有很多连接参数,初学者很难记全;
- 连接命令冗长:连接数据库需要输入一长串命令,费时费事;
- 输出格式散乱:SQL 查询输出结果格式不整齐,容易造成阅读障碍;
- 历史命令查看:不支持历史命令上下文翻页查看和修改,无法光标移动;
- 连接信息显示:客户端连接后没有库和用户相关信息提示,可能会造成误操作;
针对以上痛点,我之前在 Oracle 数据库针对 sqlplus 有介绍过一系列优化方式以及提升效率的技巧:
同样的,在达梦数据库中,disql 可以照葫芦画瓢,拿来主义!
本文所有优化配置以及使用技巧,在达梦一键安装脚本中均以加入,一键安装以及优化配置:DMShellInstall 一键安装脚本
1 ███████ ████ ████ ████████ ██ ██ ██ ██ ██ ██ ██
2░██░░░░██ ░██░██ ██░██ ██░░░░░░ ░██ ░██ ░██░██ ░██ ░██ ░██
3░██ ░██░██░░██ ██ ░██░██ ░██ █████ ░██ ░██░██ ███████ ██████ ██████ ██████ ░██ ░██
4░██ ░██░██ ░░███ ░██░█████████░██████ ██░░░██ ░██ ░██░██░░██░░░██ ██░░░░ ░░░██░ ░░░░░░██ ░██ ░██
5░██ ░██░██ ░░█ ░██░░░░░░░░██░██░░░██░███████ ░██ ░██░██ ░██ ░██░░█████ ░██ ███████ ░██ ░██
6░██ ██ ░██ ░ ░██ ░██░██ ░██░██░░░░ ░██ ░██░██ ░██ ░██ ░░░░░██ ░██ ██░░░░██ ░██ ░██
7░███████ ░██ ░██ ████████ ░██ ░██░░██████ ███ ███░██ ███ ░██ ██████ ░░██ ░░████████ ███ ███
8░░░░░░░ ░░ ░░ ░░░░░░░░ ░░ ░░ ░░░░░░ ░░░ ░░░ ░░ ░░░ ░░ ░░░░░░ ░░ ░░░░░░░░ ░░░ ░░░
目前还是免费使用,快来下载体验吧!
快捷指令
首先解决连接不方便的问题,为了避免冗长复杂的连接命令,我们可以直接使用 alias 别名的方式来创建快捷指令。
📢 注意:在安全允许的情况下,建议大家在达梦数据库主机上配置操作系统免密认证:达梦如何开启免密登录,连接更方便。
alias 别名
开启了免密登录之后,可以直接使用 disql / as sysdba 的方式连接,使用 alias 别名就是:
1## 直接使用 disql / as sysdba 命令连接
2[dmdba@dm8:~]$ disql / as sysdba
3
4服务器[LOCALHOST:5236]:处于普通打开状态
5登录使用时间 : 4.773(ms)
6disql V8
7SQL>
8
9## 配置别名 ds,直接使用 ds 命令连接,十分方便快捷
10[dmdba@dm8:~]$ alias ds='disql / as sysdba'
11[dmdba@dm8:~]$ ds
12
13服务器[LOCALHOST:5236]:处于普通打开状态
14登录使用时间 : 4.321(ms)
15disql V8
16SQL>
可以看到,每次连接数据库都只需要输入 ds 即可,不需要输入完整的连接命令。那就有人要说了,那你每次不都要输入 alias ds='disql / as sysdba' 这个别名命令吗?
配置环境变量
确实,正常是需要的,但是,可以通过配置环境变量的方式来实现自动配置别名,比如:
1## 将别名 ds 写入到 dmdba 用户的环境变量中
2[dmdba@dm8:~]$ cat<<-EOF>>~/.bash_profile
3alias ds='disql / as sysdba'
4EOF
5
6## 重新登录 dmdba 用户,就可以直接使用 ds 连接达梦数据库
7[dmdba@dm8:~]$ exit
8登出
9[root@dm8:/root]# su - dmdba
10[dmdba@dm8:~]$ ds
11
12服务器[LOCALHOST:5236]:处于普通打开状态
13登录使用时间 : 4.083(ms)
14disql V8
15SQL>
通过以上方式我们可以非常便捷得连接和使用达梦数据库。
花样玩法
如果熟练掌握 disql 的连接方式,还可以玩出很多种花样。
多实例自由切换
通过给每个实例指定不同的别名,比如使用端口号进行区分,5237 则别名为 ds5237:
1## 指定连接端口号 5237 数据库的别名为 ds5237
2alias ds5237="disql /:5237 as sysdba"
3
4## 连接 5237 数据库
5[dmdba@dm8:~]$ ds5237
6
7服务器[LOCALHOST:5237]:处于普通打开状态
8登录使用时间 : 3.948(ms)
9disql V8
10SQL>
一键调用 SQL 脚本
disql 调用 SQL 脚本是比较复杂的,需要十分了解才能运用自如,这里可以通过配置快捷命令来降低使用难度:
1## 1、指定执行 SQL 的别名 dsql(增加格式化输出配置)
2alias dsql="disql -S /:5236 as sysdba -C \\"set linesize 999 pagesize 999 long 1000 feed off\\" -E"
3
4## 2、指定调用 SQL 脚本的别名 dssql
5alias dssql="disql -L -S /:5236 as sysdba \\\`"
使用方式:
1## dsql 跟上需要执行的 SQL 语句即可
2[dmdba@dm8:~]$ dsql "select name from v\$database;"
3
4NAME
5------
6DAMENG
7
8## dssql 跟上需要执行的 SQL 脚本即可
9[dmdba@dm8:~]$ dssql dbname.sql
10
11DAMENG
这里如果想写达梦巡检脚本的话,可以是一个很好的辅助,可以封装成函数来调用。
秒速连接数据库
如果再给 root 用户配上 sd 别名,那么连接达梦数据库只需要短短两个命令,1s 完成连接:
1alias sd='su - dmdba'
2
3## sd & ds,so easy,一个字:快!
4[root@dm8:/root]# sd
5[dmdba@dm8:~]$ ds
6
7服务器[LOCALHOST:5236]:处于普通打开状态
8登录使用时间 : 3.650(ms)
9disql V8
10SQL>
这里就介绍这么多,对于平常运维已经足够使用,更多玩法可以自行探索!
上下文切换
介绍完上面的快捷指令,其实对于 disql 的外部使用效率已经是翻天覆地了,接下来就得介绍 disql 的内部使用优化秘籍了。
熟悉的人看到上下文切换应该就猜到了,没错就是:rlwrap,堪称神器!!!
rlwrap 下载
rlwrap 是一款十分好用的 readline wrapper,在 disql 中可以解决我们的两个痛点:
- 历史命令无法查看修改
- 光标无法前后移动
这个工具完美解决了困扰了很多 DBA 的问题,可以不用一次次的因为输错命令而重复输入,或者因为无法切换到上一条命令再次执行。
rlwrap 安装
rlwrap 依赖 readline 库,而 gcc 是一个编译器,由于官方提供的是源码安装包,所以建议使用源码编译来安装,也就需要提前安装这两个依赖软件包。
在 Linux 系统安装软件依赖包就需要配置软件源,这里参考我之前写过的:DBA 必备:Linux 软件源配置全攻略,选择对应系统以及版本,直接一键配置软件源:
1## 挂载本地 ISO 镜像源
2[root@dm8:/root]# mount /dev/cdrom /mnt/
3mount: /dev/sr0 写保护,将以只读方式挂载
4
5## 一键配置本地软件源
6## 备份系统初始配置文件
7mkdir -p /etc/yum.repos.d/bak
8mv /etc/yum.repos.d/* /etc/yum.repos.d/bak
9## 一键配置软件源,默认 ISO 安装镜像挂载在 /mnt 目录下
10cat<<-EOF>/etc/yum.repos.d/local.repo
11[server]
12name=server
13baseurl=file:///mnt
14enabled=1
15gpgcheck=0
16EOF
17## 查看配置好的软件源
18cat /etc/yum.repos.d/local.repo
安装 gcc 和 readline 软件:
1## 安装过程省略
2[root@dm8:/root]# yum install -y gcc readline-devel
3
4## 检查是否安装成功,有输出则代表成功
5[root@dm8:/root]# rpm -qa gcc readline
6gcc-4.8.5-44.el7.x86_64
7readline-6.2-11.el7.x86_64
安装完成后就可以编译安装 rlwrap 插件(这里我选用的是 0.42 版本,我比较常用,大家可以自行选择):
1## 需要在 root 用户执行安装
2[root@dm8:/soft]# tar -xf rlwrap-0.42.tar.gz
3[root@dm8:/soft]# cd rlwrap-0.42
4
5## 一键安装,安装过程太长,此处省略
6[root@dm8:/soft/rlwrap-0.42]# ./configure && make && make install
7
8## 检查是否安装成功
9[root@dm8:/soft/rlwrap-0.42]# rlwrap -v
10rlwrap 0.42
插件安装完成后就可以使用了,使用方式很简单:
1## 只需要在执行的命令前加上 rlwrap 即可
2[dmdba@dm8:~]$ rlwrap disql / as sysdba
3
4服务器[LOCALHOST:5236]:处于普通打开状态
5登录使用时间 : 4.923(ms)
6disql V8
7SQL> select name from v$database;
8
9行号 NAME
10---------- ------
111 DAMENG
这里没法具体演示上下文切换以及光标移动,大家可以自行安装体验。
配置环境变量
同样的,为了方便使用,可以通过配置环境变量➕ alias 别名的方式来实现调用:
1cat<<-EOF>>/home/dmdba/.bash_profile
2alias disql='rlwrap disql'
3EOF
这里只需要针对 disql 进行配置 rlwrap,相对的 ds,ds5237 等别名都会自动生效,前提是 rlwrap 这个命令需要放到最前面确保最先生效!
glogin 优化
讲到这里,基本已经解决了大多数人使用 disql 的痛点,80% 的朋友已经可以愉快地使用了,剩下的少部分人可能更加注重细节以及使用体验。
虽然配置 glogin 在很多人眼里是有一些风险的,因为 glogin 文件是比较容易造成 SQL 注入的方式之一,所以不太熟悉的可以直接忽略这部分的配置。
这里我分享一下我常用的 glogin 配置,大家可以自行选配:
1cat<<-\EOF>$DM_HOME/bin/disql_conf/glogin.sql
2-- 显示密钥过期时间
3column expired_date new_value _edate
4select to_char(expired_date,'yyyy-mm-dd') expired_date from v$license;
5host echo "密钥过期时间:&_edate"
6-- 设置 dbms_output 输出缓冲区大小
7set serveroutput on size 1000000
8-- 设置输出格式
9set long 200 linesize 500 pages 5000
10-- 去除重定向输出每行拖尾空格
11set trimspool on
12-- 去除行号显示
13set lineshow off
14-- 显示当前连接信息
15col name new_value _dname
16select name from v$database;
17col port_num new_value _port
18select para_value port_num from v$dm_ini where para_name='PORT_NUM';
19set SQLPROMPT "_USER'@'_dname':'_port SQL> "
20-- 显示当前时间
21set time on
22EOF
重新登录 disql,效果如下:
1[dmdba@dm8:~]$ ds
2
3服务器[LOCALHOST:5236]:处于普通打开状态
4登录使用时间 : 3.881(ms)
5密钥过期时间:2025-07-03
6disql V8
723:04:41 dmdba@DAMENG:5236 SQL> select name from v$database;
8
9NAME
10------
11DAMENG
12
13已用时间: 0.601(毫秒). 执行号:2805.
可以看到 disql 连接数据库后,多了很多信息:
- 数据库连接用户:dmdba
- 数据库名称:DAMENG
- 数据库端口号:5236
- 密钥过期时间:2025-07-03
- 当前系统时间:23:04:41
这些信息对于 DBA 来说十分重要,可以很大程度上避免数据库误操作。
写在最后
disql 与 sqlplus 的设计理念十分相似,这种借鉴方式其实对 Oracle DBA 来说是十分友好的,使用起来基本可以算是无缝切换,值得点赞!文不在深,实用则灵!
希望看完本文之后,可以让你的达梦数据库运维效率直接翻倍! 如果有遗漏或者不足的地方,欢迎评论区补充或者投稿,感谢阅读!
往期精彩文章
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
效率翻倍!达梦数据库 disql 使用技巧全攻略 - DBA 学习之路