通过ArcGIS帮助文档得知ArcGIS 10.4支持的Oracle数据库有 Oracle 11g R2 11.2.0.4 和 Oracle 12c R1 12.1.0.2
1 安装 Oracle 12c R1
在安装了ArcGIS 10.4 的电脑上,安装Oracle 12c R1的数据库,运行setup.exe
出现下面安装加载界面
不勾选 我希望通过My Oracle Support 接收安全更新
点击消息窗体的 是
,并点击 下一步
选择 创建和配置数据库
,并点击 下一步
笔者是个人使用数据库,通常装在笔记本电脑/一般台式机上,所以选择 桌面类
,并点击 下一步
根据Oracle的建议,选择 创建新Windows用户
,并设置 用户名
为:oracle
,为方便记忆密码,设置 口令
为:oracle
,然后点击 下一步
设置字符集为utf-8,管理口令
为:orcl
,不勾选 创建为容器数据库
,然后单击 下一步
。
(PS: 在Oracle Database 12c中,可插入数据库(Pluggable Database)为云计算而生,且为收费项目,Pluggable Database 其体系结构的核心是:由一个容器数据库(CDB)和多个可插入式数据库(PDB)构成,PDB包含独立的系统表空间和SYSAUX表空间等,但是所有PDB共享CDB的控制文件、日志文件和UNDO表空间。各个PDB之间互访需要通过DB Link进行,就仿佛是多个数据库一样。)
若勾选 创建为容器数据库
,ArcMap 建立Oracle的企业地理数据库会出现下面问题:
Executing: CreateEnterpriseGeodatabase Oracle 192.168.220.203/orcl # DATABASE_AUTH sys ***** SDE_SCHEMA sde ***** sde
C:\Users\Administrator\Desktop\ArcGISforServerAdvancedEnterprise_server.ecp
Start Time: Wed Feb 12 09:17:20 2014
User has privileges required to create database objects.
Tablespace created.
Error creating geodatabase admin user. [ERROR: Failed to create new Oracle user sde (-51).
Error: Underlying DBMS error (-51).
Extended error code: (65096)
ORA-65096: invalid common user or role name]
Failed to execute (CreateEnterpriseGeodatabase).
Failed at Wed Feb 12 09:17:32 2014 (Elapsed Time: 12.37 seconds)
上述问题可在 https://blog.csdn.net/linghe301/article/details/19110539
找到解决方法,本文不做详细介绍
忽略上述添加的 口令
不符合Oracle建议的标准,点击 是
等待 先决条件检查
完成
检查安装程序设置是否有问题,然后点击 安装
进入程序安装过程,等待安装完成
安装过程中,当数据库orcl建立成功后,会弹出窗体,单击 口令管理
默认情况下,只解锁了sys和system用户,为便于记忆,设置这两个用户访问orcl数据库的口令均为:oracle
Oracle Database 安装结束,点击 关闭
2 ArcMap 创建 Oracle 12c R1 地理数据库
安装Oracle 12c R1的客户端。电脑安装了ArcMap,需要安装32位客户端,安装ArcGIS for Server,需要安装64位客户端,同时安装ArcMap和ArcGIS for Server,需要同时安装32位和64位客户端
设置客户端环境变量。如果 ArcMap 和 ArcGIS for Server 安装在同一台 Windows 计算机上,则将 PATH 变量设置为先读取64位客户端,后读取32位客户端
例如,如果 32 位 Oracle Instant Client 安装在 c:\Program Files (x86)\Oracle 下,64 位 Oracle Instant Client 安装在 c:\Program Files\Oracle 下,
则将以下内容添加到 Window 中 PATH 变量值的开始位置,C:\Program Files\Oracle;C:\Program Files (x86)\Oracle;
在arcmap 中找到 创建企业级地理数据库
工具
设置参数如下,其中实例为安装Oracle时建立的全局数据库orcl
数据库建立成功,但是提示没有将ST_Geometry 正确配置到EXTPROC
将 C:\Program Files (x86)\ArcGIS\Desktop10.4\DatabaseSupport\Oracle\Windows64\
路径下的 st_shapelib.dll
拷贝到Oracle的安装路径下的bin文件夹中,"C:\app\oracle\product\12.1.0\dbhome_1\BIN"
打开 C:\app\oracle\product\12.1.0\dbhome_1\hs\admin
中的 extproc.ora
文件。
修改最后一行的内容为:
SET EXTPROC_DLLS=ONLY:C:\\app\\oracle\\product\\12.1.0\\dbhome_1\\BIN\\st_shapelib.dll
打开 C:\app\oracle\product\12.1.0\dbhome_1\NETWORK\ADMIN
中的 listener.ora
文件,修改原文件内容
(建议将原文件复制重命名为listener0.ora
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = CLRExtProc)
(ORACLE_HOME = C:\app\oracle\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\12.1.0\dbhome_1\bin\oraclr12.dll")
)
# ---新添加内容---
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = C:\app\oracle\product\12.1.0\dbhome_1)
(PROGRAM = extproc)
(ENVS = "EXTPROC_DLLS=ONLY:C:\app\oracle\product\12.1.0\dbhome_1\BIN\st_shapelib.dll")
)
# ---------------
)
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC01)) # 新添加内容
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
)
打开 C:\app\oracle\product\12.1.0\dbhome_1\NETWORK\ADMIN
中的 tnsnames.ora
文件,修改原文件内容
(建议将原文件复制重命名为tnsnames0.ora
)
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
# ----新添加内容----
EXTPROC_CONNECTION_DATA=
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC01))
)
(CONNECT_DATA =
(SID = PLSExtProc)
(PRESENTATION = RO)
)
)
# --------------
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
在PL/SQL Developer中,以sde用户登录,并执行下面的SQL代码:
select * from user_libraries;
create or replace library st_shapelib as 'C:\app\oracle\product\12.1.0\dbhome_1\BIN\st_shapelib.dll';
--alter package sde.st_geometry_shapelib_pkg compile reuse settings;
select sde.ST_AsText(SDE.ST_Geometry('POINT (10 10)', 0)) from dual;