暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle sdo_geometry varrays和basic到安全文件迁移

ASKTOM 2021-04-07
339

问题描述

嗨,汤姆,

我们正在计划从basicfile迁移到securefile lob存储 (Oracle数据库19c)。
数据库还包含一些空间层,在具有本地空间索引的分区表中。这些表/分区是在Oracle 11中定义的,没有为sdo_geometry varray元素 (sdo_elem_info和sdo_ordinates) 明确指定存储子句。正如我从Oracle文档中了解到的那样 (https://docs.oracle.com/en/database/oracle/oracle-database/19/adlob/introduction-to-large-objects.html#GUID-9B66BC56-A427-4C1B-B185-8E004CF4B2F7),这些varray仅存储为basicfile LOB,以防其大小超过约4kB。较小几何形状的varray元素存储为内联的原始值。

当我们要迁移到securefile lob (使用表重新定义) 时,我们有两个选项来定义sdo_geometry varrays
1.带有显式存储子句:
   VARRAY "SPATIAL_COLUM"."SDO_ELEM_INFO" STORE AS SECUREFILE LOB (CACHE ENABLE STORAGE IN ROW)
   VARRAY "PERC_GEOMETRIE_PERCEEL"."SDO_ORDINATES" STORE AS SECUREFILE LOB (CACHE ENABLE STORAGE IN ROW)
   ENABLE ROW MOVEMENT
   

2.没有明确的storoge子句在这种情况下,只有较大的几何图形varrays将使用securefiles存储为LOB。其他varray将内联存储为
原始值。

我的问题是在空间查询性能方面什么选项是可取的?

谢谢。

最好的问候

专家解答

我认为这不会有任何区别。来自您提到的doc链接的通知:

"If the VARRAY storage clause is not specified, and the declared size of varray data is more than 4000 bytes"


spatial中的VARRAY通常声明为 “VARRAY(1048576)”,这意味着它们可以容纳超过4000个字节,因此无论如何,它们都将存储为lob,例如

SQL> select * from user_lobs
  2  where table_name in ('T','T1')
  3  @pr
==============================
TABLE_NAME                    : T
COLUMN_NAME                   : SD
SEGMENT_NAME                  : SYS_LOB0000156852C00001$$
TABLESPACE_NAME               : USERS
INDEX_NAME                    : SYS_IL0000156852C00001$$
CHUNK                         : 8192
PCTVERSION                    :
RETENTION                     :
FREEPOOLS                     :
CACHE                         : YES
LOGGING                       : YES
ENCRYPT                       : NO
COMPRESSION                   : NO
DEDUPLICATION                 : NO
IN_ROW                        : YES
FORMAT                        : ENDIAN NEUTRAL
PARTITIONED                   : NO
SECUREFILE                    : YES
SEGMENT_CREATED               : YES
RETENTION_TYPE                : DEFAULT
RETENTION_VALUE               :
==============================
TABLE_NAME                    : T1
COLUMN_NAME                   : SD
SEGMENT_NAME                  : SYS_LOB0000156856C00001$$
TABLESPACE_NAME               : USERS
INDEX_NAME                    : SYS_IL0000156856C00001$$
CHUNK                         : 8192
PCTVERSION                    :
RETENTION                     :
FREEPOOLS                     :
CACHE                         : YES
LOGGING                       : YES
ENCRYPT                       : NO
COMPRESSION                   : NO
DEDUPLICATION                 : NO
IN_ROW                        : YES
FORMAT                        : ENDIAN NEUTRAL
PARTITIONED                   : NO
SECUREFILE                    : YES
SEGMENT_CREATED               : YES
RETENTION_TYPE                : DEFAULT
RETENTION_VALUE               :

PL/SQL procedure successfully completed.



我认为您不会看到任何原始值-它们都将被存储为lob
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论