Oracle - Technologie Przetwarzania Danych
Transkrypt
Oracle - Technologie Przetwarzania Danych
Przykładowe środowisko integracji • Wirtualna Uczelnia – jednostki organizacyjne: – Dziekanat – dane osobowe studentów + dane o ocenach i zaliczeniach, – Dział Stypendiów – informacje o przyznanych studentom świadczeniach, – Dział Zarządzania Akademikami – dane o akademikach i zakwaterowanych w nich studentach, – Studium Języków Obcych – dane o zdobytych przez studentów ocenach i zaliczeniach z lektoratów, – Dział Kształcenia – jednostka zajmująca się sprawozdawczością. Architektury i technologie integracji danych Wprowadzenie do ćwiczeń laboratoryjnych Opis przebiegu ćwiczeń Omówienie mechanizmów wykorzystywanych w ćwiczeniach Bartosz Bębel Politechnika Poznańska, Instytut Informatyki str. 2 Przebieg ćwiczenia 1. 2. 3. 4. Ćwiczenie 1. DB2 - Oracle • Cel: umożliwienie dostępu z Działu Kształcenia do danych Działu Stypendiów. Integracja DB2 – Oracle 11g. Integracja MySQL – Oracle 11g. Integracja plik tekstowy – Oracle 11g. Integracja Oracle11g – Oracle 11g. – Dział Stypendiów – DB2. – Dział Kształcenia – Oracle 11g. • Wykorzystywane mechanizmy: – Oracle Gateway dla DB2. – Łącze bazodanowe. str. 3 str. 4 Oracle Gateway dla DB2 (1) Oracle Gateway dla DB2 (2) • Umożliwia dostęp (zarówno odczyt jak i zapis) z aplikacji Oracle do danych przechowywanych w IBM DB2. • Zapewnia: – transparentność na poziomie lokalizacji, sieci, systemu operacyjnego, formatu składowania danych i metody dostępu, – dostęp do danych przy wykorzystaniu SQL (wsparcie dla DDL i DCL, możliwość przesłania poleceń Native DB2 SQL), – wsparcie mechanizmów środowiska rozproszonego: optymalizacja zapytań rozproszonych i 2PC, • Zapewnia (cd): – mapowanie słownika danych z bazy DB2, – wsparcie dla wywoływania procedur składowanych DB2 identycznie jak procedur Oracle, – odpowiednie mechanizmy bezpieczeństwa (wykorzystuje mechanizmy Oracle i DB2). str. 5 Łącze bazodanowe (1) str. 6 Łącze bazodanowe (2) • Składnia polecenia: • Mechanizm SZBD Oracle. • Umożliwia dostęp do obiektów w zdalnej bazie danych. • Rodzaje: create [public] database link <nazwa łącza> connect to <użytkownik zdalny> identified by <hasło> using '<nazwa usługi>'; – łącze prywatne, – łącze publiczne. – użytkownik zdalny – nazwa schematu użytkownika zdalnego, na którego będzie wskazywało łącze, – hasło – hasło użytkownika zdalnego, – nazwa usługi – nazwa zdefiniowanej lokalnie usługi, wskazującej na zdalną bazę danych (definicja w pliku tnsnames.ora) – omijając klauzule: connect to i identified by tworzymy łącze wskazujące na bieżącego użytkownika. • Uwaga! Przy tworzeniu łącza nie jest sprawdzana poprawność nazwy użytkownika, hasła i nazwy usługi. • Jeśli parametr instancji GLOBAL_NAMES = true, wówczas nazwa łącza musi być identyczna z globalną nazwą bazy danych, na którą wskazuje. str. 7 str. 8 Łącze bazodanowe (3) Ćwiczenie 2. MySQL - Oracle • Cel: umożliwienie dostępu z Działu Kształcenia do danych Działu Zarządzania Akademikami. • Przykład definicji łącza prywatnego: create database link BAZA01 connect to scott identified by tiger using 'BAZA01.WORLD'; – Dział Zarządzania Akademikami – MySQL. – Dział Kształcenia – Oracle 11g. • Użycie łącza: select nazwisko from pracownicy@BAZA01 where id_zesp = 10; • Wykorzystywane mechanizmy: • Słownik danych: – USER_DB_LINKS – prywatne łącza użytkownika, – ODBC. – Oracle Gateway dla ODBC. – Łącze bazodanowe. – ALL_DB_LINKS – łącza, do których użytkownik ma dostęp, – DBA_DB_LINKS – lista wszystkich łączy, dostępna jedynie dla użytkowników z uprawnieniami DBA. str. 9 ODBC (1) str. 10 ODBC (2) • Interfejs programistyczny dostępu do baz danych. • ang. Open Database Connectivity. • Oparty na standardach: – X/Open CAE Specification "Data Management: SQL Call-Level Interface (CLI)", – ISO/IEC 9075-3:1995 (E) Call-Level Interface (SQL/CLI) Uwaga! Dopiero wersja ODBC 3.x w pełni implementuje oba standardy! • Wykorzystuje SQL. • Pierwotnie dla MS Windows, obecnie dostępny również na innych platformach systemowych (UnixODBC, iODBC, ...). • Zapewnia współpracę aplikacji z różnymi źródłami danych: – systemami zarządzania bazami danych: Informix, MS Access, MS SQL Server, MySQL, Postgress, Sybase SQL, Oracle, ..., – źródłami plikowymi: MS Access, MS Excel, dBASE, FoxPro, Paradox, .... • Często wykorzystywany przy dostępie do źródeł spadkowych. str. 11 str. 12 Oracle Gateway dla ODBC Ćwiczenie 3. Plik - Oracle • Umożliwia połączenie SZBD Oracle z dowolnym źródłem danych, wspierającym standard ODBC. • Konieczne dostarczenie sterownika ODBC dla źródła danych. • Lokalizacja źródła – zarówno na tej samej maszynie co SZBD Oracle jak i na maszynie zdalnej. • Cel: umożliwienie dostępu z Działu Kształcenia do danych Studium Języków Obcych. – Studium Języków Obcych – plik csv. – Dział Kształcenia – Oracle 11g. • Wykorzystywane mechanizmy: – Katalog w bazie danych. – Tabela zewnętrzna. – Funkcja tablicowa. str. 13 Tabela zewnętrzna (1) str. 14 Tabela zewnętrzna (2) • Tabela, której źródłem danych jest plik zewnętrzny. • Dostęp do tabeli zewnętrznej – identycznie jak do zwykłej tabeli (zapytania, możliwość użycia w programach PL/SQL, itd.). • Przy dostępie do tabeli zewnętrznej wywoływane jest odpowiednie oprogramowanie (zależne od typu tabeli). str. 15 • Możliwe operacje: – plik tekstowy – tylko odczyt (typ tabeli ORACLE_LOADER), – plik binarny w formacie backup-u Oracle’a - możliwe jednokrotne przesłanie danych z bazy danych do pliku (przy tworzeniu tabeli), potem tylko odczyt (typ tabeli ORACLE_DATAPUMP). str. 16 Tabela zewnętrzna (3) Katalog • Lokalizacja pliku w systemie plików serwera bd wskazywana przez specjalny obiekt bazodanowy – katalog (ang. directory). • Informacje o tabelach zewnętrznych użytkownika – perspektywa systemowa USER_EXTERNAL_TABLES. • Obiekt bazy danych, wskazujący lokalizację w systemie plików serwera. • Składnia polecenia: CREATE [OR REPLACE] DIRECTORY <nazwa> AS '<ścieżka w systemie plików serwera>'; • Przykład: CREATE OR REPLACE DIRECTORY MojKatalog AS '/home/kowalski/pliki'; • Informacje o dostępnych katalogach – perspektywa systemowa ALL_DIRECTORIES. str. 17 str. 18 Tabela zewnętrzna - tworzenie Tabela zewnętrzna - przykład id_klienta;Nazwisko;Imię;Kwota kredytu;rataI;rataII;rataIII;rataIV;rataV;rataVI ------------------------------------------------------------------------------1000;Kowalski;Jan;25000;4167;4167;4167;4167;4167;4167 1010;Adamski;Mariusz;31000;5166,7; 5166,7;5166,7;5166,7;5166.7;5166,7 1020;Nowacki;Arkadiusz;13020;2170;2170;2170;2170;2170;2170 create table <nazwa_tabeli> (<definicja atrybutów tabeli>) organization external -- tabela będzie pobierać dane z pliku (type [oracle_loader | oracle_datapump] -- nazwa oprogramowania wczytującego dane default directory <obiekt DIRECTORY> -- katalog z plikiem danych access parameters (records delimited by newline -- rekordy w osobnych liniach pliku badfile <[obiekt DIRECTORY>:]'<nazwa pliku błędów>' -- log błędów logfile <[obiektu DIRECTORY>:]'<nazwa pliku logu>' -- log operacji skip <liczba> -- ile początkowych linii pliku pominąć przy wczytywaniu fields terminated by '<znak oddzielający wartości w rekordzie>' fields (<definicja pól) -- opcjonalna definicja pól pliku missing field values are null) -- pola bez wartości pozostaną puste location ([obiekt DIRECTORY:]'<nazwa pliku danych>')) reject limit [<wartość> | UNLIMITED] -- ile dopuszczalnych błędów przy konwersji (domyślnie 0); str. 19 create table kredyty_klientow( id number(5),nazwisko varchar(30),imie varchar(30),kredyt number(8,2),rata1 number(6,2), rata2 number(6,2),rata3 number(6,2),rata4 number(6,2),rata5 number(6,2),rata6 number(6,2)) organization external (type oracle_loader default directory MojKatalog access parameters ( records delimited by newline badfile 'odrzucone.txt' logfile 'dziennik.txt' skip 2 fields terminated by ';' missing field values are null) location ('kredyty.txt')) / select * from kredyty_klientow; ID ---1000 1010 1020 NAZWISKO ---------Kowalski Adamski Nowacki IMIE KREDYT RATA1 RATA2 RATA3 RATA4 RATA5 RATA6 ----------- ------ ------ ------ ------ ------ ------ -----Jan 25000 4167 4167 4167 4167 4167 4167 Mariusz 31000 5166,7 5166,7 5166,7 5166,7 5166,7 5166,7 Arkadiusz 13020 2170 2170 2170 2170 2170 2170 str. 20 Funkcja tablicowa Krok 1. Definiowanie typu • Funkcja zwracająca jako wynik zbiór rekordów. • Traktowana jak tabela – umieszczana w zapytaniu w klauzuli FROM. • Pozwala realizować skomplikowane transformacje danych. ID ---1000 1010 1020 NAZWISKO ---------Kowalski Adamski Nowacki IMIE KREDYT RATA1 RATA2 RATA3 RATA4 RATA5 RATA6 ----------- ------ ------ ------ ------ ------ ------ -----Jan 25000 4167 4167 4167 4167 4167 4167 Mariusz 31000 5166,7 5166,7 5166,7 5166,7 5166,7 5166,7 Arkadiusz 13020 2170 2170 2170 2170 2170 2170 ID ---1000 1000 1000 1000 1000 1000 1010 ... NAZWISKO ---------Kowalski Kowalski Kowalski Kowalski Kowalski Kowalski Adamski IMIE KREDYT RATA NR_RATY ----------- ------ ------- ------Jan 25000 4167 1 Jan 25000 4167 2 Jan 25000 4167 3 Jan 25000 4167 4 Jan 25000 4167 5 Jan 25000 4167 6 Mariusz 31000 5166,7 1 • Typ określa strukturę rekordu, zwracanego przez funkcję. CREATE [OR REPLACE] TYPE <nazwa> AS [OBJECT(<definicje atrybutów>) | TABLE OF <typ bazowy>]; CREATE TYPE tRekordKredyt AS OBJECT( id number(5), nazwisko varchar2(30), imie varchar2(30), kredyt number(8,2), rata number(6,2), nr_raty number(4)) / CREATE TYPE tTablicaKredytow AS TABLE OF tRekordKredyt / str. 21 Krok 2. Definiowanie funkcji (1) str. 22 Krok 2. Definiowanie funkcji (2) • Przykład: • Składnia: create or replace function kredyty return tTablicaKredytow pipelined is cursor cRaty is select id, nazwisko, imie, kredyt, rata1, rata2, rata3, rata4, rata5, rata6 from kredyty_klientow; begin for R in cRaty loop pipe row(tRekordKredyt(R.id, R.nazwisko, R.imie, R.kredyt, R.rata1, 1)); pipe row(tRekordKredyt(R.id, R.nazwisko, R.imie, R.kredyt, R.rata2, 2)); pipe row(tRekordKredyt(R.id, R.nazwisko, R.imie, R.kredyt, R.rata3, 3)); pipe row(tRekordKredyt(R.id, R.nazwisko, R.imie, R.kredyt, R.rata4, 4)); pipe row(tRekordKredyt(R.id, R.nazwisko, R.imie, R.kredyt, R.rata5, 5)); pipe row(tRekordKredyt(R.id, R.nazwisko, R.imie, R.kredyt, R.rata6, 6)); end loop; return; end; CREATE [OR REPLACE] FUNCTION <nazwa> RETURN <typ_tablicowy> PIPELINED IS ... BEGIN … PIPE ROW(<rekord>); … END; str. 23 str. 24 Krok 3. Użycie funkcji Ćwiczenie 4. Oracle - Oracle • Składnia: • Cel: umożliwienie dostępu z Działu Kształcenia do danych Dziekanatu. SELECT … FROM TABLE(<nazwa funkcji) WHERE …; – Dziekanat – Oracle 11g. – Dział Kształcenia – Oracle 11g. SELECT * FROM TABLE(kredyty); ID ---1000 1000 ... 1000 1010 ... NAZWISKO ---------Kowalski Kowalski IMIE KREDYT ----------- -----Jan 25000 Jan 25000 Kowalski Adamski Jan Mariusz 25000 31000 RATA --------4167 4167 NR_RATY -------1 2 4167 5166,7 6 1 • Wykorzystywane mechanizmy: – Replikacja migawkowa. str. 25 Replikacja – podstawowe definicje • Replikacja – proces kopiowania danych z jednego miejsca (źródła) danych, do miejsca docelowego. • Źródło danych – tabela źródłowa. • Miejsce docelowe – tabela nazywana repliką. • Węzeł – instancja bazy danych, biorąca udział w replikacji. • Proces synchronizacji – proces uaktualnienia zawartości repliki zawartością tabeli źródłowej, proces ten nosi również nazwę odświeżania repliki. str. 27 str. 26 Replikacja – po co stosować? • Skrócenie dostępu użytkownika do danych (geograficzne rozproszenie danych). • Uniezależnienie pracy użytkownika od czasowej niedostępności bazy danych (możliwość skorzystania z kopii danych z innego serwera). • Rozłożenie obciążenia, wynikającego z pracy użytkowników, pomiędzy różne serwery baz danych. • Możliwość integracji danych z rozproszonych źródeł homo- i heterogenicznych. str. 28 Perspektywa materializowana Replikacja migawkowa • Implementacja repliki. • Inna nazwa: migawka. • Definiowana przez zapytanie, w przeciwieństwie do zwykłej perspektywy posiada swoje własne dane. • Możliwe jest jej indeksowanie, partycjonowanie, definiowanie parametrów składowania i domyślnej przestrzeni tabel (tak jak dla zwykłej tabeli). str. 29 Podział migawek (1) str. 30 Podział migawek (2) • Podział ze względu sposób identyfikacji rekordów w tabeli źródłowej i perspektywie: • Podział ze względu na postać zapytania definiującego: – prosta – zapytanie odwołuje się do jednej tabeli, nie wykorzystuje funkcji SQL, funkcji grupowych, wartości wyliczanych, klauzuli CONNECT BY i START WITH, operatora DISTINCT, – złożona – definiujące ją zapytanie nie spełnia przynajmniej jednego warunku definiującego perspektywę prostą. str. 31 – perspektywa typu ROWID – do identyfikacji używa adresu rekordu, wada – zmiana adresów rekordów w tabeli źródłowej (np. na skutek przeniesienia do innego pliku) powoduje utracenie powiązań pomiędzy rekordami z tabeli i perspektywy, konieczne wtedy pełne odświeżenie, – perspektywa typu primary key – do identyfikacji rekordów używa wartości kolumn z klucza podstawowego, ten typ jest zalecany przez Oracle. str. 32 Podział migawek (3) Definiowanie perspektywy mat. • Składnia polecenia: • Podział ze względu na możliwość uaktualniania: – tylko do odczytu – akceptują jedynie zapytania, – z możliwością uaktualniania – akceptują operacje DML – są one replikowane do tabeli źródłowej (wykorzystywane jedynie w tzw. zaawansowanej replikacji), – zapisywalne – akceptują operacje DML, jednak nie są one replikowane do tabeli źródłowej (zostają utracone podczas operacji odświeżania). create materialized view <nazwa_perspektywy> [build <moment_wypełnienia>] [refresh <sposób_odświeżania> start with <data_rozpoczęcia> next <częstotliwość>] with <typ_migawki> [for update] as zapytanie; • Zamiast klauzuli materialized view można użyć snapshot. str. 33 Parametry polecenia (1) str. 34 Parametry polecenia (2) • Moment odświeżenia migawki – klauzula REFRESH: • Moment wypełnienia migawki danymi – klauzula BUILD: – on demand – odświeżanie na żądanie użytkownika przez wywołanie procedury REFRESH z pakietu DBMS_SNAPSHOT, wartość domyślna, – on commit – odświeżanie automatyczne w momencie zatwierdzenia – immediate – wypełnienie danymi zaraz po utworzeniu (domyślnie), – deferred – wypełnienie danymi dopiero w momencie pierwszego odświeżenia. • Sposób odświeżenia migawki – klauzula REFRESH: – fast – odświeżanie przyrostowe, tylko dla perspektyw typu prostego, dodatkowo wymagane utworzenie dziennika perspektywy dla tabeli źródłowej; w pewnych szczególnych sytuacjach możliwe jest również dla perspektyw złożonych, – complete – odświeżanie pełne, – force – sposób odświeżania wybierany dynamicznie (jeśli możliwe, wykonywane odświeżenie przyrostowe, jeśli nie – pełne), wartość domyślna. str. 35 transakcji modyfikującej tabele źródłowe (w definicji takiej perspektywy nie można posługiwać się łącznikami bazodanowymi), – odświeżanie automatyczne z zadaną częstotliwością. • Harmonogram odświeżania migawki: – start with data – określa moment rozpoczęcia odświeżania automatycznego, np: start with sysdate; pominięcie klauzuli powoduje rozpoczęcie odświeżania zaraz po utworzeniu perspektywy, – next częstotliwość – określa częstotliwość odświeżania, np: next 'sysdate + 1/(24*30)' powoduje odświeżanie co 2 minuty. str. 36 Parametry polecenia (3) Przykład • Brak odświeżania – jeśli migawka nie ma być nigdy odświeżana, należy dodać klauzulę never refresh, np. • Perspektywa materializowana tylko do odczytu, odświeżana przyrostowo co 2 minuty, wypełniona zaraz po utworzeniu, rekordy identyfikowane przez klucz główny: create materialized view mv_pracownicy never refresh as select * from pracownicy@baza01; create materialized view mv_pracownicy • Klauzula WITH: refresh fast start with sysdate next sysdate + 1/(24*30) with primary key as select * from pracownicy@baza01; – ROWID - migawka typu ROWID, – primary key – migawka typu primary key, wartość domyślna. str. 37 Pozostałe polecenia str. 38 Pozostałe mechanizmy (1) • Modyfikowanie definicji perspektywy materializowanej: • Dziennik perspektywy materializowanej – obiekt rejestrujący zmiany (operacje DML), dokonane w zawartości tabeli źródłowej dla perspektywy (tabeli bazowej dziennika). alter materialized view <nazwa_perspektywy> refresh <sposób_odświeżania> – Informacje z dziennika są konieczne do przyrostowego odświeżania perspektyw. – Tabela źródłowa może posiadać tylko jeden dziennik, niezależnie od liczby perspektyw z nią powiązanych. start with <data_rozpoczęcia> next <częstotliwość> with <typ_migawki>; • Usuwanie perspektywy materializowanej: create materialized view log on <nazwa_tabeli_bazowej> drop materialized view <nazwa_perspektywy>; [with PRIMARY KEY | ROWID]; str. 39 str. 40 Pozostałe mechanizmy (2) Pozostałe mechanizmy (3) • Grupa odświeżania – mechanizm pozwalający na jednoczesne odświeżanie wielu perspektyw, przez to zapewniający spójność danych w ramach perspektyw z grupy. – Zastosowanie: np. dla jednoczesnego odświeżania perspektyw, których tabele źródłowe są połączone kluczem obcym. – Posiada nazwę, listę migawek, oraz zdefiniowaną wspólną częstotliwość odświeżania perspektyw. – Każda perspektywa zostaje automatycznie przydzielona do grupy o nazwie równej nazwie perspektywa (w sytuacji, gdy nie przydzielono jej jawnie do innej grupy). • Grupa odświeżania (cd.) – Tworzenie grupy: DBMS_REFRESH.MAKE – Dodanie perspektywy do grupy: DBMS_REFRESH.ADD (parametr lax należy ustawić na wartość TRUE przy przenoszeniu perspektywy pomiędzy grupami) – Usunięcie migawki z grupy: DBMS_REFRESH.SUBTRACT – Usunięcie grupy: DBMS_REFRESH.DESTROY – Ręczne odświeżenie grupy: DBMS_REFRESH.REFRESH str. 41 Bibliografia 1. Dokumentacja techniczna Oracle 11g Release 2 (11.2). www.oracle.com 2. R. Wrembel, B. Bębel: Projektowanie rozproszonych baz danych. Helion 2003. str. 43 str. 42