Die externe Tabelle ist eine der wichtigsten Funktionen in Oracle. Wir werden die externe Tabelle in Oracle anhand eines Beispiels in diesem Beitrag untersuchen
Was sind EXTERNE TABELLEN in Oracle?
1)Externe Tabellen sind schreibgeschützte Tabellen, in denen die Daten in Flatfiles außerhalb der Datenbank gespeichert werden
2) Sie können die Funktion für externe Tabellen verwenden, um auf externe Dateien zuzugreifen, als wären sie Tabellen in der Datenbank.
3) Wenn Sie eine externe Tabelle erstellen, definieren Sie ihre Struktur und Position mit in Oracle. Im Grunde speichern Sie einfach die Metadaten im Orakel
4) Wenn Sie die Tabelle abfragen, liest Oracle die externe Tabelle und gibt die Ergebnisse zurück, als wären die Daten in der Datenbank gespeichert worden.
5) Der Oracle-Server bietet zwei wichtige Oracle-Treiber zum Lesen der Flatfiles
- Oracle_loader:Dies wird zum Lesen der Flatfiles unter Verwendung der Oracle-Loader-Technologie verwendet. Es ermöglicht grundsätzlich das Lesen der Dateien, die mit der SQL-Loader-Technologie interpretiert werden können
- Oracle_datapump:Dies wird sowohl zum Importieren als auch zum Exportieren von Daten unter Verwendung eines plattformunabhängigen Formats verwendet
ZUGRIFF AUF EXTERNE TABELLENDATEN
Es müssen nur wenige Schritte ausgeführt werden, um auf die externe Tabelle zuzugreifen
- Wir müssen zuerst den create directory-Befehl verwenden, um ein Verzeichnisobjekt zu definieren, das auf den externen Dateispeicherort zeigt
sqlplus "/ as sysdba" Create directory ext_dir as ‘/export/home/ora/external’;
- Benutzer, die auf die externen Dateien zugreifen, müssen Lese- und Schreibrechte für das Verzeichnis haben.
Grant all on directory ext_dir to user;
- Lassen Sie uns nun einige Dateien unter dem Verzeichnis erstellen oder ablegen
SQL> Conn user/user SQL> Spool city.lst SQL> Select city || ‘,’ || state || ‘,’ || country from countries; SQL> Spool off
Jetzt sollten Sie die Datei city.lst im Verzeichnis
sehen können- Jetzt sollten wir die externe Tabelle mit dem folgenden Befehl erstellen
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;
Erklärung der einzelnen Begriffe
Organisation extern | Es teilt mit, dass Daten außerhalb der Datenbank gespeichert werden |
Typ | Es ist der Oracle-Treiber oder die API, die die externen Daten für die Datenbank interpretiert. Wenn Sie nichts angeben, ist oracle_loader der Standard |
Standardverzeichnis | Es ist der Verzeichnisort, an dem die Flatfiles gespeichert werden können. Das Standardverzeichnis wird auch zum Speichern der Hilfsdateien verwendet, die durch den Zugriff des Oracle-Treibers erstellt wurden, wie z. B. Protokolldateien und fehlerhafte Dateien. Wir können mehrere Verzeichnisse angeben, um den Lastausgleich auf mehreren Laufwerken zu erleichtern |
Zugriffsparameter | Sie können Werte des Parameters des spezifischen Zugriffstreibers für diese externe Tabelle spezifizieren |
Standort | Damit können Sie den Namen der externen Flatfile angeben |
ABWEISUNGSGRENZE | Damit können Sie angeben, wie viele Konvertierungsfehler auftreten können, bevor der Oracle-Server die Operation abbricht und den Fehler zurückgibt |
5) DATEN AUS EXTERNER TABELLE AUSWÄHLEN
SQL> select * from city_ext;
Dies liest aus city.lst, einer Datei auf Betriebssystemebene.
Wenn die Datei city.lst nicht vorhanden ist, würde die select-Anweisung diesen Fehler werfen
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
EINSCHRÄNKUNGEN FÜR EXTERNE TABELLEN
- Sie können keine Einfüge-, Aktualisierungs- und Löschvorgänge ausführen
- Oracle Indexing nicht möglich
- Beschränkungen nicht möglich
VORTEILE EXTERNER TABELLEN IN ORACLE
- a) Abfragen externer Tabellen werden sehr schnell abgeschlossen, obwohl bei jedem Zugriff eine vollständige Tabellen-Scan-ID erforderlich ist
- b) Sie können externe Tabellen miteinander oder mit Standard-Oracle-Tabellen verknüpfen
- c) Wir können Ansichten auf die externe Tabelle erstellen
Neues Update in 11gR2 für externe Tabelle
Mit Oracle 11g Release 2 wird eine neue PREPROCESSOR-Klausel eingeführt, die ein Verzeichnisobjekt und ein Skript identifizieren kann, das verwendet wird, um die Dateien zu verarbeiten, bevor sie von der externen Tabelle gelesen werden. Diese Funktion wurde auf 11gR1 (11.1.0.7) zurückportiert.
Die PREPROCESSOR-Klausel ist besonders nützlich zum Lesen komprimierter Dateien, da sie entpackt und direkt in den externen Tabellenprozess geleitet werden, ohne jemals im Dateisystem entpackt werden zu müssen.
Nehmen wir ein Beispiel, um diesen Parameter besser zu verstehen.
Angenommen, die city.list ist komprimiert, dann wäre der Dateiname 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;
Hier dekomprimiert die PREPROCESSOR-Klausel zuerst die Datei city.lst.Z mit dem Befehl uncompress, bevor sie nach den Daten sucht. Alles würde spontan passieren und Sie brauchen die Datei city.lst.Z
nicht zu dekomprimierenEntladen/Laden von Daten mit Oracle External-Tabellen
Oracle unterstützte auch die Datapump-Technologie in externen Tabellen.
Wir können die Tabelle mit dem Zugriffstreiber oracle_datadump
entladenCREATE TABLE countries_xt ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY ext_dir LOCATION ('countries.dmp') ) AS SELECT * FROM countries;
Dadurch wird die Datei countries.dmp im Verzeichnis erstellt. Jetzt wird sogar die Tabelle "Länder" entfernt, wir können die Daten immer noch mit der Tabelle "Länder_xt" ansehen.
Wir können sogar eine Dump-Datei in eine andere Datenbank bringen und dann eine externe Tabelle erstellen, um die Daten zu beobachten
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;
Verbesserungen in externen Tabellen in der 12c-Datenbank
Oracle_loader
Standortklausel kann Platzhalterzeichen haben. * steht für mehrere Zeichen und ? für einzelnes Zeichen.
CSV-Klausel für Felder wurde eingeführt
Oracle_datapump
Wir können die Daten mithilfe der erweiterten Komprimierungsoption entladen
Verwandte Artikel
ORA-29913 mit externen Tabellen
Tipps zu externen Tabellen
Wie man ein CLOB-Feld mit einer externen Tabelle lädt
oracle create table as select