作为运维过MySQL或者Oracle的DBA来说,在Linux版本的数据库安装完成之后,可能通常更喜欢使用其自带的命令行工具进行数据库连接,并进行一些常规的数据库操作。所以,在安装完达梦数据库之后,大家可能顺理成章的也会使用disql进行数据库的日常操作。这时,可能会遇到一些使用上的小问题,总感觉DM的disql工具有那么一些些的不顺手,本篇文章总结了一些大家可能会遇到的问题,希望对大家使用disql有所帮助。
在安装完DM数据库之后,我们通常会切换到dmdba这个用户对数据库进行操作。(希望大家也养成这样一个好习惯,因为这样可以避免安全问题和一些莫名其妙的权限问题),在命令行输入disql后回车,提示找不到该命令。
[root@localhost ~]# su - dmdba
Last login: Mon Feb 28 14:50:07 CST 2022 on pts/2
[dmdba@localhost ~]$ disql
bash: disql: command not found...
经常使用Linux的同学可能会知道,这应该是没有正确设置disql可执行程序的路径到PATH环境变量,那么,我们现在就把达梦数据库的bin目录设置的dmdba用户的.bash_profile环境变量文件中。
# 编辑环境变量文件
[dmdba@localhost ~]$ vim ~/.bash_profile
#添加如下两行记录,其中DM_HOME表示DM数据库的安装路径
DM_HOME=/opt/dmdb/dmdbms
export PATH=$PATH:$DM_HOME/bin
# 使用source命令,让配置文件立即生效
source ~/.bash_profile
[dmdba@localhost ~]$ disql
disql: error while loading shared libraries: libdisql_dll.so: cannot open shared object file: No such file or directory
在配置PATH环境变量生效之后,执行disql又报错,提示不能找到共享库文件。网上有朋友说cd到达梦的bin目录再执行disql即可解决。果然,当我们cd到DM数据库的bin目录下之后再启动disql,就能正常启动了。
[dmdba@localhost dmdb]$ cd $DM_HOME/bin
[dmdba@localhost bin]$ disql
disql V8
用户名:
不过,这好像失去了配置PATH变量后在任何目录都能启动disql的便利性。其实,出现上述错误的环境是因为LD_LIBRARY_PATH还没有将DM的bin目录加入,因为disql程序引用了该路径的库文件。
# 编辑环境变量文件
[dmdba@localhost ~]$ vim ~/.bash_profile
#添加如下记录,其中DM_HOME表示DM数据库的安装路径
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$DM_HOME/bin
# 使用source命令,让配置文件立即生效
source ~/.bash_profile
[dmdba@localhost dmdb]$ disql
disql V8
用户名:
至此,快速启动disql圆满的问题解决了。
在disql使用过程中,有的同学打错了命令,想利用键盘上的backspace删除回退键修改,却遭到了无情的拒绝,就像下面这样:
# 或者出现^[[3~乱码
[dmdba@localhost ~]$ disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 7.471(ms)
SQL> creattee^[[3~^[[3~^[[3~^[[3~
# 或者出现^H的乱码
[dmdba@localhost ~]$ disql
disql V8
用户名:
密码:
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.407(ms)
SQL> created^H^H^H^H
出现该问题通常是因为大家使用的SSH命令行终端工具键盘设置问题,一般可以在xshell等工具的【当前会话属性】→ 【终端】→【键盘】→【BACKSPLACE键序列】选择使用ASCII 127即可解决。
有些SQL查询返回的结果太长,可能在命令行上查看不太方便,这个时候我们可以将查询结果输出到一个文件中,拷贝到windows个人电脑上利用强大的文本编辑器进行查看,此时,可以使用spool命令导出输出结果到指定文件
SQL> spool /tmp/tablespace_useage.txt
SQL> select * from SYS.DBA_FREE_SPACE;
# 还可以就本地临时调用操作系统命令(less、more、cat等等)验证导出结果
SQL> host more /tmp/tablespace_useage.txt
有时候执行的命令实在太多,想要复制之前执行的SQL命令。又或者输入了很长的SQL之后发现其中一个字母顺序写反了,你想将光标移动回去仅仅修改某处错误的地方。再或者你想直接删除一整行、一个单词等等,这个时候你可能已经开始怀念Linux命令行的强大功能,同时对disql不支持这样的功能感到一丝丝遗憾。
不要灰心,这些在disql中依然可以实现,只不过需要我们稍稍的对它进行一下“升级”。
升级步骤:
下载并安装rlwrap命令行工具(rlwrap可以通过下载rpm等软件包安装,也可以通过github下载源码包切换root账号进行编译安装)
wget https://github.com/hanslub42/rlwrap/releases/download/v0.45.2/rlwrap-0.45.2.tar.gz
tar -zxvf rlwrap-0.45.2.tar.gz
cd rlwrap-0.45.2
./configure
make && make install
使用rlwrap disql命令代替disql命令
su - dmdba
rlwrap disql SYSDBA/SYSDBA@localhost
# 或者给disql设置一个别名(如果需要永久生效,请将下面别名命令设置到.bash_profile环境变量文件)
alias disql='rlwrap disql'
disql SYSDBA/SYSDBA@localhost
现在,你不仅可以使用方向键←和→进行光标定位(ctrl+←或ctrl+→以单词为单位左右移动光标)、方向键↑和↓进行前后翻页历史记录,还可以可以使用:
【CTRL+R】搜索SQL历史
【ALT+D】删除光标后的一个单词
【ALT+backspace】删除光标前一个单词
【CTRL+K】删除该行光标后的所有字符
【CTRL+U】删除该行光标前的所有字符
【CTRL+L】清空当前屏幕显示
https://eco.dameng.com/