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基本上就没什么问题。