Zastosowania technologii Oracle do integracji
Transkrypt
Zastosowania technologii Oracle do integracji
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. 19 Zastosowania technologii Oracle do integracji heterogenicznych... 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 Klient 1 Klient 2 Baza danych Oracle + usługi heteregoniczne Gateway 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. Inna baza danych np. SQL Server Inna baza danych np. Informix Klient 3 Schemat przepływu danych z wykorzystaniem „transparent gateway” Sebastian Figas 20 1.2. Generic Connectivity Klient 1 Baza danych Oracle + usługi heteregoniczne Klient 2 ODBC Agent 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. 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 -----------------------------ODBC9.0.1.1.1_105 ODBC OLEDB_SQL9.0.1.1.1_105 ODBC65 MSSQL9.2.0.1.0_117 FDS_CLASS_DATE FDS_CLASS_ID ------------------- -----------2002-01-31 13:40:56 2 2002-06-04 14:56:02 3 2002-01-17 14:01:01 4 2002-06-04 14:56:02 24 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 Sebastian Figas 22 Przykładowe translacje słownika danych dla bazy Microsoft SQL Server 2000 SELECT dd_table_name, fds_class_id=48; DD_TABLE_NAME -------------ALL_VIEWS translation_text FROM hs_class_dd WHERE TRANSLATION_TEXT ---------------- 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, ' ' TABLE_LOCK, 0 SAMPLE_SIZE, translate('','','') LAST_ANALYZED, ' ' PARTITIONED, ' ' IOT_TYPE, ' ' TEMPORARY, ' ' SECONDARY, ' ' NESTED, ' ' BUFFER_POOL, ' ' ROW_MOVEMENT, ' ' GLOBAL_STATS, ' ' USER_STATS, ' ' DURATION, ' ' 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 Sebastian Figas 24 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 ---------ID nazwa Wartość ---------- Null? ------- Typ ---------------NUMBER(10) 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 $ORACLE_HOME/rdbms/amin SQL> desc hs_fds_inst Nazwa Wartość NULL? Typ ----------------------------------------- -------- ----------FDS_INST_NAME FDS_INST_COMMENTS FDS_CLASS_NAME FDS_INST_ID FDS_CLASS_ID NOT NULL VARCHAR2(30) VARCHAR2(255) NOT NULL VARCHAR2(30) NOT NULL NUMBER 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 $ORACLE_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 ACCESS 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 Sebastian Figas 30 • • • 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 $ORACLE_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 --------- ------------------- ------------ ------- ---------2002-07-11 12:40:58 tg4msql.exe SYSTEM 3 USERX 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... 1 1 1 1 1 1 1 31 HS_NLS_DATE_FORMAT YYYY-MM-DD HH24:MI:SS HS_FDS_RECOVERY_PWD RECOVER HS_FDS_RECOVERY_ACCOUNT RECOVER HS_LANGUAGE POLISH_POLAND.EE8MSWIN1250 HS_FDS_TRANSACTION_MODEL SINGLE_SITE HS_FDS_TRACE_LEVEL OFF HS_FDS_CONNECT_INFO SERVER=USERX;DATABASE=Northwind