文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-02 13:47

关注

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

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

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

演示配置

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

一、上下文切换

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

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

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

1、Linux 主机配置 yum 源

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

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

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

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

2、安装 readline 依赖包

  1. yum install -y readline* 

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

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

上传安装包:

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

解压安装:

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

3、rlwrap 安装

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

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

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

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

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

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

4、配置环境变量

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

  1. ##配置oracle用户环境变量 
  2. cat <>/home/oracle/.bash_profile 
  3. alias sqlplus='rlwrap sqlplus' 
  4. alias rman='rlwrap rman' 
  5. alias lsnrctl='rlwrap lsnrctl' 
  6. alias asmcmd='rlwrap asmcmd' 
  7. alias adrci='rlwrap adrci' 
  8. alias ggsci='rlwrap ggsci' 
  9. alias dgmgrl='rlwrap dgmgrl' 
  10. EOF 
  11.  
  12. ##环境变量生效 
  13. exit 
  14. su - oracle 

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

二、美化输出格式 glogin.sql

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

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

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

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

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

2、配置 glogin.sql

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

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

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

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

  1. --查询表空间使用率 
  2. col TABLESPACE_NAME for a20 
  3. select tbs_used_info.tablespace_name, 
  4.        tbs_used_info.alloc_mb, 
  5.        tbs_used_info.used_mb, 
  6.        tbs_used_info.max_mb, 
  7.        tbs_used_info.free_of_max_mb, 
  8.        tbs_used_info.used_of_max || '%' used_of_max_pct 
  9.   from (select a.tablespace_name, 
  10.                round(a.bytes_alloc / 1024 / 1024) alloc_mb, 
  11.                round((a.bytes_alloc - nvl(b.bytes_free, 
  12.                                           0)) / 1024 / 1024) used_mb, 
  13.                round((a.bytes_alloc - nvl(b.bytes_free, 
  14.                                           0)) * 100 / a.maxbytes) used_of_max, 
  15.                round((a.maxbytes - a.bytes_alloc + nvl(b.bytes_free, 
  16.                                                        0)) / 1048576) free_of_max_mb, 
  17.                round(a.maxbytes / 1048576) max_mb 
  18.           from (select f.tablespace_name, 
  19.                        sum(f.bytes) bytes_alloc, 
  20.                        sum(decode(f.autoextensible, 
  21.                                   'YES'
  22.                                   f.maxbytes, 
  23.                                   'NO'
  24.                                   f.bytes)) maxbytes 
  25.                   from dba_data_files f 
  26.                  group by tablespace_name) a, 
  27.                (select f.tablespace_name, 
  28.                        sum(f.bytes) bytes_free 
  29.                   from dba_free_space f 
  30.                  group by tablespace_name) b 
  31.          where a.tablespace_name = b.tablespace_name(+)) tbs_used_info 
  32.  order by tbs_used_info.used_of_max desc
  33.  
  34. --查询备份 
  35. col status for a10 
  36. col input_type for a20 
  37. col INPUT_BYTES_DISPLAY for a10 
  38. col OUTPUT_BYTES_DISPLAY for a10  
  39. col TIME_TAKEN_DISPLAY for a10 
  40.  
  41. select input_type, 
  42.        status, 
  43.        to_char(start_time, 
  44.                'yyyy-mm-dd hh24:mi:ss'), 
  45.        to_char(end_time, 
  46.                'yyyy-mm-dd hh24:mi:ss'), 
  47.        input_bytes_display, 
  48.        output_bytes_display, 
  49.        time_taken_display, 
  50.        COMPRESSION_RATIO 
  51.   from v$rman_backup_job_details 
  52.  where start_time > date '2021-07-01' 
  53.  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

 

来源:Lucifer三思而后行内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯