Ubuntu环境下sqlplus实用技巧汇总
Ubuntu安装Oracle后,需将Oracle bin目录下的sqlplus复制到系统路径(如/bin),并赋予执行权限:
cp /opt/oracle/app/oracle/product/11.2.0/dbhome_1/bin/sqlplus /bin # 路径根据实际安装位置调整
chmod 777 /bin/sqlplus # 允许所有用户执行
若仍提示“command not found”,需检查Oracle环境变量(如ORACLE_HOME、ORACLE_SID)是否配置正确。
使用-S参数可实现无提示登录,避免密码等敏感信息暴露在命令行历史中:
sqlplus -S /nolog <<EOF # -S表示静默模式
connect sys/sys as sysdba # 替换为实际用户名/密码
startup; # 启动数据库(根据需求调整)
exit;
EOF
该方式常用于编写启动/关闭数据库的脚本。
通过&或&&定义替换变量,实现动态传入参数(如表名、条件):
&变量名:单次有效(当前会话结束后失效),执行时会提示输入值;&&变量名:多次有效(直到会话结束或用undef取消),避免重复输入。-- 单次替换(执行时提示输入部门编号)
SELECT * FROM employees WHERE department_id = &dept_id;
-- 多次替换(无需重复输入部门编号)
SELECT * FROM employees WHERE department_id = &&dept_id;
注意:特殊字符(如/、*)需用引号包裹,避免解析错误。
通过SET、COLUMN命令调整输出格式,解决默认结果混乱问题:
SET LINESIZE 100(每行显示100个字符,默认80);SET PAGESIZE 20(每页显示20行,默认14);COLUMN column_name FORMAT A20(将column_name列设置为20字符宽度,A表示字符类型);SET PAGING OFF(取消分页,直接显示所有结果)。SET LINESIZE 120
SET PAGESIZE 50
COLUMN employee_name FORMAT A20
COLUMN salary FORMAT 99999.99
SELECT employee_name, salary FROM employees;
通过EOF将sqlplus命令嵌入Shell脚本,实现批量执行SQL或数据库管理任务:
#!/bin/bash
sqlplus -S scott/tiger@orcl <<EOF
SELECT * FROM departments;
EXIT;
EOF
#!/bin/bash
sqlplus -S /nolog <<EOF
CONNECT sys/sys as sysdba
STARTUP; # 或 SHUTDOWN IMMEDIATE;
EXIT;
EOF
sqlplus的缓冲区仅保存最后一条SQL语句,可通过以下命令操作:
EDIT(调用系统默认编辑器,如vim,修改后保存退出自动执行);/(无需重新输入,直接执行缓冲区中的语句);SAVE filename.sql(将缓冲区内容保存到指定文件);GET filename.sql(将文件内容加载到缓冲区,便于修改后执行)。使用SPOOL命令将查询结果保存到文件,便于后续分析:
SPOOL filename.txt(指定输出文件路径);SPOOL OFF(结束保存,文件会自动关闭)。SPOOL /tmp/employees.txt
SELECT * FROM employees;
SPOOL OFF
通过内置SQL语句快速获取数据库信息:
SELECT * FROM V$VERSION;;SELECT USER FROM DUAL;;SELECT * FROM ALL_TABLES;(需有相应权限);DESCRIBE table_name(简写DESC table_name)。COMMIT(保存所有修改到数据库);ROLLBACK(撤销当前未提交的所有修改);SAVEPOINT savepoint_name(标记事务中的某个点,便于部分回滚);ROLLBACK TO savepoint_name(撤销保存点之后的修改)。安装rlwrap工具,支持上下文切换(如Ctrl+P查看上一条命令、Ctrl+N查看下一条命令)和命令行编辑(如Ctrl+A跳到行首、Ctrl+E跳到行尾):
sudo apt install rlwrap # Ubuntu安装rlwrap
rlwrap sqlplus username/password@orcl # 使用rlwrap启动sqlplus
该工具可大幅提升sqlplus的命令行操作体验。