background success stories

Oracle SQL Developer Command Line (SQLcl) 18.3

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