SQL Developer 4.1 et Oracle Standard Edition

Cela fait quelques temps que je ne vous ai pas parlé de mon outil favori, SQL Developer !
Il continue d’évoluer et sa dernière version, toujours téléchargeable et utilisable gratuitement, est la 4.1.2 en date du 23 octobre 2015. Je vous laisse aller voir le détail des nouveautés sur cette page, le thème d’aujourd’hui est sa compatibilité d’usage avec les licences de vos bases de données.
Que ce passe-t-il et quelles sont les fonctionnalités accessibles suivant votre type d’édition, et surtout, l’utilisation de l’outil ne va t-elle pas vous mettre en porte à faux avec l’éditeur ?
Ce sont  les questions auxquelles je vais tenter de répondre en parcourant les différents menus de l’application.
L’ environnement de test :
Base 12C utilisant la version 12.1.0.1  Standard Edition sur une VM Virtual Box linux 64.
La version de la base et les options en place sont les suivantes :
SQL> select parameter, value from v$option where value='TRUE' ;
PARAMETER                                                        VALUE
---------------------------------------------------------------- -----
Objects                                                          TRUE
Connection multiplexing                                          TRUE
Connection pooling                                               TRUE
Database queuing                                                 TRUE
Incremental backup and recovery                                  TRUE
Instead-of triggers                                              TRUE
Parallel load                                                    TRUE
Proxy authentication/authorization                               TRUE
Plan Stability                                                   TRUE
Coalesce Index                                                   TRUE
Transparent Application Failover                                 TRUE
Sample Scan                                                      TRUE
Java                                                             TRUE
OLAP Window Functions                                            TRUE
Flashback Data Archive                                           TRUE
DICOM                                                            TRUE
XStream                                                          TRUE

17 rows selected.
SQL> select banner  from v$version ;
BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Release 12.1.0.1.0 - 64bit Production
PL/SQL Release 12.1.0.1.0 - Production
CORE    12.1.0.1.0      Production
TNS for Linux: Version 12.1.0.1.0 - Production
NLSRTL Version 12.1.0.1.0 - Production

Le paramétrage pour control_management_pack_access est  bien sur NONE :
SQL> show parameter control_management_pack_access
NAME                                 TYPE        VALUE
control_management_pack_access       string      NONE

Utilisation de SQLDeveloper 4.1
Premier élément important, le sujet a été traité par les développeurs de l’outil pour l’utilisation des packs liés à Enterprise Manager : Oracle Change Management Pack,  Oracle Tuning Pack et Oracle Diagnostic Pack.
Depuis le menu “Préférences” pour “Base de données”, le choix “Licence” permet d’accéder à la validation de l’utilisation des trois packs pour chacune des bases associées à vos connexions  : image
Les combos ont trois positions :

  • plein pour non défini (valeur par défaut correspondant à l’image ci dessus),
  • blanc la licence est explicitement refusée pour la base,
  • coché (marque “Check” ) validation de l’utilisation du pack pour la base concernée.

Laissons pour l’instant les valeurs par défaut et voyons les conséquences.
Deux sections sont principalement concernées par les restrictions de licence :  le traitement des performances de l’onglet DBA et certains rapports d’administration.
Parcourrons  maintenant ces possibilités, mais auparavant n’hésitez pas a relire la document Oracle sur le sujet ici.
Navigateur DBA
Groupe  “Configuration de la  base de données » :
Pas d’activation de fonctions particulières soumises à licence  pour les outils de ce groupe.
Groupe “Statut de la base de données” :
Pas de problème pour les différents “Statut” ; Pour l’information “Instance de base de données”, une des nouveautés de la version 4.1 est un suivi dynamique de l’ensemble des composants de la base avec, dans le bas à gauche, une vision des attentes regroupées par catégorie :
image_thumb3
Je me suis donc demandé si l’information ne provenait pas de la vue v$active_session_history (fonctionnalité ASH) qui est dépendante de la licence Diagnostic Pack ?
Mais non, une trace de la session ne le confirme pas; de plus, la vue est vide (ce qui est lié au paramétrage de control_management_pack_access) :
SQL> select count(*) from v$active_session_history ;
COUNT(*)
----------

La requête utilisée pour ce graphique particulier est basée sur les vues V$WAITCLASSMETRIC et V$SYSTEM_WAIT_CLASS , toutes les autres requêtes de cette page étant basées sur des informations accessibles sans aucune licence.
Bon point messieurs les développeurs !!
Groupe “Datapump” :
Pour les travaux d’export ou d’import, il nous faut vérifier l’impossibilité de faire un export ou un import en mode parallèle, ou encore d’utiliser la compression, car ces fonctionnalités sont accessibles uniquement avec la version Enterprise.
Si je demande un export de la base avec un parallélisme de 4, voici le résultat :image_thumb5
Ce n’est pas l’outil mais le moteur qui répond qu’il ne peut pas le faire.
Pour la compression, l’assistant ne propose tout simplement pas l’option, pas d’inquiétude de ce coté là non plus.
Groupe “Gestionnaire de Ressources” :
La fonctionnalité “Gestionnaire de Ressources” est disponible uniquement avec une version Enterprise, ce groupe n’a donc aucune utilité pour une version Standard.
Dès que l’on souhaite activer un plan de ressources particulier, créer ou modifier un plan (en ajoutant ou retranchant des directives par exemple), le moteur répond par une erreur “ORA-00439”  comme quoi la fonction n’est pas activée :
image_thumb7
Groupe “Performances” :
Lors du premier clic sur l’icone “Performances”, la boite de dialogue suivante s’ouvre :
image_thumb9
Attention si vous répondez en cliquant “Oui”,  vous allez valider l’usage du Pack Diagnostic sur la base, ce qui s’affiche ainsi dans les préférences :
image_thumb11
Si cela vous arrive, retournez dans le menu “Préférences” pour décocher l’option. Prenez l’habitude de répondre « Non ».
Toutes les fonctionnalités de ce groupe sont liées à l’utilisation du Pack Diagnostic, donc  impossible à utiliser avec une version Standard Edition (ou une version Enterprise pour laquelle vous n’avez pas la licence).
Inutile de parcourir : “Clichés”, “Lignes de base”, “Modèles de ligne de Base”, “Automatic Database Diagnostic Monitor”, “Visualiseur de rapports ASH” ou “AWR” qui sont directement associés avec le Pack Diagnostic.
Groupe “Planificateur” :
Aucun problème, l’usage de dbms_scheduler est valide pour toutes les versions.
Groupe “ Sauvegarde/Récupération RMAN” :
Rappel des opérations non  valides en SE :

  • Récupération de TABLE
  • Utilisation de plusieurs destinations pour les jeux de sauvegardes
  • Fichier de trace des changements dans les blocs
  • Récupération au niveau bloc
  • Parallélisme pour la sauvegarde et la récupération

Les trois premiers choix : “Actions RMAN programmées”, “Copies d’image” et “Ensemble de sauvegarde”  concernent uniquement la visualisation d’informations; il n’y a donc pas d’incidence sur la conformité de l’utilisation des licences.
“Paramètres RMAN” permet de visualiser les informations de configuration ou de générer  les commandes de modification du paramétrage pour chaque catégorie.
Attention : il n’y a aucun contrôle fait sur la mise en place du parallélisme ou d’un choix de compression autre que “BASIC”. C’est vous qui devez être prudent dans vos choix .
Exemple de commande que l’on peut générer sans problème ni avertissement :
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO BACKUPSET PARALLELISM 4;
CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT '';

Enfin, “Travaux de sauvegarde” vous permet de visualiser les travaux en cours ou de générer le fichier de commande relatif à vos choix. Il contiendra la liste des commandes à faire exécuter par RMAN.
Pour une sauvegarde base fermée, on pourrait avoir ceci  :
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
SET ENCRYPTION ON FOR ALL TABLESPACES ALGORITHM 'AES128'RUN {
ALLOCATE CHANNEL SQLDEV_BACKUP_DISK0 TYPE DISK FORMAT '';
ALLOCATE CHANNEL SQLDEV_BACKUP_DISK1 TYPE DISK FORMAT '';
ALLOCATE CHANNEL SQLDEV_BACKUP_DISK2 TYPE DISK FORMAT '';
ALLOCATE CHANNEL SQLDEV_BACKUP_DISK3 TYPE DISK FORMAT '';
BACKUP AS Ensemble de sauvegarde TAG '%TAG' DATABASE;
BACKUP AS Ensemble de sauvegarde TAG '%TAG' ARCHIVELOG ALL NOT BACKED UP;
RELEASE CHANNEL SQLDEV_BACKUP_DISK0;
RELEASE CHANNEL SQLDEV_BACKUP_DISK1;
RELEASE CHANNEL SQLDEV_BACKUP_DISK2;
RELEASE CHANNEL SQLDEV_BACKUP_DISK3;
}
ALTER DATABASE OPEN;

En dehors du fait que la syntaxe de FORMAT est manquante, cela correspond à l’allocation de quatre canaux, ce qui n’est pas conforme avec une version SE. Là aussi il n’y a pas de contrôle sur la commande, c’est une simple aide à l’écriture.
Tous les menus et options proposés dans le choix “Actions” génèrent eux aussi un fichier de commandes sans vérification d’autre chose que la syntaxe.
Groupe “Stockage” :
Le code SQL est généré quelque soit les options de configuration demandées pour le stockage; c’est le moteur qui répondra que la fonctionnalité n’est pas présente via une “ORA-00439”.
Un exemple ici sur une demande de création d’un nouveau tablespace avec de la compression avancée :
image_thumb13
Groupe “Sécurité” :
Pas de problème avec la conformité de l’utilisation des licences pour les fonctionnalités de ce groupe.
Rapports fournis
Les rapports sont des requêtes SQL enregistrées et préformatées; le logiciel en propose de nombreux exemples très utiles, et si une attention particulière est portée sur la notion d’utilisation des packs dans la plupart d’entre eux, certains sont passés au travers et peuvent en déclencher l’usage.
Voyons la liste des fautifs potentiels et commençons pour cela dans la section « Rapports de dictionnaire de données » :
“Administration de base de données/Attentes et évènements/Evènements au cours des X dernières minutes”
L’accès à la vue v$active_session_history de la requête principale et de la sous-requête est soumis à la  licence du Pack Diagnostic. La boite de dialogue de prévention “Diagnosic Pack Obligatoire” s’affiche bien :
image[4]
Vous pouvez cliquer sur « OK », cette fois cela ne déclenche aucune configuration des préférences.
Même chose pour “Evènements dans la classe d’attente au cours de la dernière heure” et “Segments au cours de la dernière heure” : accès à v$active_session_history, affichage de la boite de dialogue de prévention.
“Administration de base de données/ Mémoire/Mémoire Dynamique”
La  licence Pack Diagnostic est obligatoire car il y a accès aux tables DBA_HIST_SNAPSHOTS et DBA_HIST_SGA.
Attention, il n’y a  pas d’affichage de la boite de prévention, mais comme votre base est configurée sans les dits snapshots, le graphique doit être vide.
“Administration de base de données/Principales instructions SQL”/Principales instructions SQL par attente”
Attention, danger de déclenchement de l’utilisation du Diagnostic Pack voire du Tuning Pack !
La requête principale réalise un sous-select sur v$active_session_history.
Le rapport fils “Conseil de réglage SQL” appelle DBMS_SQLTUNE, et celui pour “Historique du temps écoulé SQL” interroge DBA_HIST_SQLSTAT.
De plus, il n’y a pas d’affichage de la boite de dialogue de prévention.
“Administration de base de données/Sessions/Sessions”
Dans les versions antérieures à la version 4.1, le rapport fils “Attentes” s’appuyait, pour Oracle > 11.1, sur une requête de la vue v$active_session_history et n’affichait pas de boite de dialogue de prévention !
Ce n’est plus le cas maintenant avec la version 4.1.0.19  que j’utilise, les informations sur les attentes viennent de v$session_wait .
Par contre, il y a deux variantes pour la requête du rapport fils “Plan d’exécution”, dont une avec l’accès à v$active_session_history (et c’est celle qui est prise dans mon environnement). Si vous voulez l’utiliser sans crainte, faites votre propre version à partir de celui fourni et supprimez la requête incriminée du rapport.
Astuce : pour voir les requêtes d’un rapport et / ou le modifier : sélectionnez le rapport, puis avec le menu contextuel (bouton droit de la souris) copiez le, collez le ensuite sous la rubrique “Rapport définis par l’utilisateur” et toujours via le menu contextuel choisissez “Modifier”. Vous trouverez les requêtes SQL correspondantes dans la section associée de l’éditeur.
“Administration de base de données/Verrous Externes/Verrous externe bloquant par utilisateur”
La requête principale ne pose pas de problème, mais le rapport fils “Instruction SQL de la session bloquante” s’appuie lui aussi sur un accès à v$active_session_history, et il n’y a aucune boite de dialogue préventive.
Faites votre propre version en supprimant cet élément pour rester conforme !
Rapports “ASH et AWR” : “Dernier rapport AWR”, ”Détail de lignes ASH”, “Graphiques Statisques ASH” et “Rapport ASH au cours des 30 dernières minutes” nécessitent bien la licence Pack Diagnostic; une tentative d’exécution provoque aussitôt l’apparition de la boite de dialogue de prévention.
Rapports non concernés par l’utilisation des packs et que vous pouvez utiliser sans crainte :

  • “Administration de base de données/Attentes et évènements/Attentes au cours de la dernière heure” et les autres : “Attentes au cours de la dernière heure pour la première|seconde|nième instance RAC »; ce sont les vues gv$waitclassmetric_history (x$kewmevmv ) et gv$system_wait_class (x$kslscs) qui sont  interrogées et qui ne sont pas dans la liste des API et vues utilisées par les Packs Diagnostic et Tuning.  La boite de prévention “Diagnostic Pack Obligatoire” s’affiche alors que ce n’est pas la réalité.
  • “Administration de base de données/Curseurs/Curseurs par session” (v$open_cursor , gv$session)
  • “Administration de base de données/Curseurs/Détail de curseur” (v$open_cursor)
  • “Administration de base de données/Journale d’alert/Journal d’alert” (x$dbgalertext)
  • “Administration de base de données/ Mémoire/Statistics SGA” (v$sga_stat)
  • “Administration de base de données/Paramètres de base de données/Paramètres autres que ceux par défaut” (v$parameter)
  • “Administration de base de données/Paramètres de base de données/Tous les paramètres ” (v$parameter)
  • “Administration de base de données/Principales instructions SQL”/Principales instructions SQL par exécution”, “Administration de base de données/Principales instructions SQL/Principales instructions SQL par Lecture de disque”, “Administration de base de données/Principales instructions SQL/Principales instructions SQL par Lecture en mémoire tampon/ligne traitée”, “Administration de base de données/Principales instructions SQL/Principales instructions SQL par Lecture tampon  (Buffer Gets)”, “Administration de base de données/Principales instructions SQL/Principales instructions SQL  par UC” (v$sql)
  • “Administration de base de données/Sessions/Nb de sessions actives”, “Administration de base de données/Sessions/Nb de sessions par Statut”, “Administration de base de données/Sessions/Nb de sessions par utilisateur du système d’exploitation”, “Administration de base de données/Sessions/Sessions actives”, “Administration de base de données/Sessions/Sessions en arrière plan”,  “Administration de base de données/Sessions/Sessions inactives”, “Administration de base de données/Sessions/Sessions  par modules”, “Administration de base de données/Sessions/Sessions  par nom utilisateur”, “Administration de base de données/Sessions/Sessions système”, “Administration de base de données/Sessions/Statistiques d’UC et de temps de session” (v$session)
  • “Administration de base de données/Stockage”; rien à signaler pour les rapports concernés, ils s’appuient tous sur des vues ou tables du dictionnaire non comprises dans l’usage des différents packs.
  • “Administration de base de données/Toutes les tables” : idem
  • “Administration de base de données/Utilisateurs” : idem
  • “Administration de base de données/Verrrous Externes/Verrous externe par utilisateur » (v$process,v$lock, v$resource, obj$, user$ et v$session)

Tous les autres rapports qui suivent ne posent pas non plus de problème de licence et s’appuient sur des interrogation du dictionnaire. Si une option (comme le cryptage ou l’occultation) n’existe pas, le résultat sera nul sans autre conséquence pour un audit.
 Autres modules impactés
Dans le menu “Outils” du bandeau principal, on retrouve par défaut un certain nombre de fonctionnalités à disposition, dont ce qui est nommé en français “Surveiller le code SQL” et qui correspond au “Real time SQL monitoring” introduit en version 11G .
Cette fonction nécessite le Pack de Tuning. Son usage depuis SQLDeveloper provoque bien l’apparition de notre boite de prévention, cette fois concernant l’usage du Tuning Pack :
image[7]
image_thumb[6]
Attention à ne pas répondre « Oui » sous peine de changer la configuration de votre connexion, répondez donc « Non ».
Et pour ne plus être embêté, supprimez la fonctionnalité du menu.
Pour ce faire, depuis “Outils”, avant dernière ligne : “Fonctionnalité”, décocher “Oracle SQL Developer – Real Time SQL Monitoring », appliquer les modifications et redémarrer l’outil pour ne plus la voir apparaitre :
image[14]
J’aurai aimé aussi pouvoir supprimer la fonctionnalité “Surveiller les sessions”, car l’affichage s’appuie sur le même rapport que “Administration de base de données/Sessions/Sessions” et dans mon environnement provoque un select sur v$active_session_history !
Mais l’option ne semble pas disponible. Peut être que Jeff Smith, le responsable produit, pourra nous proposer une solution dans le futur.
Synthèse
L’utilisation de l’outil ne déclenche pas d’options non conforme pour une version Standard Edition, à condition de :
1) Comme le prévoit l’outil, positionner correctement les préférences de chaque connexion, ne pas répondre « oui »  après la boite de prévention d’usage, ce qui change les préférences de manière implicite.
2)  Modifier  les rapports qui s’appuient sur la vue v$active_session_history, les plus sournois étant ceux liés aux sous-requêtes des répertoires “sessions” et “Verrous externe bloquant par utilisateur”, ainsi que celui sur “Principales instructions SQL par attente”.
Pour cela, créer vos propres rapports en copiant puis modifiant les existants.
3)  Supprimer les fonctionnalités non applicables à votre édition, principalement par le menu « Outils » / « Fonctionnalités » .
4) N’oubliez pas de positionner le paramètre control_mangement_pack_acess de vos bases sur NONE
Note :
Les implications sont les mêmes avec l’utilisation d’une base de données en version SE 1 (Standard Edition One) pour laquelle la seule fonctionnalité manquante est la licence RAC.
Pour la future version SE 2 (cf MOS note 2027072.1), il faudra attendre la mise à jour de la documentation.
Références :
Database licensing guide http://docs.oracle.com/database/121/DBLIC/toc.htm