Ekstern tabel er en af de vigtige funktioner i Oracle, vi vil udforske ekstern tabel i Oracle med eksempel i dette indlæg
Hvad er EKSTERNE TABELLER i Oracle?
1) Eksterne tabeller er skrivebeskyttede tabeller, hvor dataene er gemt i flade filer uden for databasen
2) Du kan bruge ekstern tabelfunktion til at få adgang til eksterne filer, som om de er tabeller inde i databasen.
3) Når du opretter en ekstern tabel, definerer du dens struktur og placering med i oracle. Grundlæggende gemmer du bare metadataene inde i oraklet
4) Når du forespørger i tabellen, læser Oracle den eksterne tabel og returnerer resultaterne, ligesom hvis dataene var blevet gemt i databasen.
5) Oracle-serveren har to store oracle-drivere til at læse de flade filer
- Oracle_loader:Dette bruges til at læse de flade filer ved hjælp af oracle loader-teknologien. Det giver grundlæggende mulighed for at læse filerne, som kan fortolkes ved hjælp af SQL loader-teknologi
- Oracle_datapump:Dette bruges til både import og eksport af data ved hjælp af platformsuafhængigt format
ADGANG TIL EKSTERNE TABELDATA
Der er få trin, der skal udføres for at få adgang til den eksterne tabel
- Vi skal først bruge kommandoen create directory til at definere et biblioteksobjekt, der peger på den eksterne filplacering
sqlplus "/ as sysdba"Opret mappe ext_dir som ‘/export/home/ora/external’;
- Brugere, der vil få adgang til de eksterne filer, skal have læse- og skriverettigheder på mappen.
Giv alle i mappen ext_dir til brugeren;
- Lad os nu oprette eller lægge nogle filer under mappen
SQL> Conn user/userSQL> Spool city.lstSQL> Vælg by || ',' || stat || ',' || land fra lande;SQL> Spool off
Nu skulle du være i stand til at se city.lst-filen i mappen
- Nu skal vi oprette den eksterne tabel ved hjælp af nedenstående kommando
Opret tabel city_ext(city varchar(10),state varchar(14),country varchar(13))Organisation ekstern (type oracle_loaderDefault directory ext_dirAccess parameters(poster afgrænset af newlineFields afsluttet af ","( city char(10), state char(14),country char(13)))Placering ('city.lst'))PARALLEL 5REJECT LIMIT UNLIMITED;
Forklaring af hvert udtryk
Ekstern organisation | Det fortæller, at data er gemt uden for databasen |
Type | Det er oracle-driveren eller API'en som fortolker de eksterne data for databasen. Hvis du ikke angiver noget, er oracle_loader standarden |
Standard bibliotek | Det er mappeplaceringen, hvor de flade filer kan gemmes. Standardbiblioteket bruges også til at gemme de hjælpefiler, der er oprettet fra adgangen til oracle-driveren, såsom logfiler og dårlige filer. Vi kan specificere flere mapper for at lette belastningsbalancering på flere drev |
Adgangsparametre | Det lader dig specificere værdier for parameteren for den specifikke adgangsdriver for denne eksterne tabel |
Placering | Det lader dig angive det eksterne flad filnavn |
AFVIS GRÆNSE | Det lader dig angive, hvor mange konverteringsfejl der kan opstå, før oracle-serveren afbryder handlingen og returnerer fejlen |
5) VALG AF DATA FRA EKSTERN TABEL
SQL> vælg * fra city_ext;
Dette vil læse fra city.lst, som er en fil på operativsystemniveau.
Hvis filen city.lst ikke er til stede, ville select-sætningen give denne fejl
VÆLG **FEJL på linje 1:ORA-29913:fejl under udførelse af ODCIEXTTABLEOPEN calloutORA-29400:datapatronfejlKUP-04040:fil by.lst i EXT_DIR ikke fundetORA-06512:ved "SYS.ORACLE_LOADERA",- linje 14ORA 06512:på linje 1
BEGRÆNSNINGER PÅ EKSTERNE TABELLER
- Du kan ikke udføre indsættelse, opdatering og sletning
- Oracle-indeksering ikke mulig
- Begrænsninger ikke mulige
FORDELE VED EKSTERNE BORDE I ORACLE
- a) Forespørgsler til eksterne tabeller fuldføres meget hurtigt, selvom et komplet tabelscannings-id kræves ved hver adgang
- b) Du kan forbinde eksterne tabeller med hinanden eller til standard oracle-tabeller
- c) Vi kan oprette visninger på den eksterne tabel
Ny opdatering i 11gR2 til eksternt bord
Med Oracle 11g Release 2 introduceres en ny PREPROCESSOR-klausul, som kan identificere et mappeobjekt og et script, der bruges til at behandle filerne, før de læses af den eksterne tabel. Denne funktion blev backporteret til 11gR1 (11.1.0.7).
PREPROCESSOR-sætningen er især nyttig til at læse komprimerede filer, da de udpakkes og sendes direkte ind i den eksterne tabelproces uden nogensinde at skulle udpakkes på filsystemet.
Lad os tage et eksempel for bedre at forstå denne parameter.
Antag, at city.list er komprimeret, så vil filnavnet være city.list.Z
Opret tabel city_ext(city varchar(10),state varchar(14),country varchar(13))Organisation ekstern (type oracle_loaderDefault directory ext_dirPREPROCESSOR ext_dir:uncompressAccess parameters(poster afgrænset af newlineFields afsluttet af ","( by char( 10),stat char(14),land char(13)))Placering ('city.lst.Z'))PARALLEL 5REJECT LIMIT UNLIMITED;
Her vil PREPROCESSOR-sætningen først udkomprimere filen city.lst.Z ved hjælp af kommandoen uncompress, før du leder efter dataene. Alt ville ske med det samme, og du behøver ikke at komprimere filen city.lst.Z
Aflæsning/indlæsning af data ved hjælp af eksterne Oracle-tabeller
Oracle leverede også support til datapumpeteknologi i ekstern tabel.
Vi kan udlæse tabellen ved hjælp af oracle_datadump adgangsdriver
OPRET TABEL lande_xtORGANISATION EKSTERN(TYPE ORACLE_DATAPUMPDEFAULT DIRECTORY ext_dirLOCATION ('countries.dmp'))SOM VÆLG * FRA lande;
Dette vil oprette lande.dmp i mappen. Nu selv tabellen lande er droppet, kan vi stadig se data ved hjælp af country_xt tabellen.
Vi kan endda tage en dumpfil til en anden database og derefter oprette en ekstern tabel for at se dataene
OPRET TABEL lande_xt (by VARCHAR2(10),stat VARCHAR2(9),lande VARCHAR2(9))ORGANISATION EKSTERN (TYPE ORACLE_DATAPUMPDEFAULT DIRECTORY ext_dirLOCATION (')_dries from 't_countries;Forbedringer i eksterne tabeller i 12c-databasen
Oracle_loader
Placeringsklausul kan have et wild-tegn. * står for flere tegn og ? for enkelt tegn.
Fields csv-klausul er blevet introduceret
Oracle_datapump
Vi kan udlæse dataene ved hjælp af avanceret komprimeringsmulighed
Relaterede artikler
ORA-29913 med eksterne tabeller
Tips om ekstern tabel
Sådan indlæses et CLOB-felt med en ekstern tabel
oracle create table as select