Ziel
Wird unter einem Windows Betriebssystem eine SQL*Plus Sitzung aufgebaut, ist es möglich mithilfe der Pfeilstasten der Tastatur (Rauf- / Runtertaste) durch die Befelhistorie zu navigieren. Diese Funktionalität erspart oft lästige Tipparbeit, wenn einer der zuvorherigen Befehle nochmal ausgeführt werden soll.
Unter Linux steht diese Navigationsmöglichkeit von Haus aus nicht zur Verfügung.
Problem
Versucht man unter einem Linix Betriebssystem mithilfe der Pfeiltasten durch die Historie einer SQL*Plus Session zu navigieren erhält man folgendes Ergebnis.
[oracle@rac1 ~]$ sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Mon Feb 21 13:20:07 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> select name from v$database; NAME --------------------------- TESTDB SQL> ^[[A^[[B^[[A
Wie man sieht kann ich nicht mit den Pfeiltasten die vorherige SELECT Anweisung erneut aufrufen. Durch die Reload Funktion (r) von SQL*Plus kann ich den letzten Befehl erneut ausführen. Dies funktioniert aber zum Beispiel nicht bei einem PL/SQL Aufruf.
SQL> r 1* select name from v$database NAME --------------------------- TESTDB
Lösung
Die Lösung dieses Problem besteht in der Installation des rlwrap Paketes. Das rlwrap Paket ist ein sogenannter “Readline Wrapper”.
Bereits fertig kompilierte Versionen des Paketes kann man zum Beispiel über http://www.pkgs.org beziehen. Für meine Testumgebung werde ich das Paket für CentOS 5.5 in der 64-bit Version herunterladen.
Die Installation des Paketes erfolgt mit rpm.
[root@rac1 tmp]# rpm -ivh rlwrap-0.37-1.el5.x86_64.rpm warning: rlwrap-0.37-1.el5.x86_64.rpm: Header V3 DSA signature: NOKEY, key ID 217521f6 Preparing... ########################################### [100%] 1:rlwrap ########################################### [100%]
Ruft man nun SQL*Plus mithilfe des rlwrap Paketes auf, ist die Navigiation mit den Pfeiltasten möglich.
[oracle@rac1 ~]$ rlwrap sqlplus / as sysdba SQL*Plus: Release 11.2.0.2.0 Production on Mon Feb 21 13:35:51 2011 Copyright (c) 1982, 2010, Oracle. All rights reserved. Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP, Data Mining and Real Application Testing options SQL> select name from v$database; NAME --------------------------- TESTDB SQL> select name from v$database; NAME --------------------------- TESTDB
Für einen vereinfachten Aufruf von SQL*Plus in Kombination mit dem rlwrap Paket, kann man sich einen Alias anlegen.
[oracle@rac1 ~]$ alias sqlplus="rlwrap sqlplus" [oracle@rac1 ~]$ sqlplus / as sysdba