Veamos un ejemplo de como hacerlo:
Primero creamos una tabla para la demostración:
La table tiene tres columnas, una de ellas del tipo fecha particionada por rangos (BY RANGE)
create table vtas
(
nro_fc number,
fecha_vta date,
precio number
)
partition BY RANGE (fecha_vta)
(
partition vtas_q1_16 values less than (TO_DATE('01-APR-2016', 'DD-MON-YYYY')),
partition vtas_q2_16 values less than (TO_DATE('01-JUL-2016', 'DD-MON-YYYY')),
partition vtas_q3_16 values less than (TO_DATE('01-OCT-2016', 'DD-MON-YYYY')),
partition vtas_q4_16 values less than (TO_DATE('01-JAN-2017', 'DD-MON-YYYY')),
partition vtas_q1_17 values less than (TO_DATE('01-APR-2017', 'DD-MON-YYYY')),
partition vtas_q2_17 values less than (TO_DATE('01-JUL-2017', 'DD-MON-YYYY')),
partition vtas_q3_17 values less than (TO_DATE('01-OCT-2017', 'DD-MON-YYYY')),
partition vtas_q4_17 values less than (TO_DATE('01-JAN-2018', 'DD-MON-YYYY')),
partition vtas_futuro values less than (TO_DATE('01-JAN-2020', 'DD-MON-YYYY'))
)
ENABLE ROW MOVEMENT
/
Insertamos algunos datos y calculamos estadísticas:
exec DBMS_STATS.GATHER_TABLE_STATS(OWNNAME=>'SDALESSA', TABNAME=>'VTAS', ESTIMATE_PERCENT=>DBMS_STATS.AUTO_SAMPLE_SIZE, CASCADE=> TRUE, METHOD_OPT=> 'FOR ALL COLUMNS SIZE 1', GRANULARITY=>'ALL');
En una sesión nueva SESS1.
Verificamos, nombre de partición, posición, intervalo y valor más alto.
SESS1:
select table_name, partition_name, partition_position, interval, high_value
from user_tab_partitions
where table_name='VTAS' order by table_name, partition_position;
Realizamos el "merge" online de dos particiones:
alter table vtas merge partitions vtas_q1_16, vtas_q2_16 into partition vtas_q2_16 online;
En otra sesión SESS2.
Ejecutamos un update de la tabla
SESS2:
update vtas
set fecha_vta = '01-JUN-16'
where nro_fc = 116;
commit;
Volvemos a la SESS1 y verificamos si el "merge" fué realizado con éxito. Comprobamos también el rango de particionamiento.
SESS1:
select table_name, partition_name, partition_position, interval, high_value
from user_tab_partitions
where table_name='VTAS'
order by table_name, partition_position;
Con esta nueva funcionalidad podemos subir todavía más los niveles de disponibilidad de nuestras bases de datos.
No hay comentarios:
Publicar un comentario