Tour d'horizon d'Oracle SQL Developer v4

Cela fait maintenant plus d’un mois que la version 4.0 de SQL Developer est sortie (annonce officiel du 4 décembre 2014)  et la version bêta était téléchargeable depuis le mois de juillet, mais pris dans l’élan des projets à clôturer en fin d’année, je n’avais pas encore eu le temps d’en faire le tour, déjà très satisfait de la version 3.2 que j’utilise depuis plus d’un an. Enfin c’est fait,  j’ai récupéré ici les 110 Mo pour mon OS Windows 7 64bits (incluant le JDK7), l’installation est toujours aussi simple qu’un « unzip » dans l’arborescence souhaitée, ce qui ne vous prendra pas moins de 500Mo, dont 208 Mo rien que pour le java. J’aime cette facilité et cette solidité, elle permet par exemple de pouvoir exécuter le produit sur un poste pour lequel vous n’avez aucun droit d’administration.  La première exécution est capable de détecter la version précédente, il est donc inutile de prévoir un export de ses connexions ou de ses rapports préférés, celles-ci et ceux -ci, ainsi que toutes vos préférences seront reprises automatiquement.  La page d’accueil revue et augmentée, montre la nouvelle ergonomie adoptée, plus fine et aérée et surtout le point de départ pour une mine d’informations sur le produit;  je sais nous avons tous une barre de recherche « google est mon ami » ouverte et la saisie du mot clé  « SQLDeveloper »  ramène en moins d’une seconde plus de 9 millions de résultats, mais là vous avez directement accès à ce qui est vraiment pertinent , que vous débutiez avec l’onglet « Mise en route » et la possibilité de suivre  de nombreux tutoriels  ou que  vous souhaitiez participer d’une manière ou d’une autre à la communauté des utilisateurs via l’onglet « Communauté » .
SQLDEV4_acceuil
Tous les liens ouvrent une nouvelle  page dans votre navigateur par défaut, tout en conservant l’outil ouvert, vous permettant de naviguer facilement de l’un à l’autre. Ma préférée est la page « Oracle SQL Developer Exchange »  ou l’on peut faire directement des demandes d’améliorations du produit :
SQLDEVV4_exchange
Avec 663 implémentations réalisées, on peut croire à une bonne réactivité des équipes depuis cette interface et faire des demandes cohérentes sans avoir à attendre la prochaine nuit de Noël.
Passons maintenant aux nouveautés, je ne vais pas toutes les listées , mais en voici les principales:
JAVA
La version java supportée est maintenant la version 7, celle qui est livrée pour Windows 64bits est la 1.7.0.45.  la version précédente devenait assez ancienne et ne bénéficiait pas des améliorations apportées depuis, il était temps d’évoluer. En dehors du démarrage et de la fermeture beaucoup plus rapide (du moins par rapport à ce que j’ai constaté sur mon laptop), ce qui est déja plus qu’appréciable, un des  plus est la possibilité de détaché chaque page (feuille de calcul, édition de code, définition de table) de la section principale, ceci ce fait par la fonction « Annuler l’ancrage »  accessible via le menu contextuel (clic droit) sur l’étiquette de la fenêtre. Vous pouvez ainsi avoir une fenêtre indépendante pour chacune de vos connexions et la gérer comme vous le souhaitez sur votre bureau. Le retour arrière (« Ancrer » ) est possible à n’importe quel moment. Les possibilités de gestion directe des fenêtres sont augmentées avec les nouvelles possibilités de fractionnement verticale ou horizontale depuis le menu contextuel.
La mémoire prise par  la JVM est en augmentation d’environ 50Mo, avec un peu plus de 512Mo de pris sur mon système, ce que l’on peut retrouver ainsi que le  nouveau nom du processus dans le gestionnaire de tache :
SQLDEV4_TaskManager
Concernant spécifiquement  le java sous Windows,  lors de la première exécution, le programme détermine maintenant:

  • Quelle est la version de l’OS (32 ou 64 bits);
  • si une version est présente sur le serveur , enregistrement de la version dans le fichier sqldeveloper.conf.

D’où l’ absence de la boite de dialogue demandant la localisation du binaire java (du moment qu’une version est trouvée automatiquement),  mais vous pouvez bien sur repositionner la variable sur la version que vous souhaitez (le fichier de configuration se trouve sous <install SQLDEVELOPER>\sqldeveloper\bin, la variable se nomme SetJavaHome).
Recherche d’objets
La recherche d’objets dans la base est maintenant directement accessible depuis la barre de tache principale, au travers de l’icône des jumelles, et non plus depuis le menu « Affichage » :
SQLDEVv4_search
La connexion en cours est automatiquement sélectionnée,  le caractère générique « % » peut être être ajouté à n’importe  quel endroit de la chaine recherchée, les choix concernant les ensembles de recherche sont immédiat (Schémas, Types d’objets, etc..) , la recherche dans le code source (en cochant « Toutes les lignes sources » )  est d’une efficacité redoutable :
SQLDEVv4_search2
Mais surtout le résultat est beaucoup plus clair avec un regroupement par schéma et type d’objet , bonus supplémentaire en cliquant sur le nom de l’objet (table , package ou autre) on ouvre la fenêtre de définition de celui-ci :
SQLDEVv_resultSearch
Une fonction qui devient utilisable facilement et dont on ne va plus pouvoir se passer.
Utilisation en  ligne de commande
Les rapports utilisateurs que vous avez créés sont pertinents et méritent d’être planifié régulièrement , c’est possible avec cette version, il vous suffit d’utiliser l’outil en mode ligne de commande (il se nomme  « sdcli.exe » ).
Six fonctionnalités sont disponibles, l’aide est obtenue en tapant la commande sans argument, puis peut être détaillée pour chacun des modules :

D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli
Caractéristiques disponibles :
cart: Tâches en batch du chariot de base de données
dba: Tâches DBA en batch de base
format: SQL Format Task
migration: Database Migration Tasks
reports: Tâches de génération de rapports en batch de base
unittest: Tâches en batch de test des unités

« cart » pour caddy en français est une fonctionnalité introduite depuis la version 3.1 qui permet de mettre à part la définition d’un ou de plusieurs  objets (avec ou sans les données associées) pour pouvoir réaliser ensuite le déploiement de ce ou ces objets sur une ou plusieurs destinations. Vous pouvez trouvez quelques détails ici ou dans la documentation.
la ligne de commande permet un déploiement en mode batch avec les options suivantes:

D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli cart
Syntaxe CART :
cart <command> <command arguments>
cart <command> -help|h
Commandes prises en charge :
export -cart <savedcart.xml> -config|cfg <exportconfig.xml> [-target|tgt <dirorf
ilename>] [-logfile <filenameorstderr>] [-deffile <exportdefinitionfile>]
cloud -cart <savedcart.xml> -config|cfg <deploycloudconfig.xml> [-target|tgt <fi
lename>] [-logfile <filenameorstderr>] [<clouddefinitionfile>]
copy -cart <savedcart.xml> -config|cfg <copyconfig.xml> [-logfile|log <filenameo
rstderr>] [-deffile <copydefinitionfile>]
Exemples :
cart export -cart /home/carts/cart.xml -cfg /home/carts/exporttools.xml
Exporte les objets inclus dans cart.xml à l'aide des options enregistrées dans e
xporttools.xml.
cart cloud -cart /home/carts/cart.xml -cfg /home/carts/cloudtools.xml
Déploie les objets inclus dans cart.xml à l'aide des options enregistrées dans c
loudtools.xml.
cart copy -cart /home/carts/cart.xml -cfg /home/carts/copytools.xml
Copie les objets inclus dans cart.xml à l'aide des options enregistrées dans cop
ytools.xml.

« dba »  permet uniquement l’usage de la commande « dbcopy » pour transférer une table d’une source vers une destination, les options d’usage sont les suivantes :

D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli dba
Syntaxe DBA :
dba <command> <command arguments>
dba <command> -help|-h
Commandes prises en charge :
dbcopy -sourcedb <connname> -destdb <connname> [-logfile <filename>]
[-schemas <schema>+] [-tablespace <from> <to>]
[-copyddl [replace]] [-nocopyddl] [-copydata [truncate]] [-nocopydata]
[-consolidateschema] [-globalwhere <predicate>] [-deffile <filename>]
[-alltypes] [-alltypesbut <ddltype>+] [-notypesbut <ddltype>+]
[-owner <objectowner>] [-type <objecttype>] [-object <name>+] [-column <column>+
] [-where <predicate>]
Exemple :
dbcopy -sourcedb "mysourceconnection" -destdb "mydestconnection" -logfile mylogf
ile.log -object "MYTABLE"
Copie la table indiquée entre deux connexions et écrit le journal de sortie dans
le fichier spécifié.

« format » permet le formattage de fichier avec les seuls options suivantes :

D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli format
format input=<fichier ou répertoire d'entrée> output=<fichier ou répertoire de s
ortie>

« migration »,  utilisable pour réaliser les procédures de migration en mode batch, les options sont nombreuses. L’aide avec le mot clé « guide » montre la suite des  opérations à réaliser pour les procédures les plus courantes. La commande sera utile pour pouvoir répéter et affiner une méthode, cependant  l’assimilation des options et la mise au point des commandes risquent de limiter les avantages de la ligne de commande par rapport aux clics de l’interface graphique et de ses assistants.

D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli migration
HELP:
Syntax:
sdcli migration -help|-h=<actions> to get help on one or more actions.
where
<actions>     could be one or more (comma separated list) actions or guide
guide provides a walk through of a typical migration
Examples:
sdcli migration -help=capture
sdcli migration -h=capture,convert
sdcli migration -h=guide
Valid actions:
capture, convert, datamove, delcaptured, delconn, delconverted, driver, generate
, guide, idmap, info, init, lscaptured, lsconn, lsconverted, mkconn, qm, runsql,
scan and translate

« reports »  Génération de rapport en mode batch,  la fonctionnalité intéressante qui pourra peut être permettre de se passer d’un serveur de report lorsque la sortie pourra se faire en autre chose que de l’html , qui est l’unique choix pour l’instant. les options d’utilisation sont les suivantes :

D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli reports
Syntaxe de rapports :
reports <command> <command arguments>
Commandes prises en charge :
generate -report <path> -db <connection name> -file <output file> [-bind <bname>
=<bvalue>]* génère un rapport HTML
Exemple :
D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli reports generate -report DataT
ypeChart -db ELE_SYS -file D:\temp\testreport.html
Password for ELE_SYS? ***

Noter que le mot de passe doit être inclus dans la chaine de connexion, sinon la commande le demande et c’est moins bien pour du batch !
« unittest » , la possibilté de créer et gérer des unités de tests pour vos fonctions ou procédures PL/SQL existe graphiquement depuis au moins la version 2.1 . L’utilisation du mode ligne de commande va permettre l’industrialisation de ce processus lors de la mise en place de nouvelle version de votre code. La commande vous donne la possibilité d’exécuter une unité de test ainsi que  de l’exporter et de l’importer entre bases de données.

D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli unittest
unittest ?
unittest -run ?
unittest -exp ?
unittest -imp ?
D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli unittest -run ?
unittest -run -test (-id <id>|-name <name>} -repo <connection name>
-db <connection name> {-return <return id>} {-log <0,1,2,3>}
unittest -run -suite (-id <id>|-name <name>} -repo <connection name>
-db <connection name> {-return <return id>} {-log <0,1,2,3>}
D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli unittest -exp ?
unittest -exp -test (-id <id>|-name <name>} -repo <connection name> -file <file
name>
unittest -exp -suite (-id <id>|-name <name>} -repo <connection name> -file <file
name>
unittest -exp -validation (-id <id>|-name <name>} -repo <connection name> -file
<file name>
unittest -exp -startup (-id <id>|-name <name>} -repo <connection name> -file <fi
le name>
unittest -exp -teardown (-id <id>|-name <name>} -repo <connection name> -file <f
ile name>
unittest -exp -query (-id <id>|-name <name>} -repo <connection name> -file <file
name>
D:\app\oracle\sqldeveloper\sqldeveloper\bin>sdcli unittest -imp ?
unittest -imp -repo <connection name> -file <file name> [-overwrite | -skip]

Rapports utilisateurs
La création de rapport utilisateur a été simplifié, l’assistant de création ou de modification propose de réaliser des prévisualisation à de nombreux endroits, tout en utilisant les données réellement en base. De nombreux formats de graphique sont disponibles  (il y en a maintenant une cinquantaine) pour permettre de s’adapter à vos choix,  on se croirait dans l’assistant d’insertion d’un graphique sous Excell 2011 !
La gestion maitre détail est toujours présente et encore plus facile à mettre en œuvre.
Le rapport apparrait dans la fenêtre de SQL developer, mais peux aussi être générer  au format html, en attendant du pdf dans le futur.
Exemple de gestion d’un  rapport :
SQLDEVv4_rapportUser
 
Interface utilisateur
Avec le décrochage des fenêtres que l’on a vu plus haut et la possibilité d’utiliser des couleurs différentes pour les connexions (nouvelles propriétés de la connexion)  on se perd beaucoup moins dans les différents onglets que l’on est rapidement appelé à ouvrir. Ainsi la mise en place de la propriété couleur pour une connexion amène  un bandeau de même couleur autour des fenêtres associées à cette connexion :
SQLDEVv4_connexionColor
Autre petite subtilité qui fonctionne bien maintenant:  la possibilité de pouvoir générer plusieurs plan d’exécution pour une même requête et de visualiser graphiquement les différences.
Dans l’exemple simple ci-dessous, la requête est la valeur maximale pour la colonne EMPLOYEE_ID de la table EMPLOYEES du schéma d’exemple HR. J’ai généré le plan « Plan d’exécution 1 »  pour la requête telle que :

SELECT MAX(EMPLOYEE_ID) FROM HR.EMPLOYEES;

Soit un parcours complet de l’index sur la colonne EMPLOYEE_ID.
Puis,  j’ai positionné un conseil FULL, et généré le nouveau plan « Plan d’exécution 2 »  (correspondant à un parcours complet de la table EMPLOYEES):

SELECT /*+ FULL(E) */ MAX(EMPLOYEE_ID) FROM HR.EMPLOYEES E;

Depuis l’interface et le menu contextuel , on peut alors comparer les deux plans, les différences apparaissant en rouge.
SQLDEVv4_comparePlan
Très intéressant au moment de la phase de tuning des requêtes: le coût et les accès peuvent ainsi très facilement être comparés.
Section performances
Les possibilités de visualiser les performances dans la version précédente étaient présentent uniquement dans la section rapport « Rapports de dictionnaire de données », « ASH et AWR »:

  • Dernier rapport AWR
  • Détails de lignes ASH
  • Graphiques Statistiques ASH quotidien
  • Rapport ASH au cours des  30 dernières minutes

Ces rapports sont toujours disponibles , mais on trouve en plus dans la section « DBA » ,  le choix « Performances », accessible uniquement pour les versions Enterprise Edition avec le pack de diagnostiques, comme il est demandé de confirmer lors de la sélection :
SQLDEVv4_LicenceDiag
les fonctions relatives aux clichés,  aux lignes de bases, à la tache ADDM, et aux rapports AWR sont toutes disponibles:
SQLDEVv4_Performances
Si on considère que tout cela est accessible depuis la DBconsole, cela peut paraître inutile et faire double emploi, mais il faut se rappeler que la DBconsole n’existe plus en version 12C, la nouvelle interface d’administration simplifiée ne permet aucun accès aux taches de performances; les autres choix sont alors l’utilisation des packages PL/SQL , les script awrpt ou l’utilisation de EM12C (cloud control) ce qui  peut – être un peu trop lourd pour certaines configurations, l’intégration a SQLDeveloper se justifie alors pleinement et facilite la gestion de cet ensemble : clichés,  lignes de bases, Tâche automatique ADDM, rapports AWR.
Compatibilité 12C
La version supporte toutes les nouvelles fonctionnalités de la version 12C de la base de données incluant :

  • Gestion des containers
  • Gestions des bases de données pluggables
  • Fonctions PL/SQL « inline »
  • Nouvelle colonne de type IDENTITY
  • Carte d’activité
  • Occultation des données

Data Modeler version 4
Appelant un article pour lui tout seul , ce module ne cesse de progresser.  Messieurs les développeurs vérifier bien lors de votre recherche d’outil pour modéliser votre application, que les fonctionnalités dont  vous avez besoin  ne soient pas incluses dans ce module surtout pour son coût de licence. La description complète des nouvelles fonctionnalités dédiées est ici, mais pour vous familiariser avec lui , visualiser quelques démonstrations, la page dédiée chez Oracle est celle-la.
Divers

  • Intégration direct avec GIT (logiciel de gestion de versions décentralisé du monde libre)  et subversion (SVN  – sous licence Apache et BSD). Transformation du choix « Version des logiciels » en « Equipe » .
  • Fonction « Rouvrir » du menu fichier , pour retravailler rapidement sur un fichier précédent.
  • Apparition du choix « Source » dans la barre principale permettant de travailler au niveaux bloc (sélection) , pour par exemple mettre un bloc complet en commentaire ou l’indenter.
  • Si malgré les couleurs , vous vous retrouvez perdus avec vos fenêtres, pas d’inquiétude vous pouvez revenir aux conditions initiales dans le nouveau menu « Fenêtre » , choix « Réinitialiser les fenêtres avec les paramètres de fabrique »
  •  Si vous souhaitez alléger le produit des fonctionnalités dont vous n’avez pas besoin, dans le menu « Outils » ,  le choix « Fonctionnalités » ,  vous permet de faire votre choix et de supprimer quelques Mo inutiles de la machine java.
  • Petit bémol pour les extensions, elles ne sont plus compatibles avec la version V4. Il faut donc attendre une mise à jour pour les utiliser, en attendant, elles sont désactivées.

 
Voila ce petit tour d’horizon est terminé, ce produit ne cesse de s’améliorer,  l »équipe de développement est dynamique et n’hésite pas à partager sa passion, le blog de Jeff Smith,  product manager,  en est un exemple criant. C’est un outil dont  je ne peux pas me passer pour mes interventions, il tient encore sur une clé USB et est donc facilement transportable et utilisable sur de nombreux environnements, même si vous n’avez pas tous les droits. Ma seule crainte est qu’il devienne dans l’avenir soumis à licence (ce qui est déjà le cas pour certaines fonctionnalités de la base ) ,  en attendant faite comme moi ,  utiliser le sans compter et comme tout outil,  plus on le maitrise plus on est productif avec.  Il est encore temps pour moi de vous souhaiter une très heureuse année 2014,  et n’hésitez pas à commenter votre propre expérience et à partager vos astuces.