Oracle安装¶
- 作者
Till Adams
- 最后更新
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)
)
)
您必须知道数据源的名称,在本例中,这是“我的Oracle”,将在后面使用。做完了,你可以用 User/Password@MY_ORACLE
在 Mapfile 中连接到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”。在这个文件中,定义了apache cgi目录。我们的文件如下:
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¶
在我们开始创建 Mapfile 之前,请确保您有自己的访问数据(用户/密码),并且您知道Oracle SRID,这可能与-:term:`EPSG`项目不同。
数据访问参数:
CONNECTIONTYPE oraclespatial
CONNECTION 'user/password@MY_ORACLE'
DATA 'GEOM FROM MY_LAYER USING SRID 82032'
[...]
在哪里:
geom是几何列的名称
我的层表的名称
82032相当于EPSG代码31468(德国投影系统)
测试和错误处理¶
所以你现在很好。在应用程序中加载 Mapfile 并进行尝试。如果一切正常:很好,如果不是,可能会出现这种丑陋的错误消息(这是一个通过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实用程序 shp2img .
假设您在编译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
如果没有,这可能会指向 Mapfile 中的任何错误或直接访问数据的方式。在这种情况下,请看一下 空间数据库 . 如果您的Oracle Connect出现问题,则会出现与上面相同的消息(msdrawmap()…)。检查 Mapfile 语法和/或Oracle的环境设置。
对于debian/ubuntu,还需要检查文件“/etc/environment”,并通过测试添加与 System Variables
如果输出正常,您可以查看生成的图像(output.png)。然后,您的问题减少到Apache对Oracle主目录的访问。仔细检查您的Apache配置。请注意,apache.config文件在几个Linux发行版中有所不同。在本文中,我们将讨论Ubuntu,它应该与Debian相同。