Oracle FAQ | Your Portal to the Oracle Knowledge Grid |
Home -> Community -> Mailing Lists -> Oracle-L -> Partitioning problems - Oracle 8.1.7.4
/*
Hi Oracle partitioning gurus,
I am trying to setup a group of tables partitioned on a date column so
that monthly
a new partition can be added and the oldest partition can be archived.
I have created 2 extra tables for each main table. One is a temporary
table that is used
to swap partitions in an out of and a 3rd table, the archive.
I have tried to use local indexes where possible to simplify the exchange
operation, ie.
reduce the work oracle has to do. But I have had to create a global index
for the PK index
as the range column is not in the PK. See below for example setup.
I have written a couple of SPs, one to add a new partition and the other
to swap the oldest
partition from the main table to the archive via temp.
Problems:
When I drop the "UPDATE GLOBAL INDEXES" it seems to work without invalidating the indexes.
What is going wrong here? Is it because I have global and local indexes on the same table?
2. Exchanging partitions:
To swap the oldest partition from my main table my SP tries to do this:
alter table TONYTAB
exchange partition P01 with table TONYTAB_TEMP
including indexes without validation;
alter table TONYTAB_ARC
exchange partition P01 with table TONYTAB_TEMP
including indexes without validation;
But I get this error at the first exchange: ORA-14098: index mismatch for tables in ALTER TABLE EXCHANGE PARTITION
I tried to drop the temp table's indexes but get the same error.
I can see that the index I_TONYTAB_1 is local for the main table and is a
normal index
for the temp table, but thats it. I can't be local for the temp table is
its un-partitioned.
I've read Lewis Chpts 12 & 13 a couple of times now but seem to be missing
something
somewhere.
Any help would be greatly appreciated.
Cheers
Tony
*/
create table TONYTAB
( CUSTOMER_ID NUMBER(19) not null, SERVICE_ID NUMBER(19) not null, TRACKING_ID NUMBER(19) not null, TARGET VARCHAR2(200) not null, PASSWORD VARCHAR2(200) not null, SUCCESS VARCHAR2(3) not null, CREATED_DATE DATE not null, CLIENT_IP_ADDRESS VARCHAR2(50) )
partition p01 values less than (to_date('200501','YYYYMM')), partition p02 values less than (to_date('200502','YYYYMM')), partition p03 values less than (to_date('200503','YYYYMM')), partition p04 values less than (maxvalue))tablespace PAGENT00 pctfree 10 pctused 40 initrans 1 maxtrans 255 storage (initial 8k next 1k minextents 1 maxextents 121 pctincrease 0);
alter table TONYTAB
add constraint PK_TONYTAB primary key
(CUSTOMER_ID,SERVICE_ID,TRACKING_ID) using index;
( CUSTOMER_ID NUMBER(19) not null, SERVICE_ID NUMBER(19) not null, TRACKING_ID NUMBER(19) not null, TARGET VARCHAR2(200) not null, PASSWORD VARCHAR2(200) not null, SUCCESS VARCHAR2(3) not null, CREATED_DATE DATE not null, CLIENT_IP_ADDRESS VARCHAR2(50) ) partition by range (CREATED_DATE) (partition p00 values less than (to_date('01011970','DDMMYYYY')))tablespace PAGENT00 pctfree 10 pctused 40 initrans 1 maxtrans 255 storage (initial 8k next 1k minextents 1 maxextents 121 pctincrease 0);
alter table TONYTAB_ARC
add constraint PK_TONYTAB_ARC primary key
(CUSTOMER_ID,SERVICE_ID,TRACKING_ID) using index;
create table TONYTAB_TEMP
( CUSTOMER_ID NUMBER(19) not null, SERVICE_ID NUMBER(19) not null, TRACKING_ID NUMBER(19) not null, TARGET VARCHAR2(200) not null, PASSWORD VARCHAR2(200) not null, SUCCESS VARCHAR2(3) not null, CREATED_DATE DATE not null, CLIENT_IP_ADDRESS VARCHAR2(50) ) tablespace PAGENT00 pctfree 10 pctused 40 initrans 1 maxtrans 255storage (initial 8k next 1k minextents 1 maxextents 121 pctincrease 0);
create unique index PK_TONYTAB_TEMP on
TONYTAB_TEMP(CUSTOMER_ID,SERVICE_ID,TRACKING_ID)
tablespace PAGENTX00 pctfree 10 initrans 2 maxtrans 255
storage (initial 1k next 1k minextents 1 maxextents 121 pctincrease 0);
alter table TONYTAB_TEMP
add constraint PK_TONYTAB_TEMP primary key
(CUSTOMER_ID,SERVICE_ID,TRACKING_ID) using index;
create index I_TONYTAB_TEMP_1 on
TONYTAB_TEMP (CUSTOMER_ID,SERVICE_ID)
tablespace PAGENTX00 pctfree 10 initrans 2 maxtrans 255
storage (initial 1k next 1k minextents 1 maxextents 121 pctincrease 0);
-- http://www.freelists.org/webpage/oracle-lReceived on Fri Feb 04 2005 - 05:06:28 CST