Oracle
 sql >> Database >  >> RDS >> Oracle

Tabelle esterne Oracle

La tabella esterna è una delle funzionalità importanti in Oracle, esploreremo la tabella esterna in Oracle con un esempio in questo post

Cosa sono le TABELLE ESTERNE in Oracle?

1) Le tabelle esterne sono tabelle di sola lettura in cui i dati sono archiviati in file flat esterni al database

2) È possibile utilizzare la funzione tabella esterna per accedere a file esterni come se fossero tabelle all'interno del database.

3)   Quando crei una tabella esterna, ne definisci la struttura e la posizione con in Oracle. Fondamentalmente memorizzi i metadati all'interno dell'oracolo

4) Quando si interroga la tabella, Oracle legge la tabella esterna e restituisce i risultati proprio come se i dati fossero stati archiviati nel database.

5) Il server Oracle fornisce due principali driver Oracle per leggere i file flat

  1. Oracle_loader:viene utilizzato per leggere i file flat utilizzando la tecnologia Oracle Loader. In pratica permette di leggere i file che possono essere interpretati utilizzando la tecnologia SQL loader
  2. Oracle_datapump:viene utilizzato sia per l'importazione che per l'esportazione di dati utilizzando un formato indipendente dalla piattaforma

ACCESSO AI DATI DELLA TABELLA ESTERNA

Sono necessari alcuni passaggi per accedere alla tabella esterna

  • Dobbiamo prima usare il comando create directory per definire un oggetto directory che punta al percorso del file esterno
sqlplus "/ as sysdba"

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

  • Gli utenti che accederanno ai file esterni devono disporre del privilegio di lettura e scrittura sulla directory.
Grant all on directory ext_dir to user;

  • Ora creiamo o mettiamo alcuni file nella directory
SQL> Conn user/user

SQL> Spool city.lst

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

SQL> Spool off

 

Ora dovresti essere in grado di vedere il file city.lst nella directory

  • Ora dovremmo creare la tabella esterna usando il comando seguente
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;

Spiegazione di ogni termine

Organizzazione esterna Indica che i dati sono archiviati al di fuori del database
Tipo È il driver o l'API di Oracle  che interpretano i dati esterni per il database. Se non specifichi nulla, oracle_loader è l'impostazione predefinita
Rubrica predefinita È il percorso della directory in cui è possibile archiviare i file flat. La directory predefinita viene utilizzata anche per archiviare i file ausiliari creati dall'accesso del driver Oracle come file di registro e file danneggiati. Possiamo specificare più directory per facilitare il bilanciamento del carico su più unità
Accesso ai parametri Ti permette di specificare i valori del parametro del driver di accesso specifico per questa tabella esterna
Posizione Ti permette di specificare il nome del file flat esterno
LIMITE DI RIFIUTO Ti permette di specificare quanti errori di conversione possono verificarsi prima che Oracle Server interrompa l'operazione e restituisca l'errore

5) SELEZIONE DATI DA TAVOLA ESTERNA

SQL> seleziona * da city_ext;

Questo verrà letto da city.lst che è un file a livello di sistema operativo.

Se il file city.lst non è presente, l'istruzione select genererebbe questo errore

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

LIMITI SUI TAVOLI ESTERNI

  1. Non è possibile eseguire operazioni di inserimento, aggiornamento ed eliminazione
  2. Indicizzazione Oracle non possibile
  3.  Vincoli non possibili

VANTAGGI DEI TAVOLI ESTERNI IN ORACLE

  1. a) Le query su tabelle esterne vengono completate molto rapidamente anche se ad ogni accesso è richiesto un ID di scansione completo della tabella
  2. b) Puoi unire tabelle esterne tra loro oa tabelle Oracle standard
  3. c) Possiamo creare viste sulla tabella esterna

Nuovo aggiornamento in 11gR2 per il tavolo esterno

Con Oracle 11g Release 2, viene introdotta la nuova clausola PREPROCESSOR in grado di identificare un oggetto directory e uno script utilizzato per elaborare i file prima che vengano letti dalla tabella esterna. Questa funzionalità è stata trasferita a 11gR1 (11.1.0.7).

La clausola PREPROCESSOR è particolarmente utile per leggere i file compressi, poiché vengono decompressi e inviati direttamente al processo della tabella esterna senza che sia necessario decomprimerli sul file system.

Facciamo un esempio per comprendere meglio questo parametro.

Supponiamo che city.list sia compresso, quindi il nome del file sarebbe 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;

Qui la clausola PREPROCESSOR decomprimerà prima il file city.lst.Z usando il comando uncompress prima di cercare i dati. Tutto accadrebbe al volo e non sarà necessario decomprimere il file city.lst.Z

Scaricamento/caricamento dei dati utilizzando le tabelle Oracle External

Oracle ha anche fornito supporto per la tecnologia datapump nella tabella esterna.

Possiamo scaricare la tabella usando il driver di accesso oracle_datadump

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

Questo creerà paesi.dmp nella directory. Ora anche la tabella paesi è stata eliminata, possiamo ancora guardare i dati utilizzando la tabella paesi_xt.

Possiamo anche trasferire il file di dump su un altro database e quindi creare una tabella esterna per guardare i dati

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;

Miglioramenti nelle tabelle esterne nel database 12c

Oracle_loader

La clausola sulla posizione può avere  carattere jolly. * sta per carattere multiplo e ? per singolo carattere.

È stata introdotta la clausola csv di Fields

Oracle_datapump

Possiamo scaricare i dati utilizzando l'opzione di compressione avanzata

Articoli correlati

ORA-29913 con tabelle esterne
Suggerimenti su tabelle esterne
Come caricare un campo CLOB con una tabella esterna
oracle crea tabella come seleziona