VII Seminarium PLOUG Warszawa Marzec 2003 Zastosowania technologii Oracle do integracji heterogenicznych Ÿróde³ danych Sebastian Figas Altkom Akademia Streszczenie Referat omawia kwestie integracji baz danych Oracle z obcymi Ÿród³ami danych, m.in. MS SQL Server, MS Access, MySQL, Informix. Przedstawione zosta³y zarówno w³asnoœci produktów dedykowanych do tego typu zadañ (Oracle Open/Transparent Gateway, jak i rozwi¹zania alternatywne, wykorzystuj¹ce m.in. ODBC i OLE DB.
Zastosowania technologii Oracle do integracji heterogenicznych... 19 1. Wstęp Oracle umożliwia transparentną wymianę informacje pomiędzy różnymi systemami baz danych, które znajdują na rożnych platformach systemowych. Posiadając w swoich zasobach informacje znajdujące się na różnych maszynach i wykorzystujące odmienne systemy ich przechowywania nie trzeba dokonywać czasochłonnych migracji danych i zmiany aplikacji, wystarczy odpowiednio skonfigurować usługi heterogeniczne aby swobodnie wymieniać dane. Usługi te zapewniają tłumaczenie danych z jednego systemu do drugiego, wymianę informacji używając do tego translacji nazw obiektów, poleceń systemowych, integrację słownika danych innych systemów w bazach Oracle. Usługi hetergegoniczne mogą być realizowane na dwa sposoby: poprzez bramki Oracle Transparent Gateway lub poprzez agentów ODBC, OLE DB Generic Connectivity Zalety rozwiązań heteregonicznych: przezroczysty dostęp do danych z jednego miejsca brak potrzeby migracji danych brak potrzeby przenoszenia aplikacji nie ma potrzeby duplikowania danych np. na potrzeby raportów można zbierać dane z wielu baz danych i składować je w jednym miejscu 1.1. Transparent Gateway Pierwsza z metod zapewnia wymianę informacji przy wykorzystaniu dedykowanego produktu dla każdej z baz z którą zamierzamy wykorzystywać informacje i tak dostępne są przykładowo produkty Transparent Gateway for SQL Server on NT, Transparent Gateway for Sybase for Solaris. Są to produkty instalowane na każdej z maszyn, na której znajduje się serwer bazodanowy. Klient 1 Klient 2 Baza danych Oracle + usługi heteregoniczne Gateway Gateway Inna baza danych np. SQL Server Inna baza danych np. Informix Klient 3 Schemat przepływu danych z wykorzystaniem transparent gateway
20 Sebastian Figas 1.2. Generic Connectivity Połączenia z wykorzystanie generic connectivity wykorzystują sterowniki ODBC oraz OLE DB, które muszą się znajdować na platformie z której chcemy realizować połączenia. Takie połączenia mają ograniczone możliwości, nie wykorzystują wszystkich cech połączeń heterogenicznych i są zależne od posiadania sterowników ODBC, które nie są dostarczane przez Oracle i muszą być zapewnione przez firmy trzecie np.: Microsoft. Zakres obsługiwanych poleceń SQL oraz funkcji zależy tylko i wyłącznie od producenta sterowników. Klient 1 Klient 2 Baza danych Oracle + usługi heteregoniczne ODBC Agent Inna baza danych np. SQL Server Schemat przepływu danych z wykorzystaniem generic connectivity 2. Architektura Serwer Oracle Heteregonius Service Agent Generic Code Driver Remote Database Baza danych Agent z właściwą konfiguracją Zdalna baza Baza danych skonfigurowana do połączeń do zdalnej bazy przez agenta usług heterogenicznych Agent z właściwymi plikami konfiguracyjnymi do zdalnej bazy danych, ulokowany na serwerze Oracle, na maszynie ze zdalną bazą lub na całkowicie odrębnej jednostce Zdalna baza niezmieniona konfiguracja bazy do i z której będą pobierane / wysyłane dane z serwera Oracle.
Zastosowania technologii Oracle do integracji heterogenicznych... 21 2.1. Składniki usług heteregonicznych Wymiana informacji z innymi bazami danych jest możliwa na podstawie dwóch kluczowych komponentów: Usługi transakcji Usługi SQL Usługa transakcji odpowiada za przełożenie pojęć transakcji, sesji w innych bazach na język obowiązujący w bazach Oracle. Usługa SQL jest odpowiedzialna za wymianę danych, zapewniając odpowiednią modyfikację poleceń SQL, które będą zrozumiałe po obydwu stronach. Zajmuje się także translacją informacji ze słowników danych innych baz. 2.2. Dostęp do słownika danych Po udanym połączeniu do innej bazy danych przy wykorzystaniu usług heterogenicznych następuje integracja jej słownika bazy ze słownikiem w bazie Oracle. Dedykowane do publikacji tych informacje po stronie Oracle widoki udostępniają informacje na temat: Nazw instancji obsługiwanych baz danych Translacji SQL dokonywanych po stronie zdalnej bazy Translacji słownika danych Parametrów inicjalizacyjnych Przykład zarejestrowanych połączeń do innych baz, wraz z czasem ostatniego do nich dostępu: SELECT * FROM hs_fds_class_date; FDS_CLASS_NAME FDS_CLASS_DATE FDS_CLASS_ID ------------------------------ ------------------- ------------ ODBC9.0.1.1.1_105 2002-01-31 13:40:56 2 ODBC 2002-06-04 14:56:02 3 OLEDB_SQL9.0.1.1.1_105 2002-01-17 14:01:01 4 ODBC65 2002-06-04 14:56:02 24 MSSQL9.2.0.1.0_117 2002-06-04 11:00:44 48 Nazwy zarejestrowanych instancji: SELECT fds_inst_name FROM hs_fds_inst; FDS_INST_NAME ---------------------- HS_ACCESS HS_SQL HS_ODBC SQLSERVER
22 Sebastian Figas Przykładowe translacje słownika danych dla bazy Microsoft SQL Server 2000 SELECT dd_table_name, translation_text FROM hs_class_dd WHERE fds_class_id=48; DD_TABLE_NAME TRANSLATION_TEXT -------------- ---------------- ALL_VIEWS select SU."name" OWNER, SO."name" VIEW_NAME, 0 TEXT_LENGTH, SC."text" TEXT, 0 TYPE_TEXT_LENGTH, ' ' TYPE_TEXT, 0 OID_TEXT_LENGTH, ' ' OID_TEXT, ' ' VIEW_TYPE_OWNER, ' ' VIEW_TYPE from "dbo"."sysusers"@$dblink$ SU, "dbo"."sysobjects"@$dblink$ SO, "dbo"."syscomments"@$dblink$ SC where SU."uid" = SO."uid" and SO."type" = 'V' and SO."id" = SC."id" MSSQL9.2.0.1.0_117 35 48 DBA_TABLES select SU."name" OWNER, SO."name" TABLE_NAME, ' ' TABLESPACE_NAME, ' ' CLUSTER_NAME, ' ' IOT_NAME, 0 PCT_FREE, 0 PCT_USED, 0 INI_TRANS, 0 MAX_TRANS, 0 INITIAL_EXTENT, 0 NEXT_EXTENT, 0 MIN_EXTENTS, 0 MAX_EXTENTS, 0 PCT_INCREASE, 0 FREELISTS, 0 FREELIST_GROUPS, ' ' LOGGING,' ' BACKED_UP, 0 NUM_ROWS, 0 BLOCKS, 0 EMPTY_BLOCKS, 0 AVG_SPACE, 0 CHAIN_CNT, 0 AVG_ROW_LEN, 0 AVG_SPACE_FREELIST_BLOCKS, 0 NUM_FREELIST_BLOCKS, ' ' DEGREE, ' ' INSTANCES, ' ' CACHE, ' ' TA- BLE_LOCK, 0 SAMPLE_SIZE, translate('','','' LAST_ANALYZED, ' ' PARTI- TIONED, ' ' IOT_TYPE, ' ' TEMPORARY, ' ' SECONDARY, ' ' NESTED, ' ' BUFFER_POOL, ' ' ROW_MOVEMENT, ' ' GLOBAL_STATS, ' ' USER_STATS, ' ' DU- RATION, ' ' SKIP_CORRUPT, ' ' MONITORING from "dbo"."sysusers"@$dblink$ SU, "dbo"."sysobjects"@$dblink$ SO where SU."uid" = SO."uid" and (SO."type" = 'U' or SO."type" = 'S' Jak widać na powyższych przykładach odwołując się do znanych dobrze widoków słownika danych Oracle można otrzymać informacje z innych baz. Lista obsługiwanych widoków zostanie przedstawiona w dalszej części opracowania. 3. Cechy usług heterogenicznych 3.1. Obsługa języka SQL i PL/SQL Modyfikacje obiektów na zdalnych bazach nie mogą odnosić się do obiektów w bazach Oracle Polecenie: INSERT INTO test@sql2 Select * from test; Zakończy się błędem: BŁĄD w linii 1: ORA-02025: wszystkie tabele w instrukcji SQL muszą być w odległej bazie danych
Zastosowania technologii Oracle do integracji heterogenicznych... 23 Rozwiązaniem może być użycie kursorów: declare cursor k is SELECT * from test; begin for rec IN k LOOP INSERT INTO test@sql2000 ("id" values (rec.id; end LOOP; end; / Procedura PL/SQL została zakończona pomyślnie. Nie jest obsługiwana klauzula connect by Obiekty LOB nie są obsługiwane Nie można wywoływać zdalnych procedur 3.2. Opcja Pass-Throught Opcja ta umożliwia przesłanie poleceń na zdalny serwer bez interpretowania go po stronie Oracle. Umożliwia to bezpośrednie wykonywanie poleceń po stronie innego serwera bazodanowego, między innymi tworzenie obiektów. Funkcje dostarczane przez pakiet DBMS_HS_PASSTHROUGH: Procedura/Funkcja OPEN_CURSOR CLOSE_CURSOR PARSE BIND_VARIABLE BIND_OUT_VARIABLE BIND_INOUT_VARIABLE EXECUTE_IMMEIDATE FETCH_ROW GET_VALUE Opis Otwarcie kursora Zamkniecie kursora Analiza polecenia Przypięcie IN zmiennych Przypiecie OUT zmiennych Przypięcie IN/OUT zmiennych Wykonanie polecenia bez zmiennych Zwraca wiersze z zapytania Zwraca wartość kolumny lub zmienną Tworzenie tabeli przy użyciu pakietu DBMS_HS_PASSTHROUGH Declare Num_rows INTEGER; Begin Num_rows:= DBMS_HS_PASSTHROUGH.EXECUTE_IMMEDIATE@sql2000 ( CREATE TABLE magazyn( ID integer, nazwa varchar(10 ; end; / Procedura PL/SQL została zakończona pomyślnie. 3.3. Polecenie Describe
24 Sebastian Figas Polecenie describe ma taką samą funkcję i działanie jak w przypadku baz danych Oracle i dostarcza informacji o polach w obiektach. Desc magazyn@sql2 Nazwa Wartość Null? Typ ---------- ---------- ------- ---------------- ID NUMBER(10 nazwa VARCHAR2(10 3.4. Optymalizacja zapytań Oracle korzysta z informacji o obiektach zlokalizowanych w innych bazach w celu stworzenia optymalnego planu zapytań. Ta informacja może być niepełna, gdyż sposób i zbieranie tych informacji różni się na każdym z systemów. Ograniczeniem jest także brak możliwości pobierania informacji o statystykach dla poszczególnych kolumn. Przykład: explain plan for select * from test@sql2 where "nr"=2; Wyjaśniono. @?/rdbms/admin/utlxpls; Plan Table --------------------------------------------------------------- Operation Name Rows Bytes Cost Pstart Pstop --------------------------------------------------------------- SELECT STATEMENT 100 200 61 REMOTE 100 200 61 --------------------------------------------------------------- 4. Instalacja i konfiguracja usług heterogenicznych Przygotowanie do korzystania z usług heterogenicznych jest niezbyt złożonym zadaniem pod warunkiem przestrzegania ścicle określonej kolejności. 4.1. Konfiguracja połączeń z wykorzystaniem bramek (Gateways Krok 1- Instalacja usługi Instalacja Oracle Transparent Gateways na serwerze, na której działa baza z którą chcemy wymieniać informacje. Oprogramowanie musi być ściśle dobrane do bazy danych jaka ma być obsługiwana i tak dla SQL Serwera jest to Oracle Transparent Gateway for Microsoft SQL Serwer.
Zastosowania technologii Oracle do integracji heterogenicznych... 25 Krok 2 sprawdzenie obiektów Sprawdzenie po stronie bazy Oracle obecności obiektów wymaganych przez usługi heterogeniczne. Sprawdzenie można wykonać wykonując :desc sys.hs_fds_inst. W przypadku zwrócenia błędu należy stworzyć niezbędne obiekty posługując się skryptem caths.sql obecnym w $ORAC- LE_HOME/rdbms/amin SQL> desc hs_fds_inst Nazwa Wartość NULL? Typ ----------------------------------------- -------- ----------- FDS_INST_NAME NOT NULL VARCHAR2(30 FDS_INST_COMMENTS VARCHAR2(255 FDS_CLASS_NAME NOT NULL VARCHAR2(30 FDS_INST_ID NOT NULL NUMBER FDS_CLASS_ID NOT NULL NUMBER Krok 3 konfiguracja Niezbędną czynnością jest konfiguracja środowiska sieciowego na komputerze z zainstalowanym oprogramowaniem Oracle Transparent Gateways oraz kliencie czyli serwerze Oracle. Pliki, które zostaną poddane edycji to tnsnames.ora, listener.ora oraz inittg4msql.ora (przykład opiera się na konfiguracji dostępu do Microsoft SQL Serwera
26 Sebastian Figas a Konfiguracja po stronie innego serwera bazy danych (tutaj Microsoft SQL Server Należy skonfigurować listenera poprzez plik listener.ora. Proces nasłuchu w przypadku próby połączenia do bazy powinien uruchomić agenta (program tg4msql dedykowany do bazy SQL Server, który wykona polecenia na bazie. Przykładowy fragment pliku dla listenera nasłuchującego na bazie Microsoft SQL Server: LISTENER9 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP(HOST = userx(port = 1529... SID_LIST_LISTENER9 = (SID_LIST = (SID_DESC = (SID_NAME = SQLSERVER (ORACLE_HOME = C:\Oracle9i (PROGRAM=tg4msql Kolejną niezbędną czynnościa jest skonfigurowanie samego agenta do dostępu da bazy danych SQL Server. Plik opisujący wszystkie parametry agenta znajduje się w $ORAC- LE_HOME/tg4msql/admin i jest to plik inittg4msql.ora. Na podstawie tego pliku należy stworzyć własny zapisując jego nazwę w postaci: init<sid_name>.ora, gdzie SID_NAME oznacza wpis pod jakim identyfikujemy bazę w pliku listener.ora. W tym przykładzie będzie to initsqlserver.ora, który wskazuje na bazę SQL Servera do której ma nastąpić połączenie oraz na tryb transakcji, język oraz tryb śledzenia Zawartość pliku initsqlserver.ora HS_FDS_CONNECT_INFO="SERVER=USERX;DATABASE=Northwind" HS_FDS_TRACE_LEVEL=OFF HS_FDS_TRANSACTION_MODEL=SINGLE_SITE HS_LANGUAGE=POLISH_POLAND.EE8MSWIN1250 HS_FDS_RECOVERY_ACCOUNT=RECOVER HS_FDS_RECOVERY_PWD=RECOVER b Konfiguracja po stronie klienta - serwera bazy danych Oracle Po stronie serwera Oracle należy dodać wpis w pliku tnsnames.ora odnoszący się do komputera z zainstalowanymi usługami heterogenicznymi, gdzie SERVICE_NAME wskazuje na SID_NAME w skonfigurowanym uprzednio procesie nasłuchu. Fragment pliku tnsnames.ora na kliencie (W tym przypadku jest to serwer bazodanowy Oracle Sql_server =
Zastosowania technologii Oracle do integracji heterogenicznych... 27 (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP(HOST = userx(port = 1529 (CONNECT_DATA = (SERVICE_NAME = SQLSERVER (HS=OK Krok 4 tworzenie logicznego połączenia Ostatnim krokiem jest utworzenie połączenia pomiędzy bazami danych. W tym celu należy utworzyć database link poleceniem: Create database link sql2000 using sql_server ; Nie można także zapominać o stworzeniu w zdalnej bazie użytkownika przy pomocy którego będą następowały połączenia. Opierając się na przykładzie Microsoft SQL Serwera będzie to użytkownik autentykowany przez bazę danych a jego identyfikator oraz hasło muszą być takie same jak użytkownika po stronie bazy danych Oracle. Tworzenie użytkownika system z hasłem manager po stronie SQL Serwera 2000 przy założeniu łączenia się z bazy Oracle z tego właśnie użytkownika. 4.2. Konfiguracja połączeń z wykorzystaniem ODBC, OLEDB (Generic Connectivity
28 Sebastian Figas Krok 1- Instalacja usługi Instalacja Oracle Generic Connectivity jest domyślna i potrzebne pliki są instalowane standardowo. W katalogu $ORACLE_HOME/bin można odnaleźć binarna agentów hsodbc oraz hsoledbsql, które odpowiadają za połączenia do baz odpowiednio z wykorzystaniem ODBC lub OLE DB Krok 2 konfiguracja Niezbędną czynnością jest konfiguracja środowiska sieciowego na komputerze z bazą Oracle (tylko na serwerze, z której poprzez agentów będą następowały połączenia z innym bazami z wykorzystaniem ODBC lub OLE DB.. Pliki, które zostaną poddane edycji to tnsnames.ora, listener.ora oraz inithsodbc.ora lub inithsoledb.ora (przykład opiera się na konfiguracji dostępu do Microsoft Access Należy skonfigurować proces nasłuchu poprzez plik listener.ora, który to w przypadku próby połączenia do bazy powinien uruchomić agenta (program hsodbc lub hsoledbsql w zależności od posiadanych sterowników, który wykona polecenia na bazie. Niezbędne jest także dodanie wpisu w pliku tnsnames.ora umożliwiającego rozstrzygnięcie aliasu. Przykładowy fragment pliku dla listenera, przekierowujący połączenia do bazy MS Access z wykorzystaniem sterowników ODBC: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP(HOST = userx(port = 1521... SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = MSACCESS (ORACLE_HOME = C:\Oracle9i (PROGRAM=hsodbc Przykładowy fragment pliku dla tnsnames.ora ACS = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP(HOST = userx(port = 1521 (CONNECT_DATA = (SERVICE_NAME = MSACCESS (HS=OK
Zastosowania technologii Oracle do integracji heterogenicznych... 29 Kolejną niezbędną czynnościa jest skonfigurowanie samego agenta do dostępu do bazy danych MS Access. Plik opisujący wszystkie parametry agenta znajduje się w $ORACLE_HOME/hs/admin i jest to plik inithsodbc.ora. Na podstawie tego pliku należy stworzyć własny zapisując jego nazwę w postaci: init<sid_name>.ora, gdzie SID_NAME oznacza wpis pod jakim identyfikujemy bazę w pliku listener.ora. W tym przykładzie będzie to initmsaccess.ora, który wskazuje na bazę MS AC- CESS do której ma nastąpić połączenie. Zawartość pliku initmsaccess.ora HS_FDS_CONNECT_INFO=access HS_FDS_TRACE_LEVEL=OFF Gdzie parametr HS_FDS_CONNECT_INFO oznacza DNS( Data Source Name zdefiniowane poprzez ODBC Data Source Administrator w przypadku maszyn z systemem Windows. 5. Transakcje Sposób zapewnienia spójności danych zależy od właściwości danej bazy oraz dedykowanej do niej bramki. Oracle udostępnia kilka typów rozstrzygania poprawności przeprowadzenia transakcji: Read only RO baza może być przeglądana tylko w trybie do odczytu Single Site SS zdalny system obsługuje transakcje, ale nierozproszone
30 Sebastian Figas Commit Confirm zdalny system może obsługiwać rozproszone transakcje, ale tylko jako członek Two Phase Commit zdalny system obsługuje wszystkie transakcje. Może przygotowywać dane. Two Phase Commit Confirm pełny udział w rozproszonych transakcjach na zasadach serwera Oracle. W dokumentacji do każdego obsługiwanego przez usługi heterogeniczne serwera bazodanowego można znaleźć jakie typy transakcji są obsługiwane. W przypadku Microsoft SQL Serwera 2000 są obsługiwane wszystkie powyższe a typ transakcji można ustawić posługując się parametrem HS_FDS_TRANSACTION_MODEL w pliku init<sid_name>.ora w $ORAC- LE_HOME/tg4msql/admin W przypadku produktu Microsoftu, aby wykorzystać zalety transakcji typu Commit Confirm należy dodatkowo stworzyć użytkownika oraz tablicę obsługującą wykonywane transakcje rozproszone (skrypt tg2msql_tx.sql 6. Widoki dynamiczne Po stronie klienta, czyli w tym przypadku serwera Oracle dysponujemy widokami dynamicznymi, które mogą nam zidentyfikować połączenia do innych baz, parametry pracy i konfigurację agentów. Identyfikacja działających agentów do których zostały nawiązane połaczenia SQL> select machine,starttime,program,osuser,fds_inst_id from v$hs_agent; MACHINE STARTTIME PROGRAM OSUSER FDS_INST_ID --------- ------------------- ------------ ------- ---------- USERX 2002-07-11 12:40:58 tg4msql.exe SYSTEM 3 gdzie OSUSER oznacza użytkownika który nawiązał połączenie FDS_INST_ID numer instancji zarejestrowanej w słowniku danych (identyfikuje bazę do jakiej nastąpiło połączenie Identyfikacja sesji korzystających z agentów SQL> select username,db_link,starttime from v$hs_session h,v$session s where s.sid=h.sid; USERNAME DB_LINK STARTTIME ----------- ------------- -------------------- SYSTEM SQL2000.WORLD 2002-07-15 09:55:37 Identyfikacja wszystkich parametrów pracy bramki (agenta na zdalnym systemie SQL> select * from v$hs_parameter; HS_SESSION_ID PARAMETER VALUE ------------- --------------------------- ------------------
Zastosowania technologii Oracle do integracji heterogenicznych... 31 1 HS_NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS 1 HS_FDS_RECOVERY_PWD RECOVER 1 HS_FDS_RECOVERY_ACCOUNT RECOVER 1 HS_LANGUAGE POLISH_POLAND.EE8MSWIN1250 1 HS_FDS_TRANSACTION_MODEL SINGLE_SITE 1 HS_FDS_TRACE_LEVEL OFF 1 HS_FDS_CONNECT_INFO SERVER=USERX;DATABASE=Northwind