关于ArcGIS读取oracle数据丢失库number类型数据丢失精度的问题

前提:保证ArcSDE能用

第一步,检查数据库字符集是否一致

第二步,导出数据库1 SDE表空间

第三步,导入原sde数据内容

首先停止ArcSDE服务器中的sde服务,删除数据库2中的sde用户及表空间。

使用sql语句建立新的sde用户及空的表空间,并授权SDE用户相同的权限(cmd sysdba连接)

第四步,重新启动Arcsde服务器上的服务,成功

很多用户都会有这样的疑问:

一般情况下,我们都会把一个信息化架构分为:客户端和服务器端,那么用户问题的原因就是客户端与服务器端的版本不一致的疑惑。

服务器端:Geodatabase(个人、文件、企业级)

1:不得不承认,ArcGIS产品的版本更新比较频繁,基本上一年一个小版本号,其实这样符合主流软件厂商的版本更新进度。例如Oracle也是一年一个小版本号。

2:一般情况下,用户对升级并不排斥,客户端随便怎么升级都可以,但是服务器端的升级例如企业级地理数据库(Oracle)的升级是所有用户都要考虑的事情,特别是牵涉到数据库,一旦升级过程中有问题,业务的暂停时间可能就是金钱和粘合度的损失。这也促成了用户采用保守升级,只升级客户端,不升级服务器端,就产生了第二个问题。

3:还有很多情况,比如一个省级单位下发相关数据,由于省级与各地方县市级的版本并不是完全一致,就可能出现省级下发的数据版本,地方软件打不开的情况。

4:开发商做项目,不同用户选用的版本是不一样的,在用户的环境下存在多个不同版本的数据库环境,但是可能在一些情况下,开发商没有时间再去建立多个客户端环境,多以就出现了第一个问题。

版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

在从较新版本的客户端连接到较早版本的企业级地理数据库时,只能使用您的地理数据库版本的可用功能。例如,不能从 ArcGIS /linghe301

  • 您使用的客户端版本无法连接到您想要使用的地理数据库版本。
  • 您想要使用较新版本地理数据库中提供的功能。

在有些情况下,您无法升级地理数据库。如果贵组织使用的客户端必须处于先前版本的 ArcGIS,您必须等到这些客户端可以升级到可兼容版本时再升级地理数据库。

例如,将地理数据库升级到 /linghe301

从ArcGIS Desktop10升级补丁就可以看出Esri推荐用户使用直连,那么又一个新问题,跨版本的直连连接。


如果ArcGIS Server和Desktop安装在同一台机器上,这估计是很多人的软件环境,如果这样的话可能需要多安装一点软件(32位的数据库客户端和64位的数据库客户端都需要安装),原因是ArcGIS Server是64位的而Desktop是32位的,制作地图文档,我们是在Desktop中完成的,我们发布服务最后的数据都是给Server用的,所以两个客户端都是需要安装的。

安装完成后,在系统环变量里面配置客户端的路径,64位的写在32位的前面:如我的(oracle 数据库)

客户端安装完成之后,分别配置网络服务名,如下:

对于SDE 数据库的注册,一种就是我们上面提到的ArcGIS Server托管方式,这种数据库必须是企业级地理数据库,并且一个Server只能注册一个,另外一种可以注册数据库或者企业级地理数据库,在ArcGIS for Desktop中,使用管理员方式连接到ArcGIS Server,右键服务器属性,找到数据存储选项卡,如下图:

注册托管数据库的步骤很容易,我们只需要选择注册托管数据库的这个命令怎出现如下对话框:

输入一个唯一的名称,然后添加数据库连接,如果已经有了.sde文件,只需要import即可,下面是我注册的一个sql server的地理库

若果想注册第二个托管数据库,则会有下面的错误(因为托管的数据库只能注册一个):

如果有了托管数据库,我们可以将shapefile,文件数据库等数据都可以发布为要素服务,下图是我发布一个来自文件数据库的数据,在发布的时候选择要素访问功能,如下图:

发布成功后,在托管数据库中可以看到发布后的数据,如下图:

在服务目录中也可以看到要素服务,我们可以进行增删改操作,注意当我们删除了要素服务中的数据之后,地图服务中的数据是没有变化的,变化的仅仅是托管数据库里面的数据,而地图文档的数据则原封不动。

如果删除这个服务,会出现下面的警告:

点确定之后,服务被删除,并且托管的数据库中和这个服务相关的数据也被删掉了。

这种方式当我们使用不同的用户(数据库用户)发布数据的时候,同一个库的数据可以多次注册。

同时这种情况又可以分为发布者和Server是否使用同一个数据库,如果是同一个数据库见1.2.1,不同的见1.2.2(这个见ArcGIS 10.1 for Server 数据注册(上)的内容)

如果使用同一个数据库,并且32的客户端和64的客户端配置了相同的网络服务名,则如下:

对于这种方式,正如我刚才说的一样制作地图需要一个连接也就是发布数据的连接,数据最后是要到Server中的,Server也是要连接数据库的,如果我们在32位的客户端和64位客户端配置的网络服务名相通,那么我们将Same as publisher database connection这个选项选上,如果在32的客户端配置了一个网络服务命名而64的客户端没有,就会出错,下面的test是在32位客户端配置,64的客户端上没这个网络服务名。

如果32的客户端和64的客户端对同一个数据库的网络服务名不相同,该则么办?

数据库只有一个,我们可以按照下面的去做,不要勾选Create geodata service,因为我们不需要数据库同步操作。

而且服务也发布成功了,在发布之后的msd文档中,我们看到所使用的连接地址如下:

对于1.2.2的这种情况,也就是 Server使用的数据库和发布者使用的数据库不同的话,这要有一个前提就是服务器的数据库里面必须有发布者数据库的一个副本,比如发布者采用sql server数据库,服务器采用一个oracle数据库,我们按照下面的配置:

我们知道geodata service 是用来数据同步的,也就是说数据库中要有数据的的一个replica才可以同步数据,当然数据同步的时候有one-way,two-way,如果在oracle数据库中不存在数据的一个replica,我们在尝试使用geodata service的同步变化的的时候,会看到下面的提示。

说道这里我们可能想到这种方式的同步其实就是分布式数据库的那种机制。

在这里我向另一个orcal数据库采用two-way 方式采用,数据如下:

发布服务的时候选择了要素访问功能,然后添加了一个要素,结果如下:

然后在geodata service 服务上右键-分布式数据库,同步变化,如下图:

同步之后我们就可以看到地图服务的数据已经发生了变化。

都安装在Linux上的情况

在上面个我们已经说得很清楚了,安装Server的机器上一定要有64位的Oracle客户端,现在以我的机器说明。

我的Oracle是用oracle用户安装的,Server是用arcgis用户安装的,如果没有在arcgis的用户配置文件中没有配置Oracle的一些环境变量,arcgis这个用户是不能访问Oracle的,所以我在arcgis的.bash_profile文件中添加了Oracle的配置信息,并且更改了Oracle安装目录的权限,并配置一下网络服务名,然后用ArcMap连接,并注册,相关步骤如下图。


注册成功,发布服务测试,OK!

我要回帖

更多关于 oracle数据丢失 的文章

 

随机推荐