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
- 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
- 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
- Non è possibile eseguire operazioni di inserimento, aggiornamento ed eliminazione
- Indicizzazione Oracle non possibile
- Vincoli non possibili
VANTAGGI DEI TAVOLI ESTERNI IN ORACLE
- a) Le query su tabelle esterne vengono completate molto rapidamente anche se ad ogni accesso è richiesto un ID di scansione completo della tabella
- b) Puoi unire tabelle esterne tra loro oa tabelle Oracle standard
- 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