SQLcl introduit la puissance de SQL Developer dans une interface en ligne de commande, en prenant en charge tout ce que vous connaissez déjà dans SQL*Plus. Il est inclus avec votre licence de base de données. Le produit est couvert par le support Oracle qui propose également des mises à jour trimestrielles avec de nouvelles fonctionnalités et corrections de bugs.
Nous avions déjà publié un article sur cet outil (https://blog.setra-conseil.com/oracle-sql-developer-command-line-sqlcl-4-2/) et présenté quelques fonctionnalités très pratiques concernant l’édition en ligne de requête, l’accès à l’historique et la mise en forme. Le présent article complète le précédent en détaillant les points forts toujours présents dans la version 18.3.
L’installation est toujours assez simple :
oracle@ /u01/app/setrapack/exploitation/oracle/tools>unzip sqlcl-18.2.0.zip Archive: sqlcl-18.3.0.zip creating: sqlcl/ . . .
L’utilisation de la dernière version de Java peut aider :
oracle@HOST /u01/app/setrapack/exploitation/oracle/tools>tar zxvf jdk-8u181-linux-x64.tar.gz
Après la mise à jour du JAVA_HOME, le lancement se fait de la manière suivante :
export JAVA_HOME=$REP_TECH/tools/jdk1.8.0_191 export PATH=$JAVA_HOME/bin:$PATH alias sqlcl='$REP_TECH/tools/sqlcl/bin/sql' oracle@HOST /u01/app/setrapack/exploitation/oracle>sqlcl / as sysdba
Depuis octobre 2018, Oracle met à disposition la version 18.3 de SQLcl. Nous pourrions penser que cela représente beaucoup de progrès depuis la version 4.2. En réalité, SQLcl a suivi les mêmes évolutions de versioning que d’autres produits Oracle. Ainsi après la version 4.2, Oracle est passé directement à la version 17.2 en juillet 2017. Il y a ainsi peu de nouvelles fonctionnalités mais les corrections de bugs se poursuivent. Oracle (https://twitter.com/oraclesqlcl) et Jeff Smith (Oracle SQLDev, REST Data Services product manager @Oracle) publient régulièrement sur Twitter pour mettre en avant les atouts de ce produit. Vous trouverez notamment cette référence « https://www.thatjeffsmith.com/archive/2018/10/sell-me-on-oracle-sqlcl-in-50-seconds/ » qui propose de vous convaincre en moins d’une minute.
Voici quelques points forts de SQLcl.
La commande « INFO » ou même « INFO+ » permet d’avoir plus d’information sur les objets comme des détails sur les statistiques :
SYS@BDD > Info+ PERFSTAT.STATS$LATCHTABLE: STATS$LATCH LAST ANALYZED:2018-11-10 21:31:14.0 ROWS :2498650 SAMPLE SIZE :2498650 INMEMORY :DISABLED COMMENTS : Columns NAME DATA TYPE NULL DEFAULT LOW_VALUE HIGH_VALUE NUM_DISTINCT HISTOGRAM *DBID NUMBER No 3274332059 3524516432 2 FREQUENCY *INSTANCE_NUMBER NUMBER No 1 1 1 FREQUENCY *NAME VARCHAR2(64 BYTE) No AQ Background: interrupt command latch xssinfo freelist 770 NONE *SNAP_ID NUMBER No 836 26872 3245 NONE LATCH# NUMBER No 0 769 770 NONE LEVEL# NUMBER Yes 0 16 15 NONE GETS NUMBER Yes 0 6146547009 396032 NONE MISSES NUMBER Yes 0 113971 13827 NONE SLEEPS NUMBER Yes 0 113185 6213 NONE IMMEDIATE_GETS NUMBER Yes 0 213920170 97184 NONE IMMEDIATE_MISSES NUMBER Yes 0 23732 7383 NONE SPIN_GETS NUMBER Yes 0 35708 9784 NONE SLEEP1 NUMBER Yes 0 NONE SLEEP2 NUMBER Yes 0 NONE SLEEP3 NUMBER Yes 0 NONE SLEEP4 NUMBER Yes 0 NONE WAIT_TIME NUMBER Yes 0 21192647 10069 NONE Indexes INDEX_NAME UNIQUENESS STATUS FUNCIDX_STATUS COLUMNS PERFSTAT.STATS$LATCH_PK UNIQUE VALID SNAP_ID, DBID, INSTANCE_NUMBER, NAME
La commande « CD » qui aurait dû exister depuis tellement longtemps :
SYS@BDD > !pwd /u01/app/setrapack/exploitation/oracle SYS@BDD > cd sql SYS@BDD > !pwd /u01/app/setrapack/exploitation/oracle/sql
La commande « REPEAT » permet de relancer la dernière requête. Cela peut être très utile pour surveiller par exemple les performances.
SYS@BDD > help repeat repeat <iterations> <sleep> Repeats the current sql in the buffer the specified times with sleep intervals Maximum sleep is 120s SYS@BDD > SET sqlformat ansiconsole SYS@BDD > SELECT systimestamp FROM dual; SYS@BDD > repeat 5 2
Un peu gadget mais toujours intéressant, la commande « HISTORY USAGE » qui affiche le nombre d’exécutions de vos requêtes SQL et de vos scripts :
SYS@BDD > history usage 1 ( 4) SELECT /*+ all_rows use_concat */ ddf.file_name AS "File Name", ddf.tablespace_name AS "Tablespace", ddf.online_status AS "Status", to_char(nvl(dd 2 ( 1) info DBA_TABSPACES 3 ( 1) alias list tables 4 ( 1) alias locks 5 ( 1) alias list locks 6 ( 1) Info PERFSTAT.STATS$LATCH 7 ( 1) Info+ PERFSTAT.STATS$LATCH 8 ( 1) ! 9 ( 2) !pwd 10 ( 1) @log 11 ( 1) alias tbs = tbs.sql; 12 ( 3) alias 13 ( 2) cd sql 14 (17) @session 15 ( 1) select vs.sid ,serial# serial, vs.sql_id, vs.username "Username", case when vs.status = 'ACTIVE' then last_call_et else null end "Seconds in Wait", 16 ( 1) SELECT systimestamp FROM dual; 17 ( 1) repeat 15 0.55 18 ( 1) repeat 5 2
Nous ne pouvions terminer cet article sans évoquer l’autocomplétion qui permet d’écrire plus rapidement les requêtes en complétant automatiquement les noms d’objet ou les mots-clés à l’aide de la touche tabulation. Vous trouverez une combinaison de cette fonctionnalité avec l’édition en ligne de requête sur la page suivante : https://www.thatjeffsmith.com/archive/2015/06/updated-sqlcl-nicer-inline-editing-and-column-completion/.
Cela fonctionne même avec vos scripts :
sched_job_log.sql sched_job.sql sched.sql sched_sched.sql sched_job_temp.sql sched_prog.sql SYS@BDD > @sched