索引范围分区Oracle

索引范围分区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

我想为我的表的一个分区建立索引,我不知道如何做,而且我没有访问我的数据库的权限

数据库是oracle11。 我的代码能用吗

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测试了一个不同的解决方案,它不会抛出错误,但我不知道我现在是只是索引了表,还是真的索引了分区。你能帮我一些忙吗?我很抱歉没有事先测试谢谢你,我让它按照你描述的那样工作,但没有看到你的答案。我认为这是正确的解决办法。