sql >> Base de Datos >  >> RDS >> Oracle

Tablas externas de Oracle

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

  1. 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
  2. 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

  1. No puede realizar operaciones de inserción, actualización y eliminación
  2. La indexación de Oracle no es posible
  3.  Restricciones no posibles

BENEFICIOS DE LAS TABLAS EXTERNAS EN ORACLE

  1. 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
  2. b) Puede unir tablas externas entre sí o con tablas estándar de Oracle
  3. 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