码迷,mamicode.com
首页 > 数据库 > 详细

不同版本的ArcMap在Oracle中创建镶嵌数据集的不同行为

时间:2018-01-11 20:32:51      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:cat   size   使用   repo   oracl   post   数据库   com   完成   

如果不同版本的ArcMap连接到同一个Oracle数据库上,分别执行"创建镶嵌数据集",它们的行为是一样的吗?

 

答案是:不一样,会有细微的差别

 

在本例中,ArcMap的版本分别是10.2.2与10.3,数据库服务器的版本是11.2.0.3,SDE Repository 的版本是10.1 。

 

  1. 使用10.3版本的ArcMap创建镶嵌数据集 MD1003

     

    在创建镶嵌数据集之前,创建user_objects的备份表user_objects_b;

    技术分享图片

    创建镶嵌数据集,完成后,数据库新增了如下的表、序列、触发器。

    技术分享图片

    新增了1个触发器,10个表,7个序列。

    这里有两个知识点,我稍微介绍一下。

     

    其一,RASTER_LAYER_10以及SDE_RAS_10名称中的10代表什么?

    这个值实际代表的是AMD_MD1003_CAT在sde. RASTER_COLUMNS表中rastercolumn_id字段的值,如下图:

    技术分享图片

    其二,R120-R124这几个序列的数字代表什么?

    这个值实际上代表的是上图以AMD开头的5张表在sde.table_registry表中registration_id字段的值,如下图:

    技术分享图片

    R120-R124这几个序列是为了给所对应表的OBJECTID字段赋值而存在的。

    那这几个序列是如何定义的呢?我们来看看:

    技术分享图片

    注意这里序列的最大值为1028

     

  2. 使用10.2.2版本的ArcMap创建镶嵌数据集 MD1002

     

    删除user_objects_b,并重新创建user_objects的备份表user_objects_b;

    技术分享图片

    创建镶嵌数据集,完成后,数据库新增了如下的表、序列、触发器。

    技术分享图片

    新增了1个触发器,9个表,6个序列。与10.3版本创建镶嵌数据集相比,少了一个以AMD_%_DEF表以及该表所对应的序列。

     

    同时,由上图可知,AMD_MD1002_CAT的rastercolumn_id值为11,如下图:

    技术分享图片

    R开头的序列与AMD开头表的对应关系如下图:

    技术分享图片

    序列的定义如下:

    技术分享图片

    注意这里序列的最大值为2147483647,远小于10.3版本创建的序列最大值。

     

    结论:

    1. 对于"创建镶嵌数据集"这一操作,尽管数据库版本和SDE repository 版本一致,但ArcMap版本的差异仍然会导致不同的递归操作。由此可以引申推测:对于其它操作,不排除因版本不同而导致最终行为不同的情况发生,所以测试与最终生产环节的使用,最好使用同样版本的ArcMap版本。
    2. 使用10.2.2版本创建的镶嵌数据集,其序列最大值为10亿级别,而每次递增值为16,因此可用的值仅为亿级,对于庞大的镶嵌数据集(包含多个数据集,或发生多次删除重入场景)极有可能导致序列被用满而造成添加数据集失败。(另外,由于序列的CACHE值为20,如果经常关闭实例,或经常执行"alter system flush shared_pool"会造成序列产生很多的"洞",而这些"洞"会加速突破序列的最大值限制)

不同版本的ArcMap在Oracle中创建镶嵌数据集的不同行为

标签:cat   size   使用   repo   oracl   post   数据库   com   完成   

原文地址:https://www.cnblogs.com/6yuhang/p/8269992.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!