rINCON DEL DBA
DBA
28
Index created.
SQL> ALTER TABLE A EXCHANGE PARTITION POS_DATA_P2 WITH TABLE B INCLUDING INDEXES WITHOUT VALIDATION;
Table altered.
Regla: Los índices creados en la tabla no particionada son los que determinarán qué índices deben ser LOCALES en la tabla particionada. Si existe un índice en la tabla particionada que debe ser LOCAL pero que por alguna razón no podemos realizarlo (como en el caso de la llave primaria que no contiene la columna de particionamiento) entonces, lo mejor sería quitar el índice en la tabla no particionada.
El orden de las columnas de las tablas
Uno de las causas más típicas en operaciones de “Exchange partition” es tener una o varias columnas de la tabla no particionada en diferente posición que las columnas de la tabla particionada. Se debe estar seguro que las dos tablas tienen sus columnas en la
misma posición.
Usando las siguientes tablas…
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')) );
--Se invirtió el orden de las columnas
create table b(
c number,
b varchar2(20),
a number,
start_date TIMESTAMP
);
… se obtendrá el siguiente error:
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-14097: column type or size mismatch in ALTER TABLE EXCHANGE PARTITION
El mismo número de columnas en las tablas
Así como la posición de las columnas es muy importante al momento de hacer una operación “Exchange partition”, lo es también el número de columnas en cada tabla. Las dos tablas deben de tener el mismo número de columnas. Este también es un error muy típico en las operaciones de
intercambio de particiones.
Usando las siguientes tablas…
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')) );
--Una columna extra fue agregada, La columna “d”.
create table b(
start_date TIMESTAMP ,
a number,
b varchar2(20),
c number,
d number);
… se obtendrá el siguiente error:
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-14096: tables in ALTER TABLE EXCHANGE PARTITION must have the same number of columns