Installation d’Oracle

Author:Till Adams
Last Updated:2007/02/16

Préface

Ce document explique la configuration complète nécessaire pour avoir la connexion entre le CGI MapServer et un serveur de base de données Oracle sous une machine linux (Ubuntu). Le but de ce document est juste de compiler une connaissance “google” à UN seul endroit. En espérant qu’il permettra à de nombreuses personnes de passer autant de tant que nous pour cela.

Ce manuel a été écrit, parce que j’ai perdu plusieurs jours sur Google pour permettre à mon Mapserver d’accéder à une base de données Oracle. Je ne suis PAS un expert Oracle, donc le but du document est juste de concentrer à UN seul endroit cette connaissance éparpillée. En espérant, que cela évitera à d’autres utilisateurs de perdre autant de temps sur ce problème que moi! (Ou si vous avez le choix, essayez PostGIS ;-))

Avant que nous commencions, quelques connaissances basiques que nous ignorions avant:

  • MapServer peut accéder à de la donnée dans n’importe quelle installation de Oracle Spatial ou de Oracle Locator! Oracle locator est fournit avec chaque instance de Oracle, il n’y a pas de licence supplémentaire pour cela.

  • Il n’y a pas besoin de faire l’installation d’autres paquets à part oracle/oracle OCI

Suppositions système

Nous assumons que Oracle est déjà installé, qu’il y a une base de données et qu’elle contient des données géospatiales. Les chemins suivants doivent être connus par le lecteur:

  • ORACLE_HOME
  • ORACLE_SID
  • ORACLE_BASE
  • LD_LIBRARY_PATH

Nous supposons aussi que vous avez installé apache2 (notre version était la 2.0.49) et vous êtes habitués à travailler avec des systèmes Linux/UNIX. Nous présupposons égelement que vous êtes capables d’utiliser l’éditeur vi/vim.

Nous nous assurons que l’utilisateur Oracle qui a accédé plus tôt à la base de données a les droits d’écriture au répertoire oracle_home.

Bous assumon aussi que vous avez déjà configuré le fichier tnsnames.ora. Il devrait ressembler à ceci:

MY_ORACLE =
    (DESCRIPTION =
        (ADDRESS = (PROTOCOL = TCP)(HOST = host)(PORT = 1521))
        (CONNECT_DATA =
            (SERVICE_NAME = your_name)
        )
    )

Il est important que vous connaissiez le NOM de votre source de données, dans cet exemple, c’est “MY_ORACLE” et ile sera utilisé plus loin. Après avoir fait cela, vous pouvez définir User/Password@MY_ORACLE dans votre mapfile pour vous connecter à la base de données Oracle. Mai avant, nous avons encore des choses à faire.

Compiler Mapserver

Compiler comme une compilation normale et définir ce drapeau:

--with-oraclespatial=/path/to/oracle/home/</p>

Si le “configure” et le make de MapServer se passent bien, essayez

./mapserv -v

Cela devrait au minimum vous renvoyer cette sortie:

INPUT=ORACLESPATIAL

Si vous avez ça, vous êtes bons du point de vue de Mapserver

Définir les variables d’environnement

Il est important de régler correctement toutes les variables d’environnement. ceraines sont pour la configuration complète du système et d’autres sont utilisées pour le répertoire cgi dans votre configuration Apache.

Variables système

Sur Ubuntu (et de nombreux autres systèmes), il y a un fichier “/etc/profile” qui définit les variables d’environnement pour tous les utilisateurs du système (vous voudrez peut être des variables d’environnement spécifiques en éditant le fichier des utilisateurs ”.profile” dans leur répertoire home, mais habituellement les utilisateurs de la base de données Oracle ne sont pas des utilisateurs du système avec leur propre home)

Définir les variables suivantes

$ cd /etc


$ echo export ORACLE_HOME=/path/to/oracle/home >> /etc/profile

# **(e.g. ORACLE_HOME=/app/oracle/ora10g)

$ echo export ORACLE_BASE=path/to/oracle >> /etc/profile

# **(e.g. ORACLE_HOME=/app/oracle)

$ echo export ORACLE_SID=MY_ORACLE >> /etc/profile

$ echo export LD_LIBRARY_PATH=path/to/oracle/home/lib >> /etc/profile

# **(e.g. ORACLE_HOME=/app/oracle/ora10g/lib)

La commande est silencieuse, donc il n’y a pas de sortie système si vous n’avez pas fait d’erreur de frappe!

Paraméter l’environnement Apache

Sometimes it is confusing WHERE to set WHAT in the split apache2.conf-files. In the folder “/etc/apache2/sites_available” you find your sites-file. If you did not do sth. Special e.g. installing virtual hosts, the file is named “default”. In this file, the apache cgi-directory is defined. Our file looks like this:

ScriptAlias /cgi-bin/ /var/www/cgi-bin/
<Directory "/var/www/cgi-bin">
       AllowOverride None
       Options ExecCGI -MultiViews +SymLinksIfOwnerMatch
       Order allow,deny
       Allow from all
</Directory></p>

Dans ce fichier, les variables d’environnement locales doivent être définies. Nous avons fait cela dans un bloc “location” ressemblant à ceci:

<Location "/cgi-bin/">
    SetEnv ORACLE_HOME "/path/to/oracle/home"
</Location></p>

Où /cgi-bin/ dans le bloc “location block” se réfère au script alias /cgi-bin/ et le répertoire TNS_ADMIN pointe vers l’emplacement du fichier tnsnames.ora.

Ensuite, redémarrer apache:

$ /etc/init.d/apache2 force-reload

Créer un mapfile

Avant de commencer à créer votre mapfile, assurez-vous d’avoir un accès à la base de données (Utilisateur/Mot de passe) et que vous connaissiez le SRID Oracle, qui peut être différent du code EPSG de PROJ!

Les paramètres d’accès aux données

[...]

Où:

  • GEOM est le nom de colonne géométrique

  • MY_LAYER le nom de la table

  • 82032 est l’équivalent au code EPSG 31468 (système de projection de l’Allemagne)

Tests et gestion dees erreurs

Donc, c’est bien maintenant. Charger le mapfile dans votre application et l’essayer. Si tout se passe bien, Super; sinon, un message d’erreur peut avoir lieu (celui-ci vient d’une requête GetMap interrogeant Mapserver via l’interface WMS):

<ServiceExceptionReport version="1.0.1">
    <ServiceException>
        msDrawMap(): Image handling error. Failed to draw layer named 'test1'.
        msOracleSpatialLayerOpen(): OracleSpatial error. Cannot create OCI Handlers.
        Connection failure. Check the connection string. Error: .
    </ServiceException>
</ServiceExceptionReport>

Cela nous renvoie qu’il y a peut être un problème avec la connexion à la base de données. Avant tout, vérifions si le mapfile est bon. Poir cela, nous utilisons le programme utilitaire Mapserver shp2img.

Assumons que vous êtes dans le répertoire où vous avez compilé Mapserver et lancez shp2img :

$ cd /var/src/mapserver_version/

$ shp2img -m /path/to/mapfile/mapfile.map -i png -o /path/to/output/output.png

La sortie de la commande devrait ressembler à cela

[Fri Feb  2 14:32:17 2007].522395 msDrawMap(): Layer 0 (test1), 0.074s
[Fri Feb  2 14:32:17 2007].522578 msDrawMap(): Drawing Label Cache, 0.000s
[Fri Feb  2 14:32:17 2007].522635 msDrawMap() total time: 0.075s

Si ce n’est pas le cas, cela vous guidera vers n’importe quelle erreur de votre mapfile ou une manière d’accéder à la donnée directement. Dans ce cas, regardez Oracle Spatial. S’il y a un problème avec votre connexion à Oracle, le même message que ci-dessus (MsDrawMap() ...) devrait être renvoyé. Vérifiez la syntaxe de votre mapfile et/ou la configuration de l’environnement pour Oracle.

Pour Debian/Ubuntu, ça vaut aussi le coup de vérifier le fichier “/etc/environment” et de tester judicieusement l’ajout de variables système comparables à System Variables

Si votre sortie est OK, vous devriez regarder aussi l’image générée (output.png). Ensuite, votre problème se réduit aux accès de apache au répertoire home de oracle. Vérifiez avec attention votre configuration apache. Merci de noter que le fichier de configuration de apache diffère selon les distributions linux. Pour ce document, nous parlons de Ubuntu, qui devrait être similaire à celui de Debian.