Performance & Troubleshooting scripts (TPT) for Oracle (二)之rlwrap工具

1.rlwrap工具的下载及安装

rlwrap工具的下载及安装方法可以参考

rlwrap for Command Line History and Editing in SQL*Plus and RMAN on Linux

2.rlwrap工具的参数说明

通过上述步骤安装好rlwrap工具以后,只能实现命令历史记录的上下翻找功能,而无法实现如下几个功能

  • 命令历史记录的去重功能

  • SQL语句中的关键字自动补全功能

  • 文件目录的自动补全功能

要实现上述三个功能,就需要增加额外的命令行参数来实现,具体参数及描述如下

-D2:此参数可以实现命令历史记录的去重功能,在SQL PLUS中输入n次select * from dual;语句并多次执行之后,在shell ~/.sqlplus_history文件中只保存一条记录,这样可以有效的压缩sqlplus历史文件的大小

-c: 此参数可以实现目录及文件路径的自动补全功能,在SQL PLUS中输入shell ! vi /etc/sec命令后,可以通过tab键实现路径补全功能

-i:此参数可以实现在命令行关键字自动补全功能时,忽略大小写。但在文件路径的自动补全中,仍然在大小写区分 的。

-f:此参数后面跟一个关键字补全列表文件,可以在SQL PLUS中实现关键字的查找补全功能。

根据上述参数的含义,我们可以新建一个alias到shell的配置文件中,如下所示

alias sl='rlwrap -D2 -irc -b'\''"@(){}[],+=&^%#;|\'\'' -f ~/work/oracle/tpt/setup/wordfile_11gR2.txt sqlplus sys/oracle@linux01/lin11g as sysdba'

这样就可以实现上面所说的那些功能了。

3. 关键字补全列表文件的构建

大部分人员认为只要在SQL PLUS文件中实现select、update、delete、insert、from等几个少量的关键字的自动补全功能就已经很了不起来,可以满足需求,那还要构建关键字补全列表作什么呢?这里的构建不是简单的几个关键字而已,我还想把数据库表名、数据库关键字列表、数据库包名.函数名、字段名、数据库参数等等都要包含进去,要实现这样的构建可以通过spool filename + sql语句来实现,具体的sql脚本为wordfile_11gR2.sqlwordfile_12cR1.sql。详细的sql语句如下

set lines 300 trimspool on pages 0 head off feedback off termout off

SELECT DISTINCT name FROM (
    select lower(keyword) name from v$reserved_words union all
    select upper(table_name) from dict union all
    select upper(column_name) from dict_columns union all
    -- select object_name from dba_objects union all
    select upper(object_name||'.'||procedure_name) from dba_procedures union all
    -- select '"'||table_name||'".'||column_name from dba_tab_columns union all
    select ksppinm from x$ksppi union all
    select name from v$sql_hint
)
WHERE length(name) > 2
ORDER BY 1

4.相关参考文件

相关的文件如下

  • tpt/setup/README_rlwrap.txt
  • tpt/setup/wordfile_11gR2.sql
  • tpt/setup/wordfile_12cR1.sql
  • tpt/setup/wordfile_11gR2.txt
  • tpt/setup/wordfile_12cR1.txt

你可能感兴趣的:(Performance & Troubleshooting scripts (TPT) for Oracle (二)之rlwrap工具)