我想索引表的一个分区,我不确定该怎么做,而且我无权访问数据库atm。
数据库是Oracle 11。 我的代码可以工作吗?
CREATE TABLE MARKET.PARTTABLE
(
EXTRACT_DATE DATE NOT NULL,
LOAD_ID NUMBER(10) NOT NULL,
LOAD_DATE DATE NOT NULL,
NAME VARCHAR2(200 BYTE) NOT NULL
)
PARTITION BY RANGE (EXTRACT_DATE)
(
PARTITION PDEFAULT VALUES LESS THAN (MAXVALUE)
NOLOGGING
NOCOMPRESS
TABLESPACE MARKET_DAT
PCTFREE 0
INITRANS 1
MAXTRANS 255
STORAGE (
MAXSIZE UNLIMITED
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME)
)
NOCACHE
NOPARALLEL
MONITORING;
运行此命令时,出现以下错误:
ORA-14020:可能未为表指定此物理属性 分区
这表明我有一个格式问题,但是实际上我找不到任何有用的文档来索引分区(或者也许我太愚蠢而无法理解它们)。
编辑: 我尝试过:
CREATE TABLE MARKET.PARTTABLE
(
EXTRACT_DATE DATE NOT NULL,
LOAD_ID NUMBER(10) NOT NULL,
LOAD_DATE DATE NOT NULL,
NAME VARCHAR2(200 BYTE) NOT NULL
)
PARTITION BY RANGE (EXTRACT_DATE)
(
PARTITION PDEFAULT VALUES LESS THAN (MAXVALUE)
NOLOGGING
NOCOMPRESS
TABLESPACE MARKET_DAT
PCTFREE 0
INITRANS 1
MAXTRANS 255
STORAGE (
MAXSIZE UNLIMITED
BUFFER_POOL DEFAULT
FLASH_CACHE DEFAULT
CELL_FLASH_CACHE DEFAULT
)
)
NOCACHE
NOPARALLEL
MONITORING;
CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME)
它可以工作,但是我不确定索引是现在在分区上还是整个表上。有人可以帮我吗?
答案 0 :(得分:1)
您的第二条语句实际上并未在分区上创建INDEX
。
分区索引应该定义为LOCAL
或GLOBAL
。
由于您要创建的是非前缀索引(索引的最左列不是分区键),因此更好的选择是使用{{1 }}
LOCAL INDEX
..但是我不确定索引现在是否在分区上,或者 它在整个桌子上。
您可以查询数据字典视图CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME) LOCAL;
或ALL_PART_INDEXES
来检查索引名称。这些视图不会显示普通的非分区索引。
USER_PART_INDEXES