- 功能简介
DIsql是DM数据库的一个命令行客户端工具,跟Oracle数据库的sqlplus工具一样,用来与 DM 数据库服务器进行交互。
DIsql 是 DM 数据库自带的工具,只要安装了 DM 数据库,就可以在应用菜单和安装目录中找到。
DIsql 识别用户输入,将用户输入的 SQL 语句打包发送给 DM 数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户。为了更好地与用户交互和展示执行结果,用户也可以在 DIsql 中执行 DIsql 命令,这些命令由 DIsql 工具自身进行处理,不被发送给数据库服务器。
- Disql启动
Disql 的启动方式比较简单,配置操作系统环境变量PATH的值,将$DM_HOME/bin目录(DM_HOME为达梦数据库软件安装目录)加入到系统PATH环境变量中,即可随时通过命令行,输入Disql启动交互窗口。在Windows操作系统下,还可以通过应用菜单,直接找到达梦数据库安装菜单中的SQL交互查询工具,可以直接启动使用disql交互窗口。
当然,也可以直接切换至达梦数据库软件安装目录的bin目录下,直接在命令行输入disql启动。
- Disql使用帮助
作用:可以帮助用户查看其他命令的具体用法。用户可以看到其他命令系统显示的内容。
语法如下:
[dmdba@dmdb ~]$ disql help
disql V8
DISQL 用法1:disql -h|help 显示disql版本信息和帮助信息
DISQL 用法2:disql [ [<option>] [{<logon> | /NOLOG}] [<start>] ]
<option> 为: [-L] [-S]
-L 只尝试登录一次
-S 隐藏模式,隐藏<SQL>标识符
<logon>为: {<username>[/<password>][*<MPP_TYPE>][@<connect_identifier>]} | {/ AS <SYSDBA|SYSSSO|SYSAUDITOR|AUTO>}
<connect_identifier>为{[<server>][:<port>][?{UDP|TCP|IPC|RDMA}][#<sslpath>@<sslpwd>]}
<server>如果是IPv6的地址,需要用[]指明是IPv6地址,例如[fe80::1e6f:65ff:fed1:3724%6]
<start> : `<filename>[<parameter> ...]<direct sql> 运行disql脚本
/NOLOG 选项能在未登录DM服务器的情况下启动disql
<direct sql>:-e "<SQL语句>[;<SQL语句>]"
- Disql命令使用示例
- SPOOL
作用:将屏幕显示的内容输出到指定文件
用法: SPOOL { <file> | OFF }
<file> 是 file_name[.ext] [CRE[ATE]|REP[LACE]|APP[END]]
说明:
- file:指定文件的[绝对路径]名称,如果不指定路径,则文件默认保存在用户使用disql命令登录DM数据库时目录下。
- CRE[ATE]:创建指定的文件,若指定的文件已存,则报错,默认方式
- REP[LACE]:创建指定的文件,若指定的文件已存,则替换它
- APP[END]]:将输出内容追加到指定文件的末尾
- OFF:关闭SPOOL 输出
示例:
SQL> spool /home/dmdba/aa.txt rep
SQL> select empno,ename,sal,deptno from emp;
…
SQL> spool off;
-
- HOST
作用: 使用HOST命令可以不用退出DIsql就能执行操作系统命令。如果单独执行host,则能够直接从DIsql界面切换到操作系统,之后可使用 EXIT回到 DIsql界面。
语法如下:
HOST []
示例如下:
SQL> host pwd
/home/dmdba
提示:如果在SQL>窗口中只输入host命令,没有带上相关的系统命令,则会退出到系统命令窗口,执行完相关的系统命令后,再执行exit命令,则回到SQL命令窗口。
-
- DESCRIB
作用:获取表或视图、存储过程、函数、包、记录、类的结构描述。
语法如下:
法: DESC[RIBE] [模式名.]对象名
示例:
SQL> desc emp
-
- DEFINE
作用:用来定义一个本地变量的替代变量,然后对该变量赋一个CHAR类型的值;或者输出变量的值和类型。
语法如下:
DEF[INE] [|< VARIABLE >]
DEF[INE] VARIABLE = text:申明一个变量,如果该变量存,则重新赋值,否则新生成一个变量,并进行赋值。
DEF[INE] VARIABLE:如果该变量存,则输出特定VARIABLE的值和类型,否则报错。
DEF[INE]:输出DIsql中所有的变量的值和类型。
该命令定义的替代变量当前的DIsql环境和/NOLOG环境中均可以起作用。DEFINE定义的变量会保存环境DIsql环境中,可以SQL语句中使用。默认的变量前缀是&。
示例如下:
SQL> def no=7788;
SQL> select ename,sal,deptno from emp where empno=&no;
-
- EXPLAIN
作用:用EXPLAIN命令来查看查询语句的执行计划。
语法如下:
EXPLAIN <sql_clause>
示例:
SQL> explain select * from scott.emp;
1 #NSET2: [0, 14, 266]
2 #PRJT2: [0, 14, 266]; exp_num(9), is_atom(FALSE)
3 #CSCN2: [0, 14, 266]; INDEX33555660(EMP)
9.显示SQL语句或块信息LIST
显示最近执行的SQL语句或者PL/SQL块信息。不显示DIsql命令。
-
- LIST
显示最近执行的 SQL 语句或者 PL/SQL 块信息。不显示 DIsql 命令。
语法如下:
L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST] 或者 ;
n ,m :数值 SQL 行号。
*: 当前行号。
LAST: 最后一行。
示例:
SQL> l
1* select * from dept;
-
- disql命令直接执行SQL文件
disql sysdba/dameng123 \`test.sql
或是进行disql命令窗口中再使用start命令执行SQL文件,如下:
SQL> start test.sql
或是直接在disql命令后面使用-e参数,再跟上查询语句来执行:
disql sysdba/dameng123 -e "select * from tb;" #对数据库自带的视图,如v$database查询时需要对$符进行转义
执行脚本
./disql SYSDBA/SYSDBA@LOCALHOST:5236 `/opt/dmdbms/test.sql
扩展:
linux下,需要使用双引号将密码包含进来,同时外层再使用单引号进行转移。
具体例子如下:
./disql EMP/'"abcd@efgh"'@localhost:5236
windows下,需要使用双引号将密码包含进来,同时对双引号使用\进行转移。
具体例子如下:
disql EMP/\"abcd@efgh\"@localhost:5236
-
- set命令收集
SET ECHO OFF; --显示脚本中正在执行的 SQL 语句
SET FEEDBACK OFF; --显示当前 SQL 语句查询或修改的行数
SET HEADING ON; --显示列标题
SET LINESHOW OFF; --显示行号
SET LINESIZE 1000; --设置屏幕上一行显示宽度
SET PAGESIZE 1000; --设置一页有多少行数
SET TIMING OFF; --显示每个 SQL 语句花费的执行时间
SET TIME OFF; --显示系统的当前时间
SET SERVEROUTPUT ON; --在块中有打印信息时,是否打印,以及打印的格式
SET CHAR_CODE DEFAULT; --设置 SQL 语句的编码方式GBK | GB18030| UTF8 | DEFAULT
SET COLSEP '|'; --设置 DPI 语句句柄中游标的类型
SET KEEPDATA ON; --是否为数据对齐进行优化,或者保持数据的原始格式。
SET TRIMSPOOL ON; --设置 spool 文件中每行的结尾空格
SPOOL /home/dmdba/dbchk20200609.txt --输出到文件
SPOOL OFF; --结束输出文件
- disql连接DM数据库的三种方式
Disql 连接DM实例的三种不同方式。
-
- DM 服务器上直接连接
[dmdba@dmdb ~]$ disql SYSDBA/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.827(ms)
disql V8
SQL>
这种方式只能连接到本地实例。
这种方式可以连接到任意服务器,只要IP地址和端口正确即可。
[dmdba@dmdb ~]$ disql SYSDBA/dameng123@192.168.88.100:5236
服务器[192.168.88.100:5236]:处于普通打开状态
登录使用时间 : 2.547(ms)
disql V8
SQL>
或:
[dmdba@dmdb ~]$ disql /nolog
disql V8
SQL> conn SYSDBA/dameng123@192.168.88.100:5236
服务器[192.168.88.100:5236]:处于普通打开状态
登录使用时间 : 2.541(ms)
SQL>
提示:这种方式不足的地方就是每次都需要输入IP地址和端口,不是很方便。
-
- 使用service name 连接
相关配置文件:dm_svc.conf 文件。
cat /etc/dm_svc.conf
dmdb=(192.168.88.100:5236)
TIME_ZONE=(480)
LANGUAGE=(cn)
[dmdba@dmdb ~]$ disql sysdba/dameng123@dmdb
服务器[192.168.88.100:5236]:处于普通打开状态
登录使用时间 : 2.824(ms)
disql V8
SQL>
-
- 中断或退出Disql
- 方法一
直接在命令行输入disql 结合nolog参数,通过connect指定用户名、密码、主机、端口、网络协议登陆,使用disconnect退出连接
[dmdba@dmdb ~]$ disql SYSDBA/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.708(ms)
disql V8
SQL> disconn
SQL> select user;
未连接
SQL>
- 方法二
直接在命令行输入disql 结合nolog参数,通过login方式登陆数据库,使用logout方式退出登陆。
[dmdba@dmdb ~]$ disql /nolog
disql V8
SQL> conn sysdba/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.875(ms)
SQL> select user;
行号 USER()
---------- ----------------
1 SYSDBA
已用时间: 3.390(毫秒). 执行号:204.
SQL> logout
SQL> select user;
未连接
SQL>
- 方法三
disql退出直接使用exit|quit
[dmdba@dmdb ~]$ disql SYSDBA/dameng123
服务器[LOCALHOST:5236]:处于普通打开状态
登录使用时间 : 2.792(ms)
disql V8
SQL> quit;
[dmdba@dmdb ~]$