Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Externe Oracle-Tabellen

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

  1. 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
  2. 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

  1. Sie können keine Einfüge-, Aktualisierungs- und Löschvorgänge ausführen
  2. Oracle Indexing nicht möglich
  3.  Beschränkungen nicht möglich

VORTEILE EXTERNER TABELLEN IN ORACLE

  1. a) Abfragen externer Tabellen werden sehr schnell abgeschlossen, obwohl bei jedem Zugriff eine vollständige Tabellen-Scan-ID erforderlich ist
  2. b) Sie können externe Tabellen miteinander oder mit Standard-Oracle-Tabellen verknüpfen
  3. 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 dekomprimieren

Entladen/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

entladen
CREATE 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