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
- 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
- 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
- Vous ne pouvez pas effectuer d'opérations d'insertion, de mise à jour et de suppression
- Indexation Oracle impossible
- Contraintes impossibles
AVANTAGES DES TABLES EXTERNES DANS ORACLE
- 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
- b) Vous pouvez joindre des tables externes entre elles ou à des tables oracle standard
- 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