Configurer le processus extproc pour accéder à ST_Geometry dans Oracle

Dans Oracle, les fonctions SQL ST_Geometry utilisent une bibliothèque partagée accessible par Oracle via l’agent de procédure externe Oracle, ou extproc. Oracle doit pouvoir accéder au fichier de bibliothèque physique pour que vous puissiez effectuer l’une des actions suivantes :

Vous devez configurer la structure de procédure externe Oracle pour appeler la bibliothèque ST_Geometry, ST_SHAPELIB, afin d‘effectuer les tâches répertoriées ci-dessus.

Étapes préparatoires

La bibliothèque ST_Geometry est créée pour les systèmes d’exploitation spécifiques. Vous pouvez copier le fichier depuis une installation ArcGIS Server ou le télécharger depuis My Esri.

Les bibliothèques sont installées avec ArcGIS Server dans les emplacements suivants :

  • <ArcGIS Server installation directory>\ArcGIS\Server\DatabaseSupport\Oracle\Windows64\st_shapelib.dll
  • <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/linux64/libst_shapelib.so
  • <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/ibmaix64/libst_shapelib.so
  • <ArcGIS Server installation directory>/arcgis/server/DatabaseSupport/oracle/sunos64/libst_shapelib.so

L’instance Oracle doit avoir accès à la bibliothèque ST_Geometry. Placez la bibliothèque sur l’ordinateur Oracle dans un répertoire auquel l’instance a accès ou, si ArcGIS Server et Oracle sont installés sur le même ordinateur, configurez le fichier extproc.ora pour pointer vers le fichier dans le répertoire d’installation de ArcGIS Server.

Remarque :

Si vous configurez le fichier extproc.ora pour pointer vers le fichier dans le répertoire d’installation ArcGIS Server, vous pouvez ignorer les étapes préparatoires ci-dessous. Cependant, exécuter ArcGIS Server et Oracle sur le même ordinateur peut entraîner des problèmes de performance en raison des conflits de ressources sur l’ordinateur.

Avant de configurer le fichier extproc de Oracle, effectuez les opérations suivantes :

  1. Si l’instance Oracle n’a pas accès aux emplacements d’installation de ArcGIS Server indiqués ci-dessus, téléchargez la bibliothèque ST_Geometry depuis My Esri ou copiez le fichier depuis un ordinateur ArcGIS Server dans un répertoire sur l’ordinateur Oracle.
    Remarque :

    Veillez à télécharger ou à copier la bibliothèque appropriée pour votre système d’exploitation Oracle.

    La bibliothèque ST_Geometry requiert Microsoft Visual C++ Redistributable Package (x64) lorsqu’elle est déployée sur un serveur Microsoft Windows. Reportez-vous à la rubrique Configuration requise des bases de données Oracle pour connaître la version requise du paquetage. Si ce paquetage n’est pas présent sur le serveur Oracle, téléchargez-le depuis le site de Microsoft et installez-le.

  2. Lorsque vous exécutez l’outil de géotraitement Créer un type spatial pour activer ST_Geometry dans une base de données Oracle ou lorsque vous exécutez l’outil de géotraitement Créer une géodatabase d’entreprise ou Activer une géodatabase d’entreprise pour créer une géodatabase, les outils définissent un chemin d’accès par défaut à la bibliothèque ST_SHAPELIB.
  3. Connectez-vous à l’instance Oracle en tant qu’utilisateur sde depuis un client SQL, et exécutez la commande SQL suivante pour confirmer que le chemin défini par l’outil correspond à l’emplacement de la bibliothèque ST_Geometry :

    SELECT file_spec
     FROM user_libraries
     WHERE library_name = 'ST_SHAPELIB';

    Si le chemin renvoyé ne correspond pas à l’emplacement du fichier de bibliothèque ST_Geometry, recréez la bibliothèque après avoir configuré le processus extproc.

Configurer le processus extproc

Configurez le fichier Oracle extproc.ora de sorte qu’il pointe vers l’emplacement du fichier de bibliothèque ST_Geometry.

  1. Effectuez une sauvegarde du fichier extproc.ora sur le serveur Oracle.
  2. Ouvrez le fichier extproc.ora dans un éditeur de texte et modifiez-le de sorte qu’il pointe vers l’emplacement de la bibliothèque st_shapelib.dll (Windows) ou libst_shapelib.so (Linux ou UNIX).

    Dans cet exemple, aucun client ArcGIS n’est installé sur le serveur Oracle Windows. Par conséquent, le fichier st_shapelib.dll a été copié dans un répertoire nommé mylibraries sur l’ordinateur Oracle. La ligne suivante est ajoutée à extproc.ora pour désigner la bibliothèque ST_Geometry dans ce répertoire :

    SET EXTPROC_DLLS=ONLY:C:\\mylibraries\\st_shapelib.dll

    Dans cet exemple, sur un serveur Linux ou UNIX, la ligne suivante est ajoutée pour désigner la bibliothèque ST_Geometry dans le répertoire esrilibs de l’utilisateur, créé sur le serveur Oracle pour stocker la bibliothèque :

    SET EXTPROC_DLLS=ONLY:/user/esrilibs/libst_shapelib.so

  3. Enregistrez et fermez le fichier extproc.ora.

    Il peut être nécessaire de redémarrer l’instance Oracle pour qu’elle identifie les changements apportés au fichier extproc.ora.

  4. Si le fichier de bibliothèque ST_Geometry ne se trouve plus à l’emplacement par défaut ou si aucun emplacement n’a été défini, créez ou recréez la bibliothèque ST_SHAPELIB dans la base de données Oracle.

    Vous devez vous connecter à la base de données en tant qu’utilisateur sde pour créer ou recréer la bibliothèque ST_Geometry.

    Dans cet exemple, la bibliothèque ST_SHAPELIB est définie sur le répertoire mylibraries d’un serveur Oracle Windows dans lequel le fichier st_shapelib.dll a été placé.

    CREATE or REPLACE LIBRARY ST_SHAPELIB
     AS 'C:\mylibraries\st_shapelib.dll';

  5. Si vous avez recréé la bibliothèque, recompilez le paquetage sde.st_geometry_shapelib_pkg.

    ALTER PACKAGE sde.st_geometry_shapelib_pkg COMPILE
     REUSE SETTINGS;

    Les clients qui doivent accéder à la bibliothèque (y compris les services Web) doivent se reconnecter à la base de données.

Valider la configuration du fichier extproc

Vous pouvez interroger la bibliothèque ST_Geometry pour vous assurer que le processus extproc peut y accéder.

  1. Connectez-vous à un client SQL Oracle.
  2. Exécutez la requête suivante :

    SELECT sde.ST_AsText(SDE.ST_Geometry('POINT (10 10)', 0)) FROM dual;

    Si le processus extproc est configuré correctement, la requête renvoie le résultat suivant :

    SDE.ST_ASTEXT(SDE.ST_GEOMETRY('POINT(1010)',0)) -------------------------------------------------------------------------------- POINT ( 10.00000000 10.00000000)

    Si le processus extproc n’est pas configuré correctement, l’un ou plusieurs des messages d’erreur suivants peuvent s’afficher :

    ORA-06520: PL/SQL : Erreur lors du chargement de la bibliothèque externe

    ORA-06522 : Chargement DLL impossible

    ORA-06512 : « SDE.ST_GEOMETRY_SHAPELIB_PKG », ligne 0

    ORA-06512 : « SDE.ST_GEOMETRY_OPERATORS », ligne 68

Mises à niveau et bibliothèque ST_Geometry

Si vous pointez vers l’emplacement d’installation ArcGIS Server, vous recevez les bibliothèques mises à niveau lorsque vous installez une nouvelle version ArcGIS Server. Si vous placez les bibliothèques dans un autre emplacement, vous devez télécharger ou copier de nouvelles versions du fichier de bibliothèque pour obtenir les correctifs et les améliorations inclus dans de nouvelles versions de la bibliothèque.

Oracle peut marquer la bibliothèque comme non valide lorsqu’elle est remplacée ou après la mise à jour de l’instance Oracle par vos soins. Oracle recompile parfois automatiquement les objets de base de données non valides lorsque les objets sont référencés par un client. Cependant, dans certains cas, ils ne sont pas compilés automatiquement.

La bibliothèque ST_Geometry appartient à l’utilisateur sde. Pour vérifier le statut de la bibliothèque (et de tous les fichiers appartenant à l’utilisateur sde), connectez-vous à un client SQL en tant qu’utilisateur sde et exécutez l’instruction suivante :

SELECT object_name, object_type
  FROM USER_OBJECTS
  WHERE STATUS = 'INVALID';

Si le corps du paquetage sde.st_geometry_shapelib_pkg est renvoyé dans la liste des objets non valides, recompilez-le comme décrit à l’étape 5 de la section Configurer le processus extproc ci-dessus.

Si plusieurs objets ne sont pas valides, vous pouvez tous les recompiler dans la même structure. Consultez la documentation de Oracle pour prendre connaissance des privilèges requis et des instructions de recompilation de plusieurs objets simultanément.