本文于 56 天前发布,最后更新于 2 天前
一、前言
在 Linux 操作系统下使用 shell 脚本调用 disql 执行 SQL 或 SQL 脚本,是我们使用数据库一定会遇到的问题。有时需要直接执行 SQL,有时需要执行 SQL 脚本,有时可以从 dmdba 用户调用,有时必须从 root 用户调用,总之,具体的情况不尽相同。本文就来详细介绍一下这些不同方式的具体方法。
二、详细教程
2.1 dmdba 下操作
2.1.1 disql 直接执行 SQL
disql / as sysdba -e "select * from v$instance;"
注意:“$” 需要进行转义
2.1.2 disql 执行 SQL 脚本
disql / as sysdba \`/home/dmdba/select.sql
注意:脚本中要加上 exit; 和 /。并且以 SQL 脚本的方式执行时 “$” 不需要转义,例如:
[dmdba@shine ~]$ cat select.sql select * from v$instance; exit; /
2.2 root 用户下操作
2.2.1 disql 直接执行 SQL
su - dmdba -c "disql / as sysdba -e \"select * from v\\\$instance;\""
注意:从 root 直接调用的话,SQL 中的 “$” 需要转义,同时转义符 “\” 本身也需要转义(所以加三个 “\”)。
2.2.2 disql 执行 SQL 脚本
su - dmdba -c "disql / as sysdba \\\`/home/dmdba/select.sql"
注意:同上,从 root 直接调用的话,“\`” 同时需要转义,即 “\\\`”。
2.2.3 切换 dmdba 用户执行 shell 脚本
su - dmdba -s /bin/bash select.sh
注意:select.sh 要放到 /home/dmdba 目录下,内容如下:
disql / as sysdba -e "select * from v$instance;"
脚本内容即 2.1.1 的命令。
三、进阶教程
有时我们在调用 disql 执行 SQL 时需要将内容输出到文件并保存,那么就需要用到如下的功能。
(1)重定向到文件
只需要在命令后边加上 > your_file.txt。
(2)隐藏 disql 连接数据库时的输出内容
disql -S
注意:disql 的 - S 参数是隐藏标识符,需要在登录之前配置,所以 - S 参数要放到 /as sysdba 之前,例如:disql -S /as sysdba。【disql -S /@localhost:5235 as sysdba】
附录 disql 常用环境变量
用 SET 命令设置环境变量,格式:set [变量名称] on|off
变量名称 | 属性 | 用途 |
AUTO[COMMIT] | ON|OFF (缺省值) | 设置自动提交 |
DEFINE | c (默认的变量前缀是 &)|ON (缺省 值)|OFF | 定义本地变量 |
ECHO | ON (缺省值)|OFF | 显示脚本中正在执行的 SQL 语句 |
FEED[BACK] | 6 (缺省值)|n|ON|OFF | 显示当前 SQL 语句查询或修改的行数 |
HEA[DING] | ON (缺省值)|OFF | 显示列标题 |
LINESHOW | ON (缺省值)|OFF | 显示行号 |
PAGES[IZE] | SET PAGES [IZE] <14(缺省值)|n> | 设置一页有多少行数。 |
TIMING | ON (缺省值)|OFF | 显示每个 SQL 语句花费的执行时间 |
LONG | 800 (缺省值)|n | 设置大字段类型显示的最大字节数 |
LINESIZE | screem_length (缺省值,屏幕宽度)|n | 设置屏幕上一行显示宽度 |
SERVEROUT[PUT] |
ON | OFF (缺省值) [SIZE 20000 (缺省值)|n] [FOR[MAT] WRA[PPED] | WOR [D_WRAPPED](缺省值) | TRU[NCATED]] |
在块中有打印信息时,是否打印,及打印的格式 |
TRIMS[POOL] | OFF (缺省值)|ON | 设置 spool 文件中每行的结尾空格 |
COLSEP | text | 设置列之间的分割符。缺省为一个空格 |