Acelere la inserción de grandes volúmenes de datos con los scripts de inserción masiva de Oracle en KeepTool.

    Publicado 07. noviembre 2023

    Actualizado en octubre de 2025


    Introducción

    KeepTool 16 presenta una potente mejora: compatibilidad nativa con scripts de inserción masiva de Oracle. Aunque los usuarios llevan mucho tiempo apreciando la capacidad de generar scripts INSERT a partir de los datos de Hora, la nueva versión va más allá y optimiza el rendimiento para grandes volúmenes de datos.

    Repasemos el comportamiento en Hora 15 y luego exploremos las novedades de la versión 16.


    Resumen: scripts de inserción en Hora 15

    Supongamos que está conectado al esquema HR de Oracle y ve los datos de la tabla JOB_HISTORY. Haga clic con el botón derecho del ratón en la cuadrícula de datos y seleccione «Crear script INSERT».

    Create INSERT Script menu item in Hora's Data Content Grid

    Elemento de menú Crear script INSERT en la cuadrícula de contenido de datos de Hora

    Verá dos opciones:

    • Guardar en archivo

    • Copiar al portapapeles

    Sea cual sea la opción que elija, Hora genera un script INSERT estándar. El script comienza con el código estándar de SQL*Plus (configuración de variables), incluye comentarios para desactivar los desencadenadores o las restricciones FK si es necesario, luego genera sentencias INSERT individuales por fila y, finalmente, vuelve a activar las restricciones y termina con un COMMIT.

    SQL Editor shows a traditional INSERT Script created by Hora

    El editor SQL muestra un script INSERT tradicional creado por Hora

    Este enfoque funciona bien para conjuntos de datos moderados, pero puede volverse lento o difícil de manejar cuando aumentan los volúmenes de inserción.


    Novedades de Hora / KeepTool 16

    La versión 16 aporta varias mejoras a la generación de scripts:

    • Opción de inserción masiva: ahora puede agrupar varias filas en una sola instrucción INSERT, lo que mejora el rendimiento de la ejecución.

    • Inserciones de ruta directa: opcionalmente, genere scripts que utilicen las sugerencias de inserción de ruta directa de Oracle para una carga aún más rápida.

    • División de scripts: los scripts de inserción grandes se pueden dividir en varios archivos más pequeños, lo que mejora la usabilidad y el mantenimiento del editor.

    • Estas opciones se pueden configurar completamente en la pestaña de configuración de contenido de datos.

    Veamos cada mejora con más detalle.


    Inserciones masivas con INSERT ALL

    Para admitir la inserción masiva, hemos adoptado la INSERT ALLsintaxis de Oracle.
    En el cuadro de diálogo de configuración, puede definir un tamaño masivo, es decir, cuántas filas se incluirán por cada instrucción INSERT ALL.

    Data Content - Insert script bulk size option

    Contenido de datos: opción de tamaño de lote del script de inserción

    Si establece el tamaño del lote en 1, se comportará exactamente igual que en Hora 15 (inserciones individuales). En nuestra demostración, lo hemos establecido en 3; Hora genera sentencias como:

    INSERT ALL
      INTO JOB_HISTORY( EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID )
      VALUES( 1, TO_DATE('20.01.0017 00:00:00'), TO_DATE('08.01.2023 10:09:43'), 'AD_PRES', 90 )
    
      EN JOB_HISTORY( EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID )
      VALUES( 1, TO_DATE('20.01.2017 00:00:00'), TO_DATE('08.01.2023 10:54:41'), 'AD_PRES', 90 )
    
      EN JOB_HISTORY( EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID )
      VALUES( 102, TO_DATE('13.01.2001 00:00:00'), TO_DATE('24.07.2006 00:00:00'), 'IT_PROG', 60 )
    SELECT 1 FROM DUAL
    /

    En Oracle 23c, Hora optimiza aún más, omitiendo los nombres de columna repetidos y la cláusula SELECT 1 FROM DUAL cláusula donde está permitido.

    INSERT ALL INTO JOB_HISTORY (EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID)
      VALUES( 1, TO_DATE('20.01.0017 00:00:00'), TO_DATE('08.01.2023 10:09:43'), 'AD_PRES', 90 )
    , VALUES( 1, TO_DATE('20.01.2017 00:00:00'), TO_DATE('08.01.2023 10:54:41'), 'AD_PRES', 90 )
    , VALUES( 102, TO_DATE('13.01.2001 00:00:00'), TO_DATE('24.07.2006 00:00:00'), 'IT_PROG', 60 )
    /

    Aunque las inserciones masivas no siempre garantizan un rendimiento más rápido en todos los casos, las pruebas sugieren que a menudo superan a las inserciones tradicionales fila por fila.


    Inserciones de ruta directa

    Para mejorar aún más la velocidad, se admiten las inserciones de ruta directa. Estas omiten parte del procesamiento SQL convencional, pero tienen sus inconvenientes. Utilice esta opción con precaución.

    Si está habilitada:

    • Se añade una APPEND_VALUES se añade una sugerencia (para 11g+; las versiones anteriores utilizan APPEND).

    • Cada INSERT va seguido de un COMMIT, para garantizar que las operaciones paralelas se completan correctamente.

    Data Content - Direct Path INSERT statements (/*+append*/) option

    Contenido de datos: opción de sentencias INSERT de ruta directa (/*+append*/)

    INSERT /*+append_values*/ ALL
    
    INTO JOB_HISTORY (EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID)
    VALUES ( 1, TO_DATE('20.01.0017 00:00:00'), TO_DATE('08.01.2023 10:09:43'), 'AD_PRES', 90)
    
    EN JOB_HISTORY (EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID)
    VALORES ( 1, TO_DATE('20.01.2017 00:00:00'), TO_DATE('08.01.2023 10:54:41'), 'AD_PRES', 90)
    
    EN JOB_HISTORY (EMPLOYEE_ID, START_DATE, END_DATE, JOB_ID, DEPARTMENT_ID)
    VALORES ( 102, TO_DATE('13.01.2001 00:00:00'), TO_DATE('24.07.2006 00:00:00'), 'IT_PROG', 60)
    
    SELECT 1 FROM DUAL;
    /
    
    COMMIT;
    /

    Se ha creado una instrucción INSERT de ruta directa.


    División de scripts grandes en fragmentos

    Los conjuntos de datos grandes pueden generar scripts enormes (cientos de MB), que son difíciles de abrir o editar. Hora 16 le permite dividir los scripts de inserción en varios archivos en función del tamaño máximo de archivo.

    INSERT script has been splitted into 3 chunks

    El script INSERT se ha dividido en 3 fragmentos

    Por comodidad, recomendamos comenzar con un tamaño predeterminado de 50 MB cuando se utiliza el editor SQL integrado.


    Resumen de opciones de configuración

    En la pestaña Contenido de datos, ahora están disponibles los siguientes controles:

    • Dividir scripts de inserción cada MB: comienza un nuevo archivo cuando se alcanza el límite de tamaño.

    • Tamaño masivo del script de inserción: número de filas por INSERT ALL

    • Insertar en una sola línea: si se deben escribir las cláusulas de campo y valor en una sola línea (para el modo no masivo).

    • Inserciones de ruta directa: alternar entre añadir sugerencias y confirmaciones

    • Usar literales de marca de tiempo para columnas DATE: garantiza la independencia del script de la configuración NLS

    • Escapar literales no ASCII: serializa correctamente el texto problemático

    Summary of INSERT script related options

    Resumen de las opciones relacionadas con el script INSERT


    Resumen

    Las mejoras de Hora 16 en la generación de scripts INSERT (inserciones masivas, compatibilidad con rutas directas, división de archivos y mucho más) son especialmente beneficiosas para operaciones con grandes volúmenes de datos, en las que el rendimiento es fundamental.

    Si maneja conjuntos de datos de gran tamaño, estas características pueden reducir el tiempo de ejecución y mejorar la capacidad de gestión de los scripts generados.


    Anexo

    La versión 16.1.0 introdujo un cuadro de diálogo de vista previa modal para ajustar las opciones del script INSERT antes de su generación. También
    puede guardar la configuración personalizada como predeterminada.

    INSERT script options preview dialog

    Cuadro de diálogo de vista previa de las opciones de script INSERT


    ➡️ Pruebe KeepTool gratis

    Las herramientas Oracle de KeepTool están diseñadas específicamente para desarrolladores, administradores de bases de datos (DBA) y equipos de soporte. Con más de 25 años de experiencia, optimizamos continuamente nuestro software para que el análisis y la documentación de sus bases de datos sean más rápidos, eficientes y claros.