Cargando grandes cantidades de datos a una database Oracle SQL

Me preguntaba si alguien tenía alguna experiencia con lo que estoy a punto de emprender. Tengo varios files csv que tienen aproximadamente un GB de tamaño y necesito cargarlos en una database de Oracle. Si bien la mayor parte de mi trabajo después de la carga será de solo lectura, tendré que cargar actualizaciones de vez en cuando. Básicamente solo necesito una buena herramienta para cargar varias filas de datos a la vez hasta mi DB.

Esto es lo que he encontrado hasta ahora:

  1. Podría usar SQL Loader t hacer mucho del trabajo

  2. Podría usar commands de inserción masiva

  3. Algún tipo de inserción de lote.

Usar una statement preparada de alguna manera podría ser una buena idea. Supongo que me estaba preguntando qué es lo que todos piensan que es la manera más rápida de hacer este inserto. ¿Algun consejo?

Me sorprendería mucho si pudiera implementar su propia utilidad que superará las cargas de ruta de acceso directo de SQL * Loader . Oracle construyó esta utilidad para exactamente este propósito: la probabilidad de build algo más eficiente es prácticamente nula. También existe la Carga de ruta directa paralela , que le permite tener múltiples processs de carga de ruta directa ejecutándose simultáneamente.

Del manual:

En lugar de llenar un búfer de matriz de vinculación y pasarlo a la database de Oracle con una instrucción SQL INSERT, una carga de ruta directa utiliza la API de ruta directa para pasar los datos que se cargarán al motor de carga en el server. El motor de carga construye una estructura de matriz de columnas a partir de los datos que se le pasan.

El motor de carga de ruta directa utiliza la estructura de matriz de columnas para formatear bloques de datos de Oracle y generar keys de índice. Los bloques de database recién formateados se escriben directamente en la database (múltiples bloques por request de E / S utilizando escrituras asíncronas si la plataforma de host admite E / S asincrónicas).

Internamente, se utilizan múltiples búferes para los bloques formateados. Mientras se llena un buffer, se escriben uno o más buffers si está disponible la E / S asíncrona en la plataforma de host. La superposition de cálculos con E / S aumenta el performance de la carga.

Hay casos en que la Carga de ruta directa no se puede usar .

Con esa cantidad de datos, será mejor que esté seguro de su tienda de respaldo: el espacio libre de los discos dbf.

sqlldr es una unidad de script, muy eficiente, generalmente más eficiente que una secuencia de commands sql. Lo único que me pregunto es la magnitud de los datos. Personalmente, consideraría varios processs de sqlldr y asignaría a cada uno un subset de datos y permitiría que los processs se ejecutaran en paralelo.

¿Dijiste que querías cargar algunos loggings a la vez? Eso puede tomar mucho más time de lo que piensas. ¿Te refieres a algunos files a la vez?

Puede crear una tabla externa en los files CSV y cargarlos SELECCIONANDO de la tabla externa a otra tabla. Si este método será más rápido, no estoy seguro, sin embargo, podría ser más rápido en términos de perder el time trabajando con el cargador sql *, especialmente cuando tiene un criterio para las ACTUALIZACIONES.