systemadmin.es > DBA > sqlplus con historial

sqlplus con historial

Una de las cosas más molestas de trabajar con el cliente sqlplus de Oracle es la ausencia de historial. Mediante rlwrap podemos completar esta deficiencia.

Resulta muy típico usar los cursores en el sqlplus, dando como resultado caracteres a borrar:

$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue May 17 09:50:55 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> ^[[A^[[A^[[D^[[D^[[D

Si instalamos rlwrap (readline wrapper) podremos disponer de historial en el sqlplus:

# rlwrap 
Usage: rlwrap [options] command ...

Options:
  -a[password:]              --always-readline[=password:]
  -A                         --ansi-colour-aware
  -b  <chars>                --break-chars=<chars>
  -c                         --complete-filenames
  -C  <name|N>               --command-name=<name|N>
  -D  <0|1|2>                --history-no-dupes=<0|1|2>
  -f  <completion list>      --file=<completion list>
  -g  <regexp>               --forget-matching=<regexp>
  -h                         --help
  -H  <file>                 --history-filename=<file>
  -i                         --case-insensitive
  -I                         --pass-sigint-as-sigterm
  -l  <file>                 --logfile=<file>
  -n                         --no-warnings
  -N                         --no-children
  -o                         --one-shot
  -O  <regexp>               --only-cook=<regexp>
  -p[colour]                 --prompt-colour[=colour]
  -P  <input>                --pre-given=<input>
  -q  <chars>                --quote-characters=<chars>
  -m[newline substitute]     --multi-line[=newline substitute]
  -r                         --remember
  -R                         --renice
  -v                         --version
  -s  <N>                    --histsize=<N> (negative: readonly)
  -S  <prompt>               --substitute-prompt=<prompt>
  -t  <name>                 --set-term-name=<name>
  -w  <N>                    --wait-before-prompt=<N> (msec, <0  : patient mode)
  -z  <filter command>       --filter=<filter command>

bug reports, suggestions, updates:

http://utopia.knoware.nl/~hlub/uck/rlwrap/

Simplemente deberemos ejecutar rlwrap y el comando al que debe hacer de interfaz, por ejemplo:

$ rlwrap sqlplus / as sysdba

Si no indicamos el fichero de historial, se generará como el nombre del comando en la home del usuario, en este caso:

-rw-------  1 oracle oinstall       298 May 16 19:56 .sqlplus_history

En el caso que nos conectemos con varios usuarios, y queremos guardar el historial independientemente deberemos especificar la opción -H:

$ rlwrap -H ~/.sqlplus_jordi sqlplus jordi/test

Para almacenar estos comandos lo mejor son crear alias:

alias sqlplus="rlwrap sqlplus"
alias sqlplus_jordi="rlwrap sqlplus -H ~/.sqlplus_jordi jordi/test"

Siendo mucho más cómodos para ejecutarlos sin tener que recordar cada vez que queremos el rlwrap y dónde queremos el historial:

-bash-3.2$ sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Tue May 17 10:05:36 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> show user;
USER is "SYS"
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
-bash-3.2$ sqlplus_jordi

SQL*Plus: Release 10.2.0.1.0 - Production on Tue May 17 10:05:43 2011

Copyright (c) 1982, 2005, Oracle.  All rights reserved.


Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> show user;
USER is "JORDI"
SQL> 

Deja un comentario:

XHTML - Tags permitidos:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>