OracleMania en Español Volumen 1 - Page 25

RINcon del dba

dba

25

Algunos de los errores que podríamos recibir al realizar un “EXCHANGE PARTITION” son los

siguientes:

ORA-14039: "partitioning columns must

form a subset of key columns of a

UNIQUE index"

• ORA-14098: "index mismatch for tables

in ALTER TABLE EXCHANGE PARTITION"

• ORA-14097: "column type or size

mismatch in ALTER TABLE EXCHANGE

PARTITION"

• ORA-14096: tables in ALTER TABLE

EXCHANGE PARTITION must have the same

number of columns

Se tratará de explicar con ejemplos a través de este articulo la razón de porqué se está recibiendo estos errores, para esto, se necesitarán crear dos tablas, una tabla particionada y una tabla no particionada.

Paso No. 0: Creación de tabla particionada

y tabla no particionada

drop table A purge;

drop table B purge;

create table a(

start_date TIMESTAMP ,

a number,

b varchar2(20),

c number)

PARTITION BY RANGE (start_date)

INTERVAL(NUMTODSINTERVAL (1, 'DAY'))

( PARTITION pos_data_p2 VALUES LESS

THAN (TO_DATE('05-03-2014', 'DD-MM-YYYY')) );

create table b(

start_date TIMESTAMP ,

a number,

b varchar2(20),

c number);

Paso No. 1: Agregar llaves primarias

Cómo se ve a continuación, una llave primaria es agregada en las dos tablas en exactamente la

misma columna:

ALTER TABLE a ADD PRIMARY KEY (a);

ALTER TABLE b ADD PRIMARY KEY (a);

El uso de Índices LOCALES en la tabla particionada

Creación de índices

Dos índices son agregados a cada una de las tablas, cada uno de ellos en las mismas columnas:

CREATE INDEX a1 ON a(a,b);

CREATE INDEX a2 ON a(a,c);

CREATE INDEX b1 ON b(a,b);

CREATE INDEX b2 ON b(a,c);

Realizar la operación de intercambio de partición

SQL> Select PARTITION_NAME from dba_tab_partitions where table_name='A';

PARTITION_NAME

------------------------------

POS_DATA_P2

SQL> ALTER TABLE A EXCHANGE PARTITION POS_DATA_P2 WITH TABLE B INCLUDING INDEXES WITHOUT VALIDATION;

ALTER TABLE A EXCHANGE PARTITION POS_DATA_P2 WITH TABLE B INCLUDING INDEXES WITHOUT VALIDATION

*

ERROR at line 1:

ORA-14098: index mismatch for tables in ALTER TABLE EXCHANGE PARTITION

Conclusión: La tabla A y la tabla B tienen los mismos índices en las mismas columnas, sin embargo, en este ejemplo el problema fue que la tabla A no tiene sus índices creados como LOCALES. Los índices fueron creados como globales y es por ello que el

intercambio no pudo realizarse.

Repetir el paso 0.

Repetir el paso 1.