微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle 分区索引

-- Create table
create table TLCB_MON_LINUX
(
  sdate        DATE,ip           VARCHAR2(20),processcpu   CLOB,processmem   CLOB,port         CLOB,countprocess VARCHAR2(100),countport    VARCHAR2(100)
)
partition by range (SDATE)
(
  partition P20170524 values less than (TO_DATE(' 2017-05-25 00:00:00','SYYYY-MM-DD HH24:MI:SS','NLS_CALENDAR=GREGORIAN'))
    tablespace USERS
    pctfree 10
    initrans 1
    maxtrans 255,发我和小小,-- Create table
create table ESB2_TRANS_LOG
(
  esbflowno        VARCHAR2(100) not null,flowstepid       VARCHAR2(3) not null,locationid       VARCHAR2(20) not null,channelid        VARCHAR2(40),serviceid        VARCHAR2(40),respstatus       CHAR(1),respcode         VARCHAR2(30),respmsg          VARCHAR2(512),operstamp        TIMESTAMP(3) default systimestamp not null,logicsystem      VARCHAR2(40),realsystem       VARCHAR2(40),trans_date       DATE default sysdate not null,loop             VARCHAR2(20)
)
partition by range (TRANS_DATE)
(
  partition ESB2_TRANS_LOG_170801 values less than (TO_DATE(' 2017-08-02 00:00:00','NLS_CALENDAR=GREGORIAN'))
  )


create index IDX_ESB2_TRANS_LOG on ESB2_TRANS_LOG (ESBFLOWNO,FLOWSTEPID);


select owner,index_name,table_name,PARTITIONED from dba_indexes where table_name=upper('esb2_trans_log');sql> 

OWNER			       INDEX_NAME	    TABLE_NAME			   PAR
------------------------------ -------------------- ------------------------------ ---
TLCBUSER		       IDX_ESB2_TRANS_LOG   ESB2_TRANS_LOG		   NO


sql> create index IDX_ESB2_TRANS_LOG on ESB2_TRANS_LOG (ESBFLOWNO,FLOWSTEPID) local;

Index created.

sql> select owner,PARTITIONED from dba_indexes where table_name=upper('esb2_trans_log');

OWNER			       INDEX_NAME	    TABLE_NAME			   PAR
------------------------------ -------------------- ------------------------------ ---
TLCBUSER		       IDX_ESB2_TRANS_LOG   ESB2_TRANS_LOG		   YES

sql> select object_name,subobject_name,object_id,data_object_id,object_type from user_objects where object_name='IDX_ESB2_TRANS_LOG';

OBJECT_NAME		       SUBOBJECT_NAME		       OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
------------------------------ ------------------------------ ---------- -------------- -------------------
IDX_ESB2_TRANS_LOG						  110263		INDEX
IDX_ESB2_TRANS_LOG	       ESB2_TRANS_LOG_170801		  110264	 110264 INDEX PARTITION

添加新的分区:


alter table ESB2_TRANS_LOG add partition  ESB2_TRANS_LOG_170802 values less than (TO_DATE(' 2017-08-03 00:00:00','NLS_CALENDAR=GREGORIAN'))



sql> col object_name format a30
sql> select object_name,object_type from user_objects where object_name='IDX_ESB2_TRANS_LOG';

OBJECT_NAME		       SUBOBJECT_NAME		       OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE
------------------------------ ------------------------------ ---------- -------------- -------------------
IDX_ESB2_TRANS_LOG						  110263		INDEX
IDX_ESB2_TRANS_LOG	       ESB2_TRANS_LOG_170801		  110264	 110264 INDEX PARTITION
IDX_ESB2_TRANS_LOG	       ESB2_TRANS_LOG_170802		  110266	 110266 INDEX PARTITION


添加主键:

sql> alter table ESB2_TRANS_LOG  add primary key (esbflowno) using index local;
alter table ESB2_TRANS_LOG  add primary key (esbflowno) using index local
*
ERROR at line 1:
ORA-14039: 分区列必须构成 UNIQUE 索引的关键字列子集

Oracle 不支持在分区表上创建主键时不包含分区列

不分区就可以:
sql> alter table ESB2_TRANS_LOG  add primary key (esbflowno);

Table altered.

原文地址:https://www.jb51.cc/oracle/208172.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐