標籤:cat size 使用 repo oracl post 資料庫 com 完成
如果不同版本的ArcMap串連到同一個Oracle資料庫上,分別執行"建立鑲嵌資料集",它們的行為是一樣的嗎?
答案是:不一樣,會有細微的差別
在本例中,ArcMap的版本分別是10.2.2與10.3,資料庫伺服器的版本是11.2.0.3,SDE Repository 的版本是10.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。
- 使用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版本建立的序列最大值。
結論:
- 對於"建立鑲嵌資料集"這一操作,儘管資料庫版本和SDE repository 版本一致,但ArcMap版本的差異仍然會導致不同的遞迴操作。由此可以引申推測:對於其它操作,不排除因版本不同而導致最終行為不同的情況發生,所以測試與最終生產環節的使用,最好使用同樣版本的ArcMap版本。
- 使用10.2.2版本建立的鑲嵌資料集,其序列最大值為10億層級,而每次遞增值為16,因此可用的值僅為億級,對於龐大的鑲嵌資料集(包含多個資料集,或發生多次刪除重入情境)極有可能導致序列被用滿而造成添加資料集失敗。(另外,由於序列的CACHE值為20,如果經常關閉執行個體,或經常執行"alter system flush shared_pool"會造成序列產生很多的"洞",而這些"洞"會加速突破序列的最大值限制)
不同版本的ArcMap在Oracle中建立鑲嵌資料集的不同行為