XI Konferencja PLOUG Kościelisko Październik 2005 Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów Robert Wrembel Politechnika Poznańska, Instytut Informatyki [email protected] Streszczenie System informatyczny jest jednym z ważniejszych komponentów architektury informatycznej firmy. Jego nieodzowną częścią składową jest baza danych. Praktyka pokazuje, że w obrębie tej samej firmy jest często wykorzystywanych wiele baz danych pochodzących od różnych producentów, z których każda przechowuje pewną część istotnych danych gromadzonych i przetwarzanych w firmie. Bazy pochodzące od różnych producentów (np. Oracle, IBM, Sybase, Microsoft) zwykle posiadają różną funkcjonalność, wykorzystują różną reprezentację danych i dialekty języka SQL. W konsekwencji, zintegrowany dostęp do wszystkich baz danych w firmie jest utrudniony. Dostawcy oprogramowania systemów baz danych oferują różnego rodzaju programy/sterowniki umożliwiające dostęp do wielu różnych źródeł danych. W ramach niniejszego artykułu zostaną omówione dwa podstawowe typy takich programów, tj. gateway'e (bramki) i sterowniki OLE DB/ODBC zilustrowane przykładem integracji: (1) czterech baz danych, tj. Oracle10g, Sybase Adaptive Server Anywhere, SQL Server 2000, IBM DB2, w architekturze "każda z każdą", (2) oprogramowania MS Access, (3) plików tekstowych i dbf. Informacja o autorze Robert Wrembel: por. referat "Porównanie wydajności hurtowni danych ROLAP i MOLAP w Oracle 10g". Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 329 1. Wprowadzenie Praktyka budowy i użytkowania systemów informatycznych w przedsiębiorstwach i wszelkiego rodzaju instytucjach pokazuje, że nawet w ramach jednej instytucji wykorzystuje się różnego rodzaju systemy gromadzenia, przetwarzania i analizy danych. Systemy te są heterogeniczne, co oznacza, że: • posiadają różną funkcjonalność, np. funkcjonalność zapewnianą przez profesjonalne syste- my zarządzania bazami danych (m.in. Oracle9i/10g, SQL Server2000, IBM DB2, Sybase Adaptive Server Enterprise), funkcjonalność oferowaną przez systemy typu Access, dBase, FoxPro, itp., czy arkusze kalkulacyjne, bądź edytory tekstu; • posiadają różne modele danych, np. relacyjne, relacyjno-obiektowe, obiektowe, semistruk- turalne; • wykorzystują różne technologie i języki implementacyjne (np. C++, Java, Cobol). Dodatkowo, poszczególne systemy są geograficznie rozproszone. Rozproszenie źródeł danych i ich heterogeniczność powodują, że dostęp do całego zbioru informacji, widzianego w sposób spójny, jest trudny i czasochłonny. Ważnym wymaganiem systemów informatycznych jest dostęp do informacji pochodzących zarówno z heterogenicznych baz danych, jak i ze źródeł innych niż bazy danych, np. arkusze kalkulacyjne, dokumenty tekstowe, pliki HTML, SGML, czy XML. Dostawcy oprogramowania systemów baz danych oferują dwa podstawowe moduły programowe umożliwiające dostęp do wielu różnych źródeł danych, tj. bramki (ang. gateway) i sterowniki OLEDB/ODBC/JDBC. 1.1. Bramki Głównym problemem w zintegrowanym dostępie do źródeł danych jest ich heterogeniczność. Nawet jeśli źródła są bazami danych, to bardzo często są to bazy danych pochodzące od różnych producentów, a co za tym idzie, posiadające różną funkcjonalność, reprezentację danych i dialekt języka SQL. Z tego względu, dostęp z jednej bazy danych do innej musi być realizowany za pomocą dedykowanego oprogramowania dla tych baz. Oprogramowanie to nosi nazwę bramki (ang. gateway). Jego zadaniem jest: • transformacja typów danych pomiędzy bazami danych, • transformacja dialektów języka SQL; • zapewnienie transakcyjnego dostępu do baz danych. 1.2. Sterowniki ODBC i OLE DB ODBC (ang. Open Database Connectivity) jest standardem definiującym metody dostępu do baz danych, bez względu na technologię implementacyjną tych baz danych. Ujednolicone metody dostępu są implementowane w warstwie pośredniej pomiędzy aplikacją, a bazą danych. Warstwa ta nosi nazwę sterownika ODBC (ang. ODBC driver). Implementacyjnie, sterownik ODBC stanowi interfejs programistyczny API, czyli zbiór procedur i funkcji realizujących obsługę danych o funkcjonalności języka SQL. Wykorzystanie sterownika ODBC jest możliwe jedynie wówczas, gdy i aplikacja i baza danych wspierają wywołania API tego sterownika. OLE DB (ang. Object Linking and Embedding DataBase) stanowi API, opracowane przez Microsoft, umożliwiające dostęp do różnych źródeł danych. W ramach tego API możliwa jest zarówno obsługa danych o funkcjonalności języka SQL, w standardzie ODBC, jak i innych źródeł danych nie posiadających funkcjonalności baz danych. 330 Robert Wrembel 1.3. Produkty komercyjne Wiodący producenci systemów baz danych dostarczają gateway’e do wszystkich najważniejszych systemów. Przykładowo: • Oracle dostarcza oprogramowanie o nazwie Transparent Gateways. Jego zadaniem jest zapewnienie dostępu i wymiany danych z większością komercyjnych systemów relacyjnych, m.in. IBM, Sybase, Microsoft. • Sybase dostarcza oprogramowanie o nazwie EnterpriseConnect Data Access umożliwia- jące dostęp do baz danych Microsoft SQL Server, IBM DB2, Oracle i Informix (teraz IBM). Dodatkowo, Warehouse Studio udostępnia pakiet Power Stage wspierający automatyzację procesów ekstrakcji, transformacji i oczyszczania danych pochodzących z różnych źródeł. • Oprogramowanie firmy Ingres o nazwie Enterprise Access umożliwia aplikacjom systemu Ingres dostęp do danych składowanych w innych relacyjnych (m.in. Sybase, Microsoft SQL Server, CA-Datacom, Oracle, Informix, CA-IDMS, DB2, Rdb, Allbase SQL) i nie– relacyjnych bazach danych (m.in. IMS, VSAM, CICS/VSAM, RMS). • Oprogramowanie IBM DataJoiner, umożliwiające wczytywanie i transformowanie danych do formatu bazy DB2 ze źródeł relacyjnych i nie–relacyjnych. Data Propagator Relational przy współpracy z Data Joiner pozwala na synchroniczne i asynchroniczne replikowanie danych pomiędzy bazami danych m.in. następujących producentów: Oracle, Sybase, Microsoft, Informix. 1.4. Testowa architektura integracyjna W ramach zrealizowanego projektu integracyjnego połączono: • bazy danych czterech różnych producentów, tj. Oracle9i/10g, MS SQL Server, IBM DB2, Sybase Adaptive Server Anywhere (ASA); • pliki tekstowe i dbf z wyżej wspomnianymi bazami danych. W celach testowych wykorzystano architekturę integracyjną przedstawioną na rysunku 1. Dostęp z bazy Oracle do SQL Server został zrealizowany z wykorzystaniem bramki, natomiast dostęp z SQL Server do Oracle został zrealizowany z wykorzystaniem sterownika OLE DB. Pozostałe komponenty systemu połączono za pomocą sterowników ODBC. Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów FEDERATED SERVERS MS SQL, ORACLE, SYBASE, ODBC 331 DB2 INFORMATION INTEGRATOR Sybase ASA DB2 ORACLE TRANSPARENT GATEWAY FOR MSSQL ORACLE MSSQL HETEROGENOUS SERVICES REMOTE SERVERS (ORAODBC, MSSODBC, DB2ODBC, ODBC) ODBC Linked Server OLEDB External Table ODBC Linked Server MS JET *.DBF *.TXT Rys. 1. Testowa architektura integracyjna 2. Integracja Oracle10g i SQL Server2000 Sposób wykorzystania bramek zostanie zilustrowany na przykładzie baz Oracle9i/10g i SQL Server2000. 2.1. Architektura integracyjna Podstawową architekturę integracyjną umożliwiającą obustronny dostęp pomiędzy bazami danych Oracle9i/10g i SQL Server2000 przedstawiono na rysunku 2. Komunikacja z bazy danych Oracle do SQL Server jest realizowana za pomocą oprogramowania gateway (Oracle Transparent Gateway for Microsoft SQL Server). Oprogramowanie to jest instalowane na tym komputerze na którym działa SQL Server. Drugim koniecznym komponentem instalowanym na tym komputerze jest oprogramowanie sieciowe Oracle (zwane Net8 lub Net Services, w zależności od wersji systemu). Poszczególne kroki komunikacji Oracle SQL Server są następujące: 332 Robert Wrembel 1. Wysłanie z bazy Oracle żądania dostępu do bazy SQL Server reprezentowanej usługą sieciową. 2. Odbiór żądania przez proces nasłuchu (listener) znajdujący się na komputerze z bazą SQL Server. 3. Uruchomienie agenta (oprogramowania gateway) przez proces nasłuchu. 4. Translacja polecenia SQL przez agenta i wysłanie go do bazy SQL Server. 5. Wykonanie polecenia przez SQL Server. 6. Przekazanie wyników do agenta. 7. Translacja wyników przez agenta. 8. Przesłanie wyników do bazy Oracle. Komunikacja z bazy danych SQL Server do Oracle jest realizowana z wykorzystaniem sterownika OLE DB po stronie SQL Server i procesu nasłuchu, po stronie Oracle (por. [NSRefG, NSAdmG, WrBę03]). Rys. 2. Architektura integracyjna baz danych Oracle i SQL Server Poszczególne kroki komunikacji SQL Server Oracle są następujące: 1. Wysłanie z bazy SQL Server żądania dostępu do obiektu serwera łączonego (ang. linked server). 2. Przekazanie żądania (po jego translacji) przez sterownik OLE DB do bazy Oracle reprezentowanej usługą sieciową. 3. Odbiór żądania przez proces nasłuchu działający na komputerze z bazą Oracle. 4. Wykonanie polecenia przez Oracle. 5. Przekazanie wyników do SQL Server za pośrednictwem sterownika OLE BD. 2.2. Instalowanie oprogramowania gateway Oprogramowanie gateway do bazy SQL Server znajduje się na płycie instalacyjnej systemu Oracle9i/10g. Standardowo nie jest ono instalowane. Wskazanie gateway'a dla odpowiedniego systemu jest możliwe w jednym z kroków instalacji oprogramowania systemu zarządzania bazą Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 333 danych Oracle (por. rysunek 3). Oprogramowanie gateway należy zainstalować na komputerze, na którym działa SQL Server. Rys. 3. Okno wyboru oprogramowania gateway dla dostępnych systemów baz danych Po zainstalowaniu gateway'a do SQL Server, w katalogu %ORACLE_HOME% pojawia się podkatalog tg4msql z podkatalogami admin, bin, doc, trace. 2.3. Konfigurowanie dostępu z Oracle do SQL Server W celu skonfigurowania dostępu z bazy Oracle do SQL Server należy: 1. Skonfigurować proces nasłuchu Oracle po stronie SQL Server (plik listener.ora). 2. Skonfigurować proces agenta (gateway) Oracle po stronie SQL Server (plik inittg4msql.ora). 3. Zdefiniować usługę sieciową po stronie bazy Oracle, realizującą dostęp do SQL Server (plik tnsnames.ora). 2.3.1. Kofigurowanie procesu nasłuchu po stronie SQL Server Konfigurowanie procesu nasłuchu po stronie SQL Server polega na określeniu parametrów tego procesu, w pliku %ORACLE_HOME%\network\admin\listener.ora. Przykładową zawartość takiego pliku przedstawiono poniżej. GATEWAYLIS = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dcs-robcio)(PORT = 1529)) (ADDRESS=(PROTOCOL=ipc)(KEY=PNPKEY)) ) SID_LIST_GATEWAYLIS = 334 Robert Wrembel (SID_LIST = (SID_DESC = (SID_NAME = DCS-ROBCIO) (ORACLE_HOME = C:\oracle\product\10.1.0\db_1) (PROGRAM = tg4msql) ) ) CONNECT_TIMEOUT_GATEWAYLIS = 0 Omówienie wszystkich powyższych parametrów znacznie wykracza poza zakres niniejszego artykułu. Pełen ich opis Czytelnik znajdzie w [NSRefG, NSAdmG, WrBę03]. Proces nasłuchowy nazywa się GATEWAYLIS. Parametr PORT określa port komunikacji z procesem nasłuchu. Parametr SID_NAME określa nazwę instancji SQL Server. Nazwa instancji jest określana w momencie instalowania SQL Server. ORACLE_HOME wskazuje katalog domowy systemu Oracle, w którym znajduje się również oprogramowanie gateway. PROGRAM wskazuje na plik wykonywalny uruchamiający oprogramowanie agenta (gateway). W przypadku dostępu do SQL Server, agent jest uruchamiany programem tg4msql.exe. 2.3.2. Konfigurowanie agenta po stronie SQL Server W celu skonfigurowania procesu agenta (gateway) po stronie SQL Server należy w katalogu %ORACLE_HOME\tg4msql\admin\ umieścić plik parametrów agenta. Wzorcowy plik znajduje się w tym katalogu i ma nazwę inittg4msql.ora. Korzystając z pliku wzorcowego należy utworzyć plik o nazwie init<instancja SQL Server>.ora. Zawartość przykładowego pliku dla instancji SQL Server o nazwie DCS-ROBCIO przedstawiono poniżej. HS_FDS_CONNECT_INFO=DCS-ROBCIO.Northwind HS_FDS_TRACE_LEVEL=OFF HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER Najważniejszym parametrem jest HS_FDS_CONNECT_INFO. Wskazuje on parametry połączenia do instancji SQL Server. W powyższym przykładzie DCS-ROBCIO jest nazwą tej instancji, a Northwind jest nazwą bazy danych w ramach wskazanej instancji. 2.3.3. Zdefiniowanie usługi sieciowej dla SQL Server po stronie bazy Oracle System Oracle w standardowej konfiguracji wykorzystuje plik zawierający zbiór usług sieciowych umożliwiających dołączanie się do różnych baz danych (por. [NSRefG, NSAdmG, WrBę03]). Połączenie z bazy Oracle do SQL Server będzie możliwe tylko wtedy, gdy w pliku tym znajdzie się odpowiednia usługa. Plik opisujący zbiór usług sieciowych ma nazwę tnsnames.ora i znajduje się w katalogu %ORACLE_HOME%\network\admin\. Przykładowy fragment pliku przedstawiono poniżej. DCS-ROBCIO = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dcs-robcio)(PORT = 1529)) ) (CONNECT_DATA = (SERVICE_NAME = DCS-ROBCIO) (SERVER = DEDICATED) ) (HS=OK) ) Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 335 Znaczenie najważniejszych parametrów jest następujące. PROTOCOL, HOST, PORT, oznaczają odpowiednio protokół komunikacyjny, nazwę komputera, na którym działa proces nasłuchu (GATEWAYLIS w naszym przykładzie) i port komunikacyjny z procesem nasłuchu. SERVICE_NAME wskazuje nazwę instancji SQL Server. Wartość tego parametru musi być identyczna z wartością SID_NAME zdefiniowaną w pliku listener.ora (por. punkt 2.3.1). 2.3.4. Realizowanie dostępu z Oracle do SQL Server Dostęp do bazy danych SQL Server z bazy Oracle jest możliwy wyłącznie z wykorzystaniem łączników bazy danych (ang. database links) [OraSQL, WrBę03]. Obiekt typu łącznik w swej definicji zawiera nazwę usługi sieciowej realizującej dostęp do innej bazy danych. Może również zawierać nazwę i hasło użytkownika w innej bazie danych. Poniższe dwa polecenia tworzą łączniki odpowiednio o nazwach dbl_1_mssql i dbl_2_mssql. Pierwszy z nich w swej definicji zawiera tylko nazwę usługi sieciowej (using 'DCS-ROBCIO'), pod którą jest dostępny SQL Server. W tym przypadku w bazie SQL Server musi istnieć użytkownik identyczny co do nazwy i hasła z użytkownikiem, który wykorzystuje łącznik. Drugi łącznik zawiera dodatkowo jawnie wskazanego użytkownika bazy SQL Server i jego hasło. Użytkownikiem tym jest scott z hasłem tiger. create database link dbl_1_mssql using 'DCS-ROBCIO'; create database link dbl_2_mssql connect to scott identified by tiger using 'DCS-ROBCIO'; Po utworzeniu łącznika dostęp do konkretnej tabeli w schemacie użytkownika jest realizowany za pomocą poleceń select, insert, update, delete bazy Oracle. Poniżej przedstawiono przykładowe polecenie odczytujące dane z tabeli test znajdującej się w bazie SQL Server, w schemacie użytkownika scott. select * from test@dbl_2_mssql; 2.4. Konfigurowanie dostępu z SQL Server do Oracle W celu skonfigurowania dostępu z bazy SQL Server do Oracle należy: 1. Zdefiniować usługę sieciową po stronie bazy SQL Server, realizującą dostęp do Oracle (plik tnsnames.ora). 2. Zdefiniować serwer łączony w SQL Server wykorzystujący usługę sieciową z pliku tnsnames.ora. 2.4.1. Zdefiniowanie usługi sieciowej Oracle po stronie bazy SQL Server Podobnie, jak omówiono w punkcie 2.3.3, po stronie bazy SQL Server należy zdefiniować usługę sieciową wskazującą na odpowiednią bazę Oracle. Usługę tę definiuje się w pliku %ORACLE_HOME%\network\admin\tnsnames.ora. Przykładową definicję usługi LAB10G przedstawiono poniżej. Umożliwia ona łączenie z komputerem dcs-zk, na którym pracuje baza danych LAB10G. LAB10G = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = dcs-zk)(PORT = 1529)) ) (CONNECT_DATA = (SERVICE_NAME = LAB10G) 336 Robert Wrembel (SERVER = DEDICATED) ) (HS=OK) ) 2.4.2. Zdefiniowanie serwera łączonego w SQL Server W celu zrealizowania dostępu z SQL Server do Oracle, należy w bazie SQL Server utworzyć tzw. serwer łączony (ang. linked server). Można to wykonać na dwa sposoby. Pierwszy z nich polega na wywołaniu odpowiednich procedur systemowych, a drugi polega na wykorzystaniu kreatora serwera łączonego z wykorzystaniem pakietu MS Enterprise Manager. Poniżej przedstawiono przykłady wywołania procedur systemowych umożliwiające zdefiniowanie serwera łączonego. Procedura sp_addlinkedserver tworzy serwer łączony nadając mu nazwę LAB10G (pierwszy argument). Drugim argumentem jest rodzaj produktu, do którego odwołuje się serwer łączony. W naszym przykładzie jest to Oracle; jest to predefiniowana nazwa. Trzeci argument wskazuje na właściwy sterownik OLE DB (ang. OLE DB provider) umożliwiający dostęp do bazy Oracle. W tym przypadku sterownik nazywa się MSDAORA; jest to predefiniowana nazwa. Czwartym argumentem jest nazwa usługi sieciowej umożliwiającej dostęp do bazy Oracle. Nazwa ta jest zdefiniowana w pliku tnsnames.ora po stronie SQL Server. Procedura sp_addlinkedsrvlogin umożliwia odwzorowanie użytkownika SQL Server w odpowiadającego mu użytkownika bazy Oracle. Pierwszym argumentem jej wywołania jest nazwa serwera łączonego, utworzona procedurą sp_addlinkedserver. Drugi argument, tj. false określa, że kolejne argumenty reprezentują odwzorowanie użytkowników obu systemów. W tym przypadku użytkownik sa, tj. bazy SQL Server, ma swój odpowiednik w bazie Oracle w postaci użytkownika scott z hasłem tiger. sp_addlinkedserver 'LAB10G', 'Oracle', 'MSDAORA', 'LAB10G' sp_addlinkedsrvlogin 'LAB10G', false, 'sa', 'scott', 'tiger' Drugi sposób definiowania serwera łączonego wykorzystuje narzędzie graficzne MS Enterprise Manager. Nowy serwer łączony definiuje się zaznaczając w nawigatorze obiektów węzeł Linked Servers, a następnie z menu podręcznego wybierając opcję New Linked Server (por. rysunek 4). Po jej wybraniu pojawi się okno umożliwiające określenie własności serwera łączonego (por. rys. 5) i odwzorowanie użytkowników (por. rys. 6). Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów Rys. 4. Definiowanie serwera łączonego z poziomu MS Enterprise Manager Rys. 5. Definiowanie własności serwera łączonego 337 338 Robert Wrembel Rys. 6. Definiowanie odwzorowania użytkowników 2.4.3. Realizowanie dostępu z SQL Server do Oracle Dostęp do bazy danych Oracle z bazy SQL Server jest możliwy za pomocą zdefiniowanego wcześniej serwera łączonego. Przykładowo, poniższe zapytanie odczytuje dane za tabeli PRACOWNICY znajdującej się w schemacie użytkownika SCOTT. LAB10G jest nazwą serwera łączonego. select * from LAB10G..SCOTT.PRACOWNICY 3. Integracja Oracle9i/10g ze źródłami pseudo-bazodanowymi Integracja Oracle ze źródłami danych, które nie są w pełni funkcjonalnymi bazami danych, np. dBase, czy Access jest możliwa z wykorzystaniem sterowników ODBC. Źródła te muszą być widoczne w postaci plików tego samego systemu plików na którym działa system Oracle. 3.1. Konfigurowanie środowiska dostępu z Oracle do plików dBase W celu skonfigurowania dostępu z bazy Oracle do danych zapisanych w plikach systemu dBase należy: 1. Zainstalować sterowniki ODBC po stronie bazy danych Oracle. 2. Zdefiniować źródło danych ODBC wskazujące na katalog zawierający pliki dBase. 3. Zdefiniować usługę sieciową po stronie bazy Oracle, realizującą dostęp do plików dBase (plik tnsnames.ora). 4. Skonfigurować proces nasłuchu Oracle realizujący dostęp do agenta usług heterogenicznych Oracle. 5. Skonfigurować agenta usług heterogenicznych. 6. Utworzyć łącznik bazy danych z wykorzystaniem zdefiniowanej w kroku 3 nazwy usługi sieciowej. Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 339 3.1.1. Instalowanie sterowników ODBC dla Oracle Sterowniki ODBC znajdują się na płycie instalacyjnej systemu Oracle. W procesie instalacji należy zaznaczyć odpowiednie komponenty, jak pokazano na rysunku 7. Rys. 7. Instalowanie sterowników ODBC i OLE DB dla bazy danych Oracle 3.1.2. Definiowanie źródła danych ODBC W celu zrealizowania dostępu do danych składowanych w plikach dBase należy zdefiniować źródło danych ODBC, wskazujące na katalog, w którym takie pliki się znajdują. Wykorzystuje się do tego celu aplikację Źródła danych ODBC, dostępną w Panel sterowania Narzędzia administracyjne. W zakładce System DSN należy nacisnąć przycisk Add. Pojawi się wówczas okno umożliwiające wybór odpowiedniego sterownika (por. rysunek 8). Należy wybrać Driver do Microsoft dBase i nacisnąć Zakończ. Spowoduje to pojawienie się okna parametrów źródła danych ODBC (por. rysunek 9). Należy w nim określić nazwę źródła danych, wersję systemu dBase i katalog, w którym znajdują się pliki dBase. 340 Robert Wrembel Rys. 8. Wybór sterownika Rys. 9. Konfigurowanie źródła danych ODBC dla plików dBase 3.1.3. Definiowanie usługi sieciowej Usługę sieciową Oracle wskazującą na pliki dBase definiuje się w pliku %ORACLE_HOME%\network\admin\tnsnames.ora. Przykładowa definicja usługi o nazwie DBASE została przedstawiona poniżej. Parametr SID=DBASE jest umowną nazwą, do której odwołamy się w parametrach procesu nasłuchu. DBASE= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=dcs-robcio)(PORT=1521)) (CONNECT_DATA=(SID=DBASE)) (HS=OK) ) 3.1.4. Konfigurowanie procesu nasłuchu Proces nasłuchu bazy danych Oracle konfiguruje się w pliku %ORACLE_HOME%\network\admin\listener.ora. Przykładowe parametry nasłuchu dla zdefiniowanej usługi o nazwie DBASE przedstawiono poniżej. Wartość parametru SID_NAME musi być identyczna z wartością SID zdefiniowaną w tnsnames.ora (czyli DBASE w naszym przy- Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 341 kładzie). Parametr PROGRM=hsodbc wksazuje na agenta (program hsodbc.exe) realizującego dostęp do źródła danych ODBC, wskazanego w pliku parametrów konfiguracyjnych tego agenta. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = DBASE) (ORACLE_HOME = C:\oracle\product\10.1.0\db_1) (PROGRAM = hsodbc) ) ) 3.1.5. Konfigurowanie agenta usług heterogenicznych Plik parametrów konfiguracyjnych agenta usług heterogenicznych (hsodbc) znajduje się w katalogu %ORACLE_HOME%\hs\admin. Standardowo, po zainstalowaniu sterowników ODBC znajduje się tam przykładowy plik konfiguracyjny o nazwie inithsodbc.ora. Każde źródło danych, do którego ma być realizowany dostęp musi mieć swój plik konfiguracyjny o nazwie init<nazwa źródła danych>.ora. Przy czym nazwa źródła danych jest określana wartością parametru SID_NAME pliku listener.ora. W naszym przykładzie plik konfiguracyjny będzie miał nazwę initDBASE.ora. Jego zawartość przedstawiono poniżej. HS_FDS_CONNECT_INFO = rw_dbase_odbc HS_FDS_TRACE_LEVEL = on Parametr HS_FDS_CONNECT_INFO wskazuje na źródło danych ODBC, zdefiniowane w sposób omówiony w punkcie 3.1.2. 3.1.6. Realizowanie dostępu z Oracle do plików dBase W celu zrealizowania dostępu z bazy danych Oracle do danych przechowywanych w plikach dBase należy zdefiniować łącznik bazy danych, a następnie odwołać się do konkretnego pliku posługując się nazwą tego pliku i zdefiniowanym łącznikiem. Przykładowo, pierwsze z poniższych poleceń definiuje łącznik o nazwie link_dbase wskazujący na usługę DBASE (w pliku tnsnames.ora). Drugie polecenie umożliwia odczyt danych z pliku o nazwie dane1.dbf. create database link link_dbase using 'DBASE'; select * from dane1@link_dbase; Należy zwrócić uwagę, że opisany sposób dostępu umożliwia odczyt i zapis wszystkich plików w formacie dBase znajdujących się w katalogu wskazanym w definicji źródła danych ODBC. Kolejną ważną cechą omawianej technologii integracyjnej jest brak obsługi przetwarzania transakcyjnego. 3.2. Konfigurowanie środowiska dostępu z Oracle do bazy MS Access Procedura konfiguracyjna środowiska dostępu z bazy danych Oracle do bazy MS Access jest podobna do procedury opisanej w punkcie 3.1. Polega ona na: 1. Zainstalowaniu sterowników ODBC po stronie bazy danych Oracle. 2. Zdefiniowaniu źródła danych ODBC wskazujące na konkretny plik bazy Access. 3. Zdefiniowaniu usługi sieciowej po stronie bazy Oracle. 4. Skonfigurowaniu procesu nasłuchu Oracle. 5. Skonfigurowaniu agenta usług heterogenicznych. 6. Utworzeniu łącznika bazy danych. 342 Robert Wrembel Instalowanie sterowników ODBC omówiono w punkcie 3.1.1. Definiowanie źródła danych ODBC przebiega podobnie, jak opisano w punkcie 3.1.2. Jedyną różnicą jest konieczność wskazania konkretnego pliku Access, który będzie skojarzony ze źródłem. W konsekwencji, wszystkie tabele we wskazanym pliku będą mogły być adresowane poleceniami SQL. Przykładowe parametry źródła danych ODBC, o nazwie rw_access_odbc przedstawiono na rysunku 10. Przycisk Baza danych - Wybierz umożliwia wskazanie pliku Access. Rys. 10. Konfigurowanie źródła danych ODBC dla pliku Access Przykładowy wpis do pliku tnsnames.ora definiujący usługę sieciową o nazwie ACCESS przedstawiono poniżej. ACCESS= (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=dcs-robcio)(PORT=1521)) (CONNECT_DATA=(SID=ACCESS)) (HS=OK) ) Przykładowy wpis do pliku listener.ora dla usługi o nazwie ACCESS przedstawiono poniżej. Należy zwrócić uwagę, aby wartości parametrów SID i SID_NAME były identyczne w obu plikach. SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = ACCESS) (ORACLE_HOME = C:\oracle\product\10.1.0\db_1) (PROGRAM = hsodbc) ) ) Przykładowy wpis do pliku parametrów agenta (hsodbc) initACCESS.ora przedstawiono poniżej. Parametr HS_FDS_CONNECT_INFO wskazuje na źródło danych ODBC skojarzone z plikiem Access. HS_FDS_CONNECT_INFO = rw_access_odbc HS_FDS_TRACE_LEVEL = on Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 343 Dostęp do tabel składowanych w pliku Access realizuje się za pomocą łącznika bazy danych, podobnie jak dla plików dBase. Poniżej zdefinowano przykładowy łącznik link_access wykorzystujący usługę ACCESS (plik tnsnames.ora), która z kolei poprzez proces nasłuchu i agenta realizuje dostęp do źródła danych ODBC o nazwie rw_access_odbc. create database link link_access using 'ACCESS'; 4. Integracja Oracle i IBM DB2 Dostęp pomiędzy bazą Oracle a DB2 zrealizowano w obu kierunkach z wykorzystaniem sterowników ODBC, jak pokazano na rysunku 1. 4.1. Połączenie Oracle – DB2 Z bazy danych Oracle do DB2 dostęp będzie możliwy po zainstalowaniu na komputerze klienta dedykowanego sterownika dla DB2. Sterownik taki znajduje się na płycie instalacyjnej DB2 (por. rys. 11). Rys. 11. Instalacja sterownika ODBC dla DB2 Dalsza procedura konfiguracyjna przypomina tę opisaną w punkcie 3.2 i wymaga ona wykonania następujących czynności: 1. Skonfigurowanie źródła danych ODBC (por. rys. 12). 344 Robert Wrembel Rys. 12. Wybór sterownika dla źródła danych ODBC dla DB2 2. Określenie parametrów dostępu do bazy DB2 za pomocą sterownika ODBC. Niezbędnymi parametrami są: nazwa źródła danych, nazwa użytkownika bazy DB2 i jego hasło, nazwa docelowej bazy danych DB2, pełna nazwa (adres) komputera z bazą docelową, numer portu komunikacyjnego z serwerem DB2 (domyślnie 50001). 3. Skonfigurowanie usługi sieciowej Oracle. W tym celu należy umieścić odpowiednie wpisy w plikach tnsnames.ora, listener.ora i initdb2.ora, analogicznie jak dla opisanego dostępu do SQL Servera. Przykładowe wpisy te przedstawiono poniżej. Wpis w pliku initdb2.ora: HS_FDS_CONNECT_INFO = DB2 Wpis w pliku listener.ora: (SID_DESC = (SID_NAME = db2) (ORACLE_HOME = d:\oracle\ora92) (PROGRAM = hsodbc) ) Wpis w pliku tnsnames.ora: DB2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = lab234-d)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = DB2) ) (HS = OK) ) Podobnie, jak w przypadku SQL Server, z poziomu bazy danych Oracle do bazy DB2 odwołuje się za pomocą łącznika bazy danych. Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 345 4.2. Połączenie DB2 – Oracle Dostęp z DB2 do Oracle został zrealizowany za pomocą sterownika ODBC. W tym celu, na komputerze z serwerem DB2 zainstalowano dedykowany sterownik ODBC dla Oracle i skonfigurowano go w sposób podobny do omówionych wyżej. Dalsza procedura konfiguracyjna wymaga wykonania poniższych czynności. 1. Zdefiniowanie tzw. opakowania (ang. wrapper) do bazy danych Oracle. W tym celu należy wykorzystać oprogramowanie zarządzające DB2, zwane centrum sterowania (por. rys. 13). Opakowanie jest specyficznym mechanizmem realizującym dostęp do innych źródeł danych (m.in. baz danych, plików tekstowych i dbf). Opakowanie definiuje się z wykorzystaniem albo interfejsu graficznego (por. rys.14) albo za pomocą polecenia SQL. Definiując opakowanie należy określić typ źródła danych i jego nazwę. Rys. 13. Centrum sterowania DB2 346 Robert Wrembel Rys. 14. Własności opakowania 2. Utworzenie tzw. definicji serwera, reprezentującego bazę Oracle w DB2. Wykorzystuje się do tego wspomniane już centrum sterowania. Okno definicji serwera pokazano na rys.15. Przycisk Wykryj umożliwia automatyczne wykrycie dostępnych zdalnych baz danych. Rys. 15. Definiowanie serwera 3. Odwzorowanie użytkownika bazy DB2 w użytkownika bazy Oracle. CREATE USER MAPPING FOR "USER" SERVER "SRV_ORA" OPTIONS ( ADD REMOTE_AUTHID 'USER_ORA', ADD REMOTE_PASSWORD 'TEST') ; 4. Utworzenie tzw. pseudonimu, reprezentującego w bazie DB2 obiekt (tabelę lub perspektywę) w zdalnej bazie danych. Przykładowe okno kreatora pseudonimów przedstawiono na rysunku 16. Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 347 Rys. 16. Definiowanie pseudonimu 5. Dostęp do zdalnej tabeli z poziomu SQL za pomocą odwołania do utworzonego pseudonimu (np. select * from pseudonim). 5. Integracja Oracle i Sybase Adaptive Server Anywhere Dostęp pomiędzy bazą Oracle a ASA zrealizowano w obu kierunkach z wykorzystaniem sterowników ODBC, jak pokazano na rysunku 1. 5.1. Połączenie Oracle - ASA Z bazy danych Oracle do ASA dostęp będzie możliwy po zainstalowaniu na komputerze klienta dedykowanego sterownika dla ASA. Sterownik taki znajduje się na płycie instalacyjnej ASA (por. rys. 17). Rys. 17. Instalacja sterownika ODBC dla ASA Dalsza procedura konfiguracyjna przypomina tę opisaną w punkcie 3.2 i 4.1 i wymaga ona wykonania następujących czynności: 1. Skonfigurowanie źródła danych ODBC (por. rys. 18). 348 Robert Wrembel Rys. 18. Wybór sterownika dla źródła danych ODBC dla ASA 2. Określenie parametrów dostępu do bazy ASA za pomocą sterownika ODBC. Niezbędnymi parametrami są: nazwa źródła danych, nazwa użytkownika bazy ASA i jego hasło, nazwa docelowej bazy danych ASA, sieciowy protokół komunikacyjny (domyślnie TCP/IP), pełna nazwa (adres) komputera z bazą docelową (por. rys. 19). Rys. 19. Dialog wprowadzania parametrów konfiguracyjnych połączenia ODBC 3. Skonfigurowanie usługi sieciowej Oracle. W tym celu należy umieścić odpowiednie wpisy w plikach tnsnames.ora, listener.ora i initdb2.ora, analogicznie jak dla opisanego dostępu do SQL Servera i DB2. Przykładowe wpisy te przedstawiono poniżej. Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 349 Wpis w pliku initasa.ora: HS_FDS_CONNECT_INFO = ASA Wpis w pliku listener.ora: (SID_DESC = (SID_NAME = ASA) (ORACLE_HOME = d:\oracle\ora92) (PROGRAM = hsodbc) ) Wpis w pliku tnsnames.ora: DB2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = lab234-d)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = ASA) ) (HS = OK) ) Podobnie, jak w przypadku SQL Server, z poziomu bazy danych Oracle do bazy ASA odwołuje się za pomocą łącznika bazy danych. 5.2. Połączenie ASA – Oracle Z Adaptive Server Anywhere do Oracle dostęp jest możliwy za pomocą sterownika OBDC dla Oracle zainstalowanego na komputerze, na którym działa ASA. Procedura konfiguracyjna została opisana poniżej. 1. Z poziomu oprogramowania zarządzającego ASA, tj. Sybase Central (por. rys.20) utworzyć tzw. serwer zdalny. Reprezentuje on w ASA zdalną bazę danych. Dla serwera zdalnego należy określić: jego nazwę, typ zdalnego serwera (wybór z predefiniowanej listy, np. Oracle, DB2, SQL Server), rodzaj sterownika (ODBC lub JDBC), nazwa źródła danych ODBC/JDBC, odwzorowanie użytkownika lokalnego w zdalnego. 350 Robert Wrembel Rys. 20. Główny panel zarządzania ASA 2. Utworzenie tzw. tabeli proxy (ang. proxy table), reprezentującej w ASA tabelę w zdalnej bazie danych. Za pomocą tej tabeli można również ograniczyć dostępność kolumn tabeli zdalnej. 3. Dostęp do zdalnej tabeli z poziomu SQL za pomocą odwołania do utworzonej tabeli proxy (np. select * from proxy). 6. Uwagi końcowe W ramach opisanego projektu zbudowano testowy system rozproszonych i heterogenicznych źródeł danych opartych o bazy Oracle, IBM DB2, Sybase Adaptive Server Anywhere, SQL Server, pliki tekstowe i dbf. Głównym mechanizmem dostępu do źródeł danych były sterowniki ODBC. Wyjątek stanowi integracja Oracle i SQL Server. W tym przypadku, dostęp z Oracle do SQL Server zrealizowano za pomocą oprogramowania gateway, a w drugą stronę - za pomocą sterownika OLE DB. W ramach testów udało się zbudować architekturę, w której każda baza danych mogła się łączyć z każą z pozostałych baz danych. W czasie konfigurowania i testowania architektury napotkano kilka problemów. Usługi heterogeniczne – techniki integracji rozproszonych baz danych różnych producentów 351 6.1. Wykonywanie poleceń insert i update w DB2 wysyłanych z SQL Server Polecenia takie nie były wykonywane w DB2 i kończyły się błędem, jak niżej. INSERT INTO LS_DB2..USER_DB2.SAMOCHODY_DB2 VALUES (5,'FORD','T',1000) Server: Msg 7399, Level 16, State 1, Line 1 OLE DB provider 'MSDASQL' reported an error. [OLE/DB provider returned message: [IBM][CLI Driver] CLI0150E Sterownik nie może wykonać operacji. SQLSTATE=S1C00] Problemu nie udało się wyeliminować pomimo stosowania wielu różnych sterowników ODBC i OLE DB. 6.2. Konwersja typu decimal przez ASA Dostęp do atrybutów typu decimal przechowywanych w SQL Server kończy się błędem. Problem ten da się wyeliminować przez zastosowanie typu real. 6.3. Dostęp do ASA przez gateway Oracle W ramach testów podjęto próbę zintegrowania Oracle i ASA za pomocą oprogramowania gateway dostarczonego przez Oracle. Pomimo poprawnej konfiguracji całego systemu dostęp z Oracle kończy się błędem, jak niżej. Tego problemu nie udało się rozwiązać. ERROR at line 1:ORA-01017: invalid username/password; logon denied[Transparent gateway for SYBASE][A07B] Illegal username and/or password were supplied for datasource 'tg4sybs'ORA-02063: preceding 2 lines from LINK_SYBASE 6.4. Integracja Oracle i SQL Server Z przeprowadzonych eksperymentów integracyjnych płyną dwie konkluzje dotyczące instalacji i konfiguracji środowiska integracyjnego. 1. Po pierwsze, wpis w pliku tnsnames.ora zarówno po stronie bazy Oracle, jak i SQL Server musi posiadać parametr SERVICE_NAME, a nie SID (w standardowych konfiguracjach Oracle, parametry te można stosować zamiennie). 2. Po drugie, nazwa instancji SQL Server nie może zawierać nazwy komputera np. DCSRW\SQLSERV jest nazwą niepoprawną. W takim przypadku, nie będzie możliwe utworzenie pliku konfiguracyjnego procesu agenta o poprawnej nazwie. Musiałby się on nazywać następująco: initDCS-RW\SQLSERVER.ora. W takim przypadku, znak "\" byłby traktowany jako element ścieżki katalogu. Z użytkowego punktu widzenia, omówiona wyżej technologia integracyjna ma następujące ograniczenia. 1. W przypadku poleceń SQL specyfikowanych w SQL Server, a odwołujących się do Oracle, rozróżniane są duże i małe litery w nazwach atrybutów tabel i nazwach obiektów bazy danych. 2. W przypadku polecenia insert kierowanego do tabeli w bazie Oracle należy zawsze podawać wartości dla wszystkich atrybutów tabeli, nawet jeśli mogą one przyjmować wartości puste. 352 Robert Wrembel 3. Rekordy wstawiane do tabeli w SQL Server z bazy Oracle blokują całą tabelę, tak, że inna transakcja w SQL Server nie może nawet odczytać danych z tej tabeli. Zakończenie transakcji inicjowanej z bazy Oracle odblokowuje tabelę. Literatura [CŁMM05] Chrzan B., Łukaszyk T., Mroczkiewicz K., Murzo A.: Integracja heterogenicznych rozproszonych baz danych. Praca dyplomowa - Wyższa Szkoła Nauk Humanistycznych i Dziennikarstwa, Poznań, 2005 [DTMS] Dokumentacja techniczna Microsoft SQL Server2000 [Fig02] Figas S.: Usługi heterogeniczne. Tutorial IIIV Konferencji Użytkowników i Deweloperów Oracle, Zakopane, 2002 [HCAdmG] Oracle Database Heterogeneous Connectivity Administrator’s Guide.10g Release 1 [MSSQL] Materiały szkoleniowe Microsoft: Administering a Microsoft SQL Server 2000 Database, 2072ACP [NSRefG] Oracle Database Net Services Reference Guide. 10g Release [NSAdmG] Oracle Database Net Services Administrators Guide. 10g Release [WrBę03] Wrembel R., Bębel B.: Oracle - projektowanie rozproszonych baz danych. Wydawnictwo Helion, 2003, ISBN 83-7197-951-7 [Wr04] Wrembel R.: Integracja danych z wykorzystaniem oprogramowania gateway. Konferencja Hurtownie danych i Business Intelligence, Warszawa, październik 2004