Как указать табличное пространство для создания индекса типа XML в Oracle 11g
Я пытаюсь создать столбец XML Index on XML Type в одной из моих таблиц. Здесь мы используем 2 табличных пространства, одно для таблиц и второе для индексов.
Я хотел бы создать XMLIndex в табличном пространстве индекса.
Я использую запрос ниже -
CREATE INDEX VISION_IX1 ON MDT_VISION_LOGGING_TBL(RAWMESSAGE)
INDEXTYPE IS XDB.XMLINDEX
NOPARALLEL;
Пожалуйста, помогите мне с тем, где упомянуть пункт о табличном пространстве.
1 ответ
Вы должны назвать таблицу путей, чтобы иметь возможность указать хранилище для неструктурированного компонента:
CREATE TABLE MDT_VISION_LOGGING_TBL(ID NUMBER, RAWMESSAGE XMLTYPE) TABLESPACE TS_TABLES;
Table MDT_VISION_LOGGING_TBL created.
CREATE INDEX VISION_IX1 ON MDT_VISION_LOGGING_TBL(RAWMESSAGE)
INDEXTYPE IS XDB.XMLINDEX
PARAMETERS('PATH TABLE VISION_IX_PATH_TABLE (TABLESPACE TS_INDEXES)')
NOPARALLEL;
Index VISION_IX1 created.
Вы можете увидеть, где было выделено хранилище:
SELECT US.SEGMENT_NAME, US.SEGMENT_TYPE, US.TABLESPACE_NAME
FROM USER_OBJECTS UO
JOIN USER_SEGMENTS US
ON US.SEGMENT_NAME = UO.OBJECT_NAME
WHERE UO.CREATED > TRUNC(SYSDATE);
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
MDT_VISION_LOGGING_TBL TABLE TS_TABLES
SYS304166_VISION_IX_PIKEY_IX INDEX TS_TABLES
SYS304166_VISION_IX_VALUE_IX INDEX TS_TABLES
SYS_IL0000304163C00003$$ LOBINDEX TS_TABLES
SYS_LOB0000304163C00003$$ LOBSEGMENT TS_TABLES
VISION_IX_PATH_TABLE TABLE TS_INDEXES
Вы можете указать, что два других создаваемых индекса идут и в предпочитаемом вами табличном пространстве:
CREATE INDEX VISION_IX1 ON MDT_VISION_LOGGING_TBL(RAWMESSAGE)
INDEXTYPE IS XDB.XMLINDEX
PARAMETERS('PATH TABLE VISION_IX_PATH_TABLE (TABLESPACE TS_TABLES)
PIKEY INDEX VISION_IX_PIKEY (TABLESPACE TS_INDEXES)
VALUE INDEX VISION_IX_VALUE (TABLESPACE TS_INDEXES)')
NOPARALLEL;
SELECT US.SEGMENT_NAME, US.SEGMENT_TYPE, US.TABLESPACE_NAME
FROM USER_OBJECTS UO
JOIN USER_SEGMENTS US
ON US.SEGMENT_NAME = UO.OBJECT_NAME
WHERE UO.CREATED > TRUNC(SYSDATE);
SEGMENT_NAME SEGMENT_TYPE TABLESPACE_NAME
------------------------------ ------------------ ------------------------------
MDT_VISION_LOGGING_TBL TABLE TS_TABLES
SYS_IL0000304183C00003$$ LOBINDEX TS_TABLES
SYS_LOB0000304183C00003$$ LOBSEGMENT TS_TABLES
VISION_IX_PATH_TABLE TABLE TS_INDEXES
VISION_IX_PIKEY INDEX TS_INDEXES
VISION_IX_VALUE INDEX TS_INDEXES