DIsql 是 DM 数据库的一个命令行交互式客户端工具,用来与 DM 数据库服务器进行交互。DIsql 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在安装目录的bin目录下找到该命令。(其实disql就是类似oracle的sqlplus工具)

1. disql连接数据库实例

disql连接数据库共有以下3种方式:

  • 连接默认的DM实例
    disql不指定端口的情况下,默认连接的是5236端口(如果实例并非默认的5236端口,则必须指定端口号)

注意:linux环境下,如果密码中包含特殊字符,需要使用双引号将密码包含进来,同时外层再使用单引号进行转移,具体示例如下:

$ disql SYSDBA/'"abcd@efgh"'
$ disql SYSDBA/'"abcd@efgh"'@127.0.0.1:5236
  • 使用IP地址和端口连接实例
  • 使用service name连接实例
    service nameb必须先在配置文件(/etc/dm_svc.conf)中进行配置,需root用户才能修改:
[root@biserver ~]# vi /etc/dm_svc.conf
[root@biserver ~]# cat /etc/dm_svc.conf
TIME_ZONE=(480)
LANGUAGE=(cn)
dmdw=(192.168.10.192:5236)

再用配置好的service name进行登陆(service name大小写不敏感)

2. disql环境变量设置

使用 SET 命令可以对当前 DIsql 的环境变量进行设置。常用环境变量设置命令如下:

  • 设置当前 session 是否自动提交
SET AUTO[COMMIT]  <ON|OFF>
  • 是否回显当前SQL语句查询或修改的总行数
SET FEED[BACK]  <6(默认值)|n|ON|OFF>
  • 设置是否显示列标题
SET HEA[DING]  <ON(默认值)|OFF>
  • 设置查询结果是否显示行号
SET LINESHOW   <ON(默认值)|OFF >
  • 设置一页显示有多少行数
SET PAGES[IZE]  < 14(默认值)|n>
  • 设置屏幕一行显示的宽度
SET LINESIZE  <screen_length(默认值,屏幕宽度)|n>
  • 在块中有打印信息时,是否打印,以及打印的格式。设置之后,可以使用DBMS_OUTPUT包打印
SET SERVEROUT[PUT] <ON | OFF(默认值)> 
[SIZE <20000(默认值)|n>]
[FOR[MAT] <WRA[PPED] | WOR[D_WRAPPED](默认值) | TRU[NCATED]>]

ON/OFF:是否打印。
SIZE:打印的最大长度。
WORD_WRAPPED:按照单词分隔。
TRUNCATED:单词被截断。
FORMAT:按照服务器返回的显示,不做格式化。
  • 控制台是否打印 SQLCODE 返回值
SET SQLCODE  <ON|OFF(默认值)>
  • 显示每个SQL语句花费的执行时间
SET TIMING  <ON(默认值)|OFF>
  • SHOW 命令查看环境变量
SHOW <system_variable>{<system_variable>}

3. disql常用命令

  • 帮助命令 help
SQL> HELP 命令
SQL> help describe

 DESCRIBE
 --------

 获取表或视图、存储过程、函数、包、记录、类的结构描述。

 用法: DESC[RIBE] [模式名.]对象名
  • 输出文件 SPOOL
SQL> spool /home/dmdba/out.dat
SQL> select count(*) from sysobjects;

行号     COUNT(*)            
---------- --------------------
1          867

已用时间: 1.507(毫秒). 执行号:58400.
SQL> spool off
SQL> exit

[dmdba@biserver ~]$ cat /home/dmdba/out.dat
SQL> select count(*) from sysobjects;

行号     COUNT(*)            
---------- --------------------
1          867

已用时间: 1.507(毫秒). 执行号:58400.
SQL> spool off
[dmdba@biserver ~]$

注意:只有SPOOL OFF之后,才能在输出文件中看到输出的内容。

  • 执行操作系统命令
    在disql环境中,通过host命令,可以直接执行操作系统的命令。
SQL> host df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   50G   28G   23G   56% /
devtmpfs                 7.8G     0  7.8G    0% /dev
tmpfs                    7.8G  140K  7.8G    1% /dev/shm
tmpfs                    7.8G   82M  7.7G    2% /run
tmpfs                    7.8G     0  7.8G    0% /sys/fs/cgroup
/dev/sda1                497M  157M  340M   32% /boot
/dev/mapper/centos-home   46G  213M   46G    1% /home
tmpfs                    1.6G   44K  1.6G    1% /run/user/0
/dev/loop0               911M  911M     0  100% /mnt/cdrom

SQL> host ps -ef|grep dm.ini
dmdba     2013  1909  0 21:43 pts/2    00:00:00 sh -c ps -ef|grep dm.ini
dmdba     2015  2013  0 21:43 pts/2    00:00:00 grep dm.ini
dmdba    13615     1  0 6月29 ?       00:07:24 /opt/db/dm/dmdbms/bin/dmserver path=/opt/db/dm/dmdbms/data/DMDB/dm.ini -noconsole

4. disql执行sql脚本

  • disql连接语句中直接执行sql语句
[dmdba@biserver ~]$ disql SYSDBA/SYSDBA \`/home/dmdba/test.sql

服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 3.048(ms)
disql V8
SQL> select count(*) from sysobjects;

行号     COUNT(*)            
---------- --------------------
1          867

已用时间: 0.580(毫秒). 执行号:58500.
SQL>
  • disql连接到实例后,有两种方式执行sql脚本(start命令和`字符):
SQL> `/home/dmdba/test.sql
SQL> select count(*) from sysobjects;

行号     COUNT(*)            
---------- --------------------
1          867

已用时间: 0.272(毫秒). 执行号:58501.
SQL> start /home/dmdba/test.sql
SQL> select count(*) from sysobjects;

行号     COUNT(*)            
---------- --------------------
1          867

已用时间: 0.197(毫秒). 执行号:58502.
SQL>

总体来说,达梦的disql和oracle的sqlplus,功能上几乎是类似的,命令语法也基本上都是兼容的。如果对oracle的sqlplus已经比较熟悉了,那么使用达梦的disq基本上就没什么问题。