sql >> Databasteknik >  >> RDS >> Oracle

Oracle Externa tabeller

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

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

  1. Du kan inte utföra infogning, uppdatering och radering
  2. Oracle-indexering är inte möjlig
  3.  Begränsningar inte möjliga

FÖRDELAR MED EXTERNA BORD I ORACLE

  1. a) Förfrågningar av externa tabeller slutförs mycket snabbt även om ett fullständigt tabellskannings-ID krävs för varje åtkomst
  2. b) Du kan koppla externa tabeller till varandra eller till standard oracle-tabeller
  3. 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


  1. Arbetar dina anställda på distans? Så här håller du din data säker.

  2. Hur bestämmer jag när jag ska använda höger/vänster kopplingar eller inre kopplingar Eller hur bestämmer jag vilken tabell som finns på vilken sida?

  3. Infogar aktuellt datum och tid i SQLite-databasen

  4. Postgres använder inte index när indexskanning är ett mycket bättre alternativ