mardi 12 novembre 2013

Instance Caging

Nous avons tendance à croire que le paramètre « cpu_count » de la base de données permet de restreindre le nombre de processeurs que la base de données peut utiliser, et ce n’est évidemment par le cas. On doit s’en remettre à d’autres fonctionnalités telles qu l’ « Instance caging » disponible avec Oracle Database Entreprise Edition 11g Release 2.

Instance Caging est un outil permettant de gérer et de limiter l’utilisation de processeurs par base de données. L’ « Instance caging » est particulièrement intéressant car il protège les bases de données qui se partagent des ressources d’être impacter par une base de données dont des processus exigeant et gourmand s’approprient l’ensemble des ressources et, qui a pour effet d’ébranler tous les systèmes desservis par celles-ci.

Une stratégie pour déterminer le nombre de processeurs par instance est d’activer  l’ « instance caging » puis de surveiller l’utilisation des processeurs par l’instance. Ceci peut être fait via cette requête :
select to_char(begin_time, 'HH24:MI') time,
       max(running_sessions_limit) cpu_count,
       sum(avg_running_sessions)
       avg_running_sessions,
       sum(avg_waiting_sessions)
       avg_waiting_sessions
  from v$rsrcmgrmetric_history
 group by begin_time
 order by begin_time;
Grâce aux résultats obtenus lors de l’exécution de la requête, on peut se baser sur ceci :
·        Si la valeur de la colonne « avg_running_sessions » est fréquemment inférieure à la valeur du « CPU_COUNT », cela nous indique que nous pouvons diminuer la valeur de « CPU_COUNT » sans impacter la performance.
·        Si la valeur de la colonne « avg_waiting_sessions » est constamment supérieure à la valeur du « CPU_COUNT » et que le temps réponse est en deçà des attentes, ceci indique que le CPU_COUNT est possiblement insuffisant et que la performance peut être accrue en augmentant sa valeur, en autant qu’il en a de disponible.
Après quelques jours, vous aurez des statistiques sur lesquelles vous pourrez vous baser pour restreindre le nombre de processeurs utilisés par une instance.
Pour la mise en place de l’ « instance caging », il suffit de faire ceci :
SQL> ALTER SYSTEM SET CPU_COUNT = 8 SCOPE=SPFILE;
SQL> ALTER SYSTEM SET RESOURCE_MANAGER_PLAN = 'DEFAULT_PLAN' SID=’*’ SCOPE=’BOTH’;
En utilisant le plan par défaut d’Oracle Resource Manager, il n’y aura pas d’impact car il n’y a aucune limitation.
Prendre note qu’il est mention de processeurs dans ce texte mais si vous avez des processeurs de type « Hyper-Threading », la valeur de « cpu_count » correspond plutôt à un nombre de « threads ».

La vue V$RSRCMGRMETRIC_HISTORY affiche l'historique des statistiques d'Oracle Resource Manager qui proviennet de la vue V$RSRCMGRMETRIC. Seulement la dernière heure est conservée. Cette vue fournit des informations sur l'utilisation des ressources et les temps d'attente par groupe de consommateur.

Vous pouvez consulter le lien ci-dessous. Il traite aussi de l'instance caging :
http://www.oracle-base.com/articles/11g/instance-caging-to-manage-cpu-usage-in-oracle-database-11gr2.php

mercredi 9 octobre 2013

Création d'un dossier partagé entre l'hôte et l'invité sous Oracle VM VirtualBox

Dans le gestionnaire des machines d'Oracle VM VirtualBox :

  • Cliquer sur le nom de la machine virtuelle
  • Dans la section de droite, cliquer sur "Dossiers partagés"
  • Ajouter un dossier partagé en cliquant sur le bouton. Il vous suffit de spécifier un emplacement existant sur l'hôte puis de lui attribuer un nom.

Ensuite, démarrer la machine virtuelle (s'il y a lieu) puis :

  • Ouvrir une fenêtre de terminal
  • connectez-vous avec "root"
su root
  • Positionnez-vous à la racine
cd /
  • Créer un répertoire. Vous pouvez spécifier le nom qui vous convient
mkdir download
  • Créer un lien entre le répertoire partagé et le répertoire créé précédemment. Ceci aura pour effet de rendre accessible le contenu du répertoire 
mount -t vboxsf /download download
  • Vérifier la configuration en faisant affiché le contenu du répertoire partagé 
ls -al /download

Si vous voulez que le répertoire partagé soit automatiquement accessible après un redémarrage de la machine virtuelle, ajouter une ligne semblable au fichier  "/etc/fstab" sous la forme suivante :

sharename   mountpoint   vboxsf   defaults  0   0

Exemple: 
download   /download     vboxsf   defaults  0   0

Je crois que les additions invité (vbox additions) doivent être installées sur la machine virtuelle pour que cette procédure fonctionne.

mardi 8 octobre 2013

Déplacement d'un disque .vdi d'une machine virtuelle sous Oracle VM VirtualBox

Si vous voulez déplacer un disque assigné à une machine virtuelle vers un autre disque sur la machine hôte, vous pouvez procéder de cette façon :
  • Démarrer le gestionnaire de machines virtuelles d'Oracle VM VirtualBox
  • Arrêter la machine virtuelle où le disque est attaché
  • Ouvrir le gestionnaire des médias dans le menu "Fichier"
  • Sélectionner le disque à déplacer puis cliquer sur le bouton "Libérer"
  • Fermer le gestionnaire des médias
  • Déplacer le fichier .vdi vers le nouvel emplacement
  • Dans virtualbox, cliquer sur la machine virtuelle
  • Cliquer sur "Stockage" dans la section de droite
  • Cliquer pour ajouter un disque dur et appuyer sur le bouton "Choisir un disque existant"
  • Ouvrir le gestionnaire des médias dans le menu "Fichier"
  • Supprimer la référence au disque qui est invalide car le fichier a été déplacer
  • Démarrer la machine virtuelle pour vérifier qu'elle est correcte


mardi 1 octobre 2013

Librairie "libclntsh.so.11.1" manquante lors du démarrage d'ADRCI

En voulant démarrer l'utilitaire ADRCI sur un environnement Oracle Middleware, j'ai rencontré l'erreur suivante:

adrci: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory

Pour résoudre cette erreur, il suffit d'assigner l'emplacement de la librairie à l'aide de la variable d'environnement LD_LIBRARY_PATH. Voici la démarche complète :

[oracle@LABVMSL64-WLSEE]$ adrci
adrci: error while loading shared libraries: libclntsh.so.11.1: cannot open shared object file: No such file or directory
[oracle@LABVMSL64-WLSEE]$ which adrci
/u01/oracle/Middleware/wlserver_10.3/server/adr/adrci
[oracle@LABVMSL64-WLSEE]$ ldd /u01/oracle/Middleware/wlserver_10.3/server/adr/adrci
        linux-gate.so.1 =>  (0xffffe000)
        libclntsh.so.11.1 => not found
        libnnz11.so => not found
        libdl.so.2 => /lib/libdl.so.2 (0x00b87000)
        libm.so.6 => /lib/libm.so.6 (0x00ba7000)
        libpthread.so.0 => /lib/libpthread.so.0 (0x00b8d000)
        libnsl.so.1 => /lib/libnsl.so.1 (0x00d0a000)
        libc.so.6 => /lib/libc.so.6 (0x00a3f000)
        /lib/ld-linux.so.2 (0x00a21000)
[oracle@LABVMSL64-WLSEE]$ echo $LD_LIBRARY_PATH
/u01/oracle/Middleware/patch_wls1036/profiles/default/native:/u01/oracle/Middleware/wlserver_10.3/server/native/linux/i686:/u01/oracle/Middleware/wlserver_10.3/server/native/linux/i686/oci920_8
[oracle@LABVMSL64-WLSEE]$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/u01/oracle/Middleware/wlserver_10.3/server/adr
[oracle@LABVMSL64-WLSEE]$ adrci

ADRCI: Release 11.2.0.2.0 - Production on Tue Oct 1 14:57:48 2013

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

No ADR base is set
adrci>

mercredi 25 septembre 2013

Mémoire insuffisante occasionnée par un bug de l'analyseur (parser) XML

Lors du traitement de contenu XML, une erreur de mémoire insuffisante a été rencontrée. Le message d’erreur exacte est le suivant :

ORA-27163: mémoire insuffisante
ORA-06512: à "SYS.XMLTYPE", ligne 272
ORA-06512: à ligne 1
ORA-06512: à ligne 15

Après avoir diagnostiquer le problème, nous avons trouver une solution de contournement sur MOS (My Oracle Support). Il suffit d'exécuter cette commande pour désactiver la nouvelle version du parser XML et d'utiliser plutôt l'ancienne :

Alter session set events='31156 trace name context forever, level 0x400';

Ce problème a été rencontré sous Oracle Database 11.2.0.3.6 sur un plateforme Red Hat Enterprise Linux 64bits.

jeudi 23 mai 2013

Accès au journal de la base de données (alert.log)


Un de mes collègues de travail m’a parlé d'un besoin qu'il avait en clientèle. Ce besoin consiste à accéder au fichier log de la bd (alert log) via une requête. Voici quelques façons qui me viennent à l’idée :

  • La table « x$dbgalertext » est une table externe mappé sur le fichier alert log
  • Depuis 11g, les alert log sont stocké en fichier texte mais aussi en XML donc facilement exploitable.
  • Il existe UTL_FILE pour effectuer des opérations
  • Pourquoi ne pas exploiter les tables externes en mettant en référence le fichier log désiré
  • Le package « dbms_system.ksdwrt » permet d’écrire dans le fichier alert log.


jeudi 28 février 2013

Gérer les DBMS_JOB des autres schémas

Enfin terminé les restrictions concernant la gestion des jobs (DBMS_JOBS) appartenant aux autres schémas !!! Vous ne verrez plus le message :
ORA-23421: job number 99 is not a job in the job queue
Il suffit d'utiliser le package "dbms_ijob". Ce package permet, en tant que DBA, de gérer les jobs des autres utilisateurs. Je ne l'ai pas explorer mais tout semble indiquer que le package "dbms_ijob" peut être utilisé de la même façon que "dbms_job".

Selon Tom Kyte, le package "dbms_job" est le seul package supporté par Oracle donc, à utiliser avec modération au cas où... En passant, le caractère "I" dans "IJOB" signifie  "internal".

mardi 5 février 2013

Utilisation d'Embedded PL/SQL Gateway (EPG)


Embedded PL/SQL gateway (EPG) est intégré à la base de données, plus précisément à Oracle XML DB HTTP listener. Oracle XML DB HTTP listener et Embedded PL/SQL gateway agit au même titre qu'Oracle HTTP Server (OHS) avec mod_plsql et procure les mêmes fonctionnalités internes. Le principale avantage d'utiliser EPG est son architecture très simple qui permet un déploiement simple et rapide (2-tiers) avec une configuration minimale pour une utilisation soit personnelle, de tests ou tout simplement temporaire.

D'un point de vue sécurité, EPG n'est pas l'architecture recommandée pour les applications déployées en production. EPG est principalement utilisé pour des environnements de développement, de tests ou d'autres environnements internes impliquant peu d'utilisateurs. EPG n'est pas la solution idéale pour desservir une application critique accédée par une multitude d'utilisateurs.

Embedded PL/SQL gateway utilise l'architecture partagée (shared server) de la base de données Oracle. Dans cette situation, la valeur du paramètre "SHARED_SERVERS" doit être ajustée pour s'assurer qu'elle soit optimale et en mesure de répondre au nombre d'utilisateurs qui accèdent aux applications sous APEX. La valeur du paramètre "SHARED_SERVERS" peut être vérifiée en exécutant la commande suivante :
show parameter shared_servers
Par défaut la valeur du paramètre est "1". Si cette valeur reste ainsi, cela aura pour effet de provoquer de la contention lors de l'accès aux applications car il n'y a qu'un seul processus pour gérer les requêtes initiées par les utilisateurs.

Les désavantages à utiliser "Embedded PL/SQL gateway" versus "Oracle HTTP Server" sont :

  • plus grande sollicitation de la base de données
  • plus difficile à diagnostiquer les problèmes (utilisation d'API)
  • moins de fonctionnalités et de souplesse
  • configuration plus limitée et ardue
  • aucune répartition de la charge ou de fonctionnalité de basculement (failover)
  • impossible d'installer EPG sur un serveur autre que celui de la base de données ce qui oblige :
    • d'exposer la base de données directement sur Internet
    • si arrêt de base de données alors arrêt du serveur web aussi (données statiques inaccessibles)

Je n'ai fait aucune mention d'APEX Listener et c'était volontaire. Lors de nos plus récentes mises à l'essai de ce produit, il était plus ou moins évident à configurer et je considère qu'il manque un peu de maturité. N'empêche qu'il est de plus en plus intéressant car Oracle investit beaucoup de temps à développer cette nouvelle solution qui saura répondre davantage aux besoins actuels et futurs. Je vous conseille de gardez un oeil sur APEX Listener car il est voué à un bel avenir.

mardi 29 janvier 2013

Support de Java sous Oracle Fusion Middleware et/ou Weblogic


Lorsque Java SE est utilisé pour faire fonctionner un produit Oracle, il est considéré comme un composant intégré à ce produit et il se conforme au support de ce dernier (Premier Support life cycle) tout en respectant la politique d'Oracle Lifetime Support.

Voici des exemples provenant du site de support d’Oracle :

  • J2SE 1.4.2 End of Life (EOL) was announced for October 2008 and J2SE 5.0 for October 2009. This Java SE End of Life applies to Java SE when used standalone or with 3rd party applications. Many Oracle Fusion Middleware products are installed with or run on these versions of J2SE, (now referred to as Java SE). For Oracle Fusion Middleware products, the Oracle Lifetime Support Policy's Extended Support date takes precedence for a given Oracle Fusion Middleware product.
  • Java SE 6  End of Life (EOL) is provided here. This Java SE End of Life applies to Java SE when used standalone or with 3rd party applications. Many Oracle Fusion Middleware products are installed with or run on this version of  Java SE. For Oracle Fusion Middleware products, the Oracle Lifetime Support Policy's Extended Support date takes precedence for a given Oracle Fusion Middleware product.
  • For Java SE 7 and newer, the same guidelines will be applicable and as according to the Oracle Fusion Middleware Lifetime Support Policy document.
Pour plus de détails, réfèrez-vous à  la note d’Oracle « Java SE End of Life and Oracle Fusion Middleware Policy [ID 952075.1] »

Un accès SFTP n'a jamais été aussi facile

Voici une simple et complète intégration du support SFTP à Windows Explorer qui s'intitule "Swish".

Swish ajoute un support SFTP à Windows Explorer pour qu'on puisse accéder à nos fichiers sur un autre ordinateur/serveur en toute sécurité via SSH. Swish est facile à utiliser car il s'intègre parfaitement à Windows Explorer pour travailler avec des fichiers distants comme si c'était des disques locaux.

Swish est une belle option pour les utilisateurs de Windows parce qu'il est simple d'utilisation.

Pour plus de détails : http://www.swish-sftp.org/

lundi 28 janvier 2013

Impossible de recréer la liste de contrôle d'accès (ACL)


Suite à la suppression de la liste nommée "power_users.xml" qui avait été créée à l'aide du code PL/SQL fournit par Oracle, je n'étais plus en mesure de la recréer. J'obtenais l'erreur "ORA-01403 : NO DATA FOUND" lors de l'exécution des commandes suivantes dans SQL*Plus sous le compte "SYS" sur une base  de données 11gR2 (11.2.0.3) :
SYS@lab11g> exec DBMS_NETWORK_ACL_ADMIN.CREATE_ACL('power_users.xml','test','APEX_040100', TRUE, 'connect');
SYS@lab11g> exec DBMS_NETWORK_ACL_ADMIN.ASSIGN_ACL('power_users.xml','*');
Après avoir exécuté plusieurs requêtes pour consulter la configuration de l'ACL dans le dictionnaire de la base de données, je fus surpris du résultat de la requête suivante :

SYS@lab11g> select host from net$_acl;
HOST
-----------------------------------------------------
*
192.168.1.109
ftp.oracle.com

La requête m'indiquait que le host "*" était toujours présent dans la base de données malgré la suppression de la liste "power_users.xml". J'ai alors vérifié si ce "host" était assigné à une autre liste dont j'aurais peut-être oublié :
SYS@lab11g> select *
from DBA_NETWORK_ACLS T1, NET$_ACL t2
where t1.aclid=t2.aclid
and t2.host = '*';
no rows selected
Le host "*" n'étant assigné à aucune liste, je l'ai alors supprimé :
SYS@lab11g> delete from NET$_ACL where host = '*';
1 row deleted.
SYS@lab11g> commit;
Commit complete.
Suite à la suppression, je fus en mesure de recréer la liste telle que désirée.

Je ne peux m'empêcher de vous dire qu'il n'est pas recommandé de supprimer des données directement du dictionnaire de la base de données. Mieux vaut contacter le support d'Oracle.

jeudi 24 janvier 2013

Une limite au maximum

Lors de la création d'une base de données Oracle 11gR2 sous Microsoft Windows Server avec l'utilitaire DBCA, nous avons rencontré l'erreur suivante :

ORA-02249: missing or invalid value for MAXLOGMEMBERS

Nous savions que ceci était directement lié à la création des fichiers de contrôle plus précisément au nombre de membres qui sont autorisés dans chaque groupe de journaux (redo log).

Dans DBCA, nous sommes revenu à l'écran de saisie concernant les paramètres nous permettant de spécifier la valeur de "MAXLOGMEMBERS". La valeur que nous avions inscrite était "6". Rien de très élevé, vous en conviendrez !

Pour comprendre la cause de cette erreur, nous avons effectué quelques recherches pour finalement tomber sur un document d'Oracle indiquant que cela est dû à une restriction codé en dur qui oblige la valeur à être comprise entre 1 et 5. Oracle considère qu'il est peu probable qu'une base de données ait à utiliser plus de 2 ou 3 membres pour chaque groupe de fichiers log. Par conséquent, le maximum de 5 a été mis en place.

La documentation d'Oracle n'est pas clair à ce sujet. Elle indique que la valeur dépend de notre système d'exploitation. Dans le document "Oracle® Database Administrator’s Reference" pour Linux/Unix, il est indiqué que la maximum est 5. Un peu plus de précision dans la documentation ou dans le message d'erreur aurait été apprécié.