Oracle
 sql >> Base de données >  >> RDS >> Oracle

Tables externes Oracle

La table externe est l'une des fonctionnalités importantes d'Oracle, nous allons explorer la table externe d'Oracle avec un exemple dans cet article

Que sont les TABLES EXTERNES dans Oracle ?

1)Les tables externes sont des tables en lecture seule où les données sont stockées dans des fichiers plats en dehors de la base de données

2) Vous pouvez utiliser la fonctionnalité de table externe pour accéder aux fichiers externes comme s'il s'agissait de tables dans la base de données.

3)   Lorsque vous créez une table externe, vous définissez sa structure et son emplacement avec Oracle. Fondamentalement, vous stockez simplement les métadonnées dans l'oracle

4) Lorsque vous interrogez la table, Oracle lit la table externe et renvoie les résultats comme si les données avaient été stockées dans la base de données.

5) Le serveur oracle fournit deux pilotes oracle majeurs pour lire les fichiers plats

  1. Oracle_loader :ceci est utilisé pour la lecture des fichiers plats à l'aide de la technologie Oracle Loader. Il permet essentiellement de lire les fichiers qui peuvent être interprétés à l'aide de la technologie SQL Loader
  2. Oracle_datapump :ceci est utilisé à la fois pour l'importation et l'exportation de données à l'aide d'un format indépendant de la plate-forme

ACCÉDER AUX DONNÉES EXTERNES DE LA TABLE

Quelques étapes sont nécessaires pour accéder à la table externe

  • Nous devons d'abord utiliser la commande create directory pour définir un objet répertoire pointant vers l'emplacement du fichier externe
sqlplus "/ as sysdba"

Create directory ext_dir as ‘/export/home/ora/external’;

  • Les utilisateurs qui accéderont aux fichiers externes doivent disposer du privilège de lecture et d'écriture sur le répertoire.
Grant all on directory ext_dir to user;

  • Créons maintenant ou plaçons des fichiers dans le répertoire
SQL> Conn user/user

SQL> Spool city.lst

SQL> Select city || ‘,’ || state || ‘,’ || country from countries;

SQL> Spool off

 

Vous devriez maintenant pouvoir voir le fichier city.lst dans le répertoire

  • Nous devons maintenant créer la table externe à l'aide de la commande ci-dessous
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;

Explication de chaque terme

Organisation externe Il indique que les données sont stockées en dehors de la base de données
Type C'est le pilote oracle ou l'API qui interprètent les données externes pour la base de données. Si vous ne spécifiez rien, oracle_loader est la valeur par défaut
Répertoire par défaut C'est l'emplacement du répertoire où les fichiers plats peuvent être stockés. Le répertoire par défaut est également utilisé pour stocker les fichiers auxiliaires créés à partir de l'accès au pilote Oracle, tels que le fichier journal et les fichiers défectueux. Nous pouvons spécifier plusieurs répertoires pour faciliter l'équilibrage de charge sur plusieurs lecteurs
Paramètres d'accès Il vous permet de spécifier les valeurs du paramètre du pilote d'accès spécifique pour cette table externe
Emplacement Il vous permet de spécifier le nom du fichier plat externe
LIMITE DE REJET Il vous permet de spécifier combien d'erreurs de conversion peuvent se produire avant que le serveur Oracle n'interrompe l'opération et ne renvoie l'erreur

5) SÉLECTION DE DONNÉES À PARTIR D'UNE TABLE EXTERNE

SQL> sélectionnez * de city_ext ;

Cela lira à partir de city.lst qui est un fichier au niveau du système d'exploitation.

Si le fichier city.lst n'est pas présent, l'instruction select renverrait cette erreur

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

LIMITATIONS SUR LES TABLES EXTERNES

  1. Vous ne pouvez pas effectuer d'opérations d'insertion, de mise à jour et de suppression
  2. Indexation Oracle impossible
  3.  Contraintes impossibles

AVANTAGES DES TABLES EXTERNES DANS ORACLE

  1. a) Les requêtes de tables externes se terminent très rapidement, même si un identifiant d'analyse complète de la table est requis à chaque accès
  2. b) Vous pouvez joindre des tables externes entre elles ou à des tables oracle standard
  3. c) Nous pouvons créer des vues sur la table externe

Nouvelle mise à jour dans 11gR2 pour table externe

Avec Oracle 11g Release 2, une nouvelle clause PREPROCESSOR est introduite qui peut identifier un objet de répertoire et un script utilisé pour traiter les fichiers avant qu'ils ne soient lus par la table externe. Cette fonctionnalité a été rétroportée vers 11gR1 (11.1.0.7).

La clause PREPROCESSOR est particulièrement utile pour lire les fichiers compressés, car ils sont décompressés et directement redirigés vers le processus de table externe sans jamais avoir à être décompressés sur le système de fichiers.

Prenons un exemple pour mieux comprendre ce paramètre.

Supposons que city.list soit compressé, alors le nom du fichier serait 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;

Ici, la clause PREPROCESSOR va d'abord décompresser le fichier city.lst.Z en utilisant la commande uncompress avant de rechercher les données. Tout se passerait à la volée et vous n'auriez pas besoin de décompresser le fichier city.lst.Z

Décharger/Charger des données à l'aide de tables externes Oracle

Oracle a également fourni un support pour la technologie datapump dans la table externe.

Nous pouvons décharger la table en utilisant le pilote d'accès oracle_datadump

CREATE TABLE countries_xt
ORGANIZATION EXTERNAL
(
TYPE ORACLE_DATAPUMP
DEFAULT DIRECTORY ext_dir
LOCATION ('countries.dmp')
)
AS SELECT * FROM countries;

Cela créera country.dmp dans le répertoire. Maintenant, même la table country est supprimée, nous pouvons toujours regarder les données à l'aide de la table country_xt.

Nous pouvons même transférer le fichier de vidage vers une autre base de données, puis créer une table externe pour surveiller les données

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;

Améliorations des tables externes dans la base de données 12c

Oracle_loader

La clause d'emplacement peut avoir un caractère générique. * représente plusieurs caractères et ? pour un seul caractère.

La clause csv des champs a été introduite

Oracle_datapump

Nous pouvons décharger les données en utilisant l'option de compression avancée

Articles connexes

ORA-29913 avec des tables externes
Astuces sur la table externe
Comment charger un champ CLOB avec une table externe
oracle create table as select