教你玩转 sqlplus,工作效率提升 200%

简介: 经常使用 Oracle 数据库的朋友,应该对 sqlplus 这个命令行工具不会陌生。

前言


经常使用 Oracle 数据库的朋友,应该对 sqlplus 这个命令行工具不会陌生。基本上每天工作都离不开它,但是这个工具有些不太好用:


  • Linux 系统下 sqlplus 无法上下文切换查看编辑历史命令,敲错命令需要按住 CTRL 键才能删除


  • SQL 查询,输出结果格式错乱,每次都需要手动 SETCOL 调整列宽


  • 当前会话不显示实例名和登录用户,容易误操作用户,用户信息显示不够明显


📢 注意: 以上均为 sqlplus 默认配置下存在的问题。


那么问题来了,这些都可以解决吗?


🎉 当然,我写这篇就是为了介绍如何优化 sqlplus 命令行嘛!且听我慢慢道来哉~


演示配置


首先介绍下,主要分两个部分:


  • 上下文切换:rlwrap + readline


  • 美化输出格式:glogin.sql


1、上下文切换


相信大家在 Linux 主机使用 sqlplus 命令行工具时,经常会遇到命令输错不好回退,或者刚输入的命令想再次执行,无法通过键盘上下翻看的情况。


上面的情况曾经也一直困惑着我,后来经过研究,我发现了解决方案!这就来分享给大家,希望也能帮助到你。


通过 rlwrap + readline 配合使用,可以完美解决这个问题,接下来,我就来演示一下如何配置使用。


1、Linux 主机配置 yum 源


由于需要使用 yum 安装 readline ,下面配置一下:


##查看系统版本cat/etc/system-release##上传对应主机版本iso文件scprhel-server-7.9-x86_64-dvd.isoroot@10.211.55.110:/soft


1.png


##挂载系统iso镜像源mount-oloop/soft/rhel-server-7.9-x86_64-dvd.iso/mnt##配置yum镜像源mv/etc/yum.repos.d/* /tmp/echo "[local]" >> /etc/yum.repos.d/local.repoecho "name = local" >> /etc/yum.repos.d/local.repoecho "baseurl = file:///mnt/" >> /etc/yum.repos.d/local.repoecho "enabled = 1" >> /etc/yum.repos.d/local.repoecho "gpgcheck = 0" >> /etc/yum.repos.d/local.repo


2.png


3.png


通过以上步骤,我们已经成功挂载系统镜像,可以开始安装 redline


2、安装 readline 依赖包


yuminstall-yreadline*


如果没有系统 ISO 镜像源,也可以直接在网上直接下载 readline 安装包进行安装:


wget-cftp://ftp.gnu.org/gnu/readline/readline-6.2.tar.gz


4.png


上传安装包:


scpreadline-6.2.tar.gzroot@10.211.55.110:/soft


5.png


解压安装:


tar-zxvfreadline-6.2.tar.gzcdreadline-6.2./configure&&make&&makeinstall


3、rlwrap 安装


tar-xvfrlwrap-0.42.tar.gzcdrlwrap-0.42./configure&&make&&makeinstall


下载地址:https://github.com/hanslub42/rlwrap/releases/tag/v0.45.2


📢 注意: 由于我使用的 macOS 的终端连接可以切换回退,所以无法演示,以下使用 XShell 来进行演示。


未使用 rlwrap 时,无法回退和切换上下文:


6.gif


使用 rlwrap 时,可任意切换回退:


7.gif


通过上述演示,已经可以轻松做到命令输错无需按住 CTRL 键回退和上下文历史命令切换,可以大大提升工作效率。


4、配置环境变量


为避免每次都需要输入 rlwrap 来调用命令,我们通过 alias 别名来配置环境变量实现。


##配置oracle用户环境变量cat<<EOF>>/home/oracle/.bash_profilealiassqlplus='rlwrap sqlplus'aliasrman='rlwrap rman'aliaslsnrctl='rlwrap lsnrctl'aliasasmcmd='rlwrap asmcmd'aliasadrci='rlwrap adrci'aliasggsci='rlwrap ggsci'aliasdgmgrl='rlwrap dgmgrl'EOF##环境变量生效exitsu-oracle


8.gif


至此,rlwrap 工具就配置完成啦!


2、美化输出格式 glogin.sql


sqlplus 在启动时会自动运行脚本:glogin.sql


  • glogin.sql 存放在目录 $ORACLE_HOME/sqlplus/admin/


  • 每当用户启动 sqlplus 会话并成功建立 Oracle 数据库连接时,sqlplus 就会执行此脚本


  • 该脚本可以写入在 sqlplus 脚本中的任何内容,例如系统变量设置或 DBA 想要实现的其他全局设置


1、未做配置时,默认如下:


9.png



此时,我登录SQL*PLUS并执行sql查询,看一下输出结果格式。


未配置 glogin.sql 时,查询结果输出:


10.png


可以看到,查询结果格式很乱,而且连进去之后也看不到当前实例名和用户名。


2、配置 glogin.sql


cat<<EOF>>$ORACLE_HOME/sqlplus/admin/glogin.sql--设置编辑器用vi打开,windows客户端可以换成NotePaddefine_editor=vi--设置dbms_output输出缓冲区大小setserveroutputonsize1000000--设置输出格式setlong200setlinesize500setpagesize9999--去除重定向输出每行拖尾空格settrimspoolon--设置name列长colNameformata80--查询当前实例名settermoutoffcolglobal_namenew_valuegnamedefinegname=idlecolumnglobal_namenew_valuegnameselectlower(user) ||'@'||substr( global_name, 1, decode( dot, 0,
length(global_name), dot-1) ) global_namefrom (selectglobal_name, instr(global_name,'.') dotfromglobal_name );
setsqlprompt'&gname _DATE> '--设置session时间格式ALTERSESSIONSETnls_date_format='HH24:MI:SS';
settermoutonEOF


11.png


配置完 glogin.sql 后,查询结果输出:


12.png


通过以上配置,sqlplus 连接后,明显输出格式更加好看,显示更加人性化。

具体配置可根据个人常用进行配置,比如可以将查询表空间使用率配置进去,每次打开都可以看到表空间使用率,防止数据文件撑爆。


--查询表空间使用率colTABLESPACE_NAMEfora20selecttbs_used_info.tablespace_name,
tbs_used_info.alloc_mb,
tbs_used_info.used_mb,
tbs_used_info.max_mb,
tbs_used_info.free_of_max_mb,
tbs_used_info.used_of_max||'%'used_of_max_pctfrom (selecta.tablespace_name,
round(a.bytes_alloc/1024/1024) alloc_mb,
round((a.bytes_alloc-nvl(b.bytes_free,
0)) /1024/1024) used_mb,
round((a.bytes_alloc-nvl(b.bytes_free,
0)) *100/a.maxbytes) used_of_max,
round((a.maxbytes-a.bytes_alloc+nvl(b.bytes_free,
0)) /1048576) free_of_max_mb,
round(a.maxbytes/1048576) max_mbfrom (selectf.tablespace_name,
sum(f.bytes) bytes_alloc,
sum(decode(f.autoextensible,
'YES',
f.maxbytes,
'NO',
f.bytes)) maxbytesfromdba_data_filesfgroupbytablespace_name) a,
               (selectf.tablespace_name,
sum(f.bytes) bytes_freefromdba_free_spacefgroupbytablespace_name) bwherea.tablespace_name=b.tablespace_name(+)) tbs_used_infoorderbytbs_used_info.used_of_maxdesc;
--查询备份colstatusfora10colinput_typefora20colINPUT_BYTES_DISPLAYfora10colOUTPUT_BYTES_DISPLAYfora10colTIME_TAKEN_DISPLAYfora10selectinput_type,
status,
to_char(start_time,
'yyyy-mm-dd hh24:mi:ss'),
to_char(end_time,
'yyyy-mm-dd hh24:mi:ss'),
input_bytes_display,
output_bytes_display,
time_taken_display,
COMPRESSION_RATIOfromv$rman_backup_job_detailswherestart_time>date'2021-07-01'orderby3desc;


13.png


至此,glogin.sql 已经配置完成,欢迎食用👏🏻。


写在最后


glogin.sql 需要谨慎配置,没有理解的命令尽量不要写入!


大名鼎鼎的比特币勒索病毒,有一种方式就是通过 glogin.sql 来进行注入。

相关文章
|
存储 SQL Oracle
Oracle使用expdp/impdp实现全库导入导出的整体流程
Oracle的全库导入,首先一点必须先创建数据库,创建了数据库,才能往该数据库导入所有数据。相对来说,使用Oracle进行数据导入导出还很有些“麻烦”的,大多数资料上来就是......
12544 0
Oracle使用expdp/impdp实现全库导入导出的整体流程
|
SQL Oracle 关系型数据库
【Bug记录】Oracle中小数点前面的0不显示的问题
【Bug记录】Oracle中小数点前面的0不显示的问题
|
3月前
|
NoSQL Linux 开发工具
Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)
本文介绍了yum 包管理工具、Vim 编辑器、gcc/g++ 编译器、gdb 调试器、编译原理及 Makefile 的使用,同时还配备了如何使用,以及图解。旨在帮助读者更好地理解和应用这些工具与技术。
166 0
|
11月前
|
Linux Docker 容器
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
本篇博客重在讲解Centos安装docker,经博主多次在不同服务器上测试,极其的稳定,尤其是阿里的服务器,一路复制命令畅通无阻。
18401 5
Centos安装docker(linux安装docker)——超详细小白可操作手把手教程,包好用!!!
|
数据可视化 关系型数据库 MySQL
【MySQL】MySQL8.0 创建用户及授权 - 看这篇就足够了
本文介绍了在MySQL 8.0+版本中创建和管理用户的详细步骤,包括通过命令行进入MySQL、创建数据库、用户及授权等操作,并提供了具体命令示例。适合初学者参考学习,帮助实现系统的权限管理和安全控制。
6165 3
【MySQL】MySQL8.0 创建用户及授权 - 看这篇就足够了
|
11月前
|
Unix Linux iOS开发
【换行符】Windows、Unix、Mac不同操作系统的回车符\r和换行符\n
【换行符】Windows、Unix、Mac不同操作系统的回车符\r和换行符\n
|
存储 开发者 Docker
|
JavaScript 前端开发 Java
正则表达式深度解析:匹配制表符
【4月更文挑战第2天】
1065 2
正则表达式深度解析:匹配制表符
|
JSON 安全 JavaScript
Java一分钟之-JSON处理:Gson与Jackson库
本文对比介绍了Java中常用的两个JSON库Gson和Jackson。Gson以其简洁易用和自动序列化/反序列化功能受到青睐,而Jackson则以优异性能和丰富功能(如字段忽略、日期格式化)著称。文中通过代码示例展示了两者的基本用法,并讨论了常见问题及解决策略,包括时间格式处理、循环引用和类型匹配。在实际应用中,应根据性能需求、安全性和版本兼容性选择合适的库,并遵循最佳实践。
436 0