oracle小技巧手把手教你玩转sql*plus命令行,工作效率提升200%(代码片段)

Lucifer三思而后行 Lucifer三思而后行     2022-12-10     415

关键词:

在这里插入图片描述

作者简介

  • 作者:LuciferLiu,中国DBA联盟(ACDU)成员。
  • 目前主要从事Oracle DBA工作,曾从事 Oracle 数据库开发工作,主要服务于生产制造,汽车金融等行业。
  • 现拥有Oracle OCP,OceanBase OBCA认证,擅长Oracle数据库运维开发,备份恢复,安装迁移,Linux自动化运维脚本编写等。

前言

  • 经常使用Oracle数据库的朋友,应该对SQL*Plus这个命令行工具不会陌生。每天工作都离不开它,但是这个工具有些缺点:
  • Linux系统下SQL*PLUS无法上下文查看历史命令,敲错命令需要按住Ctrl才能删除
  • SQL查询,输出结果格式错乱,每次都需要手动SET调整
  • 当前会话不显示实例名和登录用户,提示不人性化

注意:以上问题均为SQLPlus默认配置下。

那么问题来了,这些都可以解决吗?当然,我写这篇就是为了介绍如何优化SQL*Plus命令行嘛!

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

  • 上下文切换:rlwrap + readline
  • 优化输出格式:glogin.sql

SQL*Plus优化

1 上下文切换 rlwrap

  • 相信大家在Linux主机使用SQL*Plus命令行工具时,经常会遇到命令输错不好回退,或者刚输入的命令想再次执行,无法通过上下翻页切换的情况。
  • 上面的情况曾经也一直困惑着我,后来我发现了解决方案,这就来分享给大家,希望能帮助到你。通过 rlwrap + readline 一起使用,可以完美解决这个问题,接下来,我就来演示一下如何配置使用。

1、Linux主机配置yum源

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

在这里插入图片描述

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

在这里插入图片描述
在这里插入图片描述
通过以上步骤,我们已经成功挂载系统镜像,可以开始安装redline。

2、安装readline依赖包

yum install -y readline*
  • 如果没有系统ISO镜像源,也可以直接在上直接下载readline安装包进行安装。

下载readline包:

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

在这里插入图片描述
上传安装包:

scp readline-6.2.tar.gz root@10.211.55.110:/soft

在这里插入图片描述
解压安装:

tar -zxvf readline-6.2.tar.gz
cd readline-6.2
./configure && make && make install

3、rlwrap安装

tar -xvf rlwrap-0.42.tar.gz
 cd rlwrap-0.42
./configure && make && make install

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

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

  • 未使用rlwrap时,无法回退和切换上下文:
    在这里插入图片描述
  • 使用rlwrap时,可任意切换回退:
    在这里插入图片描述
    通过上述演示,已经可以轻松做到命令输错无需按住Ctrl键回退和上下文历史命令切换,可以大大提升工作效率。

4、配置环境变量

  • 为避免每次都需要输入rlwrap来调用命令,我们通过alias别名来配置环境变量实现。
##配置oracle用户环境变量
cat <<EOF>>/home/oracle/.bash_profile
alias sqlplus='rlwrap sqlplus'
alias rman='rlwrap rman'
alias lsnrctl='rlwrap lsnrctl'
alias asmcmd='rlwrap asmcmd'
alias adrci='rlwrap adrci'
alias ggsci='rlwrap ggsci'
alias dgmgrl='rlwrap dgmgrl'
EOF

##环境变量生效
exit
su - oracle

在这里插入图片描述
至此,rlwrap工具就配置完成啦!

2 优化输出格式 glogin.sql

SQL*Plus 在启动时会自动运行脚本:glogin.sql

  • glogin.sql 存放在目录$ORACLE_HOME/sqlplus/admin/下。
  • 每当用户启动 SQLPlus 会话并成功建立 Oracle 数据库连接时,SQLPlus 就会执行此脚本。
  • 该脚本可以写入在 SQL*Plus 脚本中的任何内容,例如系统变量设置或 DBA 想要实现的其他全局设置。

1、未做配置时,默认如下:
在这里插入图片描述
此时,我登录SQL*PLUS并执行sql查询,看一下输出结果格式。

演示:未配置glogin.sql时,查询结果输出:
在这里插入图片描述
可以看到,查询结果格式很乱,而且连进去之后也看不到当前实例名和用户名。

2、配置glogin.sql

cat <<EOF>>$ORACLE_HOME/sqlplus/admin/glogin.sql
--设置编辑器用vi打开,windows客户端可以换成NotePad
define _editor=vi
--设置dbms_output输出缓冲区大小
set serveroutput on size 1000000
--设置输出格式
set long 200
set linesize 500
set pagesize 9999
--去除重定向输出每行拖尾空格
set trimspool on
--设置name列长
col Name format a80
--查询当前实例名
set termout off
col global_name new_value gname
define gname=idle
column global_name new_value gname
select lower(user) || '@' || substr( global_name, 1, decode( dot, 0,
length(global_name), dot-1) ) global_name
  from (select global_name, instr(global_name,'.') dot from global_name );
set sqlprompt '&gname _DATE> '
--设置session时间格式
ALTER SESSION SET nls_date_format = 'HH24:MI:SS';
set termout on
EOF

在这里插入图片描述
演示:配置完glogin.sql时,查询结果输出:
在这里插入图片描述
通过以上配置,SQL*PLUS连接后,明显输出格式更加好看,显示更加人性化。具体配置可根据个人常用进行配置,比如可以将查询表空间使用率配置进去,每次打开都可以看到表空间使用率,防止数据文件撑爆。

--查询表空间使用率
col TABLESPACE_NAME for a20
select tbs_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_pct
  from (select a.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_mb
          from (select f.tablespace_name,
                       sum(f.bytes) bytes_alloc,
                       sum(decode(f.autoextensible,
                                  'YES',
                                  f.maxbytes,
                                  'NO',
                                  f.bytes)) maxbytes
                  from dba_data_files f
                 group by tablespace_name) a,
               (select f.tablespace_name,
                       sum(f.bytes) bytes_free
                  from dba_free_space f
                 group by tablespace_name) b
         where a.tablespace_name = b.tablespace_name(+)) tbs_used_info
 order by tbs_used_info.used_of_max desc;

--查询备份
col status for a10
col input_type for a20
col INPUT_BYTES_DISPLAY for a10
col OUTPUT_BYTES_DISPLAY for a10 
col TIME_TAKEN_DISPLAY for a10

select input_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_RATIO
  from v$rman_backup_job_details
 where start_time > date '2021-07-01'
 order by 3 desc;

在这里插入图片描述
至此,glogin.sql已经配置完成,欢迎食用👏🏻。

写在最后

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

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

参考官方文档:

Configuring SQL*Plus:https://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_two.htm#SQPUG012


本次分享到此结束啦~

如果觉得文章对你有帮助,点赞、收藏、关注、评论,一键四连支持,你的支持就是我创作最大的动力。

手把手教你玩转git

文章已托管到GitHub,大家可以去GitHub查看下载!并搜索关注微信公众号码出Offer领取各种学习资料!在这里插入图片描述Git应用一、初识Git1.1Git的简史同生活中的许多伟大事物一样,Git诞生于一个极富纷争大举创新的年代。Linus... 查看详情

手把手教你玩转12306验证码的秘密!

12306相信对很多小伙伴都不陌生,假如问你对这个网站的印象的时候,你不是会立即想起那个坑爹的验证码,而正是这个验证码,也一时间成为小伙伴们讨论的话题,今天思梦PHP就给大家带来他的实现办法,纯属技术交流,有什... 查看详情

手把手教你玩转git分布式版本控制系统!

目录 Git诞生历史 Git环境准备Git安装部署Git常用命令Git基本操作Git管理分支结构Git管理标签GitLab安装部署GitHub托管服务Git客户端工具 1Git诞生历史 我想大家还记得Linustorvalds在1991年时发布了Linux操作系统吧,从那以... 查看详情

手把手教你玩转阿里云双11拼团活动

各位新老用户们,如果您已经开了团,但是还不知道怎么玩?小编告诉来告诉你!首先,进入活动主页面,点击【我要开团】,选择您想要购买的云产品进行开团!如果您只想开团不想购买,也可以~ 您开团后将享受以下福... 查看详情

手把手教你玩转极验滑块js逆向系列:滑块底层图片还原(代码片段)

难道向上攀登的路,不比站在顶峰更让人沸腾吗?哈喽,好久不见呐,距离上次b站登录那篇爬虫博客后,小夜斗又去学习java知识辽,但是最近在研究js逆向,想把小夜斗最近学习到的一点点经验分享大... 查看详情

手把手教你玩转极验滑块js逆向系列:滑块底层图片还原(代码片段)

难道向上攀登的路,不比站在顶峰更让人沸腾吗?哈喽,好久不见呐,距离上次b站登录那篇爬虫博客后,小夜斗又去学习java知识辽,但是最近在研究js逆向,想把小夜斗最近学习到的一点点经验分享大... 查看详情

手把手教你玩转极验滑块js逆向系列:滑块底层图片还原(代码片段)

难道向上攀登的路,不比站在顶峰更让人沸腾吗?哈喽,好久不见呐,距离上次b站登录那篇爬虫博客后,小夜斗又去学习java知识辽,但是最近在研究js逆向,想把小夜斗最近学习到的一点点经验分享大... 查看详情

手把手教你玩转canvas

参考技术A之前用过echarts等图表插件,首次尝试自己写原生canvas,还以为多难多复杂的东西,深入了解之后发现就是数学中的几何图形嘛~欢迎大家和我一起来入坑!<canvas>看起来和<img>标签一样,只是<canvas>只有两个... 查看详情

手把手教你玩转物业故障报修系统

目前新一代智能故障报修已深入物业,告别了到处找人的故障报修方式,我们可以感觉到,物联网的浪潮已经来临,小区物业已实现扫码进出大门,更有高档小区完成了刷脸开门。今天我们来谈谈物业的智能故障报修管理系统—... 查看详情

新生代工程师手把手教你玩转alluxio+ml(上篇)

活动回顾越来越多的公司在其机器学习平台中运用开源系统Alluxio加速训练任务的数据读取。为了帮助用户在机器学习场景下熟悉和部署Alluxio集群,更快的进行性能测试、分析以及调优,我们邀请到Alluxio团队的核心开发... 查看详情

手把手带你玩转spark机器学习-使用spark进行文本处理(代码片段)

系列文章目录手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转Spark机器学... 查看详情

手把手带你玩转spark机器学习-使用spark构建分类模型

系列文章目录手把手带你玩转Spark机器学习-专栏介绍手把手带你玩转Spark机器学习-问题汇总[持续更新]手把手带你玩转Spark机器学习-Spark的安装及使用手把手带你玩转Spark机器学习-使用Spark进行数据处理和数据转换手把手带你玩转... 查看详情

教你玩转iphone超实用的3dtouch功能!

...系统不够人性化,现在先给大家推荐一波三维触控的使用技巧!三维触控(3DTouch)仅iPhone6s或以上机型支持三维触控(3DTouch),开启功能:设置→通用→辅助功能→三维触控,然后设置好合适自己的灵敏度(按压力度) 快... 查看详情

手把手教你玩转excel数据透视表

1. 什么是数据透视表数据透视表是一种可以快速汇总、分析大量数据表格的交互式分析工具。使用数据透视表可以按照数据表格的不同字段从多个角度进行透视,并建立交叉表格,用以查看数据表格不同层面的汇总信息... 查看详情

新生代工程师手把手教你玩转alluxio+ml(下篇)

Part1AlluxioPOSIXAPI自测性能使用AlluxioPOSIX读文件速度能到多少?和从云上读取数据相比,使用AlluxioPOSIX接口:更快吗?快多少?上篇中提到了很多Alluxio为了加速读取数据做的各种各样的优化,那么对于用户来... 查看详情

ios教你玩转uitableviewcontroller和tableview

iphone和Ipad开发中UITableViewController和TableView应该是用得比較多得控件。可是你是会由于写这些控件写得多了而厌烦。全部怎么让这个控件一直能用。怎么让这个控件写起来简单。是非常必须。特别是UITableViewController把dataSouce的业... 查看详情

两句命令教你玩转《黑客帝国》中的“代码雨”

1在系统中安装cmatrix$sudo apt-getupdate;sudoapt-getinstallcmatrix2执行命令$cmatrix 查看详情

手把手教你玩转极验滑块js逆向系列:滑块底层图片还原(代码片段)

难道向上攀登的路,不比站在顶峰更让人沸腾吗?哈喽,好久不见呐,距离上次b站登录那篇爬虫博客后,小夜斗又去学习java知识辽,但是最近在研究js逆向,想把小夜斗最近学习到的一点点经验分享大... 查看详情