Oracle Xmltype类型浅析(3)

从上面的实验中,我们可以看出:当我们对lob进行move的时候,如果使用数据列(xmltype),数据操作是不支持的。换而使用对隐含列的操作时,可实现对一个已经创建数据表的Lob段进行移动。

注意:当我们使用到Oracle 11g的时候,事情有所差异。

SQL> select * from v$version;

BANNER

--------------------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE    11.2.0.1.0      Production

TNS for Linux: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

我们在11g上进行试验。

SQL> create table t (id number, cl xmltype) tablespace system;

Table created

SQL> select segment_name, segment_type, tablespace_name from user_segments;

SEGMENT_NAME                  SEGMENT_TYPE      TABLESPACE

------------------------------ ------------------ ----------

T                              TABLE              SYSTEM

SYS_IL0000075364C00003$$      LOBINDEX          SYSTEM

SYS_LOB0000075364C00003$$      LOBSEGMENT        SYSTEM

9 rows selected

此时,我们进行move操作。

SQL> alter table t move tablespace users;

Table altered

SQL> select segment_name, segment_type, tablespace_name from user_segments;

SEGMENT_NAME                  SEGMENT_TYPE      TABLESPACE

------------------------------ ------------------ ----------

T                              TABLE              USERS

SYS_IL0000075364C00003$$      LOBINDEX          USERS

SYS_LOB0000075364C00003$$      LOBSEGMENT        USERS

9 rows selected

可以看到,在11g里进行move操作的时候,数据表和XmlType Lob段做到同时移动。

那么move是否有如10g特性呢?

SQL> select object_id, data_object_id, object_name from dba_objects where object_name='T' and wner='SCOTT';

OBJECT_ID DATA_OBJECT_ID OBJECT_NAME

---------- -------------- -------------

75364          75367 T

隐藏虚拟列信息如下:

SQL> select * from col$ where obj#=75364;

OBJ#      COL#    SEGCOL# SEGCOLLENGTH    OFFSET NAME  TYPE# 

---------- ---------- ---------- ------------ ---------- -------------------- ----------

75364          1          1          22          0 ID                  2 

75364          2          0        2000          0 CL                58 

75364          2          2        4000          0 SYS_NC00003$      112 

对lob段进行move操作。

SQL> alter table t move lob(SYS_NC00003$) store as xmlseg (tablespace system);

Table altered

SQL> select segment_name, segment_type, tablespace_name from user_segments;

SEGMENT_NAME                  SEGMENT_TYPE                  TABLESPACE_NAME

------------------------------ ------------------------------ ------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/a0c5ade15cbbb76ae0714ce921f34bd6.html