Wykład 14

Dostrajanie i administrowanie bazą danych

 

Streszczenie

W tym wykładzie zajmiemy się dwoma powiązanymi ze sobą problemami: dostrajaniem oraz administrowaniem baz danych na przykładzie MS Access.

Jeśli chodzi o dostrajanie bazy danych, to najpierw rozważymy możliwości tkwiące w opcjach udostępnianych przez program MS Access a następnie przytoczymy listę ogólnych wskazówek na temat przyśpieszania działania bazy danych.

W temacie administrowania bazą danych rozpatrzymy kolejno najważniejsze obowiązki administratora bazy danych to jest: sporządzanie kopii zapasowych i odtwarzanie bazy danych po awarii, kompaktyfikację i naprawę uszkodzonego pliku bazy danych, konwersję z poprzednich wersji MS Access, szyfrowanie i odszyfrowanie pliku bazy danych, dokumentowanie bazy danych, zarządzanie replikacjami bazy danych, transformację aplikacji do modelu klient-serwer oraz zabezpieczanie bazy danych przed nieuprawnionym użyciem. Rozpatrzymy także dostępne opcje przy współbieżnym korzystaniu z bazy danych przez wielu użytkowników i powiązany z tym problem blokowania dostępu do obiektów bazy danych.

Temat architektury i funkcjonowania systemu zarządzania bazą danych i wynikające stąd wnioski dla administratora bazy danych zostaną przedstawione na wykładzie "Systemy baz danych".
 


Dostrajanie bazy danych MS Access

Przede wszystkim MS Access dostarcza dwóch okienek z opcjami: jedno zawiera opcje związane z uruchamianiem aplikacji MS Access, drugie - opcje związane z działaniem aplikacji MS Access.
 

OPCJA AUTOSTART Narzędzia -> Autostart (Tools -> Startup)

Oto okienko z opcjami rozpoczynania aplikacji bazodanowej:

Oto wyjaśnienie podstawowych jego pozycji:

1. Tytuł aplikacji - na pasku tytułowym (zamiast Microsoft Access).

2. Ikona aplikacji - związanie ikony z bazą danych (wyświetlane razem z tytułem aplikacji).

3. Pasek menu - zmiana globalnego paska menu.

4. Pasek menu skrótów - zmiana globalnego paska menu skrótów.

5. Wyświetl formularz/stronę - od wyświetlenia jakiego formularza lub strony ma rozpoczynać działanie aplikacja.

6. Wyświetlaj okno bazy danych - jeśli skasujemy zaznaczenie, okno bazy danych będzie ukryte.

7. Wyświetlaj pasek stanu - jeśli skasujemy zaznaczenie, pasek stanu będzie ukryty.

8. Można wyłączyć specjalne sekwencje klawiszy:

-      F11 - wyświetl okno bazy danych;

-      CRTL+F11 - wyświetl standardowy pasek menu;

-      CTRL+BREAK - wstrzymaj wykonywanie kodu i wyświetl bieżący moduł.

Uwaga: SHIFT - przy otwieraniu bazy danych wyłącza opcje AutoStart.

Teraz pytanie do czytelnika:

W ramach kroku dostrajania działania aplikacji zastanów się nad zastosowaniem opcji startowych w przygotowywanej przez Ciebie aplikacji zaliczeniowej.

 

Opcje Microsoft Access: Narzędzia ->Opcje (Tools -> Options)

Spośród dużej liczby opcji, nad którymi ma kontrolę projektant aplikacji bazy danych zwracamy uwagę na trzy, które często są wyłączane i przekazywane pod kontrolę aplikacji, mianowicie na karcie "Edit/Find" ("Edytowanie/Znajdowanie") można zmienić domyślne ustawienie potwierdzania dokonywanych zmian, odpowiednio przy zmianie rekordu ("Potwierdź zmiany rekordu"), przy usuwaniu obiektu bazy danych ("Usuwanie dokumentów") oraz przy wykonywaniu kwerend funkcjonalnych ("Kwerendy akcji"):

Teraz zadanie dla czytelnika:

W ramach kroku dostrajania działania aplikacji zastanów się nad problemem potwierdzania przez użytkownika dokonywanych przez niego zmian w przygotowywanej przez Ciebie aplikacji zaliczeniowej.

 

Przyśpieszanie (dostrajanie) aplikacji bazodanowej

Oto zestaw kroków, których przeprowadzenie, może przynieść przyśpieszenie działania aplikacji bazodanowej.

1. Ulepszenie parametrów komputera (np. rozmiar pamięci RAM).

2. Optymalizacja ustawień systemu Windows (np. wielkość pamięci wirtualnej).

3. Optymalizacja ustawień systemu bazodanowego (MS Access).

4. Otwieranie jednostanowiskowych baz danych w trybie wyłącznym (ale wtedy inni użytkownicy nie będą mogli korzystać z bazy danych).

5. Sprowadzenie schematu bazy danych do trzeciej postaci normalnej (bez redundancji).

6. Założenie indeksów na polach, według których odbywa się wyszukiwanie.

7. Zastosowanie Analizatora wydajności bazy danych do wskazania (i ewentualnie poprawienia) zauważonych potencjalnych usterek (np. nie skompilowany kod, nie połączone tabele, pożądany indeks): Narzędzia -> Analizuj -> Wydajność - Performance.

8. Zastosowanie Analizatora tabel bazy danych do wskazania czy dane w tabelach nie powtarzają się tj. czy są w trzeciej postaci normalnej i ewentualnie dokonanie podziału tabeli na dwie tabele: Narzędzia -> Analizuj -> Tabela  - Table.

9. Przekształcenie pliku bazy danych do formatu .MDE: wszystkie moduły zostają skompilowane, baza danych zostaje skompaktyfikowana, następuje optymalizacja wykorzystania pamięci i działania aplikacji bazy danych, niepotrzebne części (jak kod źródłowy) zostają usunięte. Przekształcenie to odbywa się przy zamkniętej bazie danych (Narzędzia -> Narzędzia bazy danych -> Utwórz plik MDE – Make MDE File). W bazie danych zapisanej jako plik MDE nie można dokonywać zmian w projekcie formularzy, raportów ani modułów. Jeśli konieczne są zmiany w projekcie tych obiektów, należy wprowadzić je w pierwotnej bazie danych (a więc jest potrzebne zrobienie kopii przed konwersją), a następnie ponownie ją zapisać w pliku MDE.

10. Ograniczenie użycia dużych obiektów jak tapety, obiekty OLE (jeśli można dokonuj konwersji na rysunki), elementy graficzne.

11. Do wprowadzania danych lepiej otwierać formularz w trybie wprowadzania danych (a nie edycji).

12. Używaj pomocniczych tabel do zapisywania wielokrotnie obliczanych danych - w tym, jeśli można, źródeł rekordów dla formularzy i raportów.

13. Używaj kwerend zamiast bezpośrednio kodu SQL (kwerendy są kompilowane). Do wyświetlania załączaj tylko istotne kolumny - pomijaj kolumny używane tylko w warunkach.

14. Dokonuj regularnie kompaktyfikacji (defragmentacji) twardego dysku i bazy danych. Po wielokrotnym usuwaniu obiektów baza danych może ulec fragmentacji, rozdrobnieniu, co prowadzi do nie optymalnego wykorzystywania miejsca na dysku. Defragmentacja bazy danych polega na skopiowaniu jej wraz z uporządkowaniem zapisu na dysku:

Narzędzia -> Narzędzia bazy danych -> Kompaktuj i napraw bazę danych - Compact and Repair Database

15. Jeśli to możliwe, używaj tabel importowanych zamiast dołączonych.

16. Jako źródła wierszy dla list używaj kwerend zamiast instrukcji SELECT.

17. Utworzoną aplikację można przekształcić w wersję dystrybucyjną, przy której użytkownik nie potrzebuje programu Microsoft Access. Dokonuje się tego przy użyciu oprogramowania o nazwie Microsoft Office 2000 Developer.

Teraz zadanie dla czytelnika:

W ramach kroku dostrajania działania aplikacji przeanalizuj kolejno punkty powyższej listy. Zastanów się, które wskazówki mogą być uwzględnione w Twojej zaliczeniowej aplikacji i spróbuj je zrealizować.

 


Administrowanie bazą danych

Rozpatrzymy kolejno najważniejsze obowiązki administratora bazy danych to jest: robienie kopii zapasowych i odtwarzanie bazy danych po awarii, kompaktyfikację i naprawę uszkodzonego pliku bazy danych, konwersję z poprzednich wersji MS Access, szyfrowanie i odszyfrowanie pliku bazy danych, dokumentowanie bazy danych, zarządzanie replikacjami bazy danych, transformację na aplikację w modelu klient-serwer oraz zabiezpieczanie bazy danych przed nieuprawnionym użyciem.

Rozpatrzymy także dostępne opcje przy współbieżnym korzystaniu z bazy danych przez wielu użytkowników i powiązany z tym problem blokowania dostępu do obiektów bazy danych.
 

Kopia zapasowa i odtwarzanie po awarii

Plik z bazą danych może ulec uszkodzeniu np. w  wyniku awarii dysku lub wyłączenia komputera, gdy otwarta jest baza danych MS Access. Najprościej, pod systemem operacyjnym skopiować pliki bazy danych (.mdb ewentualnie .mde, .mda, zarejestrowane biblioteki) i grupy roboczej (.mdw -  przy instalacji MS Access plik system.mdw) i umieścić je na innym nośniku - zapamiętując oryginalne miejsca tych plików w systemie plików. Po awarii dysku należy odtworzyć zachowane pliki w ich oryginalnych miejscach.

Teraz zadanie dla czytelnika:

Czy w czasie pracy nad swoją aplikacją pamiętałeś o sporządzaniu kopii zapasowych? Jeśli nie, zrób to zaraz i zapisz w co najmniej dwa różne miejsca, aby uchronić się zarówno przed uszkodzeniem pliku swojej aplikacji jak i uszkodzeniem nośnika danych.

 

Defragmentacja (kompaktyfikacja) bazy danych i naprawa uszkodzonej bazy danych

1. W wyniku powtarzających się operacji usuwania obiektów bazy danych, alokowana pamięć może ulec podzieleniu na dużą liczbę małych fragmentów. Proces kompaktyfikacji nazywany też defragmentacją powoduje zmniejszenie rozmiaru pliku bazy danych i przyśpieszenie działania aplikacji.

2. W pewnych sytuacjach plik z bazą danych może ulec uszkodzeniu (np. przy wyłączeniu komputera bez zamknięcia bazy danych). Przy ponownym włączeniu MS Access, program pyta się czy przeprowadzić automatycznie próbę naprawy uszkodzonej bazy danych. W pewnych sytuacjach MS Access może nie wykryć uszkodzenia i wtedy należy samemu zainicjować próbę naprawy bazy danych:

Narzędzia -> Narzędzia bazy danych -> Kompaktuj i napraw bazę danych - Compact and Repair Database

Teraz zadanie dla czytelnika:

Dokonaj kompaktyfikacji swojej zaliczeniowej aplikacji i zobacz o ile zmalał rozmiar jej pliku .mdb.

 

Konwersja bazy danych z wcześniejszej wersji MS Access

Mamy dwie możliwości skorzystania w nowej wersji programu MS Access z bazy danych przygotowanej w starej wersji programu MS Access:

  1. korzystać ze starej bazy bez jej konwertowania, ale wtedy nie można zmieniać jej struktury,
  2. dokonać konwersji ale wtedy z otrzymanej bazy danych nie da się już korzystać w starej wersji MS Access.

Narzędzia -> Narzędzia bazy danych -> Konwertuj bazę danych - Convert Database
 

Szyfrowanie i odszyfrowanie pliku bazy danych

Zaszyfrowanie uniemożliwia odczytanie danych z pliku bazy danych poza programem MS Access. Sam program MS Access może działać dla zaszyfrowanej bazy danych 10-15% wolniej. W chwili szyfrowania baza danych powinna być zamknięta.

Narzędzia -> Zabezpieczenia -> Zaszyfruj/Odszyfruj bazę danych - Encypt/Decrypt Database
 

Dokumentacja bazy danych

Narzędzia -> Analizuj -> Dokumentator (Documentator)

Tworzony jest raport dotyczący wybranych obiektów bazy danych - albo do wydrukowania na drukarce albo do zapisu do pliku tekstowego lub do tabeli w bazie danych.

Teraz zadanie dla czytelnika:

Korzystając z Dokumentatora sporządź dokumentację swojej zaliczeniowej aplikacji.

 

Obiekty systemowe

Narzędzia -> Opcje -> Widok:  włączyć Obiekty systemowe

Opcja ta umożliwia dostęp do systemowych tabel przechowujących informacje o bazie danych nazywanych słownikiem danych (metadanymi).

Teraz zadanie dla czytelnika:

Obejrzyj obiekty systemowe w Twojej zaliczeniowej aplikacji.

 

Replikacja bazy danych

W środowisku rozproszonym część danych wspólna - rzadko zmieniająca się - jest replikowana do poszczególnych węzłów sieci; część danych - lokalna dla konkretnego węzła i nie używana poza nim - nie zostaje replikowana. W ten sposób następuje przybliżenie danych do końcowego użytkownika, co ułatwia do nich dostęp przy dużej liczbie transakcji/zapytań w sieci. W sytuacji braku połączenia w sieci mamy gwarancję dostępu do wspólnych danych firmy.

Replikę bazy danych można zastosować do wykonania pracochłonnych raportów/kopii zapasowych bazy danych blokujących normalną pracę z bazą danych.

Replikacje są natomiast niewskazane, gdy:

1. gdy dane muszą być zawsze aktualne,
2. gdy na replikach jest wykonywane dużo transakcji.

Oto model przyjęty w MS Access:

baza danych - wzorzec synchronizowana ze zbiorem baz danych - replik.

W replikach nie można zmieniać struktury obiektów bazy danych (ale można tworzyć i zmieniać lokalne obiekty replik).

Aby utworzyć replikę z bazy danych - wzorzec wywołaj:

Narzędzia -> Replikacja -> Utwórz replikę - Create Replica

Aby zsynchronizować replikę ze wzorcem, wywołaj z bazy danych - repliki:

Narzędzia -> Replikacja -> Synchronizuj - Synchronize Now

W przypadku konfliktów, należy ręcznie rozwiązać kolizje - dokonując kolejno wyboru jednego z dwóch rekordów pozostających w kolizji (we wzorcu i replice). Rozmiar replikowanej bazy danych istotnie się zwiększa i działa ona istotnie wolniej.
 

Praca w sieci - model klient-serwer

Oto zalety podzielenia aplikacji na dwie części klienta i serwer:

1.  zmniejszenie obciążenia sieci;
2.  łatwiejsze zarządzanie rozdzielonymi bazami danych (administrator - danymi; użytkownik swoją częścią aplikacji - może ją zmieniać).

Dzielimy plik bazy danych MS Access na dwa pliki .mdb zawierające odpowiednio:

Tworząc aplikacją bazodanową w modelu klient-serwer możemy albo ręcznie zbudować tabele w jednym pliku .mdb i przyłączyć je do aplikacji znajdującej się w osobnym pliku albo najpierw zbudować wszystkie obiekty w jednym pliku .mdb i wykonać:

Narzędzia -> Dodatki -> Rozdzielacz bazy danych - Database Splitter

Poważną alternatywę stanowi możliwość przekazania tabel i kwerend do serwera bazy danych – MS SQL Server przy użyciu:

Narzędzia -> Narzędzia bazy danych -> Kreator rozbudowy - Upsizing Wizard

Po wykonaniu "rozbudowy" mamy do czynienia z projektem Microsoft Access a nie z bazą danych Microsoft Access jak do tej pory. Interfejs użytkownika zawierający formularze, raporty i moduły pozostaje w bazie danych MS Access, natomiast odpowiedzialność za utrzymywanie danych przejmuje serwer bazy danych. Dla porównania limit w samym MS Access na dane wynosi 2GB; natomiast w MS SQL Server wynosi 2TeraB.

Teraz zadanie dla czytelnika:

Jeśli jeszcze tego nie zrobiłeś podziel swoją aplikację na część klienta i część serwera. Zrób to raz ręcznie a raz korzystając z Rozdzielacza bazy danych.

 

Blokowanie danych

Blokowanie danych ma dwa aspekty:

1. Wybór trybu współdzielenia lub wyłączności przy użytkowaniu bazy danych przez wielu użytkowników.

     Narzędzia -> Opcje -> Zaawansowane - > Domyślny tryb otwierania - Default open mode:

Wyłączność powinna być zarezerwowana dla czynności administracyjnych jak np. szyfrowanie, defragmentacja.

2. Na poziomie formularzy, raportów i kwerend funkcjonalnych jest możliwość wyboru ustawienia właściwości Blokowanie rekordów (Record Locks). Oto opcje:

Zabezpieczanie bazy danych

W MS Access bazę danych można zabezpieczyć na dwa sposoby:

Dodatkowo,

Teraz zadanie dla czytelnika:

Dokonaj konwersji swojej zaliczeniowej aplikacji na format MDE. Sprawdź, które opcje są teraz niedostępne dla użytkownika i zobacz o ile zmalał rozmiar jej pliku (teraz jest to plik .mde).

 

Ustalenie hasła

    Narzędzia -> Zabezpieczenia -> Ustaw hasło bazy danych - Set Database Password

Hasło do otwarcia bazy danych jest najprostszym sposobem jej zabezpieczenia. Po ustaleniu hasła, przy każdym otwarciu bazy danych pojawia się okno dialogowe z pytaniem o hasło. Metoda ta jest pewna bo hasło jest szyfrowane i nie można go odczytać - przez bezpośrednie odczytanie pliku bazy danych. Jednak zabezpieczenie ogranicza się tylko do uprawnienia otwierania bazy danych. Jest to zadawalające rozwiązanie dla bazy danych używanej wspólnie przez małą grupę użytkowników.

Nie należy zabezpieczać hasłem bazy danych, która będzie replikowana, ponieważ uniemożliwi to synchronizację replik.

Teraz zadanie dla czytelnika:

Czy chcesz aby osoby niepowołane oglądały Twoją aplikację? Wprowadź hasło, abyś tylko Ty i zaufane osoby, którym użyczysz hasła, mogły z niej korzystać.

 

Zabezpieczenia na poziomie użytkownika

Przy zabezpieczeniu na poziomie użytkownika podczas uruchamiania programu każdy użytkownik loguje się podając swój identyfikator i  hasło.

Zarządzanie uprawnieniami użytkowników opiera się na konstrukcji grupy użytkowników. Tworzy się grupy, do których zalicza się użytkowników. Grupom przyznaje się uprawnienia. Konkretny użytkownik posiada uprawnienia przyznane grupom, do których został zaliczony.

Istnieją dwie domyślne grupy: Administratorzy i Użytkownicy. Można zdefiniować również inne.

Użytkownikom udziela się uprawnień regulujących dostęp do operacji i do obiektów bazy danych. Na przykład, członkowie grupy Użytkownicy mogliby mieć uprawnienie do oglądania, wstawiania i modyfikowania danych w tabeli Klienci, ale nie do zmiany jej projektu. Można im zezwolić tylko na oglądanie danych w tabeli Zamówienia i pozbawić ich całkowicie dostępu do tabeli Wypłaty. Członkowie grupy Administratorzy mają pełny dostęp do wszystkich obiektów bazy danych. Można utworzyć własny system kontroli dostępu do obiektów bazy danych, tworząc własne konta grupowe z odpowiednimi uprawnieniami, a następnie dodając do nich użytkowników.
 

Tworzenie kont użytkowników i kont grupowych oraz przyznawanie uprawnień

Założenie indywidualnego konta lub konta grupowego odbywa się w następujący sposób:

Narzędzia -> Zabezpieczenia -> Konta użytkowników i grup - User and group accounts

Po określeniu hasła dla konta Admin MS Access będzie wymagał od użytkowników podawania identyfikatora i hasła.

Określenie uprawnień użytkowników/grup do obiektów bazy danych odbywa się w następujący sposób:

Narzędzia -> Zabezpieczenia -> Uprawnienia użytkowników i grup - User and Group Permissions

 

Aby uprościć zarządzanie uprawnieniami, zaleca się przypisywanie uprawnień tylko grupom (a nie użytkownikom) i dodawanie użytkowników do odpowiednich grup.

Użytkownicy, grupy i uprawnienia w SQL

Zakładanie grup i użytkowników oraz przyznawanie im uprawnień może być zrealizowane za pomocą instrukcji SQL:

gdzie uprawnienie to: SELECT, INSERT, UPDATE, DELETE, itd.

Można też odwoływać przyznane uprawnienia:

Tworzenie nowej grupy roboczej

Grupa robocza jest grupą użytkowników w środowisku współbieżnym, którzy wspólnie używają dane. Przy stosowaniu zabezpieczeń na poziomie użytkownika członkowie grupy roboczej są zapisani w postaci kont użytkowników i grup przechowywanych w tzw. pliku informacyjnym grupy roboczej. Hasła są także przechowywane w pliku informacyjnym. Natomiast uprawnienia są przechowywane w bazie danych. Podczas instalacji MS Access tworzona jest automatycznie domyślna grupa robocza identyfikowana przez domyślny plik informacyjny grupy roboczej - system.mdw.

Używając programu Wrkgadm.exe (administratora grupy roboczej) można:


Podsumowanie

Rozpatrzyliśmy dwa powiązane ze sobą problemy: dostrajania oraz administrowania bazą danych na przykładzie MS Access.

Jeśli chodzi o najważniejsze obowiązki administratora bazy danych to są nimi: sporządzanie kopii zapasowych i odtwarzanie bazy danych po awarii, kompaktyfikacja i naprawa pliku bazy danych w razie jego uszkodzenia, szyfrowanie i odszyfrowanie pliku bazy danych, dokumentowanie bazy danych, zarządzanie replikacjami bazy danych oraz zabezpieczanie bazy danych przed nieuprawnionym użyciem.
 


Słownik

dostrajanie aplikacji bazodanowej - proces obejmujący kroki, które mogą ulepszyć lub przyśpieszyć działanie aplikacji bazodanowej.
format MDE - format zapisu bazy danych MS Access, przy którym wszystkie moduły zostają skompilowane, baza danych zostaje skompaktyfikowana, następuje optymalizacja wykorzystania pamięci i działania aplikacji bazy danych, niepotrzebne części (jak kod źródłowy) zostają usunięte.
kompaktyfikacja bazy danych - w wyniku powtarzających się operacji usuwania obiektów bazy danych, alokowana pamięć może ulec podzieleniu na dużą liczbę małych fragmentów. Proces kompaktyfikacji nazywany też defragmentacją powoduje zmniejszenie rozmiaru pliku bazy danych i przyśpieszenie działania aplikacji.
kopia zapasowa bazy danych - kopia pliku .mdb bazy danych łącznie ze stowarzyszonymi z nim plikami zapisana w bezpiecznym miejscu.
odtwarzanie bazy danych po awarii - w przypadku bazy danych MS Access przepisanie wszystkich plików jej kopii zapasowej w miejsce na dysku, gdzie przed awarią znajdowały się oryginalne pliki bazy danych.
szyfrowanie bazy danych - zaszyfrowanie pliku bazy danych tak aby nie można go było odczytać poza programem MS Access.
dokumentacja bazy danych - raport dotyczący wszystkich lub wybranych obiektów bazy danych.
obiekty systemowe bazy danych - systemowe tabele przechowujące informacje o bazie danych nazywane słownikiem danych (metadanymi).
replikacja bazy danych - baza danych zawierająca kopie obiektów, których oryginały znajdują się w bazie danych – wzorcu.
model klient-serwer - podział aplikacji bazodanowej MS Access na dwie części: część klienta obejmującą interfejs użytkownika oraz część serwera obejmującą przechowywanie i udostępnianie danych w bazie danych. Są dwie podstawowe możliwości: albo klient i serwer są bazami danych MS Access albo klient jest bazą danych MS Access a serwer jest bazą danych MS SQL Server.
blokowanie danych - ograniczenie innym użytkownikom dostępu do obiektu, gdy jakiś użytkownik zaczyna korzystać z obiektu odczytując go lub zapisując.
zabezpieczanie bazy danych - ograniczenie dostępu do bazy danych tylko do uprawnionych do tego użytkownikom.
użytkownik bazy danych - osoba posiadająca uprawnienie do korzystania z bazy danych najczęściej posiadająca swój identyfikator użytkownika i hasło, legitymująca się nimi w trakcie logowania.
grupa użytkowników bazy danych - rozpoznawana przez system bazodanowy grupa użytkowników mająca ten sam zbiór uprawnień do korzystania z obiektów bazy danych.
uprawnienie - prawo przyznawane użytkownikowi do wykonywania określonych operacji np. odczytu na określonych obiektach bazy danych np. na tabeli Klienci.
grupa robocza - grupa użytkowników w środowisku współbieżnym MS Windows, którzy wspólnie używają dane.


Strona przygotowana przez Lecha Banachowskiego - 06/16/03 .