Tabela zewnętrzna jest jedną z ważnych funkcji w Oracle , w tym poście omówimy tabelę zewnętrzną w Oracle z przykładem.
Co to są ZEWNĘTRZNE TABELE w Oracle?
1)Zewnętrzne tabele to tabele tylko do odczytu, w których dane są przechowywane w płaskich plikach poza bazą danych
2) Możesz użyć funkcji tabeli zewnętrznej, aby uzyskać dostęp do plików zewnętrznych, tak jakby były tabelami w bazie danych.
3) Tworząc tabelę zewnętrzną, definiujesz jej strukturę i lokalizację za pomocą narzędzia Oracle. Zasadniczo przechowujesz metadane wewnątrz wyroczni
4) Kiedy wysyłasz zapytanie do tabeli, oracle odczytuje zewnętrzną tabelę i zwraca wyniki, tak jakby dane były przechowywane w bazie danych.
5) Serwer Oracle udostępnia dwa główne sterowniki Oracle do odczytywania płaskich plików
- Oracle_loader:Służy do odczytywania płaskich plików przy użyciu technologii Oracle Loader. Zasadniczo pozwala na odczytanie plików, które można zinterpretować za pomocą technologii ładowania SQL
- Oracle_datapump:Służy zarówno do importowania, jak i eksportowania danych przy użyciu formatu niezależnego od platformy
DOSTĘP DO ZEWNĘTRZNYCH DANYCH TABELI
Aby uzyskać dostęp do tabeli zewnętrznej, należy wykonać kilka kroków
- Najpierw musimy użyć polecenia tworzenia katalogu, aby zdefiniować obiekt katalogu wskazujący na lokalizację pliku zewnętrznego
sqlplus "/ as sysdba" Create directory ext_dir as ‘/export/home/ora/external’;
- Użytkownicy, którzy będą mieli dostęp do plików zewnętrznych, muszą mieć uprawnienia do odczytu i zapisu w katalogu.
Grant all on directory ext_dir to user;
- Teraz utwórzmy lub umieśćmy kilka plików w katalogu
SQL> Conn user/user SQL> Spool city.lst SQL> Select city || ‘,’ || state || ‘,’ || country from countries; SQL> Spool off
Teraz powinieneś widzieć plik city.lst w katalogu
- Teraz powinniśmy utworzyć zewnętrzną tabelę za pomocą poniższego polecenia
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;
Wyjaśnienie każdego terminu
Zewnętrzna organizacja | Informuje, że dane są przechowywane poza bazą danych |
Wpisz | To sterownik oracle lub interfejs API, który interpretuje dane zewnętrzne dla bazy danych. Jeśli nic nie określisz, domyślnie jest to oracle_loader |
Domyślny katalog | Jest to katalog, w którym mogą być przechowywane zwykłe pliki. Domyślny katalog jest również używany do przechowywania plików pomocniczych utworzonych z dostępu sterownika oracle, takich jak plik dziennika i złe pliki. Możemy określić wiele katalogów, aby ułatwić równoważenie obciążenia na wielu dyskach |
Parametry dostępu | Pozwala określić wartości parametrów konkretnego sterownika dostępu dla tej zewnętrznej tabeli |
Lokalizacja | Pozwala określić nazwę zewnętrznego pliku płaskiego |
LIMIT ODRZUCENIA | Pozwala określić, ile błędów konwersji może wystąpić, zanim serwer Oracle przerwie operację i zwróci błąd |
5) WYBIERANIE DANYCH Z TABELI ZEWNĘTRZNEJ
SQL> wybierz * z city_ext;
Będzie to odczytane z city.lst, który jest plikiem na poziomie systemu operacyjnego.
Jeśli plik city.lst nie jest obecny, instrukcja select spowoduje wyświetlenie tego błędu
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
OGRANICZENIA DOTYCZĄCE STOŁÓW ZEWNĘTRZNYCH
- Nie możesz wykonywać operacji wstawiania, aktualizowania i usuwania
- Indeksowanie Oracle nie jest możliwe
- Ograniczenia nie są możliwe
ZALETY STOŁÓW ZEWNĘTRZNYCH W ORACLE
- a) Zapytania dotyczące tabel zewnętrznych kończą się bardzo szybko, mimo że przy każdym dostępie wymagany jest pełny identyfikator skanowania tabeli
- b) Możesz łączyć zewnętrzne stoły ze sobą lub ze standardowymi stołami oracle
- c) Możemy tworzyć widoki na zewnętrznym stole
Nowa aktualizacja w 11gR2 dla tabeli zewnętrznej
W Oracle 11g Release 2 wprowadzono nową klauzulę PREPROCESSOR, która może identyfikować obiekt katalogu i skrypt używany do przetwarzania plików, zanim zostaną odczytane przez zewnętrzną tabelę. Ta funkcja została przeniesiona do 11gR1 (11.1.0.7).
Klauzula PREPROCESSOR jest szczególnie przydatna do odczytywania skompresowanych plików, ponieważ są one rozpakowywane i przesyłane bezpośrednio do zewnętrznego procesu tabeli bez konieczności rozpakowywania w systemie plików.
Weźmy przykład, aby lepiej zrozumieć ten parametr.
Załóżmy, że city.list jest skompresowany, a nazwa pliku to 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;
Tutaj klauzula PREPROCESSOR najpierw zdekompresuje plik city.lst.Z za pomocą polecenia uncompress przed wyszukaniem danych. Wszystko dzieje się w locie i nie trzeba rozpakowywać pliku city.lst.Z
Rozładowywanie/ładowanie danych przy użyciu zewnętrznych tabel Oracle
Oracle zapewniło również wsparcie dla technologii pomp danych w tabeli zewnętrznej.
Możemy wyładować tabelę za pomocą sterownika dostępu oracle_datadump
CREATE TABLE countries_xt ORGANIZATION EXTERNAL ( TYPE ORACLE_DATAPUMP DEFAULT DIRECTORY ext_dir LOCATION ('countries.dmp') ) AS SELECT * FROM countries;
Spowoduje to utworzenie w katalogu plików countries.dmp. Teraz nawet kraje tabeli są usuwane, nadal możemy oglądać dane za pomocą tabeli country_xt.
Możemy nawet przenieść plik zrzutu do innej bazy danych, a następnie utworzyć zewnętrzną tabelę do oglądania danych
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;_xt
Ulepszenia w zewnętrznych tabelach w bazie danych 12c
Oracle_loader
Klauzula lokalizacji może mieć symbol wieloznaczny. * oznacza wiele znaków i ? dla jednego znaku.
Wprowadzono klauzulę Fields csv
Oracle_datapump
Możemy wyładować dane za pomocą zaawansowanej opcji kompresji
Powiązane artykuły
ORA-29913 z tabelami zewnętrznymi
Wskazówki dotyczące tabeli zewnętrznej
Jak załadować pole CLOB z tabelą zewnętrzną
Oracle utwórz tabelę jako wybierz