前端之家收集整理的这篇文章主要介绍了
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