Extern tabell är en av de viktiga funktionerna i Oracle, vi kommer att utforska extern tabell i Oracle med exempel i det här inlägget
Vad är EXTERNA TABELLER i Oracle?
1)Externa tabeller är skrivskyddade tabeller där data lagras i platta filer utanför databasen
2) Du kan använda extern tabellfunktion för att komma åt externa filer som om de vore tabeller i databasen.
3) När du skapar en extern tabell definierar du dess struktur och plats med i oracle. I princip lagrar du bara metadata inuti oraklet
4) När du frågar tabellen läser Oracle den externa tabellen och returnerar resultaten precis som om data hade lagrats i databasen.
5) Oracle-servern tillhandahåller två stora oracle-drivrutiner för att läsa de platta filerna
- Oracle_loader:Detta används för att läsa de platta filerna med hjälp av oracle loader-tekniken. Det tillåter i princip att läsa filerna som kan tolkas med hjälp av SQL loader-teknik
- Oracle_datapump:Detta används för både import och export av data med plattformsoberoende format
ÅTKOMMA EXTERNA TABELLDATA
Det finns få steg som behöver utföras för att komma åt den externa tabellen
- Vi måste först använda kommandot create directory för att definiera ett katalogobjekt som pekar på den externa filplatsen
sqlplus "/ as sysdba"Skapa katalog ext_dir som ‘/export/home/ora/external’;
- Användare som kommer åt de externa filerna måste ha läs- och skrivbehörighet i katalogen.
Ge alla i katalogen ext_dir till användaren;
- Låt oss nu skapa eller lägga några filer under katalogen
SQL> Anslut användare/userSQL> Spool city.lstSQL> Välj stad || ',' || tillstånd || ',' || land från länder;SQL> Spool off
Nu bör du kunna se filen city.lst i katalogen
- Nu ska vi skapa den externa tabellen med kommandot nedan
Skapa tabell city_ext(city varchar(10),state varchar(14),country varchar(13))Organisation extern (typ oracle_loaderDefault directory ext_dirAccess parametrar(poster avgränsade av newlineFields avslutade med ","( city char(10), state char(14),country char(13)))Plats ('city.lst'))PARALLEL 5REJECT LIMIT UNLIMITED;
Förklaring av varje term
Extern organisation | Den talar om att data lagras utanför databasen |
Typ | Det är oracle-drivrutinen eller API:et som tolkar externa data för databasen. Om du inte anger något är oracle_loader förvalt |
Standardkatalog | Det är katalogplatsen där de platta filerna kan lagras. Standardkatalogen används också för att lagra extrafiler som skapats från åtkomsten till oracle-drivrutinen, såsom loggfiler och dåliga filer. Vi kan specificera flera kataloger för att underlätta lastbalansering på flera enheter |
Åtkomstparametrar | Det låter dig ange värden för parametern för den specifika åtkomstdrivrutinen för den här externa tabellen |
Plats | Den låter dig ange det externa platta filnamnet |
AVVISA GRÄNS | Den låter dig ange hur många konverteringsfel som kan inträffa innan Oracle-servern avbryter operationen och returnerar felet |
5) VÄLJA DATA FRÅN EXTERN TABELL
SQL> välj * från city_ext;
Detta kommer att läsas från city.lst som är en fil på operativsystemnivå.
Om filen city.lst inte finns, skulle select-satsen ge detta fel
VÄLJ **FEL på rad 1:ORA-29913:fel vid exekvering av ODCIEXTTABLEOPEN calloutORA-29400:datakassettfelKUP-04040:fil city.lst i EXT_DIR hittades inteORA-06512:vid "SYS.ORACLE_LOADERA",- rad 14ORDERA 06512:på rad 1
BEGRÄNSNINGAR PÅ EXTERNA TABELLER
- Du kan inte utföra infogning, uppdatering och radering
- Oracle-indexering är inte möjlig
- Begränsningar inte möjliga
FÖRDELAR MED EXTERNA BORD I ORACLE
- a) Förfrågningar av externa tabeller slutförs mycket snabbt även om ett fullständigt tabellskannings-ID krävs för varje åtkomst
- b) Du kan koppla externa tabeller till varandra eller till standard oracle-tabeller
- c) Vi kan skapa vyer på den externa tabellen
Ny uppdatering i 11gR2 för extern tabell
Med Oracle 11g Release 2 introduceras en ny PREPROCESSOR-sats som kan identifiera ett katalogobjekt och ett skript som används för att bearbeta filerna innan de läses av den externa tabellen. Denna funktion backporterades till 11gR1 (11.1.0.7).
PREPROCESSOR-satsen är särskilt användbar för att läsa komprimerade filer, eftersom de packas upp och skickas direkt in i den externa tabellprocessen utan att någonsin behöva packas upp i filsystemet.
Låt oss ta ett exempel för att bättre förstå denna parameter.
Anta att city.list är komprimerad, då skulle filnamnet vara city.list.Z
Skapa tabell city_ext(city varchar(10),state varchar(14),country varchar(13))Organisation extern (typ oracle_loaderDefault directory ext_dirPREPROCESSOR ext_dir:uncompressAccess parametrar( poster avgränsade av newlineFields avslutade med ","( city char 10),stat char(14),land char(13)))Plats ('city.lst.Z'))PARALLELL 5REJECT LIMIT UNLIMITED;
Här kommer PREPROCESSOR-satsen först att dekomprimera filen city.lst.Z med kommandot uncompress innan du letar efter data. Allt skulle hända i farten och du behöver inte komprimera filen city.lst.Z
Ta bort/läsa in data med hjälp av externa Oracle-tabeller
Oracle gav också stöd för datapumpsteknik i extern tabell.
Vi kan ladda ner tabellen med hjälp av oracle_datadump åtkomstdrivrutin
SKAPA TABELL länder_xtORGANISATION EXTERNAL(TYP ORACLE_DATAPUMPDEFAULT DIRECTORY ext_dirLOCATION ('countries.dmp'))SOM SELECT * FROM länder;
Detta skapar länder.dmp i katalogen. Nu har även tabellländerna tagits bort, vi kan fortfarande titta på data med hjälp av tabellerna country_xt.
Vi kan till och med ta en dumpfil till en annan databas och sedan skapa en extern tabell för att titta på data
SKAPA TABELL countries_xt (stad VARCHAR2(10),delstat VARCHAR2(9),länder VARCHAR2(9))ORGANISATION EXTERN (TYPE ORACLE_DATAPUMPDEFAULT DIRECTORY ext_dirLOCATION (')_countries från 't_xd>countries från länder't;Förbättringar i externa tabeller i 12c-databasen
Oracle_loader
Platssatssats kan ha wild character. * står för flera tecken och ? för enstaka tecken.
Fields csv-sats har introducerats
Oracle_datapump
Vi kan ladda ner data med avancerade komprimeringsalternativ
Relaterade artiklar
ORA-29913 med externa tabeller
Tips om extern tabell
Hur man laddar ett CLOB-fält med en extern tabell
oracle create table as select