Oracle安装

作者

直到亚当斯

最后更新

2007-02-16

序言

本文档解释了获取MapServer之间的连接所需的全部配置。 CGI 以及Linux(Ubuntu)设备上的Oracle数据库服务器。这份文件的目的只是把大量的谷歌知识放在一个地方。希望它能保护许多人比我花在模拟上的时间!

这本手册是写的,因为我花了好几天的时间在网上搜索,让我的UMN能够访问一个Oracle数据库。我不是甲骨文专家,所以本文的目的只是把大量的谷歌知识放在一个地方。希望它能保护许多人比我花在模拟上的时间!(或者:如果你有选择:尝试 PostGIS ;(-))

在我们开始之前,我不知道一些基本知识:

  • MapServer可以从任何Oracle定位器安装中访问Oracle空间和地理数据!Oracle定位器随每个Oracle实例一起提供,不需要额外的许可证。

  • 除了Oracle/Oracle OCI之外,不需要进一步安装任何软件包。

系统假设

我们假设已经安装了Oracle,数据库中有一个数据库和一些地理数据。读卡器应该知道以下路径:

  • ORACLE_HOME

  • ORACLE_SID

  • ORACLE_BASE

  • LD_LIBRARY_PATH

我们还假设您已安装 apache2 (我们的版本是2.0.49),您可以使用Linux/Unix系统。我们还认为你能应付编辑 vi/vim .

我们确保以后访问数据库的Oracle用户具有对Oracle_主目录的写访问权。

我们还假设,您已经设置了tnsnames.ora文件。应该是这样的:

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

知道数据源的名称是很重要的,在本例中这是“MY_ORACLE”,将在后面使用。做完了,你就可以用 User/Password@MY_ORACLE 以连接到Oracle数据库。但首先,我们必须做更多的事情。

编译映射服务器

编译为正常编译并设置此标志:

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

如果mapserver配置和运行良好,请尝试

./mapserv -v

这至少应该给出这个输出:

INPUT=ORACLESPATIAL

如果你得到了,从MapServer的角度看你很好。

设置环境变量

正确设置所有环境变量很重要。一方面要设置系统范围的环境变量,另一方面在Apache配置中应该为CGI目录设置一些变量。

系统变量

在Ubuntu(以及许多其他系统上)上有一个文件“/etc/profile”,它为系统上的所有用户设置环境变量(您也可以通过编辑主目录中的用户“.profile”文件来指定特定于用户的环境变量,但Oracle数据库用户通常不是有自己家的系统用户)。

设置以下变量:

$ 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)

这个命令是无声的,所以如果您没有错误地输入任何内容,就没有系统输出!

设置Apache环境

有时,在拆分中设置什么内容会让人感到困惑 apache2.conf 档案。在文件夹中 /etc/apache2/sites_available 您可以找到您的站点的文件。如果您没有执行任何特殊操作(例如安装虚拟主机),则该文件将被命名为“Default”。在该文件中,定义了ApacheCGI目录。我们的文件如下所示:

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>

在此文件中,必须设置本地Apache环境变量。我们是在这样一个位置块内完成的:

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

其中,opening location块中的/cgi bin/引用脚本别名/cgi bin/,tns_admin目录指向tnsnames.ora文件的位置。

然后重新启动Apache:

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

创建 Mapfile

在我们开始创建映射文件之前,请确保您有自己的访问数据(用户/密码),并且您知道Oracle SRID,这可能与项目不同。- EPSG 你说什么?

数据访问参数:

CONNECTIONTYPE oraclespatial
CONNECTION 'user/password@MY_ORACLE'
DATA 'GEOM FROM MY_LAYER USING SRID 82032'

[...]

在哪里?

  • geom是几何列的名称

  • 我的层表的名称

  • 82032相当于EPSG代码31468(德国投影系统)

测试和错误处理

所以你现在很好。在应用程序中加载映射文件并进行尝试。如果一切正常:很好,如果不是,可能会出现这种丑陋的错误消息(这是一个通过WMS接口作为getmap请求查询mapserver的CMAE):

<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>

这向我们指出,与数据库的连接可能有问题。首先,让我们检查一下, Mapfile 是否正常。因此,我们使用mapserver实用程序 Sp2IMG .

假设您在编译mapserver并运行shp2img的目录中:

$ cd /var/src/mapserver_version/

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

命令的输出应该如下所示:

[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

如果没有,这可能会指向映射文件中的任何错误或直接访问数据的方式。在这种情况下,请看一下 空间数据库 . 如果您的Oracle Connect出现问题,则会出现与上面相同的消息(msdrawmap()…)。检查映射文件语法和/或Oracle的环境设置。

对于debian/ubuntu,还需要检查文件“/etc/environment”,并通过测试添加与 System Variables

如果输出正常,您可以查看生成的图像(output.png)。然后,您的问题减少到Apache对Oracle主目录的访问。仔细检查您的Apache配置。请注意,apache.config文件在几个Linux发行版中有所不同。在本文中,我们将讨论Ubuntu,它应该与Debian相同。