La tabla externa es una de las características importantes de Oracle, exploraremos la tabla externa en Oracle con un ejemplo en esta publicación
¿Qué son las TABLAS EXTERNAS en Oracle?
1) Las tablas externas son tablas de solo lectura donde los datos se almacenan en archivos planos fuera de la base de datos
2) Puede usar la función de tabla externa para acceder a archivos externos como si fueran tablas dentro de la base de datos.
3) Cuando crea una tabla externa, define su estructura y ubicación en Oracle. Básicamente, solo almacena los metadatos dentro del oráculo
4) Cuando consulta la tabla, Oracle lee la tabla externa y devuelve los resultados como si los datos se hubieran almacenado en la base de datos.
5) El servidor de Oracle proporciona dos controladores principales de Oracle para leer los archivos planos
- Oracle_loader:se utiliza para leer los archivos planos mediante la tecnología Oracle Loader. Básicamente permite leer los archivos que se pueden interpretar utilizando la tecnología de carga SQL
- Oracle_datapump:se utiliza tanto para importar como para exportar datos utilizando un formato independiente de la plataforma
ACCESO A DATOS DE TABLA EXTERNAS
Se deben realizar algunos pasos para acceder a la tabla externa
- Primero debemos usar el comando crear directorio para definir un objeto de directorio que apunte a la ubicación del archivo externo
sqlplus "/ as sysdba" Create directory ext_dir as ‘/export/home/ora/external’;
- Los usuarios que accederán a los archivos externos deben tener privilegios de lectura y escritura en el directorio.
Grant all on directory ext_dir to user;
- Vamos a crear o colocar algunos archivos en el directorio
SQL> Conn user/user SQL> Spool city.lst SQL> Select city || ‘,’ || state || ‘,’ || country from countries; SQL> Spool off
Ahora debería poder ver el archivo city.lst en el directorio
- Ahora debemos crear la tabla externa usando el siguiente comando
Create table city_ext (city varchar(10), state varchar(14), country varchar(13)) Organization external ( type oracle_loader Default directory ext_dir Access parameters ( records delimited by newline Fields terminated by “,” ( city char(10), state char(14), country char(13))) Location (‘city.lst’)) PARALLEL 5 REJECT LIMIT UNLIMITED;
Explicación de cada término
Organización externa | Indica que los datos se almacenan fuera de la base de datos |
Tipo | Es el controlador de Oracle o la API los que interpretan los datos externos para la base de datos. Si no especifica nada, oracle_loader es el valor predeterminado |
Directorio predeterminado | Es la ubicación del directorio donde se pueden almacenar los archivos planos. El directorio predeterminado también se usa para almacenar los archivos auxiliares creados a partir del acceso del controlador de Oracle, como el archivo de registro y los archivos defectuosos. Podemos especificar varios directorios para facilitar el equilibrio de carga en varias unidades |
Parámetros de acceso | Te permite especificar valores del parámetro del controlador de acceso específico para esta tabla externa |
Ubicación | Te permite especificar el nombre del archivo plano externo |
LÍMITE DE RECHAZOS | Le permite especificar cuántos errores de conversión pueden ocurrir antes de que el servidor Oracle cancele la operación y devuelva el error |
5) SELECCIÓN DE DATOS DE TABLA EXTERNA
SQL> seleccione * de city_ext;
Esto se leerá desde city.lst, que es un archivo a nivel del sistema operativo.
Si el archivo city.lst no está presente, la declaración de selección generaría este error
SELECT * * ERROR at line 1: ORA-29913: error in executing ODCIEXTTABLEOPEN callout ORA-29400: data cartridge error KUP-04040: file city.lst in EXT_DIR not found ORA-06512: at "SYS.ORACLE_LOADER", line 14 ORA-06512: at line 1
LIMITACIONES EN TABLAS EXTERNAS
- No puede realizar operaciones de inserción, actualización y eliminación
- La indexación de Oracle no es posible
- Restricciones no posibles
BENEFICIOS DE LAS TABLAS EXTERNAS EN ORACLE
- a) Las consultas de tablas externas se completan muy rápidamente, aunque se requiere una identificación de escaneo de tabla completa con cada acceso
- b) Puede unir tablas externas entre sí o con tablas estándar de Oracle
- c) Podemos crear vistas en la tabla externa
Nueva Actualización en 11gR2 para Tabla Externa
Con Oracle 11g Release 2, se introduce una nueva cláusula PREPROCESSOR que puede identificar un objeto de directorio y una secuencia de comandos utilizada para procesar los archivos antes de que la tabla externa los lea. Esta función se adaptó a 11gR1 (11.1.0.7).
La cláusula PREPROCESSOR es especialmente útil para leer archivos comprimidos, ya que se descomprimen y se canalizan directamente al proceso de la tabla externa sin tener que descomprimirlos en el sistema de archivos.
Tomemos un ejemplo para entender mejor este parámetro.
Supongamos que city.list está comprimido, entonces el nombre del archivo sería city.list.Z
Create table city_ext (city varchar(10), state varchar(14), country varchar(13)) Organization external ( type oracle_loader Default directory ext_dir PREPROCESSOR ext_dir:uncompress Access parameters ( records delimited by newline Fields terminated by “,” ( city char(10), state char(14), country char(13))) Location (‘city.lst.Z’)) PARALLEL 5 REJECT LIMIT UNLIMITED;
Aquí, la cláusula PREPROCESSOR primero descomprimirá el archivo city.lst.Z usando el comando uncompress antes de buscar los datos. Todo sucederá sobre la marcha y no necesitará descomprimir el archivo city.lst.Z
Descargar/Cargar datos usando tablas externas de Oracle
Oracle también brindó soporte para tecnología de bomba de datos en tablas externas.
Podemos descargar la tabla usando el controlador de acceso oracle_datadump
CREATE TABLE countries_xt ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY ext_dir LOCATION ('countries.dmp') ) AS SELECT * FROM countries;
Esto creará paises.dmp en el directorio. Ahora, incluso la tabla de países se elimina, aún podemos ver los datos usando la tabla de países_xt.
Incluso podemos llevar el archivo de volcado a otra base de datos y luego crear una tabla externa para ver los datos
CREATE TABLE countries_xt ( city VARCHAR2(10), state VARCHAR2(9), countries VARCHAR2(9)) ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY ext_dir LOCATION ('countries.dmp ') ); Select * from countries_xt;
Mejoras en tablas externas en base de datos 12c
Oracle_loader
La cláusula de ubicación puede tener un carácter comodín. * significa carácter múltiple y ? para un solo carácter.
Se ha introducido la cláusula Fields csv
Oracle_datapump
Podemos descargar los datos usando la opción de compresión avanzada
Artículos relacionados
ORA-29913 con tablas externas
Consejos sobre la tabla externa
Cómo cargar un campo CLOB con una tabla externa
Crear tabla de Oracle como selección