Zgryźliwość kojarzy mi się z radością, która źle skończyła.
Rozdział 16
Delphi w środowisku Oracle
W tym rozdziale zapoznamy się z systemem Oracle DBMS oraz dowiemy się, jak
z niej korzystać w aplikacjach Delphi. Poznamy specyfikę języka Oracle SQL oraz
niektóre zagadnienia dotyczące współpracy Delphi i Oracle. Pokażemy także, jak
wykonywać podstawowe zadania administratora i przeprowadzać strojenie serwera
Oracle.
Zaczniemy oczywiście od uruchomienia serwera.
Uruchamianie serwera ORACLE
Sposób uruchomienia serwera Oracle’a w dużym stopniu zależy od systemu
operacyjnego. W naszym opisie ograniczymy się tylko do Windows 95/NT.
Po dokonaniu standardowej instalacji serwer Oracle’a będzie się uruchamiał
automatycznie przy każdym starcie systemu. Nie zawsze taka konfiguracja jest
wygodna. Można oczywiście uruchamiać serwer niezależnie - korzystając
z programu Oracle Instance Manager lub poprzez Control Panel w Windows NT.
W systemie NT serwer Oracle uruchamiany jest poleceniem
OracleStartORCL
(gdzie ORCL jest nazwą naszej bazy danych).
Łączenie się z serwerem
Najpierw należy zainstalować i skonfigurować oprogramowanie połączeniowe
Oracle’a o nazwie SQL Net. Do instalacji wykorzystamy program ORAINST.
Konfiguracja polega na zdefiniowaniu Database Aliases - tzn. określeniu zbioru
parametrów niezbędnych do uzyskania połączenia z serwerem bazy danych.
Przypominają one aliasy DBE używane w Delphi, ale dotyczą programów
sterujących samym serwerem Oracle’a, a nie ustawień dla poszczególnych baz.
Do skonfigurowania systemu Oracle w Windows95/NT używamy programu
konfiguracyjnego SQL Net. Uruchamiamy SQL Net Easy Configuration
i wybieramy
Add Database Alias
.
Ponieważ tworzymy nowy alias, to w pojawiającym się polu dialogowym
wpisujemy wybraną nazwę.
Następnie wybieramy protokół sieciowy do komunikacji z serwerem (np. TCP/IP).
480
Część III
W zależności od dokonanego wyboru musimy podać niezbędne dane o serwerze.
W przypadku TCP/IP jest to nazwa komputera serwera, użyta w pliku HOSTS lub
jego adres IP. Jeśli łączymy się z serwerem Personal Oracle, funkcjonującym
lokalnie, to jako jego adres IP wprowadzamy adres pętli zwrotnej (ang.
loopback
address
) 127.0.0.1. Protokół SPX wymaga natomiast podania nazwy usługi.
Końcowe okno dialogowe wyświetla i pozwala zweryfikować podane wartości
parametrów połączeniowych dla tworzonego aliasu. Jeśli wszystko jest
w porządku, klikamy
OK
.
Następnie powracamy do głównego menu programu konfiguracyjnego SQL Net.
Możemy przetestować utworzony alias, posługując się narzędziem Oracle
SQL*Plus:
sqlplus
USERNAME/PASSWORD@ALIASNAME
@
<file>.<ext>
gdzie
USERNAME
i
PASSWORD
to odpowiednio - podane przez nas -
nazwa
użytkownika
i
hasło
, zaś
ALIASNAME
jest nazwą aliasu.
Sprawdzenie łączności zserwerem umożliwia także program dostarczany
z serwerem Oracle o nazwie TNSPING. Parametry do niego podajemy zgodnie ze
składnią stosowaną w znanym poleceniu systemu UNIX - PING.
WSKAZÓWKA:
Jeśli posługujemy się serwerem Personal Oracle, funkcjonującym lokalnie, to
najprościej będzie skorzystać z protokołu TCP/IP, podając (jako adres serwera)
127.0.0.1. Oczywiście Windows 95 i Windows NT są standardowo wyposażone
w TCP/IP, należy tylko pamiętać, aby go zainstalować.
Konfigurowanie aliasów BDE
Przejdziemy teraz do tworzenia aliasów BDE, dzięki którym nasze aplikacje
w Delphi będą mogły korzystać z bazy Oracle. Ten temat był już omawiany
wcześniej, dlatego teraz przedstawimy tylko kolejne kroki, które pozwolą nam je
poprawnie skonfigurować.
Możemy wybrać jedno z narzędzi: BDE Administrator lub Delphi Database
Explorer. Opisany poniżej sposób postępowania odnosi się do programu BDE
Administrator.
WSKAZÓWKA:
BDE można uruchomić klikając odpowiednią ikonę w folderze Delphi albo
z Windows Control Panel.
Rozdział 16 Delphi w środowisku Oracle
481
1. W programie DBE Administrator, na fiszce
Configuration
, wybieramy
Configuration\Drivers\Native\Oracle
.
2. Na liście
VENDOR INIT
, wczęści
Definition
, znajdujemy odpowiednią
bibliotekę klienta Oracle. Np. wersji serwera Oracle 7.2 odpowiada
ORA72.DLL
. Zauważmy, że można tu także określić pewne parametry
programu obsługi, które staną się ustawieniami domyślnymi dla wszystkich
nowych aliasów korzystających z tego programu.
3. Prawym przyciskiem myszki klikamy fiszkę
Databases
i wybieramy
New
.
Z listy rozwijalnej
Alias type
, w oknie dialogowym
New Database Alias
,
wybieramy
ORACLE
i klikamy
OK
.
4. Wpisujemy nazwę tworzonego aliasu BDE.
5. Wprowadzamy wartości parametrów na stronie
Definition
.
6. W polu
SERVER NAME
podajemy nazwę aliasu naszej bazy (utworzonego
poprzednio za pomocą SQL Net)
7. Klikamy
NET PROTOKOL
i wybieramy ten sam protokół sieciowy, którego
użyliśmy poprzednio w programie konfiguracyjnym SQL Net.
8. Jeśli podamy nazwę użytkownika (parametr USER NAME), to będzie on
domyślnie przyłączany do serwera. Podana nazwa będzie też umieszczana we
wbudowanym w Delphi oknie dialogowym logowania.
Przycisk
Apply
(albo kombinacja klawiszy CTRL+ALT) umożliwia zapisanie
wprowadzonych zmian i zakończenie sesji Administratora.
WSKAZÓWKA:
Aliasy baz danych, zdefiniowane za pomocą programu BDE Administrator,
zapisywane są wrejestrze Windows. Klucz dostępu do tych danych jest
następujący:
HKEY_LOCAL_MACHINE\SOFTWARE\BORLAND\DATABASE\SETTINGS
Korzystając z tego klucza można definiować aliasy bez użycia programów BDE
Administrator czy Database Explorer z Delphi.
Podajemy jeszcze kilka użytecznych parametrów, które można ustawić za pomocą
programu BDE Administrator.
ENABLE INTEGERS
Wartość parametru
ENABLE INTEGERS
decyduje o tym, czy BDE interpretuje
pola
NUMERIC
bez cyfr dziesiętnych jako pola całkowitoliczbowe. Domyślnie są
one traktowane jako pola numeryczne (niezależnie od ich rozmiaru). Jest to
482
Część III
parametr tego samego rodzaju co
ENABLE BCD
. Jeśli wartości obu ustawione są
na TRUE, wtedy
ENABLE INTEGERS
jest nadrzędny.
Synonimy (synonims)
Oracle umożliwia tworzenie alternatywnych nazw obiektów, nazywanych
synonimami
. O sposobie traktowania poszczególnych synonimów przez programy
sterujące bazy decyduje wartość parametru LIST SYNONIMS. Określamy ją
poprzez własność
Params
komponentu
Database
. Dopuszczalne wartości
opisano w tabeli 16.1
Tabela 16.1 Dopuszczalne wartości parametru LIST SYNONIMS
Wartość Znaczenie
NONE
Nie są dołączane żadne synonimy
PRIVATE
Dołączane są tylko synonimy prywatne
ALL
Są dołączane wszystkie synonimy (prywatne i ogólnodostępne)
Synonimy publiczne (Public synonims)
Jeśli wartość parametru
LIST SYNONIMS
jest ustawiona na
ALL
, to na liście
tabel pokazywane są także synonimy
PUBLIC
(
publiczne
). Jednak, aby otworzyć
obiekt określony synonimem, musimy mieć do niego odpowiednie prawa dostępu
(w sprawie uprawnień powinniśmy się zwrócić do administratora bazy danych).
Publiczne synonimy Oracle zawierają nazwy dynamicznie aktualizowanych tablic
kontrolnych (ang.
performance tables
). Domyślnie ma do nich dostęp tylko
użytkownik SYS. Synonimy te są postaci V$NAME - gdzie NAME jest pozostałą
częścią synonimu ( jak np.
LOCK, OPEN_CURSOR
itd.)
Rozwiązywanie problemów połączeniowych z serwerem Oracle
Poniżej zebraliśmy kilka praktycznych porad, które mogą okazać się przydatne
w przypadku napotkania problemów połączeniowych.
1. Jeśli nasza aplikacja (napisana w Delphi) nie łączy się z serwerem, powinniśmy
spróbować połączyć się poprzez Oracle SQL*Plus. Jeśli uda się nam nawiązać
komunikację, to prawdopodobnie źle skonfigurowaliśmy alias BDE. W takiej
sytuacji powinniśmy powrócić do programu BDE Configuration i upewnić się,
czy podane ustawienia są poprawne ( w szczególności nazwa serwera).
2. Nieudana próba połączenia się poprzez Oracle SQL*Plus pozwala
przypuszczać, że przyczyną problemów może być protokół sieciowy. Jeśli
korzystamy z TCP/IP, to połączenie z serwerem można sprawdzić za pomocą
Rozdział 16 Delphi w środowisku Oracle
483
programu PING, będącego na wyposażeniu Windows 95/NT. Powinniśmy
spróbować łączenia poprzez nazwę komputera zapisaną w pliku HOSTS oraz
poprzez jego adres IP.
3. Jeśli łączymy się poprzez adres IP, nie nawiązując połączenia za
pośrednictwem nazwy, wtedy powinniśmy sprawdzić plik HOSTS.
Tymczasowo można zmienić odwołanie sieciowe (programem konfiguracyjnym
SQL Net), zastępując w nim nazwę komputera jego adresem IP. Z uwagi na
fakt, że odwołanie do nazwy jest wygodniejsze, powinniśmy możliwie
najszybciej usunąć przyczynę uniemożliwiającą połączenie.
4. W przypadku korzystania zSPX powinniśmy sprawdzić, czy wartości
parametrów protokołu sieciowego, podane w programie konfiguracyjnym SQL
Net, są właściwe. Jeśli nadal nie można uzyskać połączenia, radzimy zwrócić
się do administratora sieci.
5. Jeśli korzystamy z TCP/IP i w żaden sposób nie udało się nam połączyć
zserwerem, to prawdopodobną przyczyną może być uszkodzenie sieci.
Oczywiście powinniśmy jeszcze raz sprawdzić adres IP serwera oraz uruchomić
PING
(podając adres
127.0.0.1
) - aby przekonać się, czy stos protokołów
TCP/IP funkcjonuje poprawnie. Jeśli test się nie powiedzie, wówczas
prawdopodobnie źle skonfigurowano sam protokół (w takiej sytuacji ponownie
radzimy zwrócić się do administratora sieci).
6.
Jeśli PING znajduje serwer, natomiast nie możemy się połączyć poprzez
SQL*Plus, powinniśmy sprawdzić dostęp do katalogu Oracle w zmiennej
PATH
. Jeśli
PATH
jest w porządku, pozostaje skontrolować ustawienia zapisane
w pliku (
KATALOG GŁÓWNY ORACLE)
\NETWORK\ADMIN
\TNSNAMES.
ORA
. Mimo iż jest to zwykły plik tekstowy, jego edycję powinno się
przeprowadzać programem SQL Net ( zdecydowanie odradzamy korzystanie
z edytora tekstów). Poniżej przedstawiamy przykładową zawartość takiego
pliku (w tym wypadku serwer jest uruchamiany lokalnie):
SCOTTSDATABASE.world =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(COMMUNITY=tcp.world)
(PROTOCOL=TCP)
(Host=127.0.0.1)
(Port=1521)
)
(ADDRESS=
(COMMUNITY=tcp.world)
(PROTOCOL=TCP)
(Host=127.0.0.1)
zanotowane.pl doc.pisz.pl pdf.pisz.pl hannaeva.xlx.pl
Delphi w środowisku Oracle
W tym rozdziale zapoznamy się z systemem Oracle DBMS oraz dowiemy się, jak
z niej korzystać w aplikacjach Delphi. Poznamy specyfikę języka Oracle SQL oraz
niektóre zagadnienia dotyczące współpracy Delphi i Oracle. Pokażemy także, jak
wykonywać podstawowe zadania administratora i przeprowadzać strojenie serwera
Oracle.
Zaczniemy oczywiście od uruchomienia serwera.
Uruchamianie serwera ORACLE
Sposób uruchomienia serwera Oracle’a w dużym stopniu zależy od systemu
operacyjnego. W naszym opisie ograniczymy się tylko do Windows 95/NT.
Po dokonaniu standardowej instalacji serwer Oracle’a będzie się uruchamiał
automatycznie przy każdym starcie systemu. Nie zawsze taka konfiguracja jest
wygodna. Można oczywiście uruchamiać serwer niezależnie - korzystając
z programu Oracle Instance Manager lub poprzez Control Panel w Windows NT.
W systemie NT serwer Oracle uruchamiany jest poleceniem
OracleStartORCL
(gdzie ORCL jest nazwą naszej bazy danych).
Łączenie się z serwerem
Najpierw należy zainstalować i skonfigurować oprogramowanie połączeniowe
Oracle’a o nazwie SQL Net. Do instalacji wykorzystamy program ORAINST.
Konfiguracja polega na zdefiniowaniu Database Aliases - tzn. określeniu zbioru
parametrów niezbędnych do uzyskania połączenia z serwerem bazy danych.
Przypominają one aliasy DBE używane w Delphi, ale dotyczą programów
sterujących samym serwerem Oracle’a, a nie ustawień dla poszczególnych baz.
Do skonfigurowania systemu Oracle w Windows95/NT używamy programu
konfiguracyjnego SQL Net. Uruchamiamy SQL Net Easy Configuration
i wybieramy
Add Database Alias
.
Ponieważ tworzymy nowy alias, to w pojawiającym się polu dialogowym
wpisujemy wybraną nazwę.
Następnie wybieramy protokół sieciowy do komunikacji z serwerem (np. TCP/IP).
480
Część III
W zależności od dokonanego wyboru musimy podać niezbędne dane o serwerze.
W przypadku TCP/IP jest to nazwa komputera serwera, użyta w pliku HOSTS lub
jego adres IP. Jeśli łączymy się z serwerem Personal Oracle, funkcjonującym
lokalnie, to jako jego adres IP wprowadzamy adres pętli zwrotnej (ang.
loopback
address
) 127.0.0.1. Protokół SPX wymaga natomiast podania nazwy usługi.
Końcowe okno dialogowe wyświetla i pozwala zweryfikować podane wartości
parametrów połączeniowych dla tworzonego aliasu. Jeśli wszystko jest
w porządku, klikamy
OK
.
Następnie powracamy do głównego menu programu konfiguracyjnego SQL Net.
Możemy przetestować utworzony alias, posługując się narzędziem Oracle
SQL*Plus:
sqlplus
USERNAME/PASSWORD@ALIASNAME
@
<file>.<ext>
gdzie
USERNAME
i
PASSWORD
to odpowiednio - podane przez nas -
nazwa
użytkownika
i
hasło
, zaś
ALIASNAME
jest nazwą aliasu.
Sprawdzenie łączności zserwerem umożliwia także program dostarczany
z serwerem Oracle o nazwie TNSPING. Parametry do niego podajemy zgodnie ze
składnią stosowaną w znanym poleceniu systemu UNIX - PING.
WSKAZÓWKA:
Jeśli posługujemy się serwerem Personal Oracle, funkcjonującym lokalnie, to
najprościej będzie skorzystać z protokołu TCP/IP, podając (jako adres serwera)
127.0.0.1. Oczywiście Windows 95 i Windows NT są standardowo wyposażone
w TCP/IP, należy tylko pamiętać, aby go zainstalować.
Konfigurowanie aliasów BDE
Przejdziemy teraz do tworzenia aliasów BDE, dzięki którym nasze aplikacje
w Delphi będą mogły korzystać z bazy Oracle. Ten temat był już omawiany
wcześniej, dlatego teraz przedstawimy tylko kolejne kroki, które pozwolą nam je
poprawnie skonfigurować.
Możemy wybrać jedno z narzędzi: BDE Administrator lub Delphi Database
Explorer. Opisany poniżej sposób postępowania odnosi się do programu BDE
Administrator.
WSKAZÓWKA:
BDE można uruchomić klikając odpowiednią ikonę w folderze Delphi albo
z Windows Control Panel.
Rozdział 16 Delphi w środowisku Oracle
481
1. W programie DBE Administrator, na fiszce
Configuration
, wybieramy
Configuration\Drivers\Native\Oracle
.
2. Na liście
VENDOR INIT
, wczęści
Definition
, znajdujemy odpowiednią
bibliotekę klienta Oracle. Np. wersji serwera Oracle 7.2 odpowiada
ORA72.DLL
. Zauważmy, że można tu także określić pewne parametry
programu obsługi, które staną się ustawieniami domyślnymi dla wszystkich
nowych aliasów korzystających z tego programu.
3. Prawym przyciskiem myszki klikamy fiszkę
Databases
i wybieramy
New
.
Z listy rozwijalnej
Alias type
, w oknie dialogowym
New Database Alias
,
wybieramy
ORACLE
i klikamy
OK
.
4. Wpisujemy nazwę tworzonego aliasu BDE.
5. Wprowadzamy wartości parametrów na stronie
Definition
.
6. W polu
SERVER NAME
podajemy nazwę aliasu naszej bazy (utworzonego
poprzednio za pomocą SQL Net)
7. Klikamy
NET PROTOKOL
i wybieramy ten sam protokół sieciowy, którego
użyliśmy poprzednio w programie konfiguracyjnym SQL Net.
8. Jeśli podamy nazwę użytkownika (parametr USER NAME), to będzie on
domyślnie przyłączany do serwera. Podana nazwa będzie też umieszczana we
wbudowanym w Delphi oknie dialogowym logowania.
Przycisk
Apply
(albo kombinacja klawiszy CTRL+ALT) umożliwia zapisanie
wprowadzonych zmian i zakończenie sesji Administratora.
WSKAZÓWKA:
Aliasy baz danych, zdefiniowane za pomocą programu BDE Administrator,
zapisywane są wrejestrze Windows. Klucz dostępu do tych danych jest
następujący:
HKEY_LOCAL_MACHINE\SOFTWARE\BORLAND\DATABASE\SETTINGS
Korzystając z tego klucza można definiować aliasy bez użycia programów BDE
Administrator czy Database Explorer z Delphi.
Podajemy jeszcze kilka użytecznych parametrów, które można ustawić za pomocą
programu BDE Administrator.
ENABLE INTEGERS
Wartość parametru
ENABLE INTEGERS
decyduje o tym, czy BDE interpretuje
pola
NUMERIC
bez cyfr dziesiętnych jako pola całkowitoliczbowe. Domyślnie są
one traktowane jako pola numeryczne (niezależnie od ich rozmiaru). Jest to
482
Część III
parametr tego samego rodzaju co
ENABLE BCD
. Jeśli wartości obu ustawione są
na TRUE, wtedy
ENABLE INTEGERS
jest nadrzędny.
Synonimy (synonims)
Oracle umożliwia tworzenie alternatywnych nazw obiektów, nazywanych
synonimami
. O sposobie traktowania poszczególnych synonimów przez programy
sterujące bazy decyduje wartość parametru LIST SYNONIMS. Określamy ją
poprzez własność
Params
komponentu
Database
. Dopuszczalne wartości
opisano w tabeli 16.1
Tabela 16.1 Dopuszczalne wartości parametru LIST SYNONIMS
Wartość Znaczenie
NONE
Nie są dołączane żadne synonimy
PRIVATE
Dołączane są tylko synonimy prywatne
ALL
Są dołączane wszystkie synonimy (prywatne i ogólnodostępne)
Synonimy publiczne (Public synonims)
Jeśli wartość parametru
LIST SYNONIMS
jest ustawiona na
ALL
, to na liście
tabel pokazywane są także synonimy
PUBLIC
(
publiczne
). Jednak, aby otworzyć
obiekt określony synonimem, musimy mieć do niego odpowiednie prawa dostępu
(w sprawie uprawnień powinniśmy się zwrócić do administratora bazy danych).
Publiczne synonimy Oracle zawierają nazwy dynamicznie aktualizowanych tablic
kontrolnych (ang.
performance tables
). Domyślnie ma do nich dostęp tylko
użytkownik SYS. Synonimy te są postaci V$NAME - gdzie NAME jest pozostałą
częścią synonimu ( jak np.
LOCK, OPEN_CURSOR
itd.)
Rozwiązywanie problemów połączeniowych z serwerem Oracle
Poniżej zebraliśmy kilka praktycznych porad, które mogą okazać się przydatne
w przypadku napotkania problemów połączeniowych.
1. Jeśli nasza aplikacja (napisana w Delphi) nie łączy się z serwerem, powinniśmy
spróbować połączyć się poprzez Oracle SQL*Plus. Jeśli uda się nam nawiązać
komunikację, to prawdopodobnie źle skonfigurowaliśmy alias BDE. W takiej
sytuacji powinniśmy powrócić do programu BDE Configuration i upewnić się,
czy podane ustawienia są poprawne ( w szczególności nazwa serwera).
2. Nieudana próba połączenia się poprzez Oracle SQL*Plus pozwala
przypuszczać, że przyczyną problemów może być protokół sieciowy. Jeśli
korzystamy z TCP/IP, to połączenie z serwerem można sprawdzić za pomocą
Rozdział 16 Delphi w środowisku Oracle
483
programu PING, będącego na wyposażeniu Windows 95/NT. Powinniśmy
spróbować łączenia poprzez nazwę komputera zapisaną w pliku HOSTS oraz
poprzez jego adres IP.
3. Jeśli łączymy się poprzez adres IP, nie nawiązując połączenia za
pośrednictwem nazwy, wtedy powinniśmy sprawdzić plik HOSTS.
Tymczasowo można zmienić odwołanie sieciowe (programem konfiguracyjnym
SQL Net), zastępując w nim nazwę komputera jego adresem IP. Z uwagi na
fakt, że odwołanie do nazwy jest wygodniejsze, powinniśmy możliwie
najszybciej usunąć przyczynę uniemożliwiającą połączenie.
4. W przypadku korzystania zSPX powinniśmy sprawdzić, czy wartości
parametrów protokołu sieciowego, podane w programie konfiguracyjnym SQL
Net, są właściwe. Jeśli nadal nie można uzyskać połączenia, radzimy zwrócić
się do administratora sieci.
5. Jeśli korzystamy z TCP/IP i w żaden sposób nie udało się nam połączyć
zserwerem, to prawdopodobną przyczyną może być uszkodzenie sieci.
Oczywiście powinniśmy jeszcze raz sprawdzić adres IP serwera oraz uruchomić
PING
(podając adres
127.0.0.1
) - aby przekonać się, czy stos protokołów
TCP/IP funkcjonuje poprawnie. Jeśli test się nie powiedzie, wówczas
prawdopodobnie źle skonfigurowano sam protokół (w takiej sytuacji ponownie
radzimy zwrócić się do administratora sieci).
6.
Jeśli PING znajduje serwer, natomiast nie możemy się połączyć poprzez
SQL*Plus, powinniśmy sprawdzić dostęp do katalogu Oracle w zmiennej
PATH
. Jeśli
PATH
jest w porządku, pozostaje skontrolować ustawienia zapisane
w pliku (
KATALOG GŁÓWNY ORACLE)
\NETWORK\ADMIN
\TNSNAMES.
ORA
. Mimo iż jest to zwykły plik tekstowy, jego edycję powinno się
przeprowadzać programem SQL Net ( zdecydowanie odradzamy korzystanie
z edytora tekstów). Poniżej przedstawiamy przykładową zawartość takiego
pliku (w tym wypadku serwer jest uruchamiany lokalnie):
SCOTTSDATABASE.world =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS=
(COMMUNITY=tcp.world)
(PROTOCOL=TCP)
(Host=127.0.0.1)
(Port=1521)
)
(ADDRESS=
(COMMUNITY=tcp.world)
(PROTOCOL=TCP)
(Host=127.0.0.1)