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

Podobne dokumenty