索引范围分区Oracle
我想为我的表的一个分区建立索引,我不知道如何做,而且我没有访问我的数据库的权限 数据库是oracle11。 我的代码能用吗索引范围分区Oracle,oracle,oracle11g,database-partitioning,Oracle,Oracle11g,Database Partitioning,我想为我的表的一个分区建立索引,我不知道如何做,而且我没有访问我的数据库的权限 数据库是oracle11。 我的代码能用吗 CREATE TABLE MARKET.PARTTABLE ( EXTRACT_DATE DATE NOT NULL, LOAD_ID NUMBER(10) NOT NULL, LOAD_DATE DATE NOT NULL, NAME
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)
它起作用了,但我不确定索引现在是在分区上还是在整个表上。有人能帮我吗?您的第二条语句实际上没有在分区上创建
索引。
分区索引应定义为LOCAL
或GLOBAL
由于您试图创建的是无前缀索引(索引最左边的列不是分区键),因此更好的选择是使用本地索引
CREATE INDEX NAME_PARTTABLE ON PARTTABLE(NAME) LOCAL;
…但我不确定索引现在是否在分区上,或者
它在整张桌子上
您可以查询数据字典视图所有部分索引
或用户部分索引
,以检查索引名称。这些视图中不显示正常的非分区索引
select * from USER_PART_INDEXES where index_name='NAME_PARTTABLE';
你真的要请人测试你的代码吗?如果是这样的话,我可以给你一个现行利率。我现在不在工作,所以我无法访问数据库,但我的同事请我帮忙。我很乐意使用正确的语法来创建分区索引。谢谢,这确实很有帮助。但是我得到了错误ORA-14020:这个物理属性可能没有为表分区指定,这对我没有多大帮助,我将测试更多。。thanksI测试了一个不同的解决方案,它不会抛出错误,但我不知道我现在是只是索引了表,还是真的索引了分区。你能帮我一些忙吗?我很抱歉没有事先测试谢谢你,我让它按照你描述的那样工作,但没有看到你的答案。我认为这是正确的解决办法。