DM数据库dlsql工具学习
Dlsql使用
-
功能简介
-
DIsql 是 DM 数据库的一个命令行客户端工具,用来与 DM 数据库服务器进行交互。
-
DIsql 识别用户输入,将用户输入的 SQL 语句打包发送给 DM 数据库服务器执行,并接收服务器的执行结果,并按用户的要求将执行结果展示给用户。
-
SQL 语句在 DIsql 中执行完后都被保存在一个特定的内存区域中,用户可以通过上下键查找到这些保存在内存中的 SQL 语句(某些操作系统可能不支持此操作),并可以进行修改,然后再次执行。
-
SQL语句和Dlsql命令的区别
SQL 语句 DIsql 命令 ANSI 标准 DM 内部标准 语言 命令 关键字不可缩写 关键字可缩写 部分语句以分号结束,部分语句以/结束 分号可有可无,/完全用不到 可以更新表中的数据 不能更新表中的数据
-
-
-
Dlsql入门
-
启动dlsql
-
Windows中启动dlsql
-
开始菜单,DM交互式工具
- 启动成功后会出现
SQL>
的标志
- 启动成功后会出现
-
以login为例,登录到192.168.130.42机器上,用户名和密码为:SYSDBA/SYSDBA,其他全部敲回车,采用默认输入。
- 也可以全部直接回车,采用默认输入,登录到本地 DM 数据库
-
-
命令行启动
-
找到工具Dlsql所在的安装目录C:\dmdbms\bin,在搜索栏输入Dlsql进行登录
-
Dlsql登录方式
-
语法(我丢,看不了一点,但还是要说明一下):
DIsql 用法1:disql –h|help显示disql版本信息和帮助信息 DIsql 用法2:disql [ [<option>] [<logon> |{/NOLOG}] [<start>] ] <option>::=[-L] [-S] <logon>::={{<username>[/<password>]} | /}[@<connect_identifier>][<logon_option>] [<os_auth>] <connect_identifier> ::=<svc_name> | {<host>[:<port>]} | <unixsocket_file> < logon_option >::=<option_no_esc>|<option_esc> <option_no_esc >::= #{ <extend_option>=<value>{,<extend_option>=<value>} } //此行外层{}是为了封装参数之用,书写时需要保留 <option_esc>::= # "{ <extend_option>=<value>{,<extend_option>=<value>} } " //此行外层"{}"是为了封装参数之用,书写时需要保留 <os_auth>::= AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO} <start>::=<`运行脚本>|<start运行脚本>|<直接执行语句>|<直接执行SET命令> <`运行脚本>::=`<file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}] <start运行脚本>::=START <file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}] <直接执行语句>::= -E "<SQL语句>{;<SQL语句>}" <直接执行设置DIsql属性命令>::= -C "<SET命令 | COLUMN命令>"
建议:
< >表示是必选项
[ ]表示是可选项
{ }表示里面的内容可以出现一次或多次
|表示或,::=表示定义
-
-h|help: h 或 help 表示显示 DIsql 版本信息和帮助信息。
-
[-L] [-S]:-L 表示只尝试登录一次;-S 表示设置 DIsql 界面为隐藏模式,隐藏 标识符。
-
{{[/]} | /}:[/]为用户名和密码。普通登录方式时用户名必写,密码默认为 SYSDBA。/表示采用操作系统身份验证方式登录,此时无需指定用户名和密码,即使指定也会被忽略。
-
<svc_name>: 服务名。服务名在 dm_svc.conf 中配置。
-
[:]: 服务器 IP 地址和端口号。默认情况下默认为本地服务器和端口号 LOCALHOST:5236。当服务器为本机时,SERVER:PORT 可直接写 LOCALHOST。当连接其他服务器时,SERVER:PORT 需写上 IP 地址和 PORTNUM。
-
<unixsocket_file>: 专门用于在 LINUX 系统中,当服务器与客户端之间使用 UNIXSOCKET(UNIX DOMAIN SOCKET - IPC)协议通信时,指定客户端连接的 socket 文件路径。
./disql SYSDBA/SYSDBA@/data/sdb/DAMENG/foo.sock#{inet_type=UNIXSOCKET}
-
<logon_option>:为扩展选项,包括 <option_no_esc>和 <option_esc>两种书写方式,两种方式除了书写封装符号#{}和#"{ }"不同,其他一样。
-
现在也支持扩展选项<extend_option>
extend_option value mpp_type MPP 登录属性,此属性的设置对非 MPP 系统没有影响。取值 GLOBAL 和 LOCAL,默认为 GLOBAL。GLOBAL 表示 MPP 环境下建立的会话为全局会话,对数据库的导入导出操作在所有节点进行;LOCAL 表示 MPP 环境下建立的会话为本地会话,对数据库的导入导出操作只在本地节点进行 inet_type 网络通信协议类型。取值 TCP/UDP/IPC/UNIXSOCKET/RDMA,默认为 TCP。 TCP:传输控制协议,是一种面向连接的、可靠的、基于字节流的传输层通信协议; UDP:用户数据报协议,是一种面向数据报的、不可靠的、可快速传输的传输层通信协议,和 TCP 协议互为补充。若应用程序对可靠性的要求较低,对传输性能要求较高,则可以选择 UDP 通信协议。使用 UDP 通信协议时,服务器需要设置 INI 参数 ENABLE_UDP 非 0; IPC:基于共享内存的通信协议,用于同一台主机的进程间通讯。使用 IPC 协议连接数据库时会忽略 IP 地址和端口号,直接连接本机上 INI 参数 ENABLE_IPC=1 的服务器,一台机器上只能有一个服务器设置 ENABLE_IPC=1; UNIXSOCKET:与 IPC 协议类似,同样用于同一台主机的进程间通讯。仅 LINUX 环境下支持 UNIXSOCKET 通信协议。使用 UNIXSOCKET 通信协议时,无需指定 IP 地址和端口号,但服务器需要配置 INI 参数 UNIX_SOCKET_PATHNAME 指定 socket 文件路径,客户端连接服务器时也需要指定 socket 文件路径,二者必须一致; RDMA:远程直接数据存取协议,通过网络将数据从一个系统快速移动到远程系统的存储器中,大大降低计算机处理性能的损耗。使用 RDMA 协议需要安装并配置 RDMA 网卡。使用 RDMA 协议连接数据库时需要指定 RDMA 网卡配置的 IP 地址以及服务器的端口号 ssl_path 通信加密的 SSL 数字证书路径,默认为不使用加密。数字证书路径由用户自己创建,将相应的证书需放入该文件夹中。其中服务器证书必须与 dmserver 目录同级,客户端目录可以任意设置。和 ssl_pwd 一起使用。 各用户只能使用自己的 SSL 数字证书,例如 SYSDBA 账户只能使用\bin\CLIENT_SSL\SYSDBA 下的证书和密码,如果证书没有密码可以用默认或任意数字代替。 例如:./disql SYSDBA/SYSDBA@192.168.1.64:5236#“{ssl_path= /home/dmdbms/bin/client_ssl/SYSDBA,ssl_pwd=12345}” ssl_pwd 通信加密的 SSL 数字证书密码。和 ssl_path 一起使用。默认为不加密 proxy_client 被代理的用户名。 例如:被代理用户 USER1 的口令和密码为 USER111/ USER111。代理用户 USER2 的用户名和密码为 SYSDBA/SYSDBA。 首先,赋予用户 USER2 代理用户 USER1 的权限,使用户 USER2 可以认证登录用户 USER1。 SQL>ALTER USER USER1 GRANT CONNECT THROUGH USER2; 然后,使用代理用户 USER2 就能登录被代理用户 USER1 的数据库。 ./disql SYSDBA/SYSDBA@192.168.1.64:5236#“{inet_type=tcp,proxy_client=USER1}”
-
-
AS <SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO>:操作系统身份验证。用户可以通过将操作系统用户加入到操作系统的 dmdba|dmsso|dmauditor 用户组来使用操作系统用户登录数据库,分别对应数据库的 SYSDBA|SYSSSO|SYSAUDITOR 用户。
-
/NOLOG:表示在未登录 DM 服务器的情况下启动 disql。
注意:
命令中:<`运行脚本>既可以在DIsql启动时使用,也可以在进入DIsql界面之后使用。而只能在进入DIsql界面之后才能使用
-
**<运行脚本 >:**符号运行 sql 脚本文件。
注意:
Disql可使用的脚本文件大小上限为2G
-
举例:
disql [SYSDBA/SYSDBA@192.168.1.64:5236]`e:\a.sql 或 SQL> `e:\a.sql
-
-
<PARAMETER_VALUE>:传给 <file_path> 脚本文件中本地变量的参数值,将其中的参数内容传给变了&1,&2,&3…以此类推。
SQL> start E:\b.txt CTL_PATH SQL> select name,type from V$PARAMETER where name='&1';
-
<start 运行脚本>:使用 START 命令运行 sql 脚本文件。
-
< 直接执行语句>:使用-E 参数,将在运行 DIsql 时直接执行后续的一条或多条 SQL 语句,查询结果不显示行号、执行时间以及执行号等信息,且不受-C 参数控制。
disql SYSDBA/SYSDBA -E "SELECT TOP 1 * FROM SYSOBJECTS; SELECT TOP 1 * FROM V$CMD_HISTORY"。
-
< 直接执行 SET 命令 >: 使用-C 参数,将在运行 DIsql 时直接执行后续的 SET 命令。
disql SYSDBA/SYSDBA -C "SET LONG 1000 PAGESIZE 0"。
-
-
-
-
-
切换登录
用户进入 DIsql 界面后,如果想切换到其他 DM 数据库实例。有两种实现方式:一是使用 LOGIN 命令;二是使用 CONN 命令。
-
LOGIN/LOGOUT
-
LOGIN登录主库建立会话
- 全部都
ENTER
,直接使用默认值
- 全部都
-
LOGOUT从登录主库注销会话
SQL>LOGOUT
- 直接输入
logout
即可
- 直接输入
-
-
CONN[ECT]/DISCONN[ECT]
-
CONN[ECT]创建连接
-
在DIsql界面使用CONN[ECT]登录远程数据库
-
语法:
CONN[ECT] <logon> <logon>::={{<username>[/<password>]} | /}[@<connect_identifier>][<login_option>] [<os_auth>] <connect_identifier> ::=<svc_name> | {<host>[:<port>]} | <unixsocket_file> <login_option>::= <option_no_esc> <option_no_esc >::= #{ <extend_option>=<value>{,<extend_option>=<value>} } //此行外层{}是为了封装参数之用,书写时需要保留 <os_auth>::= AS {SYSDBA|SYSSSO|SYSAUDITOR|USERS|AUTO}
注意:
使用CONN[ECT]建立新会话时,会自动断开先前会话
-
示例:
SQL>CONN SYSDBA/SYSDBA@118.31.249.249
-
-
-
DISCONN[ECT]断开连接
-
断开连接而不退出 DIsql。与 logout 功能一样。
SQL>DISCONN
-
-
-
-
使用DIsql
-
只需要输入一条 SQL 语句,回车即可。DIsql 将 SQL 语句发送给 DM 数据库服务器并显示服务器返回的结果。
select top 5 name,id from sysobjects;
-
-
退出DIsql
- 使用EXIT/QUIT
-
-
Disql环境变量配置
使用 SET 命令可以对当前 DIsql 的环境变量进行设置。并通过 SHOW 命令来查看当前系统中环境变量的设置情况。
-
DIsql环境变量
序号 变量名称 属性 用途 1 AUTO[COMMIT] <ON|OFF (默认值)> 设置自动提交 2 DEFINE <c(默认的变量前缀是&)|ON (默认值)|OFF> 定义本地变量 3 ECHO <ON (默认值)|OFF> 显示脚本中正在执行的 SQL 语句 4 FEED[BACK] <6 (默认值)|n|ON|OFF> 显示当前 SQL 语句查询或修改的行数 5 HEA[DING] <ON (默认值)|OFF> 显示列标题 6 LINESHOW <ON (默认值)|OFF> 显示行号 7 NEWP[AGE] <1 (默认值)|n|NONE> 设置页与页之间的分隔 8 PAGES[IZE] <14 (默认值)|n> 设置一页有多少行数 9 TIMING <ON (默认值)|OFF> 显示每个 SQL 语句花费的执行时间 10 TIME <ON|OFF (默认值)> 显示系统的当前时间 11 VER[IFY] <ON (默认值)|OFF> 列出环境变量被替换前、 后的控制命令文本 12 LONG <800 (默认值)|n> 设置大字段类型显示的最大字节数 13 LINESIZE <screem_length (默认值,屏幕宽度)|n> 设置屏幕上一行显示宽度 14 SERVEROUT[PUT] <ON | OFF (默认值)> [SIZE <20000 (默认值)|n>] [FOR[MAT] <WRA[PPED] | WOR[D_WRAPPED] (默认值) | TRU[NCATED]>] 在块中有打印信息时, 是否打印,以及打印的格式 15 SCREENBUFSIZE <DEFAULT(20M) | n> 设置屏幕缓冲区的长度 16 CHAR_CODE <GBK | GB18030 | UTF8 | DEFAULT (默认值,操作系统的编码方式)> 设置 SQL 语句的编码方式 17 LOCAL_CODE <GBK| GB18030 | UTF8 | DEFAULT (默认值,操作系统的编码方式)> 设置本地编码方式 18 CURSOR <STATIC | FORWARDONLY (默认值)| DEFAULT> 设置 DPI 语句句柄中游标的类型 19 AUTOTRACE <OFF (默认值) | NL | INDEX | ON | TRACE | TRACEONLY> 设置执行计划和统计信息的跟踪 20 DESCRIBE [DEPTH<1 (默认值) | n | ALL>] [LINE[NUM] <ON | OFF(默认值)>] [INDENT <ON (默认值) | OFF>] 设置 DESCRIBE 的显示方式 21 TRIMS[POOL] <OFF (默认值)| ON> 设置 spool 文件中每行的结尾空格 22 LOBCOMPLETE <OFF (默认值)| ON> 设置大字段数据是否从服务器全部取出 23 COLSEP [text] 设置列之间的分割符。默认为一个空格 24 KEEPDATA <ON|OFF (默认值)> 是否为数据对齐进行优化,或者保持数据的原始格式。ON 不优化,OFF 对齐优化。默认为 OFF 25 AUTORECONN <ON (默认值)|OFF> 是否自动重新连接。ON 是,OFF 否。默认为 ON 26 NEST_COMMENT <ON|OFF (默认值)> 是否支持多行注释嵌套。ON 是,OFF 否。默认为 OFF 27 NULL_ASNULL <ON|OFF (默认值)> 在绑定参数输入时,是否将输入的 NULL 当作数据库的 null 处理。ON 是,OFF 否。默认为 OFF 28 CMD_EXEC <ON (默认值)|OFF> 是否执行文件中“/”命令。ON 是,OFF 否。默认为 ON 29 CHARDEL [text] 设置字符串的限定符。默认为一个空格 30 FLOAT_SHOW <0 (默认值)|float_length> 设置 FLOAT、DOUBLE 类型按科学计数法显示的分界长度。默认为 0,代表全部按科学计数法显示 31 CONSOLE_PRINT <ON (默认值)|OFF|OFF_WITH_TIME |OFF_WITH_FEEDBACK> 控制台是否打印查询结果。ON 是,OFF 否。默认为 ON 32 SQLCODE <ON|OFF (默认值)> 控制台是否打印 SQLCODE 返回值。ON 是,OFF 否。默认为 OFF 33 SQL_LINESHOW <ON (默认值)|OFF> 输入多行 SQL 语句时,是否打印 SQL 语句的行号。ON 是,OFF 否。默认为 ON 34 NULL_SHOW <ON (默认值)|OFF> 空数据是否显示为 NULL。ON 是,OFF 否。默认为 ON 35 SQLPROMPT *<*text> 设置 DIsql 的命令行前缀标识 36 ISQL_MODE <0 (默认值)|1|2|3> 结果集打印方式。0:DM 数据库的打印方式;1:兼容 ORACLE 的打印格式;2:兼容 Greenplum 的打印格式;3:兼容 MYSQL 的打印格式。默认为 0 37 WRAP <ON (默认值)|OFF> 是否折行打印结果集。ON 是,OFF 否。默认为 ON 仅在 ISQL_MODE 为 1 时,该参数有效 38 CTRL_INFO <0 (默认值)|1|2|4|8> 设置 DIsql 控制信息 39 RETRY_CONN <0 (默认值)|n> 设置 DIsql 尝试自动重连的次数 40 RETRY_CONN_TIME <0 (默认值)|n> 用于当 RETRY_CONN 为 n 时,设置 DIsql 自动重连时间间隔。单位:秒 41 ROWS <0 (默认值)|n> 设置结果集最大显示行数 42 EXPLAIN_MODE < 0|1|2 > 设置 SQL 执行方式 43 PREFIX_STR < 0|text > 设置 SQL 执行时拼接指定前缀串 44 READ_ONLY < ON|OFF(默认值)> 设置会话只读 -
SET命令用法
-
SET 命令用于设置 DIsql 系统环境变量。
SET <system_variable><value>{ <system_variable><value>}
\<system_variable\>
:变量名称\<value\>
:属性
-
-
用SET命令设置环境变量详情
-
AUTO[COMMIT]
- 设置当前 session 是否对修改的数据进行自动提交。
SET AUTO[COMMIT] <ON|OFF>
-
ON:表示打开自动提交,所有执行的 SQL 语句的事务将自动进行提交。
OFF:表示关闭自动提交,所有执行的 SQL 语句的事务将由用户显式提交,为默认设置。
-
DEFINT
- 是否使用 DEFINE 定义本地变量。
SET DEFINE<c(默认的变量前缀是&)|ON(默认值)|OFF>
-
参数说明:
- c:表示打开 DEFINE 功能,同时定义前缀变量符号,c 为定义的前缀符号。
- ON:表示打开 DEFINE 功能,使用默认前缀符号&。
- OFF:表示不使用 DEFINE 功能。
-
示例:打开 DEFINE 功能,并设置##为变量前缀
SQL> SET DEFINE # SQL> SELECT #A FROM DUAL; 输入 A的值:1
-
ECHO
- 用 START 命令执行一个 SQL 脚本时,是否显示脚本中正在执行的 SQL 语句。
SET ECHO <ON(默认值)|OFF>
-
FEED[BACK]
- 是否显示当前 SQL 语句查询或修改的总行数。
SET FEED[BACK] <6(默认值)|n|ON|OFF>
-
参数说明:
- n:表示结果大于 n 行时,才显示结果的总行数。
- ON:打开显示开关,使用默认值 6。
- OFF:关闭显示开关。
-
示例:
-
HEA[DING]
- 是否显示列标题。
SET HEA[DING] <ON(默认值)|OFF>
-
示例:
-
LINESHOW
- lineshow 设置是否显示行号。
SET LINESHOW<ON(默认值)|OFF >;
-
默认为每行输出打印行号
-
示例:
-
NEWP[AGE]
- 设置页与页之间的分隔。
SET NEWP[AGE] <1(默认值)|n|NONE>
- 当 set newpage 0 时,在每页的开头有一个换号符。
- 当 set newpage n 时,在页和页之间隔着 n 个空行。
- 当 set newpage none 时,在页和页之间没有任何间隔。
-
PAGES[IZE]
- 设置一页有多少行数。
SET PAGES[IZE] <14(默认值)|n>
- 如果设为 0,则所有的输出内容为一页,并且当 ISQL_MODE 不等于 2 时,不显示列标题。默认值为 14
-
TIMING
- 显示每个 SQL 语句花费的执行时间。
SET TIMING<ON(默认值)|OFF>
-
TIME
- 显示系统的当前时间。
SET TIME<ON|OFF(默认值)>
-
VER[IFY]
- VER[IFY]是否列出环境变量被替换前、后的控制命令文本。默认值为 ON,表示列出命令文本。
SET VER[IFY] < ON(默认值)|OFF>
-
示例:1、设置 VER[IFY]为 OFF,不列出命令文本
-
示例:2、设置 VER[IFY]为 ON,列出命令文本
-
LONG
- 设置 BLOB、CLOB、CHAR、VARCHAR、BINARY、VARBINARY、CLASS 等类型一列能显示的最大字节数。
SET LONG <800(默认值)|n>
-
示例:创建一个表,插入语句,然后使用long参数查看字符串
- 可以看到LONG设置为10时,显示的字符串是被截断了的
-
LINESIZE
- 设置屏幕上一行显示宽度。
SET LINESIZE <screen_length(默认值,屏幕宽度)|n>
- 当 ISQL_MODE 取值为 0 或 1 时,LINESIZE 取值范围为自 1 至 32767 的整数。
- 当 ISQL_MODE 取值为 2 时,LINESIZE 取值范围为自 0 至 32767 的整数,取值为 0 时,表示一行数据在同一行显示。
-
SERVEROUT[PUT]
- 在块中有打印信息时,是否打印,以及打印的格式。
SET SERVEROUT[PUT] <ON | OFF(默认值)> [SIZE <20000(默认值)|n>] [FOR[MAT] <WRA[PPED] | WOR[D_WRAPPED](默认值) | TRU[NCATED]>]
-
参数说明:
- ON/OFF:是否打印。
- SIZE:打印的最大长度。
- WORD_WRAPPED:按照单词分隔。
- TRUNCATED:单词被截断。
- FORMAT:按照服务器返回的显示,不做格式化。
-
示例:
-
SCREENBUFSIZE
- 设置屏幕缓冲区的长度。用来存储屏幕上显示的内容。单位为字节。
SET SCREENBUFSIZE<DEFAULT(20M) | n>
- n:有效值范围 1~50M。
-
CHAR_CODE
- 设置 SQL 语句的编码方式。
SET CHAR_CODE <GBK | GB18030 | UTF8 | DEFAULT(默认值,操作系统的编码方式)>
-
LOCAL_CODE
- 设置本地编码方式,指定客户端使用的编码格式,会影响结果集和错误信息的编码。
SET LOCAL_CODE <GBK | GB18030 | UTF8 | DEFAULT(默认值,操作系统的编码方式)>
-
CURSOR
- 设置 DPI 语句句柄中游标的类型。
SET CURSOR <STATIC | FORWARDONLY (默认值)| DEFAULT>
-
AUTOTRACE
- 设置执行计划和统计信息的跟踪。
SET AUTOTRACE <OFF(默认值) | NL | INDEX | ON | TRACE | TRACEONLY>
-
SET AUTOTRACE OFF 时,停止 AUTOTRACE 功能,常规执行语句。
-
当 SET AUTOTRACE NL 时,开启 AUTOTRACE 功能,不执行语句,如果执行计划中有嵌套循环操作,那么打印 NEST LOOP 相关操作符的内容。
-
示例:
- 监控信息项的具体含义:
- data pages changed : 更改的数据页数
- undo pages changed : 更改的 UNDO 日志页数
- logical reads : 逻辑读次数
- physical reads : 物理读次数
- redo size : REDO 日志大小
- bytes sent to client : 发给客户端的数据流量
- bytes received from client : 客户端接收的数据流量
- roundtrips to/from client : 客户端与服务器交互次数
- sorts (memory) : 最优排序次数
- sorts (disk) : 单路/多路归并排序次数
- rows processed : DML 操作影响的行数
- io wait time(ms) : I/O 等待时间
- exec time(ms) : 执行时间
- 监控信息项的具体含义:
-
DESCRIBE
- 设置 DESCRIBE 对象结构信息的显示方式。
SET DESCRIBE [DEPTH <1(默认值) | n | ALL>] [LINE[NUM] <ON | OFF(默认值)>] [INDENT <ON(默认值) | OFF>]
- 参数说明:
- DEPTH:结构信息显示至第 N 层,默认只显示第 1 层。取值范围是 1~40。当设置为 ALL 时,DEPTH 为 40。
- LINENUM:是否显示对象行号,成员显示父亲的行号。
- INDENT:当对象的类型是复合类型时,是否通过缩进的方式显示成员信息。
-
TRIMS[POOL]
- 设置 TRIMS[POOL],和 SPOOL 功能结合使用。
SET TRIMS[POOL] <OFF(默认值) | ON>
- 对于 SPOOL 文件,是否去除输出每行的结尾空格,默认为 OFF。
-
LOBCOMPLETE
- 设置 LOBCOMPLETE,是否从服务器中全部取出大字段数据。
SET LOBCOMPLETE <OFF(默认值) | ON>
- 对于大字段数据,是否从服务器全部取出,防止死锁的发生;与显示长度不同,即便是全部取出,也可以只显示一部分。
-
COLSEP
- 设置列之间的分割符。
SET COLSEP[text]
- 如果 text 包含空格或标点符号,请用单引号扩起来。默认为一个空格。
-
KEEPDATA
-
是否为数据对齐进行优化,或者保持数据的原始格式。
SET KEEPDATA <ON|OFF(默认值)>
-
OFF:表示为保证数据的对齐格式,DIsql 对服务器传回的字符串数据,将其中的换行符、TAB 都转换为空格。默认为 OFF。
-
ON:表示关闭对齐优化。
-
AUTORECONN
-
是否进行自动重新连接。
SET AUTORECONN <ON(默认值) | OFF>
-
是否进行自动重新连接,设置为 ON 时,使用上次连接的属性设置进行自动重连,默认为 ON。
-
NEST_COMMENT
- 是否支持多层注释嵌套。Disql 中支持注释,注释必须由起始符号“/* ”开始,由结束符号“*/”结束。
SET NEST_COMMENT <ON|OFF(默认值)>
- 参数说明:
- ON:是,支持多层注释。
- OFF:否,只支持一层注释。默认为 OFF。
-
NULL_ASNULL
- 在绑定参数输入时,是否将输入的 NULL 当做数据库的 null 处理。ON 是,OFF 否。默认为 OFF。
SET NULL_ASNULL<ON|OFF(默认值)>
-
参数说明:
- ON:是。
- OFF:否。默认为 OFF。
-
示例:
-
CMD_EXEC
- 是否执行 sql 脚本文件中“/”命令,ON 是,OFF 否。默认为 ON。
SET CMD_EXEC <ON (默认值)|OFF>
-
CHARDEL
- 设置字符串的限定符。
SET CHARDEL [text]
-
示例:
-
FLOAT_SHOW
-
设置 FLOAT、DOUBLE 类型数据按科学计数法显示的分界长度。
SET FLOAT_SHOW <0(默认值)| float_length>
-
当数据直接打印长度超过 float_length 时以科学计数法显示,否则直接显示。
-
示例:
-
CONSOLE_PRINT
- 控制台是否打印查询结果和执行时间,ON 是,OFF 否。默认为 ON。
SET CONSOLE_PRINT <ON(默认值)|OFF |OFF_WITH_TIME>
-
参数说明:
- ON:是,打印执行结果和执行时间。默认为 ON。
- OFF:否,既不打印执行结果,也不打印执行时间。
- OFF_WITH_TIME:否,不打印执行结果但是打印执行时间。
- OFF_WITH_FEEDBACK:否,只打印执行时间和影响行数。
-
示例:
- 关闭之后,不打印任何结果
-
SQLCODE
- 控制台是否打印 SQLCODE 返回值,ON 是,OFF 否。默认为 OFF。
SET SQLCODE <ON|OFF(默认值)>
-
示例:
-
SQL_LINESHOW
- 输入多行 SQL 语句时,是否打印 SQL 语句的行号,ON 是,OFF 否。默认为 ON。
SET SQL_LINESHOW <ON(默认值)|OFF>
-
示例:
-
NULL_SHOW
- 空数据是否显示为 NULL,ON 是,OFF 否。默认为 ON。
SET NULL_SHOW <ON(默认值)|OFF>
-
示例:
-
SQLPROMPT
- 设置 DIsql 命令行的前缀标识
SET SQLPROMPT <text>
-
为任意的字符串。 中可以包含 DEFINE 变量名。默认则 SQL> 为前缀。 -
示例:
-
ISQL_MODE
- 结果集打印方式。
SET ISQL_MODE <0(默认值)|1|2>
- 参数说明:
- 0:DM 数据库的打印方式。默认为 0。
- 1:兼容 ORACLE 的打印格式。
- 2:兼容 Greenplum 的打印格式。
- 3:兼容 MYSQL 的打印格式,支持在一行 SQL 语句末尾将“\G”或“\g”作为分号使用。其中“\g”和分号等价;“\G”表示结果集按列打印,可以将每个字段打印到单独的行。
-
WRAP
- 是否折行打印结果集,ON 是,OFF 否。默认为 ON。仅在 ISQL_MODE 为 1 时,该参数有效。
SET WRAP <ON(默认值)|OFF>
-
示例:设置 ISQL_MODE 为 1,LINESIZE 为 10
-
CTRL_INFO
- 设置 DIsql 的回显打印信息。
SET CTRL_INFO <0(默认值)|1|2|4|8>
- 参数说明:
- 0:没有特殊设置。默认为 0。
- 1:控制-E 不强制关闭行号、执行时间以及执行号等信息的展示。
- 2:控制 DIsql 的回显信息按 5 列打印,具体如下:
- 第 1 列:语句的 SQL 类型,如:DELETE、UPDATE、SELECT 等;
- 第 2 列:语句的执行结果,执行成功则为 0,执行失败则为错误码;
- 第 3 列:语句的影响行数,DDL 和 PLsql 类型语句的影响行数均默认为 0,仅 DELETE、 UPDATE、SELECT 类型语句存在具体的影响行数;
- 第 4 列:语句的执行时间;
- 第 5 列:语句执行失败时的错误信息,若语句执行成功,则不打印该列。
- 4:控制语句块多个结果集全部自动显示,不需要通过 more 命令显示结果集。
- 8:控制执行脚本文件时,不忽略 SQL 之间的空行。
-
RETRY_CONN
- 设置 DIsql 尝试自动重连的次数。
SET RETRY_CONN <0(默认值)|n>
-
RETRY_CONN_TIME
- 用于当 RETRY_CONN 为 n 时,设置 DIsql 自动重连的时间间隔。
SET RETRY_CONN_TIME <0(默认值)|n>
-
ROWS
- 设置结果集最大显示行数。
SET ROWS <0(默认值)|n>
- 结果集最多显示 n 行,设置为 0 表示不限制结果集最大显示行数。
-
EXPLAIN_MODE
- 设置 SQL 执行方式。
SET EXPLAIN_MODE < 0|1|2 >
-
参数说明:
- 0:默认值。正常执行 SQL 语句。
- 1:按照 EXPLAIN FOR 方式执行,即在 SQL 语句前自动拼接上 EXPLAIN FOR 之后再执行。
- 2:按 EXPLAIN 方式执行,即在 SQL 语句前自动拼接上 EXPLAIN 之后再执行。
-
示例:按照 EXPLAIN_MODE 为 2 的方式执行
-
PREFIX_STR
- 设置 SQL 语句拼接前缀,在待执行的 SQL 语句前拼上指定字符再发给服务器执行。
SET PREFIX_STR < 0| text >
- 参数说明:
- 0:默认值,不加前缀。
- text:SQL 语句的拼接前缀。前缀必须是注释的形式:/***xxx***/。其他形式将报错。
-
READ_ONLY
- 设置会话只读,默认为 OFF。
SET READ_ONLY <ON|OFF(默认值) >
-
-
SHOW命令查看环境变量
-
查看当前环境变量
-
语法:
SHOW <system_variable>{<system_variable>}
- <system_variable>:环境变量。
-
示例:
-
-
显示初始化参数
-
语法:
SHOW PARAMETER[S] [<parameter_name>]
- <parameter_name>:包含在初始化参数名中的字符串。
-
示例:
-
-
-
使用配置文件设置环境变量
- DIsql 在连接成功数据库时会自动运行两个配置文件 glogin.sql 和 login.sql。
- glogin.sql 文件中的设置永久生效,需要用户自行创建在DM_HOME/bin/disql_conf路径下
- glogin.sql 文件和 login.sql 文件的执行顺序如下:
- 默认在 $DM_HOME/bin/disql_conf 路径下查找 glogin.sql 文件并执行;
- 默认在当前工作目录下(注意不是 DIsql 工具所在的目录,而是启动 DIsql 时所在的目录)查找 login.sql 文件并执行,若未找到则执行步骤 3;
- 判断操作系统是否配置了 DM_SQLPATH 环境变量,如果配置了该变量则在对应路径下查找 login.sql 文件并执行。
-
-
DIsql常用命令
-
帮助HELP
-
DIsql 帮助命令,可以帮助用户查看其他命令的具体用法。概括为:
- 命令的标题
- 命令的文本描述
- 命令的简写(例如,AUTO 可以代替 AUTOCOMMIT)
- 可以向命令传递的强制参数和可选参数
-
语法:
HELP|? [topic]
- topic:命令名称或者命令名称的首字母,查询某一命令用法或者某一字母开头的所有命令用法。
-
示例:
-
-
输出文件SPOOL
-
将查询结果输出到指定文件。
-
语法:
SPOOL {<file> | OFF } <file>::= <file_path> [CRE[ATE]|REP[LACE]|APP[END]][NO_PRINT]
-
参数说明:
- <file_path>:指定文件的绝对路径
- CRE[ATE]:创建指定的文件,若指定的文件已存在,则报错,默认方式
- REP[LACE]:创建指定的文件,若指定的文件已存在,则替换它
- APP[END]:将输出内容追加到指定文件的末尾
- NO_PRINT:控制台不打印查询结果
- OFF:关闭 SPOOL 输出
注意:
只有SPOOL OFF之后,才能在输出文件中看到输出的内容。
-
-
-
切换到操作系统命令HOST
-
使用 HOST 命令可以不用退出 DIsql 就能执行操作系统命令。
-
语法(添加了HOST后面就可以跟cmd的命令了):
HOST[<command>]
-
示例:
-
-
获取对象结构信息DESCRIBE
-
获取表或视图、存储过程、函数、包、记录、类的结构描述。
-
语法:
DESC[RIBE] [<模式名>.]<对象名>
- 各对象获取的内容略有不同:
-
表或视图获取的内容包括列名,列数据类型,列是否可以取空值。
-
函数、过程、类获取的内容包括两类:
- 存储函数/过程名,类型(函数或过程),函数返回值类型;
- 参数名,参数数据类型、参数输入输出属性、参数默认值。
-
包获取的内容分为两类:
- 包内存储函数/过程名,类型(函数或过程),函数返回值类型;
- 包内参数名,参数数据类型、参数输入输出属性、参数默认值。
-
记录获取的内容为:参数名,参数数据类型,参数是否可以取空值。
-
注意
当仅声明了包或自定义类型中的过程或函数,但包还未创建包主体或自定义类型还未创建类型体时,对包或自定义类型使用 DESC 会报错,此时不能使用 DESC。
- 各对象获取的内容略有不同:
-
示例:获取表 sysgrants 的结构描述
-
-
管理本地变量DEFINT、COLUMN和UNDEFINT
定义本地变量的命令有 DEFINE 和 COLUMN。删除本地变量的命令是 UNDEFINE。
-
DEFINT
-
用来定义一个本地变量的替代变量,然后对该变量赋一个 CHAR 类型的值;或者输出变量的值和类型。
-
语法:
DEF[INE] [<VARIABLE=text>|< VARIABLE >]
- 参数说明:
- DEF[INE] VARIABLE = text:申明一个变量,如果该变量存在,则重新赋值,否则新生成一个变量,并进行赋值。
- DEF[INE] VARIABLE:如果该变量存在,则输出特定 VARIABLE 的值和类型,否则报错。
- DEF[INE]:输出 DIsql 中所有的变量的值和类型。
- 参数说明:
-
示例:
-
-
COLUMN
-
定义一个本地列或表达式。
-
语法:
COL[UMN] [<column | expr> [<option>]] <option> ::= NEW_VALUE variable | FOR[MAT] <format> <format> ::= An | an | <fmt>
- 参数说明:
- COL[UMN]:列举出所有的 COLUMN 变量信息。
- COL[UMN] column | expr:列举出某个 column 或 expr,如果存在,则输出信息,否则报错。
- COL[UMN] column | expr option:option 目前仅支持 NEW_VALUE 和 FORMAT。
- NEW_VALUE:表示该 column|expr 的值同时作为变量 variable 存在。但如果该变量未赋值,通过 DEFINE 查询时,不会显示该变量。查询结果的最后一个值赋给变量 variable。
- FOR[MAT]:表示该 column|expr 的列打印格式。
- 参数说明:
-
-
UNDEFINT
-
删除一个或多个本地变量,此变量可以是 DEFINE 定义生成的本地变量,也可以是 COLUMN 关联的本地变量。
-
语法:
UNDEF[INE] <变量子句> <变量子句>::=<变量名>{ <变量名>}
-
-
ACCEPT
-
从命令行读取内容,将其赋值给变量。
-
语法:
ACC[EPT] <变量名> [<变量类型>] [FOR[MAT] <format>] [DEF[AULT] <默认值>] [<前导字符串>] [HIDE] <变量类型>::= NUM[BER] | CHAR | DATE | BINARY_FLOAT | BINARY_DOUBLE <前导字符串>::= PROMPT <字符串值>| NOPR[OMPT]
- 参数说明:
- < 变量名 >:用于指定存储读取内容的变量名。最大长度为 30 个字符,如果变量不存在则新加一个变量。
- < 变量类型 >:变量的类型,支持 NUMBER、CHAR、DATE、FLOAT 和 DOUBLE。默认为 CHAR。
- FOR[MAT] *<*format>:指定输入内容的格式,如果输入内容不满足指定格式报错重新输入。
- DEF[AULT] < 默认值 >:指定变量的默认值。< 默认值 > 必须满足 FORAMT 格式,如果命令行没有输入内容,则给变量赋值 < 默认值 >。
- < 前导字符串 >:PROMPT 指定前导字符串。NOPR[OMPT]指定不用前导字符串。默认为不指定。
- HIDE:用于指定将输入内容隐藏。默认则不隐藏。
- 参数说明:
-
示例:
-
-
-
查看执行计划EXPLAIN
-
用 EXPLAIN 命令来查看查询语句的执行计划。
-
语法:
EXPLAIN <sql_clause>
-
示例:
-
-
设置异常处理方式WHENEVER
-
用 whenever 命令可以设置异常处理方式,继续执行或退出 DIsql。
-
语法:
WHENEVER SQLERROR CONTINUE [ COMMIT | ROLLBACK | NONE ] | EXIT [ SUCCESS | FAILURE | WARNING | n | <variable> | : <bindvariable> ] [ COMMIT | ROLLBACK ]
- n 和的返回值受限于操作系统,在不同平台下,会有所不同
-
-
查看下一个结果集MORE
-
当结果集过多,屏幕只能显示一个时,用户可以使用 MORE 命令切换到下一个结果集。
-
语法:
MORE | MR
-
-
显示SQL语句或块信息LIST
-
显示最近执行的 SQL 语句或者 PL/SQL 块信息。不显示 DIsql 命令。
-
语法:
L[IST] [n | n m | n * | n LAST | * | * n | * LAST | LAST] 或者;
- 参数说明:
- n ,m :数值 SQL 行号。
- *: 当前行号。
- LAST: 最后一行。
- 参数说明:
-
-
插入大对象数据
-
当插入语句中包含大对象数据文件时,使用 @。
-
语法:
@<插入语句>
- 大数据的插入值格式为:
@'path'
- 大数据的插入值格式为:
-
-
缓存清理CLEAR
-
清理指定操作本地缓存。
-
语法:
CL[EAR] <option> <option> ::= [COL[UMNS] | SQL | SCR[EEN] | BUFF[ER]]
- 参数说明:
- COL[UMNS]:清理所有的 COLUMN 变量信息。
- SQL:清理本地 SQL 缓存信息。
- SCR[EEN]:清理 DIsql 终端屏幕信息。
- BUFF[ER]:同 SQL 功能一样,清理本地 SQL 缓存信息。
- 参数说明:
-
-
-
在DIsql中使用脚本
-
编写脚本
-
一个简单的脚本例子,在文本中编写脚本并保存为 C:\test.sql,内容如下:
drop table t01; create table t01(c1 varchar(100), c2 varchar(100)); begin for i in 1..10 loop insert into t01 values('a'||i, 'b'||i); end loop; end; /
-
-
使用START命令运行脚本
-
语法:
<start>::=<`运行脚本>|<start 运行脚本>|<直接执行语句> <`运行脚本>::=`<file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}] <start 运行脚本>::=START <file_path> [<PARAMETER_VALUE>{ <PARAMETER_VALUE>}] <直接执行语句>::= -E "<SQL语句>{;<SQL语句>}"
- 参数说明:
- <file_path>:脚本的绝对路径。
- <PARAMETER_VALUE>:传递进入脚本的参数值。
注意
<运行脚本>中的符号位于键盘第二排左起第一个。如果在LINUX环境下使用<运行脚本>,则符号需要加\或’进行转义。例如:./disql SYSDBA/SYSDBA`/dev/test.sql
- 参数说明:
-
启动DIsql时,运行脚本
SQL>start C:\test.sql 或 SQL>`C:\test.sql
-
-
使用EDIT命令编写脚本
-
DIsql 中使用 EDIT 命令来编辑指定的脚本文件。
-
语法:
ED[IT][<file_name>]
- <file_name>:指定待编辑的脚本文件。如果指定文件不存在,则创建该文件。
-
-
在脚本中使用变量
-
DIsql 在命令中遇到替换变量时,用真实值去代替,相当于 c 语言中的宏定义。真实值来源于三个地方:
- 脚本参数带入
- 脚本中直接定义
- 用户动态输入
-
脚本带参数值
脚本带参数值,参数名必须是数字。
-
变量名是数字:在脚本中通过&n 来引用参数,n 为 1 表示为第一个参数,2 表示第二个参数,依次类推。
-
例:有表test,其建表和初始化数据如下:
create table test(id int) ; insert into test values(11) ; insert into test values(12) ; insert into test values(15) ;
-
脚本C:\test.sql如下:
select * from test where id = &1; select * from test where id = &2; select * from test where id = &3;
- 此时使用脚本时后面必须携带三个参数与变量一一对应
-
-
-
参数书写要求
- 因为参数是原样替换,因此如果 SQL 语句中字符串要求用单引号,那么定义的参数值也应该包含单引号;另外如果字符串中有特殊字符,需要使用双引号将整个字符串作为一个整体
- 如果参数值是数字,写法没有特殊要求。
- 如果参数值是字符串,应该用单引号扩起,如果字符串有空格,应该在单引号外面,再加上一个双引号扩起。
-
-
脚本中定义参数值
-
使用 DEFINE 命令定义变量值,格式:DEFINE 标识符 = 值。
-
举例:脚本C:\rtest.sql
define n=1 define s=DIsql select &n from dual; select '&s' from dual;
-
-
接收用户交互式输入参数值
- 需要的条件:
- 运行脚本时不带参数
- 脚本中不定义参数
- 需要的条件:
-
使用PROMPT命令传递信息
-
PROMPT 命令会在屏幕上输出一行信息。这非常有助于在存储脚本中向用户传送信息。
-
语法:
PROMPT <输出内容>
-
-
总结
- 本章主要是讲解DIsql工具的使用。DM数据库提供该工具用于命令行交互,不仅可以使用命令行方式查看相关配置信息,也可以直接执行SQL语句和操作系统命令,为用户也提供了方便(有些确实使用命令行习惯)