Roz15.pdf

(328 KB) Pobierz
33671925 UNPDF
Rozdział 15
Delphi na sewerze SQL Microsoft
W tym rozdziale zapoznamy się z relacyjnym systemem baz danych (ang.
RDBMS) Microsoft SQL Server. Omówiono w nim problematykę współpracy
Delphi z bazą SQL Server oraz specyficzną odmianę języka SQL, z której
korzysta.
Uruchamianie serwera
Uruchomienie i zatrzymanie systemu Microsoft SQL Server umożliwia program
SQL Server Manager, znajdujący się grupie programów lub folderze SQL Server.
Te dwa podstawowe elementy zarządzania serwerem są także realizowane poprzez
program Services zWindows NT Control Panel. Ponieważ SQL Server
funkcjonuje jako usługa Windows NT, możemy też wykorzystać polecenie
Services z programu Windows NT Server Manager.
Zatrzymanie serwera umożliwia także instrukcja SHUTDOWN języka Transact -
SQL. Wykorzystanie opcji NOWAIT spowoduje natychmiastowe przerwanie jego
pracy (normalnie serwer jest zatrzymywany dopiero po zakończeniu
uruchomionych procesów).
Łączenie się z serwerem
Warto odnotować, że wiele z poruszanych tutaj zagadnień odnosi się także do
Sybase SQL Server. Nie powinno to być dla nikogo zaskoczeniem, ponieważ
dopiero od wersji Microsoft SQL Server 6.0 produkty te istotnie się różnią.
Niska cena systemu Microsoft SQL Server i możliwość pracy w środowisku
Windows NT mogą stanowić zachętę do uruchamiania aplikacji
jednostanowiskowo (klient i serwer funkcjonują na tym samym komputerze).
Wiele małych przedsiębiorstw przyjmuje właśnie takie rozwiązanie. Aplikacja
wykorzystywana w taki sposób powinna być możliwie bezawaryjna. Jeśli bowiem
spowodujemy załamanie systemu, stracimy nie tylko proces klienta ale i serwera,
co może doprowadzić do uszkodzenia przetwarzanych danych. Uwaga ta odnosi
się także do każdego systemu operacyjnego i serwera SQL.
Natomiast niekwestionowaną zaletą instalacji jednostanowiskowej jest łatwość
konfigurowania i nawiązywania połączenia. Wybieramy wtedy protokół TCP/IP,
33671925.001.png
450
Część III
podając - zamiast rzeczywistego adresu IP komputera - adres pętli zwrotnej (ang.
loop-back address ) 127.0.0.1.
Konfigurowanie połączeń klienta
Do skonfigurowania oprogramowania klienta posłużymy się narzędziem SQL
Client Configuration Utility (powinno się ono znajdować w folderze programu
Microsoft SQL Server). Wykonanie opisanych poniżej czynności pozwoli nam
utworzyć nowe połączenie klienta:
1. Uruchamiamy oprogramowanie SQL Server Client Configuration Utility.
2. Wybieramy fiszkę Advanced .
3. Wpisujemy nazwę serwera do pola tekstowego Server . W zasadzie nazwa może
być dowolna, jednak podanie takiej, jak zdefiniowana na komputerze serwera,
ułatwi konfigurację.
4. W części Net Library Configuration wybieramy domyślny sieciowy protokół
komunikacyjny. Prawdopodobnie będzie to albo komunikacja przez nazwane
potoki (ang. Named Pipes ) albo TCP/IP.
5. Jeśli wybraliśmy komunikację przez potoki, wpisujemy - do pola tekstowego
Server - nazwę komputera, na którym pracuje serwer, i - aby dodać nowy alias
połączeniowy - klikamy Add/Modify , a następnie Done .
6. W przypadku innego protokołu komunikacyjnego, konieczne będą inne dane.
Ich rodzaj zależy od dokonanego wyboru. Np. TCP/IP wymaga adresu IP
komputera serwera oraz numeru nasłuchiwanego portu (powinny być one
oddzielone przecinkiem). Po ich wpisaniu klikamy Add/Modify a następnie
Done .
Teraz potrzebujemy jeszcze aliasu klienta, który umożliwi aplikacji w Delphi
dostęp do naszego serwera SQL.
OSTRZEŻENIE:
Powinniśmy upewnić się, czy posiadamy właściwą wersję oprogramowania SQL
Client Configuration. Klient uruchomiony w 16 bitowym środowisku wymaga 16-
bitowej wersji biblioteki procedur połączeniowych, a klient 32-bitowy - 32-bitowej
wersji biblioteki. Niektóre narzędzia innych producentów do administrowania (np.
DB Artisan) są jeszcze aplikacjami 16-bitowymi. Korzystają one z 16-bitowych
wersji klienta, nawet jeśli pracujemy wśrodowisku 32-bitowego systemu
operacyjnego.
33671925.002.png
Rozdział 15 Delphi na serwerze SQL Microsoft
451
Rozwiązywanie problemów połączeniowych z serwerem Microsoft SQL
Poniżej zebraliśmy kilka praktycznych porad:
1. Jeśli nasza, napisana w Delphi, aplikacja nie łączy się z serwerem, powinniśmy
spróbować nawiązać komunikację poprzez ISQL/w. Jeśli próba się powiedzie,
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. Niemożność połączenia się poprzez ISQL/w pozwala przypuszczać, że
przyczyną problemów może być protokół sieciowy. Jeśli korzystamy z TCP/IP,
wtedy połączenie z serwerem możemy sprawdzić za pomocą programu PING,
dostarczanego wraz z Windows 95 i Windows NT. Powinniśmy spróbować
łączenia poprzez nazwę komputera (zapisaną w pliku HOSTS) oraz poprzez
jego adres IP. Jeśli komunikujemy się z serwerem przez potoki, możemy
skorzystać z instrukcji net view \\servername, gdzie servername
jest nazwą serwera NT, na którym realizowany jest serwer SQL. Po uzyskaniu
połączenia poprzez c wykonujemy instrukcję netuse \\
servername.\IPC$. Gdy obie zostaną wykonane poprawnie, skorzystamy
z procedur makepipe/readpipe. Uruchamiamy więc makepipe na serwerze oraz
readpipe /Sservername / Dteststring na komputerze klienta ( CTRL+C
lub CTRL+BREAK kończy realizację makepipe). Jeśli któraś z prób nie
wypadnie pomyślnie należy zwrócić się do Administratora NT. Źródłem
zakłóceń może być wadliwa obsługa protokołu potoków na serwerze.
3. Jeśli łączymy się poprzez adres IP, a nie udaje się to poprzez nazwę serwera
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 protokołu IPX, warto rozpocząć od sprawdzenia, czy nasz
komputer ma dostęp do serwera. Można to zrobić uruchamiając isql /L z linii
poleceń systemu operacyjnego. Isql /L wywołuje funkcję dbserverenum ,
która wyświetla listę dostępnych serwerów. Jeśli naszego serwera nie ma na
liście, powinniśmy zwrócić się do administratora sieci (prawdopodobnie sieć
nie funkcjonuje poprawnie).
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łu
TCP/IP funkcjonuje poprawnie. Jeśli test się nie powiedzie, to prawdopodobnie
452
Część III
źle skonfigurowano sam protokół. W takim przypadku ponownie proponujemy
zwrócić się do administratora sieci.
6. Jeśli nie uzyskaliśmy połączenia za pomocą ISQL /w , mimo iż PING
funkcjonuje poprawnie, powinniśmy sprawdzić - czy numer portu w odwołaniu
jest zgodny z ustawionym na serwerze bazy danych. Informacji o portach
przypisanych do serwera powinien nam udzielić administrator bazy danych.
7. Jeśli wszystko wydaje się być skonfigurowane poprawnie, możemy dla próby
wykorzystać inny protokół ( jeśli oczywiście mamy taką możliwość). Serwer
pozwala na jednoczesną obsługę kilku protokołów, więc może tymczasowo
wykorzystywać tylko ten, z którym funkcjonuje poprawnie, aż do momentu
przywrócenia do właściwej pracy drugiego protokołu.
WSKAZÓWKA:
Podstawowym narzędziem diagnostycznym w środowisku Windows NT jest
Windows NT Diagnostics (z folderu Administrative Tools), umożliwiający
przeglądanie zasobów komputera. Jest to adaptowana do NT wersja popularnego
programu MSD (Microsoft Diagnostic), znanego z systemów DOS i Windows 3.x.
Plik z programem MSD nazywa się WINMSD.EXE, i znajduje się kartotece
\WINNT\SYSTEM32.
Tworzenie aliasu BDE
Pokażemy teraz jak stworzyć alias BDE, dzięki któremu nasze aplikacje w Delphi
uzyskają dostęp do serwera bazy danych. Ten temat był już omawiany wcześniej,
dlatego tutaj ograniczymy się tylko do pokazania, jak utworzyć alias DBE
w zależności od ustawień oprogramowania sterującego obsługą bazy danych.
Aliasy BDE można tworzyć w oparciu o program BDE Administrator lub Delphi
Database Explorer. Poniższy opis odnosi się do programu BDE Administrator.
1. Uruchamiamy DBE Administrator, klikamy (prawym przyciskiem myszy)
fiszkę Databases i wybieramy New . W oknie dialogowym New Database Alias
wybieramy MSSQL z listy typów aliasów.
2. Po dodaniu nowego aliasu wpisujemy jego nazwę.
3. Konfigurujemy go, ustawiając parametry na stronie Definition .
4. Klikamy parametr SERVER NAME i ustawiamy w nim nazwę naszego serwera
SQL- tę, której użyliśmy poprzednio w programie SQL Client Configuration
Utility.
33671925.003.png
Rozdział 15 Delphi na serwerze SQL Microsoft
453
5. Dodatkowo możemy ustawić parametr USER NAME , podając nazwę
użytkownika, który będzie domyślnie logowany na serwerze. Będzie się ona
także ukazywała we wbudowanym w Delphi oknie dialogowym logowania.
Aby zapisać zmiany klikamy przycisk Apply i zamykamy sesję programu BDE
Administrator.
Specjalne ustawienia aliasu BDE
Omówione poniżej ustawienia wartości parametrów aliasu BDE mogą okazać się
istotne przy nawiązywaniu połączenia z Microsoft SQL Server. Chociaż możemy
ograniczyć się do ustawień domyślnych, to jednak w przypadku napotkania
problemów znajomość funkcji poszczególnych parametrów będzie z pewnością
bardzo przydatna. Warto zauważyć, że niektóre znich określają sposób
funkcjonowania programów obsługi bazy i mogą być ustawiane na stronie
Configuration w programie BDE Administrator.
DRIVER FLAGS Setting and BLOB Handling
Czytanie lub zapis BLOB (Binary Large OBject) staje się czasami przyczyną
zawieszenia serwera Microsoft SQL. Jeśli występują tego rodzaju problemy,
proponujemy zmienić w aliasie ustawienie parametru DRIVER FLAG - z wartości
0 na 1. Powinno to być wystarczające dla usunięcia problemu, ale jednocześnie
może powodować naruszanie limitu czasu podczas zapisywania BLOB.
APPLICATION NAME (Nazwa aplikacji)
Wartością parametru APPLICATION NAME jest nazwa, pod którą nasz proces
będzie reprezentowany w tablicy procesów serwera SQL.
CONNECT TIMEOUT (Czas do zerwania połączenia)
Decyduje o tym, jak długo klient będzie ponawiał próby nawiązania połączenia
z serwerem SQL. Domyślnie przyjmowane jest 60 s. Zwiększenie tego parametru
może poprawić funkcjonowanie stacji klienckich (zwłaszcza, gdy łączymy się
przez sieć rozległą WAN).
HOST NAME (Nazwa hosta)
Parametr służy do nadania nazwy stacji roboczej , poprzez którą będzie ona
identyfikowana w tablicy procesów serwera SQL. Dzięki temu będzie można
odróżnić to połączenie od innych na różnych listach - takich jak np. tworzona
przez procedurę sp_who .
Zgłoś jeśli naruszono regulamin