Oracle 分区索引

前端之家收集整理的这篇文章主要介绍了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.
原文链接:/oracle/208172.html

猜你在找的Oracle相关文章