Buenas Tardes,

Tengo 3 preguntas acerca del particionamiento de Oracle:

1. Tengo un datamart de ventas y deseo particionar unas tablas. Mi pregunta es si después de particionar debo modificar los paquetes de carga ?, Si es así que debo tener en cuenta ?

2. Es posible manejar particiones de tablas e indices locales de forma automática, es decir sin la necesidad de especificar el nombre de la partición y que se tenga que hacer cada vez que se insertan nuevos registros en la tabla ? Teniendo en cuenta que la idea de los indices locales es que queden acoplados a cada partición.

3. Si hago partición por fecha y hago operaciones de lectura/escritura como select, delete ó update solo con especificar en la clausula where el campo por el cual se hizo la partición es suficiente ? Eje:

Tengo la tabla ventas donde la particion1 almacena la información del 2011 y la particion2 almacena la información de 2012.
Si ejecuto la siguiente instrucción...
delete from ventas where año = 2011, el sistema solo accede a la particion1 ?
Like it on Facebook, +1 on Google, Tweet it or share this topic on other bookmarking websites.
  • Re: Particionamiento en Oracle

    by » 7 years ago


    Para la aplicación es prácticamente transparente el que tengas particionada la base de datos, por lo que un delete como el que comentas accederá solo a la partición que contenga la información solicitada al igual que una consulta sobre ella, como comentas en la pregunta 3.

    Sobre tu pregunta dos, si tienes una partición donde la llave es una fecha, puedes generar las particiones con las fechas que se van a insertar en todo el año, p1, p2...p12 y una extra para las fechas que se inserten fuera de ese rango. Así ya solo debes darle mantenimiento una ves al año, en lo que se refiere a crear particiones.


    Saludos

  • Re: Particionamiento en Oracle

    by » 7 years ago


    Muchas gracias por tu ayuda !!

    Te pregunto algo:

    1. En terminos de rendimiento que es mas optimo un drop a la partición ó un delete. Eje:

    alter table ventas drop partition particion1 ó el esquema tradicional
    delete from ventas where año = 2011

    2. De acuerdo a la respuesta que me das con respecto a la pregunta 2, que opinas entonces de manejar la opción interval Eje:

    create table VENTAS
    (
    ID_FECHA DATE,
    ID_MUNICIPIO VARCHAR2(5),
    ID_REFERENCIA VARCHAR2(20),
    VALOR NUMBER(14,2),
    CANTIDAD NUMBER(14,2),
    )
    PARTITION BY RANGE(ID_FECHA)
    INTERVAL (NUMTOYMINTERVAL(1,'MONTH'))
    (
    PARTITION part_01 values LESS THAN (TO_DATE('01-02-2013','DD-MON- YYYY'))
    );

    De acuerdo al ejemplo, los nombres de las particiones posteriores a Enero 2013 tendrán un nombre automático generado por oracle, pero mi inquietud es como hacer para la generación de los indices locales donde debo especificar los nombres de las particiones ó es posible que aplique el parámetro interval también en la creación de indices y que estos queden acoplados a las particiones futuras ?

    Saludos y gracias de nuevo por tu apoyo

  • Re: Particionamiento en Oracle

    by » 7 years ago


    1. El drop partition es inmediato, no genera casi nada de IO, es un apuntador. En cambio el delete si es muy pesado.

    2. Como veo, solo estas generando una particion donde todo va a quedar en part_01.

    Debería ser algo asi:

    CREATE TABLE t1 (id NUMBER, c1 DATE)
    PARTITION BY RANGE (c1)
    (PARTITION t1p1 VALUES LESS THAN (TO_DATE('2007-11-01', 'YYYY-MM-DD')),
    PARTITION t1p2 VALUES LESS THAN (TO_DATE('2007-12-01', 'YYYY-MM-DD')),
    PARTITION t1p3 VALUES LESS THAN (TO_DATE('2008-01-01', 'YYYY-MM-DD')),
    PARTITION t1p4 VALUES LESS THAN (MAXVALUE)
    );

    Si quieres ahora los indices particionados los creas como en este ejemplo

    CREATE INDEX INDEX1 ON TABLA1(COL1,COL2) local
    (
    PARTITION part1 tablespace A1,
    PARTITION part2 tablespace A1,
    PARTITION part3 tablespace A1,
    PARTITION part4 tablespace A1,
    PARTITION part5 tablespace A1,
    PARTITION part6 tablespace A1,
    PARTITION part7 tablespace A1
    );

  • Re: Particionamiento en Oracle

    by » 7 years ago


    Con respecto a la respuesta 2 te cuento que con la clausula interval, solo la primer partición queda en part_01, las demás las asigna automaticamente oracle de acuerdo al criterio dado en la clausula interval.

    En el ejemplo que me colocas index1 queda acoplado a las particiones definidas en la tabla si se colocan las particiones explicitamente ó solo con especificar el partition key (c1) en el indice como lo haces en el ejemplo CREATE INDEX INDEX1 ON TABLA1(COL1,COL2) local, es suficiente ?


    Otra Pregunta:
    Que es mas optimo de los siguientes esquemas en terminos de I/0 consultas y actualizaciones, teniendo en cuenta que la mayor demanda de consultas se da por mes y/o año

    opción 1:
    Crear una particion por año con subparticiones por meses. Eje:
    Particiono 2012 y hago subparticiones por cada mes del año

    opción 2:
    Crear una particion solo por meses sin subparticiones. eje:
    solo particiones por cada mes del año

    Si la opción 2 es la mejor, debo acoplar los indices locales a las subparticiones ó solo es posible acoplarlos a las particiones ?

    Saludos y gracias por tu apoyo que me ha sido de gran ayuda !!!

You do not have permissions to reply to this topic.
Powered by CjForum