Przykładowe środowisko integracji 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 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ą. str. 2 Przebieg ćwiczenia 1. Integracja DB2 Oracle 11g. 2. Integracja MySQL Oracle 11g. 3. Integracja plik tekstowy Oracle 11g. 4. Integracja Oracle11g Oracle 11g. Ćwiczenie 1. DB2 - Oracle Cel: umożliwienie dostępu z Działu Kształcenia do danych Działu Stypendiów. 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) Umożliwia dostęp (zarówno odczyt jak i zapis) z aplikacji Oracledo 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, Oracle Gateway dla DB2 (2) 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 str. 6 Łącze bazodanowe (1) Mechanizm SZBD Oracle. Umożliwia dostęp do obiektów w zdalnej bazie danych. Rodzaje: łącze prywatne, łącze publiczne. 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. Łącze bazodanowe (2) Składnia polecenia: create [public] database link <nazwa łącza> connect to <użytkownik zdalny> identified by <hasło> using '<nazwa usługi>'; 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 toi identifiedbytworzymy łącze wskazujące na bieżącego użytkownika. str. 7 str. 8
Łącze bazodanowe (3) Ćwiczenie 2. MySQL- Oracle Przykład definicji łącza prywatnego: create database link BAZA01 connect to scott identified by tiger using 'BAZA01.WORLD'; Użycie łącza: select nazwisko from pracownicy@baza01 where id_zesp = 10; Słownik danych: USER_DB_LINKS prywatne łącza użytkownika, 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. Cel: umożliwienie dostępu z Działu Kształcenia do danych Działu Zarządzania Akademikami. Dział Zarządzania Akademikami MySQL. Dział Kształcenia Oracle 11g. Wykorzystywane mechanizmy: ODBC. Oracle Gateway dla ODBC. Łącze bazodanowe. str. 9 str. 10 ODBC (1) 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. ODBC (2) 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 Umożliwia połączenie SZBD Oraclez 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 Oraclejak i na maszynie zdalnej. Ćwiczenie 3. Plik - Oracle 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 str. 14 Tabela zewnętrzna (1) 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). Możliwe operacje: Tabela zewnętrzna (2) 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. 15 str. 16
Tabela zewnętrzna (3) 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. Katalog 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 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 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 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 NAZWISKO IMIE KREDYT RATA1 RATA2 RATA3 RATA4 RATA5 RATA6 ---- ---------- ----------- ------ ------ ------ ------ ------ ------ ------ 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 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 NAZWISKO IMIE KREDYT RATA1 RATA2 RATA3 RATA4 RATA5 RATA6 ---- ---------- ----------- ------ ------ ------ ------ ------ ------ ------ 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 ID NAZWISKO IMIE KREDYT RATA NR_RATY ---- ---------- ----------- ------ ------- ------- 1000 Kowalski Jan 25000 4167 1 1000 Kowalski Jan 25000 4167 2 1000 Kowalski Jan 25000 4167 3 1000 Kowalski Jan 25000 4167 4 1000 Kowalski Jan 25000 4167 5 1000 Kowalski Jan 25000 4167 6 1010 Adamski Mariusz 31000 5166,7 1... str. 21 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. 22 Krok 2. Definiowanie funkcji (1) Krok 2. Definiowanie funkcji (2) Składnia: CREATE [OR REPLACE] FUNCTION <nazwa> RETURN <typ_tablicowy> PIPELINED IS... BEGIN PIPE ROW(<rekord>); END; Przykład: 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; str. 23 str. 24
Składnia: Krok 3. Użycie funkcji SELECT FROM TABLE(<nazwa funkcji) WHERE ; SELECT * FROM TABLE(kredyty); ID NAZWISKO IMIE KREDYT RATA NR_RATY ---- ---------- ----------- ------ --------- -------- 1000 Kowalski Jan 25000 4167 1 1000 Kowalski Jan 25000 4167 2... 1000 Kowalski Jan 25000 4167 6 1010 Adamski Mariusz 31000 5166,7 1... Ćwiczenie 4. Oracle- Oracle Cel: umożliwienie dostępu z Działu Kształcenia do danych Dziekanatu. Dziekanat Oracle 11g. Dział Kształcenia Oracle 11g. Wykorzystywane mechanizmy: Replikacja migawkowa. str. 25 str. 26 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. 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. 27 str. 28
Replikacja migawkowa Perspektywa materializowana 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 str. 30 Podział migawek (1) 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 CONNECTBYi STARTWITH, operatora DISTINCT, złożona definiujące ją zapytanie nie spełnia przynajmniej jednego warunku definiującego perspektywę prostą. Podział migawek (2) Podział ze względu sposób identyfikacji rekordów w tabeli źródłowej i perspektywie: 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 primarykey do identyfikacji rekordów używa wartości kolumn z klucza podstawowego, ten typ jest zalecany przez Oracle. str. 31 str. 32
Podział migawek (3) 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). Definiowanie perspektywy mat. Składnia polecenia: 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 str. 34 Parametry polecenia (1) Parametry polecenia (2) Moment wypełnienia migawki danymi klauzula BUILD: 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. Moment odświeżenia migawki klauzula REFRESH: ondemand odświeżanie na żądanie użytkownika przez wywołanie procedury REFRESH z pakietu DBMS_SNAPSHOT, wartość domyślna, oncommit odświeżanie automatyczne w momencie zatwierdzenia 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: startwithdata 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. 35 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. create materialized view mv_pracownicy never refresh as select * from pracownicy@baza01; Klauzula WITH: ROWID-migawka typu ROWID, primary key migawka typu primary key, wartość domyślna. 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 refresh fast start with sysdate next sysdate + 1/(24*30) with primary key as select * from pracownicy@baza01; str. 37 str. 38 Pozostałe polecenia Pozostałe mechanizmy (1) Modyfikowanie definicji perspektywy materializowanej: alter materialized view <nazwa_perspektywy> refresh <sposób_odświeżania> start with <data_rozpoczęcia> next <częstotliwość> with <typ_migawki>; Usuwanie perspektywy materializowanej: drop materialized view <nazwa_perspektywy>; Dziennik perspektywy materializowanej obiekt rejestrujący zmiany (operacje DML), dokonane w zawartości tabeli źródłowej dla perspektywy(tabeli bazowej dziennika). 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. create materialized view log on <nazwa_tabeli_bazowej> [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ść TRUEprzy 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 str. 42 Bibliografia 1. Dokumentacja techniczna Oracle11g Release2 (11.2). www.oracle.com 2. R. Wrembel, B. Bębel: Projektowanie rozproszonych baz danych. Helion 2003. str. 43