SQL*PLUS History

06.
Mai
2021
Veröffentlicht von: Ferhat Atabey

In diesem Artikel wird ein kleines neues Feature beschrieben, das mit Oracle 12C R2 eingeführt wurde, und für viele DBA’s sehr nützlich ist: SQL*Plus history


SQL*Plus kann nun den Verlauf der ausgeführten Befehle beibehalten und Sie können diese Befehle aus dem Verlauf sehen und ausführen. Dieses Feature kann bei der Fehlerbehebung oder beim Ausführen eines Prozesses, der dieselben Befehle wiederholt erfordert, sehr hilfreich sein. Jeder der zuvor ausgeführten Befehle kann zurückgerufen und mithilfe der folgenden Syntax, "history XX run", erneut ausgeführt werden:

Hilfe für history:

sqlplus / as sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Tue Apr 20 14:14:51 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> help hist
 HISTORY
 -------
 Stores, lists, executes, edits of the commands
 entered during the current SQL*Plus session.

HIST[ORY] [N {RUN | EDIT | DEL[ETE]}] | [CLEAR]

N is the entry number listed in the history list.
Use this number to recall, edit or delete the command.

Example:
HIST 3 RUN - will run the 3rd entry from the list.
HIST[ORY] without any option will list all entries in the list.

Standardmäßig ist der Verlauf deaktiviert.

Die Verwendung des Befehls wird in der aktuellen SQL*PLUS Sitzung aktiviert oder deaktiviert:

SQL> set history on
SQL> show history
History is ON and set to “100”
SQL> set history off
SQL> show history
History is OFF

Per Default bewahrt history 100 Befehle auf.

Um 1.000 Befehle in der history beizubehalten geben wir ein:

SQL> set history 1000
SQL> show history
History is ON and set to “1000”

SQL> select name from v$database;
NAME
---------
DB122
SQL> select name, database_role from v$database;
NAME   DATABASE_ROLE
--------- ----------------
DB122   PRIMARY
SQL>
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 – Production
CORE 12.2.0.1.0 Production
TNS for Linux: Version 12.2.0.1.0 – Production
NLSRTL Version 12.2.0.1.0 - Production
SQL>
SQL> hist list
  1  select name from v$database;
  2  select name, database_role from v$database;
  3  select banner from v$version;
SQL>
SQL> hist 1 run
NAME
---------
DB122
SQL> hist 3 run
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 – Production
CORE 12.2.0.1.0 Production
TNS for Linux: Version 12.2.0.1.0 – Production
NLSRTL Version 12.2.0.1.0 – Production

SQL>
SQL> hist clear
SQL>
SQL> hist list

SP2-1651: History list is empty.

SQL>
SQL> select name from v$database;
NAME
---------
DB122
SQL> select banner from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 – Production
CORE 12.2.0.1.0 Production
TNS for Linux: Version 12.2.0.1.0 – Production
NLSRTL Version 12.2.0.1.0 - Production
SQL> select instance_name from v$instance;
INSTANCE_NAME
----------------
db122
SQL>
SQL> hist list
  1  select name from v$database;
  2  select banner from v$version;
  3  select instance_name from v$instance;
SQL>


Editieren eines vorhergehenden Befehl:

SQL> hist 2 edit

null


Oracle SQL*PLUS öffnet den Notepad Editor zum Editieren unter Windows. Auf Linux Umgebung wird der vi editor verwendet.

SQL>
SQL> hist list
  1  select name from v$database;
  2  select banner from v$version;
  3  select instance_name from v$instance;
  4  select banner from v$version
     where rownum <=1;

SQL> hist 4 run

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> hist
  1  select name from v$database;
  2  select banner from v$version;
  3  select instance_name from v$instance;
  4  select banner from v$version
     where rownum <=1;


Löschen von einem vorhergehendem Befehl:

SQL> hist 2 del
SQL> hist
  1  select name from v$database;
  2  select instance_name from v$instance;
  3  select banner from v$version
     where rownum <=1;

SQL>
SQL> hist clear
SQL>
SQL> set history off
SQL>
SQL>
SQL> hist list
SP2-1650: History is off, use "SET HIST[ORY] ON" to enable History.
SQL>


Bemerkung:

Der HISTORY-Befehl enthält einige Einschränkungen.

Eine Einschränkung ist, dass es sich um ein SQL*PLUS-spezifisches Feature handelt. Wird ein anderes Tool (wie zum Beispiel Toad) verwendet, kann die history des SQL*PLUS nicht genutzt werden.

Darüber hinaus ist history sitzungsspezifisch. Wir sehen also nur die Befehlshistorie ihrer aktuellen Session, sprich: seit der Anmeldung.
Das ist von Nachteil, falls wir vergessen haben die Historie zu Beginn der Sitzung einzuschalten. Für dieses Problem gibt es aber Abhilfe: Die Verlaufseinstellung kann standardmäßig aktiviert werden, wenn die glogin.sql-Datei entsprechend angepasst wird. Diese Datei befindet sich unter $ORACLE_HOME/sqlplus/admin. Alles, was erforderlich ist, ist das Hinzufügen des Befehls "set history on" zu der Datei wie folgt:

null

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.