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.