Souhaitée depuis des années, l’historique des commandes SQL*Plus fait enfin son apparition avec la version 12c Release 2.
Pour les impatients, on peut voir cela dans le Cloud Oracle et le service DbaaS (Database as a Service) qui propose maintenant l’utilisation de la version 12.2.0.1. Pour cela, faites une demande pour un essai gratuit de 30 jours sur le site cloud.oracle.com et au moment de choisir la version de votre base vous aurez la possibilité de sélectionner cette Release 2 :
Vous pourrez prendre n’importe quelle édition disponible :
Une fois votre service créé, une connexion putty vous permet de vous connecter à votre base ORCL (conteneur racine, car l’architecture multitenant est utilisée d’office) :
[oracle@ELEORCL u01]$ sqlplus / as sysdba SQL*Plus: Release 12.2.0.1.0 Production on Wed Dec 21 14:52:05 2016 Copyright (c) 1982, 2016, Oracle. All rights reserved. Connected to: Oracle Database 12c EE Extreme Perf Release 12.2.0.1.0 - 64bit Production SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 PDB1 READ WRITE NO 4 DEMOS MIGRATE YES
Et de découvrir l’implémentation de la fonctionnalité.
En voici un tour rapide, où l’on voit qu’il n’y rien de complexe; l’aide nous montre les arguments possibles dans l’usage :
SQL> ? history 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.
Le principal piège est de devoir d’abord positionner la fonction sur ON, sinon pas d’historique !
L’aide ne le dit pas, mais une tentative d’utilisation oui :
SQL> history SP2-1650: History is off, use "SET HIST[ORY] ON" to enable History.
C’est parti :
SQL> set history on
Pour ne pas l’oublier, on passera la commande set dans votre fichier profile login.sql.
Déroulement de quelques commandes (dont le résultat peut vous surprendre mais qui sont parfaitement logiques dans le contexte multitenant) :
SQL> select count(*) from cdb_tables ; COUNT(*) ---------- 5209 SQL> select count(*) from dba_tables ; COUNT(*) ---------- 2602 SQL> select count(*) from cdb_objects ; COUNT(*) ---------- 154492 SQL> select count(*) from dba_objects ; COUNT(*) ---------- 77582 SQL> select count(*) from cdb_users ; COUNT(*) ---------- 93 SQL> select count(*) from dba_users ; COUNT(*) ---------- 45
L’historique des commandes est maintenant visible et utilisable :
SQL> hist 1 select count(*) from cdb_tables ; 2 select count(*) from dba_tables ; 3 select count(*) from cdb_objects ; 4 select count(*) from dba_objects ; 5 select count(*) from cdb_users ; 6 select count(*) from dba_users ;
La syntaxe est là pour vous rappeler que c’est trop facile d’utiliser les flèches d’un clavier :
SQL> hist 3 run COUNT(*) ---------- 154492
Vous pouvez éditer et modifier la commande voulue avec :
SQL> hist 3 edit
qui ouvre l’éditeur et permet les modifications.
Supprimer cette entrée de l’historique :
SQL> hist 3 delete SQL> hist 1 select count(*) from cdb_tables ; 2 select count(*) from dba_tables ; 3 select count(*) from dba_objects ; 4 select count(*) from cdb_users ; 5 select count(*) from dba_users ; 6 select count(*) from cdb_objects ;
Ou faire le grand ménage pour y voir plus clair !
SQL> hist clear SQL> hist SP2-1651: History list is empty.
Ce n’est pas encore l’aboutissement de nos rêves, il n’y a pas de recherche possible, pas de déplacement avec les flèches ou d’autres séquences de touches et pas de complétion possible. Son mérite est d’exister !
Pour quelque chose de plus évolué, il faut se tourner vers les solutions alternatives habituelles (rlwrap sous linux ou SQLCL dès que java est là.
A bientôt pour plus d’informations sur la version 12cR2…