Oracle9i. Administrowanie bazami danych od podstaw

36
Wydawnictwo Helion ul. Chopina 6 44-100 Gliwice tel. (32)230-98-63 e-mail: [email protected] PRZYK£ADOWY ROZDZIA£ PRZYK£ADOWY ROZDZIA£ IDZ DO IDZ DO ZAMÓW DRUKOWANY KATALOG ZAMÓW DRUKOWANY KATALOG KATALOG KSI¥¯EK KATALOG KSI¥¯EK TWÓJ KOSZYK TWÓJ KOSZYK CENNIK I INFORMACJE CENNIK I INFORMACJE ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW INFORMACJE O NOWOCIACH ZAMÓW CENNIK ZAMÓW CENNI K CZYTELNIA CZYTELNIA FRAGMENTY KSI¥¯EK ONLINE FRAGMENTY KSI¥¯EK ONLINE SPIS TRECI SPIS TRECI DODAJ DO KOSZYKA DODAJ DO KOSZYKA KATALOG ONLINE KATALOG ONLINE Oracle9i. Administrowanie bazami danych od podstaw Autorzy: Marlene Theriault, Rachel Carmichael, James Viscusi T³umaczenie: Micha³ ¯yliñski (rozdzia³y 0 – 8), Leszek Mosingiewicz (rozdzia³y 9 – 13, dodatki) ISBN: 83-7361-062-6 Format: B5, stron: oko³o 480 Ksi¹¿ka „Oracle9i. Administrowanie bazami danych od podstaw” krok po kroku wyjania sposoby efektywnego administrowania baz¹ danych Oracle. Poznasz dziêki niej najwa¿niejsze nowe funkcje baz danych Oracle9, zaznajomisz siê z zadaniami czekaj¹cymi administratora baz danych, a tak¿e poznasz wiele cennych wskazówek, u³atwiaj¹cych codzienn¹ pracê z Oraclem. Jeli jeszcze nie mia³e stycznoci z zaawansowanymi systemami bazodanowymi, znalaz³e w³anie doskona³e ród³o informacji, dziêki któremu zdobêdziesz wiele poszukiwanych na rynku pracy umiejêtnoci. Ksi¹¿ka jest idealnym ród³em wiedzy dla pocz¹tkuj¹cych administratorów na temat: • Instalacji i konfiguracji wydajnej bazy danych Oracle • Kontroli dzia³ania bazy danych za pomoc¹ perspektyw DBA_ i V$ • Wykorzystania ró¿nych poziomów ochrony danych • Monitorowania i dostrajania bazy danych • Stosowania narzêdzi i programów Oracle • Utrzymywania niezawodnoci i sta³ego dostêpu do bazy danych • Sposobów zapewnienia maksymalnej wydajnoci serwera bazodanowego • Wykonywania kopii zapasowych i odtwarzania bazy danych Autorzy: Marlene Theriault od 19 lat jest administratork¹ baz danych i pracuje z produktami firmy Oracle od ukazania siê wersji 2.0. Jest autork¹ wielu poczytnych ksi¹¿ek na ich temat. Wystêpowa³a jako prelegent i prowadzi³a warsztaty na organizowanych na ca³ym wiecie konferencjach u¿ytkowników Oracle. Rachel Carmichael od 10 lat jest administratork¹ baz danych. Pe³ni rolê przewodnicz¹cej grupy tematycznej administratorów baz danych (DBA Special Interest Group) oraz koordynuje spotkania u¿ytkowników oprogramowania Oracle w Nowym Yorku. James Viscusi od 12 lat pracuje z relacyjnymi bazami danych, a od 8 lat ma stycznoæ z produktami Oracle. Obecnie jest pracownikiem firmy Oracle, gdzie zajmuje siê zagadnieniami wysokiej dostêpnoci systemów.

description

Książka "Oracle9i. Administrowanie bazami danych od podstaw" krok po kroku wyjaśnia sposoby efektywnego administrowania bazą danych Oracle. Poznasz dzięki niej najważniejsze nowe funkcje baz danych Oracle9, zaznajomisz się z zadaniami czekającymi administratora baz danych, a także poznasz wiele cennych wskazówek, ułatwiających codzienną pracę z Oraclem.Jeśli jeszcze nie miałeś styczności z zaawansowanymi systemami bazodanowymi, znalazłeś właśnie doskonałe źródło informacji, dzięki któremu zdobędziesz wiele poszukiwanych na rynku pracy umiejętności.Książka jest idealnym źródłem wiedzy dla początkujących administratorów na temat: * Instalacji i konfiguracji wydajnej bazy danych Oracle * Kontroli działania bazy danych za pomocą perspektyw DBA_ i V$ * Wykorzystania różnych poziomów ochrony danych * Monitorowania i dostrajania bazy danych * Stosowania narzędzi i programów Oracle * Utrzymywania niezawodności i stałego dostępu do bazy danych * Sposobów zapewnienia maksymalnej wydajności serwera bazodanowego * Wykonywania kopii zapasowych i odtwarzania bazy danych

Transcript of Oracle9i. Administrowanie bazami danych od podstaw

Page 1: Oracle9i. Administrowanie bazami danych od podstaw

Wydawnictwo Helionul. Chopina 644-100 Gliwicetel. (32)230-98-63e-mail: [email protected]

PRZYK£ADOWY ROZDZIA£PRZYK£ADOWY ROZDZIA£

IDZ DOIDZ DO

ZAMÓW DRUKOWANY KATALOGZAMÓW DRUKOWANY KATALOG

KATALOG KSI¥¯EKKATALOG KSI¥¯EK

TWÓJ KOSZYKTWÓJ KOSZYK

CENNIK I INFORMACJECENNIK I INFORMACJE

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW INFORMACJEO NOWO�CIACH

ZAMÓW CENNIKZAMÓW CENNIK

CZYTELNIACZYTELNIA

FRAGMENTY KSI¥¯EK ONLINEFRAGMENTY KSI¥¯EK ONLINE

SPIS TRE�CISPIS TRE�CI

DODAJ DO KOSZYKADODAJ DO KOSZYKA

KATALOG ONLINEKATALOG ONLINE

Oracle9i. Administrowaniebazami danych od podstawAutorzy: Marlene Theriault,Rachel Carmichael, James ViscusiT³umaczenie: Micha³ ¯yliñski (rozdzia³y 0 – 8),Leszek Mosingiewicz (rozdzia³y 9 – 13, dodatki)ISBN: 83-7361-062-6 Format: B5, stron: oko³o 480

Ksi¹¿ka „Oracle9i. Administrowanie bazami danych od podstaw” krok po kroku wyja�nia sposoby efektywnego administrowania baz¹ danych Oracle. Poznasz dziêki niej najwa¿niejsze nowe funkcje baz danych Oracle9, zaznajomisz siê z zadaniami czekaj¹cymi administratora baz danych, a tak¿e poznasz wiele cennych wskazówek, u³atwiaj¹cych codzienn¹ pracê z Oraclem. Je�li jeszcze nie mia³e� styczno�ci z zaawansowanymi systemami bazodanowymi, znalaz³e� w³a�nie doskona³e �ród³o informacji, dziêki któremu zdobêdziesz wiele poszukiwanych na rynku pracy umiejêtno�ci.

Ksi¹¿ka jest idealnym �ród³em wiedzy dla pocz¹tkuj¹cych administratorów na temat:

• Instalacji i konfiguracji wydajnej bazy danych Oracle • Kontroli dzia³ania bazy danych za pomoc¹ perspektyw DBA_ i V$ • Wykorzystania ró¿nych poziomów ochrony danych • Monitorowania i dostrajania bazy danych • Stosowania narzêdzi i programów Oracle • Utrzymywania niezawodno�ci i sta³ego dostêpu do bazy danych • Sposobów zapewnienia maksymalnej wydajno�ci serwera bazodanowego • Wykonywania kopii zapasowych i odtwarzania bazy danych

Autorzy:

Marlene Theriault od 19 lat jest administratork¹ baz danych i pracuje z produktami firmy Oracle od ukazania siê wersji 2.0. Jest autork¹ wielu poczytnych ksi¹¿ek na ich temat. Wystêpowa³a jako prelegent i prowadzi³a warsztaty na organizowanych na ca³ym �wiecie konferencjach u¿ytkowników Oracle.

Rachel Carmichael od 10 lat jest administratork¹ baz danych. Pe³ni rolê przewodnicz¹cej grupy tematycznej administratorów baz danych (DBA Special Interest Group) oraz koordynuje spotkania u¿ytkowników oprogramowania Oracle w Nowym Yorku.

James Viscusi od 12 lat pracuje z relacyjnymi bazami danych, a od 8 lat ma styczno�æ z produktami Oracle. Obecnie jest pracownikiem firmy Oracle, gdzie zajmuje siê zagadnieniami wysokiej dostêpno�ci systemów.

Page 2: Oracle9i. Administrowanie bazami danych od podstaw

Spis treści

Podziękowania.......................................................................................11

Wstęp ...................................................................................................15

Część I Podstawy..............................................................................17

Rozdział 1. Rola administratora bazy danych............................................................19Sposoby komunikacji z bazą danych............................................................................... 19Kim jest administrator bazy danych Oracle i czym się zajmuje? ........................................ 20

Przykład banku ....................................................................................................... 20Przechowywanie informacji...................................................................................... 22Czym jest baza danych Oracle? ................................................................................ 22Czy nadajesz się na administratora bazy danych? ....................................................... 23

Typy administratorów baz danych .................................................................................. 27Zadania .................................................................................................................. 28Rozwój zawodowy.................................................................................................. 31

Co musisz wiedzieć o aplikacji SQL*Plus ....................................................................... 33Uruchamianie aplikacji SQL*Plus............................................................................. 34Polecenia wpływające na środowisko pracy SQL*Plus ............................................... 36Polecenia wspomagające kolekcjonowanie danych..................................................... 40Komendy przydatne podczas tworzenia raportów....................................................... 43

Rozdział 2. Konstrukcja bazy danych .......................................................................49Obiekty logiczne i fizyczne ............................................................................................ 49

Obiekty fizyczne ..................................................................................................... 51Parę słów o systemach operacyjnych......................................................................... 51Systemy operacyjne a baza danych ........................................................................... 53Oprogramowanie firmy Oracle ................................................................................. 54

Fizyczne składniki bazy danych Oracle ........................................................................... 54Pliki z danymi ......................................................................................................... 55Plik z parametrami................................................................................................... 57Pliki dziennika ........................................................................................................ 59Pliki zapasowe ........................................................................................................ 60

Logiczna struktura bazy danych ..................................................................................... 61Przestrzenie tabel .................................................................................................... 61Tabele .................................................................................................................... 62Indeksy .................................................................................................................. 66

Page 3: Oracle9i. Administrowanie bazami danych od podstaw

6 Oracle9i. Administrowanie bazami danych od podstaw

Wyzwalacze............................................................................................................ 67Perspektywy........................................................................................................... 68Perspektywy zmaterializowane ................................................................................. 69Segmenty wycofań i przestrzeń tabel wycofań ........................................................... 70Segmenty tymczasowe............................................................................................. 73Role ....................................................................................................................... 74Pakiety, procedury i funkcje ..................................................................................... 77Sekwencje .............................................................................................................. 77Przywileje............................................................................................................... 78

Rozdział 3. Przyglądanie się pracy bazy danych........................................................81Perspektywy słownika danych........................................................................................ 81Perspektywy typu DBA_ ............................................................................................... 82

DBA_TABLESPACES............................................................................................ 83DBA_DATA_FILES ............................................................................................... 87DBA_SEGMENTS ................................................................................................. 90DBA_EXTENTS .................................................................................................... 92DBA_ROLLBACK_SEGS....................................................................................... 94DBA_UNDO_EXTENTS........................................................................................ 97DBA_OBJECTS ..................................................................................................... 98DBA_TEMP_FILES ............................................................................................. 100DBA_TABLES..................................................................................................... 101DBA_TAB_COLUMNS........................................................................................ 104DBA_INDEXES ................................................................................................... 108DBA_IND_COLUMNS......................................................................................... 111DBA_CONSTRAINTS.......................................................................................... 113DBA_CONS_COLUMNS...................................................................................... 117

Rozdział 4. Przyglądanie się pracy bazy danych za pomocą perspektyw typu V$ ......119Ogólna informacja o perspektywach typu V$................................................................. 120

Spojrzenie na perspektywy typu V$ ........................................................................ 121Statyczne perspektywy V$ na poziomie instancji............................................................ 123

V$DATABASE .................................................................................................... 124V$DATAFILE...................................................................................................... 127V$DATAFILE_HEADER...................................................................................... 129V$DBFILE........................................................................................................... 131V$FIXED_TABLE................................................................................................ 131V$INSTANCE...................................................................................................... 133V$PARAMETER.................................................................................................. 135V$SGA ................................................................................................................ 136V$TEMPFILE...................................................................................................... 137

Rozdział 5. Zabezpieczanie bazy danych ................................................................139Perspektywy związane z bezpieczeństwem bazy danych................................................. 139

DBA_USERS ....................................................................................................... 140DBA_PROFILES.................................................................................................. 143DBA_ROLES ....................................................................................................... 145DBA_ROLE_PRIVS ............................................................................................. 147DBA_SYS_PRIVS................................................................................................ 149DBA_TS_QUOTAS.............................................................................................. 151DBA_TAB_PRIVS ............................................................................................... 152DBA_SYNONYMS .............................................................................................. 156DBA_VIEWS ....................................................................................................... 158

Page 4: Oracle9i. Administrowanie bazami danych od podstaw

Spis treści 7

Rozdział 6. Strojenie bazy danych..........................................................................163Perspektywy V$ instancji wykorzystywane do strojenia bazy danych .............................. 164

V$FILESTAT....................................................................................................... 165V$LATCH ........................................................................................................... 167V$LIBRARYCACHE............................................................................................ 167V$LOCK.............................................................................................................. 171V$LOCKED_OBJECT.......................................................................................... 176V$PROCESS........................................................................................................ 178V$SESSION......................................................................................................... 180V$ROLLSTAT..................................................................................................... 183V$ROLLNAME.................................................................................................... 185V$UNDOSTAT.................................................................................................... 186V$ROWCACHE................................................................................................... 187V$SGASTAT ....................................................................................................... 189V$STATNAME.................................................................................................... 191V$SYSSTAT........................................................................................................ 192V$SYSTEM_EVENT............................................................................................ 193V$WAITSTAT..................................................................................................... 195

Część II Zarządzanie bazą danych ....................................................197

Rozdział 7. Instalacja, konfiguracja i przygotowanie bazy danych do pracy..............199Instalacja oprogramowania........................................................................................... 199

Aktualizacja a migracja.......................................................................................... 200Etapy instalacji oprogramowania .................................................................................. 203

Przygotowanie ...................................................................................................... 203Kilka słów o demonstracyjnej bazie danych............................................................. 204Decyzje związane z instalacją ................................................................................. 205

Tworzenie bazy danych............................................................................................... 208Korzystanie z aplikacji Oracle Database Configuration Assistant ............................... 208Po instalacji .......................................................................................................... 216Gdy baza danych jest już gotowa... ......................................................................... 217

Ilość i rozmieszczenie przestrzeni tabel ......................................................................... 219Przestrzeń tabel SYSTEM...................................................................................... 220Przestrzeń tabel RBS lub UNDO ............................................................................ 221Przestrzeń tabel TEMP lub TEMPORARY.............................................................. 223Przestrzeń tabel TOOLS ........................................................................................ 223Przestrzeń tabel USERS......................................................................................... 223Przestrzenie tabel DATA i INDEX.......................................................................... 224Określanie rozmiaru przestrzeni tabel ...................................................................... 225Przestrzenie tabel i parametr storage........................................................................ 226

Plik Init.ora i SPFILE.ora ............................................................................................ 229Analiza zawartości pliku SPFILE ........................................................................... 229

Instancja a baza danych ............................................................................................... 232Budowa obszaru SGA ................................................................................................. 233

Definiowanie SGA ................................................................................................ 233Kilka słów o tabelach demonstracyjnych ....................................................................... 236

Rozdział 8. Ogólne rozważania na temat bazy danych .............................................237Zasilanie przestrzeni tabel i ich utrzymanie.................................................................... 237

Tworzenie i usuwanie przestrzeni tabel.................................................................... 238Umieszczanie obiektów w przestrzeni tabel ............................................................. 242Zmiana rozmiaru przestrzeni tabel........................................................................... 246

Page 5: Oracle9i. Administrowanie bazami danych od podstaw

8 Oracle9i. Administrowanie bazami danych od podstaw

Korzystanie z mechanizmu autoextend .................................................................... 251Trwałe i tymczasowe przestrzenie tabel ................................................................... 253Przenaszalne przestrzenie tabel ............................................................................... 254

Dokumentowanie bazy danych..................................................................................... 256Tworzenie obiektów w bazie danych............................................................................. 258

Tworzenie tabel..................................................................................................... 258Parametry związane z tworzeniem tabel relacyjnych................................................. 260Przykład tabeli złożonej ......................................................................................... 261Tworzenie indeksów.............................................................................................. 262Tworzenie użytkowników ...................................................................................... 264

Rozdział 9. Codzienne czynności............................................................................267Obserwacja pracy bazy danych..................................................................................... 267

Dzienniki ostrzeżeń ............................................................................................... 268LISTENER.LOG .................................................................................................. 270Status Redo Log.................................................................................................... 272Fragmentacja ........................................................................................................ 273Segmenty wycofania.............................................................................................. 277Monitorowanie rozmiaru segmentu wycofania ......................................................... 278Monitorowanie rozmiaru obszaru segmentu wycofania ............................................. 280Monitorowanie obszarów....................................................................................... 282Pozostała przestrzeń .............................................................................................. 285Pliki śladu............................................................................................................. 291

Status sesji użytkownika .............................................................................................. 294Monitorowanie modyfikacji obiektów........................................................................... 294

Część III Ochrona baz danych............................................................297

Rozdział 10. Bezpieczeństwo bazy danych Oracle.....................................................299Wewnętrzne bezpieczeństwo bazy danych..................................................................... 300

Uprawnienia ......................................................................................................... 301Tworzenie ról........................................................................................................ 305Tworzenie synonimów........................................................................................... 309Tworzenie perspektyw........................................................................................... 311

Bezpieczeństwo aplikacji ............................................................................................. 312Zabezpieczenie aplikacji ........................................................................................ 312Wykorzystywanie Wirtualnej Prywatnej Bazy Danych ............................................. 313Tworzenie VPD .................................................................................................... 315Szyfrowanie kolumn.............................................................................................. 321Szyfrowanie kolumn danych................................................................................... 321

Obserwowanie ............................................................................................................ 323Obserwowanie logowania....................................................................................... 324Obserwacja działań................................................................................................ 325Obserwacja obiektów............................................................................................. 326Ochrona zapisu obserwacji ..................................................................................... 328

Zewnętrzne bezpieczeństwo bazy danych...................................................................... 329Bezpieczeństwo sieciowe ....................................................................................... 329Oracle Net i Oracle Advenced Security Option......................................................... 329

Rozdział 11. Dostępność baz danych .......................................................................331Koncepcja dostępności ................................................................................................ 331Przed czym należy się zabezpieczyć? ............................................................................ 333

Problemy fizyczne................................................................................................. 334Problemy logiczne ................................................................................................. 334

Page 6: Oracle9i. Administrowanie bazami danych od podstaw

Spis treści 9

Typy odtwarzania........................................................................................................ 335Odtwarzanie danych .............................................................................................. 335Odtwarzanie instancji............................................................................................. 335Odtwarzanie nośnika.............................................................................................. 336

Typy archiwizacji........................................................................................................ 336Archiwizacja fizyczna............................................................................................ 336Menadżer przywracania (RMAN) ........................................................................... 339Logiczne kopie zapasowe (eksport)......................................................................... 343

Możliwości bazy danych.............................................................................................. 346Średni docelowy czas odzyskiwania (MTTR) .......................................................... 346Zapytanie retrospektywne (FlashBack Query) .......................................................... 347LogMiner ............................................................................................................. 349Replikacja............................................................................................................. 351

Rezerwowa baza danych Data Guard ............................................................................ 353Architektura i terminologia..................................................................................... 354Opcje konfiguracyjne Data Guard ........................................................................... 355Korzyści ze stosowania Data Guard ........................................................................ 355

Real Application Clusters (RAC).................................................................................. 357Real Application Clusters Guard................................................................................... 358Inne programy wspierające dostępność.......................................................................... 358

TAF (Transparent Application Failover) .................................................................. 358Zmiana struktury aktywnych obiektów.................................................................... 359Odnawialna alokacja przestrzeni ............................................................................. 359

Część IV Dostrajanie serwera ............................................................361

Rozdział 12. Wydajność serwera..............................................................................363Zarządzanie wydajnością ............................................................................................. 364

Reguła 80/20......................................................................................................... 364Czym jest czas odpowiedzi? ................................................................................... 365W czym tkwi problem?.......................................................................................... 366Czas odpowiedzi a przepustowość .......................................................................... 366

Transakcje krytyczne dla biznesu.................................................................................. 368Spojrzenie na transakcje......................................................................................... 368Definiowanie gwarantowanego poziomu usług......................................................... 372Podsumowanie kroków początkowych.................................................................... 374

Diagnozowanie problemu............................................................................................. 374Szybko i zwięźle: działania na pierwsze pięć minut .................................................. 374Zadawanie właściwych pytań ................................................................................. 375Ocena odpowiedzi pracowników firmy XYZ ........................................................... 378Gdzie należy rozpocząć poszukiwanie? Dostrajanie serwera bazy danych .................. 379Obliczanie całkowitego czasu odpowiedzi ............................................................... 380

Dostrajanie całkowitego czasu odpowiedzi .................................................................... 382Dekompozycja czasu procesora .............................................................................. 382Analiza czasu oczekiwania ..................................................................................... 385Rozwiązanie problemu firmy XYZ ......................................................................... 397

Typowe przyczyny problemów wydajnościowych.......................................................... 397Błędy aplikacji i projektu bazy danych.................................................................... 398Nieefektywny rozkład plików danych i konfiguracji składowania .............................. 398Nieodpowiednia wartość parametru db_block_size aplikacji...................................... 398Niewłaściwe ustawienie obiektów bazy danych........................................................ 399Nieodpowiednie rozmiary i liczba segmentów wycofywania ..................................... 400Źle zaprojektowana aplikacja.................................................................................. 400

Page 7: Oracle9i. Administrowanie bazami danych od podstaw

10 Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 13. Narzędzia dostarczane przez Oracle ......................................................405Dostrajanie SQL przy użyciu Explain Plan, TKPROF i Autotrace.................................... 406

Optymalizator ....................................................................................................... 406Dostrajanie SQL.................................................................................................... 409Explain Plan ......................................................................................................... 412Narzędzie do śledzenia wykonywania instrukcji SQL (TKPROF).............................. 413Autotrace.............................................................................................................. 417

Wykorzystanie Oracle Enterprise Manager (OEM)......................................................... 418Podstawowe możliwości OEM ............................................................................... 419Opcje OEM do administrowania bazą danych .......................................................... 422Inne dostępne pakiety ............................................................................................ 423

STATSPACK............................................................................................................. 424DBMS_STATS .......................................................................................................... 431Wykorzystanie przechowywanych szkiców ................................................................... 433

Implementacja szkiców przechowywanych.............................................................. 433

Dodatki............................................................................................ 435

Dodatek A Słownik ...............................................................................................437

Dodatek B Zasoby................................................................................................451Jak zostać administratorem bazy danych (DBA)............................................................. 451

O szkoleniu........................................................................................................... 451Administrator w poszukiwaniu pracy ...................................................................... 453

Program Oracle Certified Professional........................................................................... 454Test Oracle Certified Professional (OCA/OCP/OCM)............................................... 454

MetaLink.................................................................................................................... 459Technet...................................................................................................................... 460Kilka interesujących stron w Internecie ......................................................................... 461

Skorowidz............................................................................................463

Page 8: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9.

Codzienne czynności

Pomyślmy o czynnościach wykonywanych w codziennym życiu. Codziennie wstaje-my o tej samej godzinie, myjemy zęby, bierzemy prysznic, jemy śniadanie. W drodze dopracy zatrzymujemy się i kupujemy gazetę i filiżankę kawy. Jeździmy tym samym po-ciągiem lub autobusem. Jeśli chodzimy do szkoły, zajęcia odbywają się zgodnie z usta-lonym planem. Raz w tygodniu robimy większe zakupy i pranie. Raz w miesiącu mo-żemy pójść do fryzjera. Co roku odwiedzamy dentystę i kontrolujemy stan technicznysamochodu. Być może twoje życie nie jest aż tak uporządkowane, ale ludzie ulegająprzyzwyczajeniom — jeżeli masz stałą pracę, to działasz zgodnie z pewnymi zasadamii procedurami.

Uważamy, że podobnie jak w codziennym życiu, w pracy administratora bazy danychobowiązują pewne zasady działania. Poniższe procedury i procesy informują o poten-cjalnych problemach, tak aby możliwe było podjęcie działań, zanim sprawy przybiorązły obrót. Wspaniale jest być profesjonalnym DBA. Nie tylko zwiększa się szansa po-siadania płynnie pracującej bazy danych, lecz maleje również liczba weekendów spę-dzanych w pracy.

Jednocześnie zyskujemy pewność, że drobnostki nie urosną do rangi poważnych pro-blemów.

W niniejszym rozdziale pokazujemy skrypty pomagające w implementacji nowych zwy-czajów. Wykonanie każdego z nich wymaga podłączenia do bazy danych z uprawnie-niami użytkownika uprzywilejowanego. Należy wykorzystać konta ��� lub ������ z do-starczoną przez Oracle rolą DBA albo utworzyć użytkownika z rolą DBA lub jegoprzywilejami. Zalecamy utworzenie oddzielnego konta użytkownika do monitorowaniabazy danych.

Obserwacja pracy bazy danych

Dlaczego mamy obserwować zachowanie bazy danych w regularnych odstępach czasu?Czy nie prościej jest odbierać powiadomienia o ewentualnych błędach? Codzienna kon-trola pozwala właściwie określić:

� Jakie elementy bazy funkcjonują prawidłowo.

� Wzrost zajmowanej przestrzeni.

Page 9: Oracle9i. Administrowanie bazami danych od podstaw

268 Część II � Zarządzanie bazą danych

� Częstotliwość przełączania dzienników.

� Liczbę przyłączonych użytkowników.

Jeżeli wiadomo, jak powinna funkcjonować baza danych, to natychmiast można zauwa-żyć każdą nieprawidłowość w jej pracy i skorygować ją, zanim jeszcze pojawi się pro-blem. Niewątpliwie lepiej jest poinformować kierownictwo o fakcie dodania jeszczejednego pliku danych z powodu braku miejsca w głównych tabelach aplikacji, niż do-prowadzić do zatrzymania pracy całego działu, kiedy wolna przestrzeń, niezbędna dowzrostu tabel zostanie wyczerpana.

Przejdźmy do omówienia elementów, które należy monitorować.

Dzienniki ostrzeżeń

W czasie tworzenia bazy danych Oracle tworzy również dziennik, znany jako dziennikostrzeżeń (alert log), w którym zapisuje informacje dotyczące:

� Każdego uruchomienia bazy danych.

� Odzyskiwania przeprowadzonego w czasie startu bazy.

� Wyłączeń bazy danych.

� Momentów przełączenia dzienników (określanych jako przełączenia wątków).

� Wykorzystania podczas startu bazy parametrów (z pliku parametrówinicjujących) o wartościach innych niż domyślne.

� Wszystkich poleceń DDL zmieniających strukturę bazy, takich jak np. ����������������� ����� ��� �����������.

� Pojawiających się błędów alokacji przestrzeni ( ������� do �������).

� Występujących błędów wraz z położeniem i nazwą pliku błędu (określanegojako plik śladu z powodu rozszerzenia .trc). ORACLE tworzy te pliki w celupełnej dokumentacji błędów i dostarczenia pomocy technicznej przy lokalizacjiźródła błędów.

Jak widać, dziennik błędów zawiera sporo cennych, może nawet nadmiarowych infor-macji. Jego rozmiar nigdy nie zmniejsza się automatycznie, a nazwa w różnych syste-mach budowana jest w następujący sposób:

� �� !"#�$�%&�'( w systemach uniksowych,

� #�$�%��!"&�'( w systemie Windows 2000.

Inaczej mówiąc, informacje są stale dodawane do utworzonego razem z bazą danychdziennika za każdym razem, gdy wystąpi jedno z wymienionych wyżej zdarzeń. Jakmożna sobie wyobrazić, rozmiar tego piku, dla pracującej przez dłuższy czas bazy, mo-że być bardzo duży. Jeżeli zamierzamy sprawdzić wpisy z ostatniego tygodnia, a bazadanych pracowała powiedzmy przez rok, zadanie to może się okazać kłopotliwe. Cozatem zrobić w takiej sytuacji?

Page 10: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 269

Otóż istnieje pewna prawidłowość: Oracle utworzy nowy plik dziennika z identycznąnazwą w wypadku, gdy w czasie próby zapisu nie odnajdzie pliku. Oznacza to, że możnacodziennie zmieniać nazwę pliku dziennika i przenosić go do archiwum. Takie działaniewiąże się z dwoma korzyściami: bieżący plik dziennika błędów ma relatywnie mały roz-miar (zatem nie trzeba się martwić o wyczerpanie przestrzeni dyskowej), a jednocześniepoprzednie dzienniki są dostępne do przeglądania, np. w poszukiwaniu pewnych trendów.Mamy przygotowane zadanie wsadowe, uruchamiane co noc, które zmienia nazwy plikówdzienników wszystkich baz danych w ten sposób, że dodaje aktualną datę jako rozsze-rzenie pliku. Kolejne zadania jego procedur polegają na przesłaniu dzienników na naszekonta pocztowe, co umożliwia ich szybki przegląd w poszukiwaniu błędów takich jakproblemy z przestrzenią (błąd 600) lub zbyt szybkie przełączanie dzienników. BłędyOracle w zakresie 600 są określane jako błędy ������. Pomimo że nie zawsze sygnali-zują one uszkodzenie bazy danych, mogą być przejawem poważnych błędów wewnętrz-nych i powinny zostać potraktowane poważnie. Jeżeli nie wiemy, z jakim typem błędumamy do czynienia, możemy to sprawdzić, wykorzystując stronę Metalink.

W przypadku administrowania wieloma bazami danych analiza wszystkich dziennikówbłędów może zajmować zbyt wiele czasu. Nie zawsze można sobie pozwolić na analizęproblemów następnego dnia. Niektórzy administratorzy wypracowali procedury poszu-kujące błędów i wysyłające powiadomienia tylko w wypadku ich stwierdzenia. Jeżelipracujemy w środowisku, w którym błędy i przestoje są niedopuszczalne, można stwo-rzyć lub kupić program monitorujący występowanie błędów i wysyłający powiadomienia.Operacja sprawdzenia dziennika bazy danych zajmuje jedynie kilka minut dziennie. Nie-który z nas wykorzystują skrypty przesyłające dzienniki do prywatnych kont pocztowych.Jeżeli codziennie przesyłasz do siebie dzienniki błędów, to przejrzenie ich umożliwi:

� Szybkie zlokalizowanie dowolnych problemów.

� Manualne sprawdzenie plików w celu upewnienia się, czy nie są oneprzełączane zbyt często.

� Upewnienie się, czy proces zapisujący do plików dziennika powtórzeńprzebiega bez zakłóceń (które mogłyby wskazywać na zbyt małe rozmiarylub zbyt małą ilość dzienników powtórzeń w systemie).

Oracle Enterprise Manager (OEM) posiada usługę Event Monitoring Service, która rów-nież pomaga w monitorowaniu bazy danych. Więcej informacji o OEM, jego możliwo-ściach i funkcjach, zawarto w rozdziale 13.

Jeżeli parametr inicjujący �'(��� ���'��")�"'��� !" ma wartość ��*�, Oracle doda wię-cej informacji o przełączaniu dzienników zmian do pliku dziennika ostrzeżeń. Zwiększa-jąc jego rozmiar, umieści w nim jednocześnie więcej informacji o tym, co dzieje się w ba-zie danych. Poniżej pokazujemy fragment dziennika ostrzeżeń bazy danych Oracle9i,w której opcja �'(��� ���'��")�"'��� !" została ustawiona na ��*�.

������������������ ������������������������������������������� ����� !�"#� � � $%�%�&�'��(����()����(����������*������+���"�''�������,����*,�+��-�-,� �"./��"01./��2�&�.��% �.�12/ �0/3�������������45���� ���" ��������������'���)����������'��(�����*������+ ��" ��������������'���)����������'��(�����*������+

Page 11: Oracle9i. Administrowanie bazami danych od podstaw

270 Część II � Zarządzanie bazą danych

�������������+ ���� ������������������������������������������� �4���� !�"#� � � $%�%&�'��(����()����(����������*������+���"�''�������,�����*,�+��-�-,� �"./��"01./��2�&�.2�% �.�12/ ��0/3�������������+����� ���" ��������������'���)���������'��(�����*������+���" ��������������'���)���������'��(�����*������+��������������+�+��� �"�-�����(����������������������� �4���� !�"#� � � $%�%"�-�����(����������������������� ����� !�"#� � � $%�%��������������+%+��� ������������������������������������������� �+���� !�"#� � � $%�%+&�'��(����()����(����������*������+��"�''�������,�����*,�+�-�-,� �"./��"01./��2�&�.2�% �.�12/ ��0/3���������������� �� ��" ��������������'���)����������'��(�����*������+���" ��������������'���)����������'��(�����*������+���������������� �� �"�-�����(����������������������� �+���� !�"#� � � $%�%+���������������+ �� �������������6������������������������� �+�4�� !�"#� � � $%�%�"�-�����(����������������������� �+�4�� !�"#� � � $%�%���������������4���� ������������� +����� �/��7�5+����6�����������(���6�����"810�0�3&��01�69�54 ������6��������0�32�&�

Wygląda na to, że baza danych ���� w sobotę 18 stycznia 2002 o godzinie 20:27 miałaproblem z przestrzenią. Zakładając, że o tak późnej porze w systemie nie pracowali jużużytkownicy, możemy przypuszczać, że to nietypowe zadanie wsadowe próbowało zała-dować tabelę ��+����. Niestety, jej obszar tabel zawiera za mało ciągłej przestrzeni dlaalokacji obszaru. Do dziennika ostrzeżeń został zapisany błąd, a proces próbujący zała-dować tabelę zakończył się niepomyślnie. Jeżeli istniałby proces, monitorujący w sposóbciągły dziennik ostrzeżeń, który powiadamia o błędach, moglibyśmy zareagować natych-miast, dodając niezbędną przestrzeń i prosząc użytkownika o wznowienie zadania lubprzesłać wiadomość o rozwiązaniu problemu do wszystkich zainteresowanych (w tymoczywiście do szefa, który powinien zostać o takim fakcie poinformowany).

W dalszej części tego rozdziału umieszczony jest skrypt pozwalający na sprawdzenie,czy któryś z obiektów bazy danych nie będzie w stanie pobrać wolnego obszaru z po-wodu braku wolnej przestrzeni. Umożliwia to dodanie przestrzeni jeszcze przed wystą-pieniem problemu w czasie wykonywania zaplanowanych zadań którejś z aplikacji. Je-żeli zaobserwujemy częste błędy wykonania pewnego zadania wsadowego, to możemywykorzystać nowy tryb alokacji przestrzeni, zatrzymać zadanie do czasu wykonania od-powiedniej akcji, a następnie wznowić je od miejsca, w którym zostało zatrzymane. O tymsposobie powiemy więcej w rozdziale 11.

LISTENER.LOG

Proces nasłuchu Oracle Net Listener (we wszystkich wersjach Oracle8 nazywany Net8,a SQL*Net we wcześniejszych) tworzy w czasie uruchamiania dziennik, do którego w za-leżności od ustawionego poziomu logowania zapisuje duże lub minimalne ilości danych.W opcji minimalnej zapisywane są następujące informacje:

Page 12: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 271

� Czas uruchomieniu procesu nasłuchu.

� Lista portów, na których jest on prowadzony.

� Komputer, na którym nasłuch jest uruchomiony.

� Informacje o połączeniach zrealizowanych przez proces.

Przykładowy wpis wygląda następująco:

&#�0�#��$�'��76���:��(����;�'�����%� �������7�<'�(����������7�&=7� ����+% %

"��9'�����>�?��%%�!�� �!�/'�����"�'��'������������'������'���')�(�

<������'�-��'@���9���-��9���A�����./'����./'�% .�����'�.�(-��.�������'��'�B�-������9�(C��������C��������(���./'����./'�% .�����'�.���.�������'����D�$�'-��A����E��(C���C��������(���./'����./'�% .�����'�.�'���.�������'��'�/6���9���C��-�E��(��A����

F'����-�����C���(G���%�#��H�������>21�"�D<&D/#G>�22�1��G><�/&/"/0G���?>8/�&G2��3/#I=J0�<&/<?></�&G�+��???#��H�������>21�"�D<&D/#G>�22�1��G><�/&/"/0G���?<D<1#�K1G..�.����.1L&<�/" ���??&DK1�&�K<�M�"/##1"&�2�&���M�<�/&/"/0�D#I/ �M�1;1#&��M��D2 �M��1&F�#�"/21

Jeżeli zostanie włączone logowanie na wyższym poziomie, w dzienniku będzie zapisy-wane więcej informacji, lecz jednocześnie znajdą się tam dane mniej istotne. Zalecamysystematyczne, okresowe sprawdzanie dziennika ��)" � !&�'( w poszukiwaniu błędów.Jeżeli odnotuje on problemy z Oracle Net, należy prowadzić dokładniejsze obserwacje.Proszę zauważyć, że wcześniejsze wersje oprogramowania tworzą inne wpisy w tymdzienniku. Jedynym sposobem na usunięcie dziennika ��)" � !&�'(, kiedy osiągnie zbytduży rozmiar, jest zatrzymanie procesu nasłuchu, usunięcie pliku dziennika i ponowneuruchomienie listenera. W przeciwieństwie do dziennika alertów, po zmianie jego nazwyORACLE nadal zapisuje do niego informacje. Zatrzymanie nasłuchu nie pociąga za sobąutraty istniejących połączeń, lecz do chwili jego wznowienia niemożliwe jest tworzenienowych. Z tego powodu uruchamiamy zazwyczaj dwa oddzielne procesy dla każdej in-stancji i umieszczamy oba porty we wszystkich plikach �,�,����& �� naszych klientów.Kiedy Oracle Net podejmuje próbę podłączenia się do listenera od strony klienta, starasię wykorzystać najpierw pierwszy podany w �,�,����& �� port. Jeżeli nie istnieje nanim aktywny proces nasłuchu, to sprawdzany jest następny port. Zatem wyłączenie na-słuchu, usunięcie plików dzienników i ponowne włączenie listenera nie powoduje za-kłóceń w dostępie użytkowników do bazy danych.

Słabą stroną posiadania wielu listenerów jest konieczność zarządzania nimi oraz wzrostliczby aktywnych procesów serwera (jeden proces dla każdego nasłuchu).Kilka listene-rów pozwala rozłożyć obciążenie sieci na większą liczbę kart interfejsów sieciowych(Network Interface Cards NIC) i w ten sposób zbalansować połączenia do serwera bazydanych. Szczegółowe informacje dotyczące konfiguracji sieciowej zawierają Net Servi-ces Administrator Guide i Net Services Reference Guide dołączone do dokumentacjiOracle.

Page 13: Oracle9i. Administrowanie bazami danych od podstaw

272 Część II � Zarządzanie bazą danych

Status Redo Log

W jakim celu należy sprawdzać status dzienników zmian? Być może z powodu zbyt czę-stego przełączania zamierzasz zmienić ich rozmiar. Jeżeli ich nazwy mają pozostać nie-zmienione, to konieczne jest ich usuniecie, a następnie odtworzenie z nowym rozmiarem.Przed usunięciem dziennika zmian administrator powinien wiedzieć, jaki jest aktualnystatus tego dziennika. Usunięcie bieżącego dziennika nie jest dobrą praktyką, jeżeli niedotyczy testowania scenariuszy odzyskiwania!

Informacje o aktywnych dziennikach zmian są utrzymywane w dwóch wirtualnych per-spektywach -.: -.� +�i -.� +/$��. W celu pobrania pełnych informacji, perspektywy temogą zostać złączone na kolumnie +!'0�1. Dzienniki zmian mogą stanowić część grupydzienników, pozwalającej na ich dublowanie (ang. mirroring) z wykorzystaniem pro-gramów narzędziowych Oracle i zapewnienie w ten sposób dodatkowego zabezpieczeniaprzed ich ewentualną utratą. Strata pojedynczego aktywnego dziennika wymaga odbu-dowania bazy danych, natomiast gdy dziennik należy do grupy, Oracle wpisuje infor-mację do dziennika alertów i kontynuuje pracę, wykorzystując pozostałe dzienniki. Ist-nieje zatem możliwość usunięcia i odtworzenia dziennika zmian bez potrzeby wyłączaniabazy danych.

Poniższy skrypt umożliwia wyświetlenie informacji o dziennikach zmian w bazie danych" )". Do jego uruchomienia wymagane są uprawnienia konta ������.

����K�-6�'�$�'-����4 ����0�������$�'-����� ����(����NF���������N��������K�-6�'!����������3'���,!��������6�������!�����������������0��������$'�-�;O0/3ID01��!;O0/3�6������'����3'���,G6�3'���,PK1K�1��������������������������������3�/F<,��&�&F������������F���������7777777777777777777777777777777777777777�7777777777�7777777777777777�77./��2�&�5.&1�&.�12/ ���2/��������������������"&D;1./��2�&��.&1�&.�12/ ���2/�������������������"F��1#&./��2�&�5.&1�&.�12/ ��2/������������������D#�"&D;1./��2�&��.&1�&.�12/ 4��2/������������������D#�"&D;1

Przeglądając wyniki wykonania tego dziennika, możemy powiedzieć kilka istotnych rze-czy o tej bazie danych:

� Administrator bazy danych (DBA) nie zdecydował się na wykorzystanie zaletdublowania dzienników, ponieważ w każdej grupie jest tylko jeden dziennik.

� Istnieją cztery dzienniki zmian i wszystkie są częścią bazy danych.

� Kolumna *�������*� zawierająca status z perspektywy -.� +/$�� jest pusta,jeżeli dziennik jest wykorzystywany przez bazę danych.

� Dzienniki są umieszczone na dwóch różnych dyskach, a DBA próbowałpoprawić wydajność przez zamianę ich położenia na tych dyskach. Do czasu,gdy ORACLE będzie czytać poprzedni dziennik w celu archiwizacji, istniejemożliwość wystąpienia konfliktów na poziomie głowic dyskowych, jeżeli oba

Page 14: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 273

dzienniki znajdują się na tym samym dysku. Umieszczenie ich na oddzielnychdyskach umożliwia niezakłócony odczyt jednego z nich w czasie zapisudo drugiego. Jeżeli tylko jest to możliwe, dzienniki zmian powinny byćumieszczane na pustych dyskach lub w ostateczności na dyskach zawierającychpliki rzadko wykorzystywane.

� Bieżącym wykorzystywanym plikiem dziennika jest ! �'2 (wartość w kolumniestatusu �*���,�).

� Ostatnio wykorzystywanym dziennikiem był ! �'� (Status ���$-�).

� Jest prawdopodobne, że plik ! �'� jest albo archiwizowany, albo wymaganydo odzyskania bazy danych w przypadku awarii. Status $,���$-� oznacza,że dziennik zmian nie jest wymagany do odzyskiwania.

Inne możliwe wartości kolumny statusu perspektywy -.� +� można znaleźć w doku-mentacji Oracle.

Fragmentacja

W jakim celu sprawdzamy poziom fragmentacji w naszej przestrzeni tabel? Pomyślmyo przestrzeni tabel jak o puzzlach, które próbujemy ułożyć. Im więcej klocków uda namsię dopasować, tym bardziej komplikuje się kształt wolnego miejsca. Dopasowanie ko-lejnego elementu wymaga dokładnego określenia jego rozmiaru.

Poszukiwanie wolnej przestrzeni w obszarze tabel dla kolejnego obszaru funkcjonujew podobny sposób. Przy odrobinie szczęścia można utworzyć lub odziedziczyć bazę, któ-rej tabele w każdej przestrzeni tabel wykorzystują domyślne parametry przechowywaniaprzestrzeni tabel. W ten sposób każdy obszar ma identyczny rozmiar i nie istnieją porcjewolnej przestrzeni, których wielkość uniemożliwia ich wykorzystanie. Niestety, nie zaw-sze to tak wygląda. W przestrzeni tabel może istnieć dużo wolnego miejsca, lecz żadenz jego fragmentów nie jest wystarczająco duży do pomieszczenia obszaru. Pomimo żeobszary tworzące obiekt mogą być rozrzucone na dysku, bloki w obrębie obszaru musząbyć umieszczone w sposób ciągły. Z tego powodu należy monitorować przestrzeń tabeli upewniać się, że istnieją porcje wolnych bloków na tyle duże, aby kolejne zadanie zo-stało wykonane.

Poniższy skrypt PL/SQL wyświetla dostępne w obrębie przestrzeni tabel obszary włącz-nie z ich rozmiarami. Przed uruchomieniem skryptu należy utworzyć tabelę do prze-chowywania wyników przejściowych, wykorzystując skrypt utworzenia tabeli. Do uru-chomienia skryptu podającego fragmentację należy wykorzystać konto z przywilejamiużytkownika ������.

"'�������6���I�11�<�>I��-��;��"8��>+�?!&������;��"8��> ?!I�'���#FK�1�>� ?!�������#FK�1�>� ?!0����#FK�1�>� ??P

Page 15: Oracle9i. Administrowanie bazami danych od podstaw

274 Część II � Zarządzanie bazą danych

Tabela /���� jest tworzona tylko raz, a po opróżnieniu poleceniem "!0���" , wykorzy-stywana wielokrotnie. Kreowanie tabeli przy każdym wykonaniu skryptu zwiększałobyniepotrzebnie stopień fragmentacji przestrzeni.

����$��(6�����$$���'-��$$�)�'�$9��$$�������C��5 ��������� �������C��55��'���������6���I�11�<Q��(����'����I����(������#FK�1�>%?Q���I���#�-�����;��"8��>+�?Q���&���-�������;��"8��> ?Q���"�'��'�&�6�������������������������I���J#�-�!I���JD2!�&�6�������J#�-�����������$'�-�2��J2�&�JID01������������'��&�6�������J#�-��G����'>NR�N?Q6���������&�6��������Q�������$�����&�6��������������I�����-�!�I����(!�&�#�-�Q�������������&�6��������S#/&I/F#2Q(����'���I�'������#FK�1�>� ?Q�����������#FK�1�>� ?Q��0��������#FK�1�>� ?Q��&$�'�����#FK�1�>� ?Q��&6�������#FK�1�>� ?Q��&��������#FK�1�>� ?Q��"�'��'�I'�����������������0/"BJD2��!��������6!��0/"BJD2T���������������$'�-�2��JI�11J�<�"1��������'��I���JD2�G�I����(������'(�'�69������JD2Q6�����������I'��Q��$�����I'��������I�'��!������!�0���Q���$�I'��S#/&I/F#2������������������������J$'��Q����(��$Q����������$�����I'��������&$�'��!�&6�����!�&����Q��������������I'��S#/&I/F#2Q�����$�&$�'��G�0��������������������������G�������T�&6�����Q��������0����G&����Q��������������������'�������I�11�<���������)������>I�����-�!�&���-�!�I�'��!������!�0���7�?Q���������--��Q�������I�'���G&$�'��Q�������������G&6�����Q�������0���G&����Q�����(��$Q��(�����Q��������'�������I�11�<�������)������>I�����-�!&���-�!�I�'��!������!�0���7�?Q���--��Q

Page 16: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 275

�����PM�C�-���U����I'���MPVV"0/�1JI�11WW�������I'��Q��(Q��(�����Q��--��Q������&�6��������Q��(QP������'-��$$�������$$��������������'�N���</�&�I��3K1#&�"�D�<�X1�&�X1#D�&��10N������&���������(����N#�X:�Y<�X1�&�X1#DN��$�'-�����5��'���������I��-������(����N<0DBN���������������$�'-���� ��'���������I�'�������(����N�0/BY</"X�N���������$�'-���%%%!%%%����������������(����N�/XKD��>�0B?N�������$�'-���%%!%%%!%%%��6'�������'���'�����&����������������I��-�������������-��������-��$�����������I��-������-�������-��$�����������'���'����������$'��-�����A��'������������&�����!I��-�!�I�'��!������������$'�-�I�11�<���'(�'�69�&�����!I��-�!�I�'��Q���������$$

Skrypt jest wykonywany dla pojedynczej przestrzeni tabel, której nazwa jest jego argu-mentem wejściowym.

Przyjrzyjmy się wynikom jego wykonania.

�����������������������</�&�I��3K1#&�"�D�<�X1�&�X1#D�&��10#�X:�������������������������������������������������0/B<�X1�&�X1#D������<0DB�������������������������������</"X��/XKD��>�0B?7777777777777777�777777777777777777777777777777�77777777�777777777777F���������������P��-� �P�'����P���'J���������������!��+���������������������������������������������������������������4! 5+�����������4 ���������������������������������������������������+!+�5������������+����������������������������������������������������!4�+�����������4+��������������������������������������������������� ! � ������������ ��������������������������������������������������� !+4+����������� ����������������������������������������������������!����������!��+��������������������������������������������������+ !+5������������+��������������������������������������������������5�! +4����������������������������������������������������������������+! 4+���������!4� ��������������������������������������������������%+!%%5��������������������������������������������������������������� �!+�5������������ ����������������������������������������������������!+ ����������������������������������������������������������������+!5�%������������+����������������������������������������������������!�+ ����������4+ ���������������������������������������������������!4�������������+���������������������������������������������������+�!% �����������%+����������������������������������������������������!��5�����������+ ��������������������������������������������������� ! ������������55+��������������������������������������������������%�!44�����������������������������������������������������������������!�5������������+ ���������������������������������������������������!%��������������+�������������������������������������������������4!5�������������� �������������������������������������������������4!5�4������������+

Page 17: Oracle9i. Administrowanie bazami danych od podstaw

276 Część II � Zarządzanie bazą danych

�������������������������������������������������+%!4%����������5� �������������������������������������������������5 !������������5�+�������������������������������������������������5+!�%�������������+�������������������������������������������������55!�%������������+�������������������������������������������������55!+5�����������4+�������������������������������������������������5%!�����������������������������������������������������������������!%4+���������������������������������������������������������������! ������������ ���������������������������������������������������!������������++��������������������������������������������������+!5+������������+ �������������������������������������������������4�!�������������%+�������������������������������������������������4�+!5+������������ �������������������������������������������������4�!�� ��������������������������������������������������������������44!5%����������!% +�������������������������������������������������4��!� �����������4 �����������������MMMMMMMMMMMMMMMMMMMMMMMMMMMMMM����������777777777777�������������������-��������������������������������������������!���

MMMMMMMMMMMMMMMM�����������������������������������������777777777777��-�������������������������������������������������������������!���

Przestrzeń tabel jest bardzo niejednorodna. Czterdzieści obszarów w 13 881 wolnychblokach, średnio mniej niż 350 bloków na obszar. Jeżeli jedyną rzeczą, którą zrobiliśmy,było zwiększenie liczby dostępnych dla tej przestrzeni tabel bloków w perspektywie ���/��������, to wydaje się, że posiada ona mnóstwo wolnej przestrzeni. Zbyt wielu nie-doświadczonych administratorów wpada w pułapkę polegającą na sprawdzeniu jedyniecałkowitej dostępnej przestrzeni i wnioskowaniu na tej podstawie o wystarczającej ilościciągłego miejsca do alokowania kolejnego obszaru. Analiza przestrzeni tabel z powyż-szego raportu ujawnia, że większość obszarów ma rozmiar mniejszy niż 500 bloków.Dopóki przestrzeń tabel jest wykorzystywana w trybie tylko do odczytu lub zawiera ta-bele sporadycznie aktualizowane, nie ma problemów z przydzielaniem nowego miejsca.

Oracle nie wykonuje scalania ciągłych wolnych obszarów, chyba że nie istnieje inny spo-sób uzyskania wolnej przestrzeni. Jej fragmentacja wzrasta, w miarę jak Oracle przydzielają z największego wolnego obszaru, przed powtórnym wykorzystaniem i połączeniemmniejszych wolnych obszarów, które pozostały po usuniętych obiektach. Rysunek 9.1 ilu-struje obszary dostępne w przestrzeni tabel przed zażądaniem alokacji kolejnego obszaru,a następnie po wykonaniu tego polecenia.

Rysunek 9.1.Łączenie wolnychobszarów:(a) fragmentacjaz dwoma ciągłymiobszarami przedżądaniem alokacjiobszaru złożonegoz 25 bloków(b) fragmentacja poscaleniu i alokowaniuobszaru

Page 18: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 277

Perspektywa słownika danych ���/�������� zawiera informacje o każdym wolnymobszarze w plikach danych tworzących bazę. Oracle nie sprawdza tej perspektywy podkątem ciągłości obszarów. Zatem dwa sąsiednie obszary (jak na rysunku 9.1a) przed-stawione są w dwóch różnych wierszach. Nie jest to szczególnie efektowne i użytecznerozwiązanie, ponieważ nie przedstawia rzeczywistego obrazu wolnej przestrzeni w pli-kach danych!

Skrypt 3!�(4 �"&)5� czyta perspektywę ���/��������, poszukuje ciągłych obszarów,sumuje ich liczbę bloków (lub podaje ich liczbę, jeżeli obszary nie są ciągłe), przecho-wuje wyniki w tabeli przejściowej i drukuje raport o poziomie fragmentacji plików da-nych w przestrzeni tabel. Przechowanie poprzednich raportów umożliwia analizę wyko-rzystania przestrzeni tabel i częstotliwości występowania jej fragmentacji.

Jeżeli wykorzystujesz przestrzeń tabel zarządzaną lokalnie, to nie należy się martwico łączenie wolnych obszarów. W wypadku zarządzania przez słownik, operacje tę możnawykonać manualnie, wydając polecenie:

����'���6��������V��6����������-�W���������Q

Segmenty wycofania

Jak napisać wiersz? Zaczynamy od pomysłu i być może od pierwszego zdania. Zapisu-jemy kilkanaście linijek i decydujemy, że jest on po prostu okropny i rozpoczynamy pi-sanie od początku. W połowie pisania możemy stwierdzić, że większość tekstu jest wspa-niała, lecz kilka linijek wymaga jednak zmiany. Ostatecznie, kończąc pisanie, decydujemy,że usunięte fragmenty powinny się w nim znaleźć. Wymaga to pamiętania treści tych wer-sów (uważamy, że nadawały one utworowi wyjątkowy charakter i koniecznie muszą zo-stać odtworzone). Jeżeli każda linia była pisana ostrożnie, a to co chcieliśmy zachować,było kopiowane przed każdą zmianą całego wiersza, to zachowany został jego wyglądna każdym etapie pisania. Z łatwością możemy stwierdzić, jak wyglądała ta wspaniałalinijka. Po zakończeniu kolejnej wersji wiersza i wykonaniu jej kopii „na czysto” (czylipo jej ostatecznym zatwierdzeniu), możemy udostępnić ją komuś do przeczytania, pod-czas gdy sami zajmiemy się analizą jej treści. Oracle wykorzystuje segmenty wycofaniadokładnie tak, jak my swoją kopię, do przechowania obrazu danych przed wprowadze-niem zmian, określanego też jako obraz danych przed zmianą.

Jaki cel ma przechowywanie obrazu danych przed zmianą? Oracle zapewnia, że „odczytdanych nie będzie blokował ich zapisu, a zapis nie będzie blokował odczytu”. Co to do-kładnie znaczy? Załóżmy, że otwieramy tabelę płac i wykonujemy raport o zarobkach.W tym samym czasie ktoś inny zmienia wartości kilku pozycji w tej tabeli. Bez segmentuwycofania, raport zawierałby niespójne dane, część z nich dotyczyłaby tabeli przed zmia-nami, a część po ich wprowadzeniu. Oracle zapewnia, że sytuacja taka jest niemożliwa,segment wycofania zawierający obraz danych przed zmianą zapewnia utrzymanie ichspójności nawet wtedy, gdy jednocześnie wprowadzane są modyfikacje.

W wersji Oracle9i wprowadzono koncepcję automatycznego zarządzania kasowaniemzmian (ang. undo managment). Zasadniczo oznacza to, że jeżeli zostanie utworzona spe-cjalna przestrzeń określana jako przestrzeń wycofania (ang. Undo Tablespace) i ustawio-ny parametr inicjujący 0��'�4���(4 �" na �*� , Oracle automatycznie przejmie nad nimkontrolę, przydzielając i zwalniając w miarę potrzeby segmenty wycofania.

Page 19: Oracle9i. Administrowanie bazami danych od podstaw

278 Część II � Zarządzanie bazą danych

Kiedy użytkownik rozpoczyna pracę, generując raport, czy też modyfikując wiersze ta-beli, do związanego z nim procesu jest przypisany segment wycofania. W rozdziale 2.,mówiliśmy o sposobie alokowania segmentów wycofania i zwiększania ich rozmiarów.Co jednak stanie się w sytuacji, gdy w takim segmencie zabraknie miejsca? Jeżeli dużatransakcja wymaga więcej miejsca niż aktualnie posiada segment wycofania, segmentten zwiększy swój rozmiar, zajmując część pozostałej wolnej przestrzeni tabel, czyli za-chowując się dokładnie tak samo jak tabela w czasie dodawania nowych wierszy. Jeżelijednak wymagana dla niego ilość miejsca przekracza rozmiar wolnej przestrzeni tabel,to transakcja nie zostanie wykonana i możesz spodziewać się telefonu od zdenerwowa-nego użytkownika! Jak zatem zdobyć pewność, że w segmencie wycofania istnieje do-stateczna ilość miejsca dla wykonywanych transakcji? Należy kontrolować liczbę po-większeń rozmiarów segmentów wycofania, związaną z wykonywaniem transakcji.

Jeżeli obszary wewnątrz segmentu wycofania są zbyt małe, transakcja będzie się „zawi-jać” od jednego do innego obszaru w obrębie segmentu. Każda taka operacja wymaga odOracle wykonania wewnętrznych zadań związanych z przydziałem przestrzeni. Zadaniate pochłaniają czas i zasoby systemu. Zatem należy dążyć do sytuacji, w której rozmiarsegmentu wycofania jest wystarczający do pomieszczenia całej transakcji i kosztownewewnętrzne zarządzanie przestrzenią zostaje wyeliminowane.

Można monitorować ilość zawinięć segmentu wycofania pomiędzy obszarami. W jakisposób to zrobić? Omówimy to w następnym podrozdziale.

Monitorowanie rozmiaru segmentu wycofania

Segmenty wycofania przypisane są do procesów w sposób cykliczny i wszystkie trans-akcje niezależnie od swoich rozmiarów rywalizują w dostępie do tych samych dostępnychsegmentów. Jeżeli po każdym zatwierdzeniu transakcji nie zostanie wydane polecenie) "�"!��)��"�'��0) �!'��6����) (4 �", nakazujące kolejnej wykorzystanie specyficzne-go segmentu, to nie mamy wpływu na przydzielony transakcji segment wycofania. Pole-cenie ) "�"!��)��"�'��0) �!'��6����) (4 �" musi wystąpić w pierwszej linii transak-cji, a �'44�" lub !'��6��� w ostatniej.

Jeżeli wykorzystywane jest polecenie ) "�"!��)��"�'��0) �!'��6����) (4 �" dla dużejtransakcji, powinieneś utworzyć segment wycofania przeznaczony specjalnie dla niej.Jeżeli nie wykorzystujemy ) "�"!��)��"�'��0) �!'��6����) (4 �", segment wycofaniazostanie przydzielony w sposób przypadkowy. Ponieważ większość przypisań segmen-tów wycofania do transakcji ma charakter losowy, należy wykorzystywać standardowyrozmiar dla wszystkich segmentów wycofania (z wyjątkiem specyficznych, wspoma-gających duże transakcje). Nie ma żadnej gwarancji, że duży segment wycofania, stwo-rzony specjalnie dla wielkiej transakcji, nie zostanie alokowany dla innego procesu, za-nim transakcja ta zostanie uruchomiona. Wiele transakcji może korzystać i korzysta zewspólnych segmentów wycofania, jeżeli zatem w systemie pracują inni użytkownicy, tonie można mieć stuprocentowej pewności, że to właśnie nasza transakcja jest jedyną,która korzysta z bardzo dużego segmentu.

Jak już wspominaliśmy, pojedynczy segment wycofania może przechowywać dane wieluróżnych transakcji. Każda z transakcji wchodzących do segmentu wycofania może wymusićzwiększenie jego rozmiaru. Zatem jeżeli znajduje się w nim wiele małych transakcji, jegorozmiar może się zwiększyć dokładnie tak samo jak w przypadku jednej o dużym rozmiarze.

Page 20: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 279

Segment wycofania, optymalny parametr

Załóżmy, że segment wycofania rozszerzał się i osiągnął punkt, w którym wykorzystujejuż całą dostępną przestrzeń. Co się stanie w takim wypadku? Transakcja, która podej-mie próbę zwiększenia jego rozmiarów, nie zostanie wykonana. Podobnie będą zacho-wywać się transakcje wymagające zwiększenia rozmiarów innych segmentów. Jakiemożliwości działania mamy w takim wypadku? Istnieje tylko jedna — dodać nowy plikdanych do przestrzeni tabel segmentów wycofania i w ten sposób zwiększyć ilość do-stępnej przestrzeni.

Mimo to jednak, zanim jeszcze sprawy przybiorą taki obrót, jest coś, co można zrobićw celu zapewnienia dostatecznej ilości miejsca w przestrzeni tabel segmentów wycofa-nia. Kontrolując zwiększanie się segmentów, można je przebudować (pojedynczo, jeżelito konieczne) i ustalić optymalny rozmiar dla każdego z nich. Możesz wykorzystać pa-rametr optymalny klauzuli )"'!�( do nadania mu najlepszej wartości w czasie wykony-wania poleceń �! �" �!'��6����) (4 �" lub ��" !�!'��6����) (4 �". Wartość optymal-nego parametru segmentów wycofania oraz statystyki dotyczące tych segmentów możnaznaleźć w perspektywie -.� ������, który gromadzi informacje o wykorzystaniu wszyst-kich segmentów wycofania od czasu uruchomienia bazy danych, jak zostało to wyja-śnione w rozdziale 6.

Segmenty wycofania, którym nadano rozmiar optymalny mogą zostać skrócone (ang.shrink) po zwiększeniu swojego rozmiaru. Optymalna wielkość segmentu powinna byćdobrana tak, by liczba jego rozszerzeń i skróceń, związana z obsługą transakcji, była mi-nimalna. Każde zmniejszenie rozmiaru segmentu wycofania do poziomu jego wielkościoptymalnej powoduje spadek wydajności, zatem najlepiej jest wybrać ich wielkość w takisposób, by powiększanie nie było już konieczne. Mimo to jednak, dla sporadycznych,dużych transakcji wymuszających rozszerzenia, wartość optymalna umożliwia odzyskanieprzestrzeni.

Poszukiwanie wartości optymalnych, skróceń i rozszerzeń

Poniższy skrypt wykonuje zapytanie na -.� ������ i -.� ��,���. Perspektywa -.� ��,���zawiera nazwy aktywnych segmentów wycofania, podczas gdy w -.� ������ są oneidentyfikowane jedynie przez swój USN (ang. Undo Segment Number — numer segmentupowrotu). Wykonanie kwerendy z tego listingu wyświetli optymalny rozmiar, liczbę skró-ceń, średni rozmiar na skrócenie i ilość rozszerzeń na segment wycofania.

�1K���C�C�'C��������-������9��$�����1K"���-��#�-��$�'-����� �������#�-�!�/����C�!��'����!��)���'���!�1����(���$'�-�;O�/00�&�&!;O�/00#�K1����'��;O�/00�&�&�F��G�;O�/00#�K1�F��Q

Przykładowe wyniki dla zapytania na -.� ������ pokazano w listingu poniżej:

#�K1��������������������/<&�DX1�����8�D#B����;1�8�D#B����1L&1#2�77777777777777777777�7777777777�7777777777�7777777777�7777777777�=�&1K����������������������������������� ���������� ���������� � ������������������������ 4�+�5 ��������4���4�%4 4 ����������� ������������������������ 4�+�5 ������������44+544� �����������

Page 21: Oracle9i. Administrowanie bazami danych od podstaw

280 Część II � Zarządzanie bazą danych

Popatrzmy, co dokładnie zawiera ten raport. W bazie danych istnieją trzy aktywne seg-menty wycofania. Segment ������ jest wykorzystywany do transakcji słownika danych.Transakcje użytkowników są związane z segmentami R01 albo R02. Każdy z nich po-siada rozmiar optymalny 10 MB (10 485 760 bajtów), rozszerzał się powyżej tej warto-ści i był ponownie do niej skracany, dwa lub więcej razy. Każdorazowo segmenty byłyskracane przeciętnie o 40 MB. Uważna analiza raportu pokazuje zatem, że optymalnyrozmiar segmentów nie został dobrany właściwie dla transakcji, które je wykorzystują.Zbyt często zwiększają one swój rozmiar (49 razy od ostatniego startu bazy danych), a ichśredni przyrost przekracza pięciokrotnie rozmiar przyjęty jako optymalny. W takiej sy-tuacji Oracle wykonuje mnóstwo niepotrzebnej pracy związanej z zarządzaniem prze-strzenią. W celu zmniejszenia ilości rozszerzeń segmentów, wartość optymalna powinnazostać zwiększona co najmniej do 40 MB. Systematyczne wykonywanie skryptu dostar-czy nam informacji, jaki skutek wywołała ta zmiana. Można również zdecydować się nadodanie do bazy danych dodatkowych segmentów wycofania, co poprawi wykonywanietransakcji.

Kiedy segment wycofania po raz pierwszy zwiększa swój rozmiar ponad wartość opty-malną, nie zostaje skrócony. Za drugim razem, gdy wielkość segmentu wzrasta powyżejwartości optymalnej, będzie on skrócony — zapewniając następnej transakcji wymu-szenie alokacji nowego obszaru. Pomimo że ustalenie wielkości optymalnej segmentównie uchroni nas zupełnie przed administrowaniem nimi, pomoże niewątpliwie w ograni-czeniu liczby i rodzajów tych czynności.

Z powodu specyfiki, zgodnie z którą zmienia się rozmiar segmentów wycofania, ilość„powiększeń” widoczna w wynikach wykonania poprzedniego skryptu będzie zawszewiększa niż ilość „zmniejszeń”. Dla przykładu, jeżeli początkowy rozmiar segmentuwycofania jest mniejszy niż przewidziana dla niego wartość optymalna, żądanie nowe-go obszaru powoduje zwiększenie statystyki powiększeń (ang. Extends), lecz skrócenie(Shrink) nie jest konieczne. Kiedy segment wycofania zwiększy swój rozmiar powyżejwartości optymalnej, może być skracany jedynie po zakończeniu transakcji, która jestw stanie wymusić jego wielokrotne rozszerzenie.

Do skracania segmentów wycofania do wybranego początkowo rozmiaru można wyko-rzystać polecenie )�!����!'��6����) (4 �". Segment wycofania musi zawierać co naj-mniej dwa obszary. Jeżeli nie zostanie określony rozmiar, do jakiego ma on zostać zre-dukowany, domyślnie przyjmowana jest wielkość optymalna. Poniższy listing ilustrujezredukowanie rozmiaru segmentu do wartości optymalnej.

����'�'���6�������-����� ����'���Q

Monitorowanie rozmiaru obszaru segmentu wycofania

W celu uproszczenia zarządzania wieloma pozycjami w segmencie wycofania, należytak skonfigurować rozmiar segmentu, by każdy znajdujący się wewnątrz niego obsza-rów był wystarczająco duży do wsparcia typowej transakcji.

Kiedy segment wycofania transakcji nie może być przechowany w pojedynczym obszarze,próbuje wykorzystać kolejny obszar segmentu. Obszary segmentu wycofania są przydzie-lane cyklicznie, zatem transakcja może zostać przewinięta od ostatniego do pierwszego

Page 22: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 281

obszaru segmentu wycofania, jeżeli tylko nie zawiera on aktywnej transakcji, w prze-ciwnym razie wykonywane jest powiększenie segmentu.

Zapytanie wykonane dla perspektywy -.� ������ umożliwia ilość okrążeń segmentuwycofania, które zaszły od ostatniego uruchomienia bazy danych. Jeżeli jest ona równazero, oznacza to, że wielkość obszarów segmentu została dobrana prawidłowo dla wy-korzystujących je transakcji. Wartość większa od zera sugeruje konieczność ponownegoutworzenia segmentu wycofania z większymi obszarami. Poniżej pokazujemy dwa róż-ne raporty uzyskane po wykonaniu zapytania i przedstawiamy sposób ich interpretacji.Najpierw zapytanie:

�1K���'��(C������'C���A��������-���@���9��$�����1K"���-��#�-��$�'-����� �������#�-�!�/����C�!��'����!��)���'���!:'���!�1����(���I'�-�;O�/00�&�&!;O�/00#�K1�:��'��;O�/00�&�&�F��G�;O�/00#�K1�F��Q

Podobnie jak zapytanie dla rozszerzeń segmentu wycofania, skrypt wykorzystuje staty-styki umieszczone w -.� ������, a nazwy segmentów pobiera z -.� ��,���. Pierwszyanalizowany raport wygląda tak:

#�K1��������������������/<&�DX1�����8�D#B������;1�8�D#B��:��<���1L&1#2�77777777777777777777�7777777777�7777777777�777777777777�777777777777777�=�&1K����������������������������������� ������������ ������ �������� � ������������������������ 4�+�5 ��������4���4�%4 4�� ������4��������� ������������������������ 4�+�5 ������������44+544��� �������5��������

Jak widać, od uruchomienia bazy zaszło 67 przewinięć (7���). W porównaniu z ilościąrozszerzeń, jej wartość nie wydaje się zaskakująca (rozszerzenie zazwyczaj jest poprze-dzone przewinięciem). Występowanie rozszerzeń sygnalizuje, że segment wycofania ob-sługuje transakcje o większym rozmiarze niż te, dla których został on zaprojektowany.Jeżeli segment nie jest w stanie pomieścić informacji związanych z transakcją, to nie zrobiteż tego jego pojedynczy obszar. Zatem segment zwiększający swój rozmiar często będziewykazywać znaczną liczbę przewinięć.

Drugi raport pokazany jest w poniższym listingu i różni się on nieco od pierwszego.Proszę zwrócić uwagę na to, że nie wykazuje on rozszerzeń (�8��,��), a jedynie prze-winięcia.

#�K1��������������������/<&�DX1�����8�D#B������;1�8�D#B��:��<���1L&1#2�77777777777777777777�7777777777�7777777777�7777777777�77777777777777777�=�&1K����������������������������������� ������������ ������ �������� � ������������������������ 4�+�5 �������� ����4�%4 4� ������4�������� � ������������������������ 4�+�5 �������� ����44+544�� �������5�������

W takiej sytuacji optymalny rozmiar segmentu wycofania został dobrany prawidłowo,lecz wielkość jego obszarów jest zbyt mała. Pomimo że segment wycofania jest w sta-nie pomieścić transakcje, ich pozycje wymagają wielu obszarów wewnątrz segmentu.W takiej sytuacji należy ponownie utworzyć segmenty wycofania z identycznymi war-tościami optymalnymi, ale ze zwiększonym rozmiarem obszarów.

Page 23: Oracle9i. Administrowanie bazami danych od podstaw

282 Część II � Zarządzanie bazą danych

Monitorowanie obszarów

W aktualnej wersji oprogramowania maksymalna ilość obszarów jest ograniczona jedy-nie możliwościami systemu operacyjnego. Możliwe jest utworzenie tabeli z wykorzy-staniem opcji 4�9 9" �)�0���4�" � (lub przy użyciu dowolnej liczby takich opcji). Wiel-kość 4�9 9" �)�0���4�" � nie jest jednak zupełnie nieograniczona. Jeżeli sprawdzimywartość kolumny ��9��9" �) tabeli �������� dla tabeli utworzonej z wykorzystaniemopcji 4�9 9" �)�0���4�" �, to okaże się, że znajdująca się tam liczba to 2 147 483 645,co w praktyce oznacza wielkość nieograniczoną. Jeżeli dla przestrzeni tabel nie zostałazdefiniowana maksymalna liczba obszarów i w czasie tworzenia tabeli w klauzuli )"'�!�( nie zostanie podana maksymalna liczba obszarów, przyjęty zostanie maksymalnydomyślny limit o wielkości opartej na rozmiarze bloku bazy danych. Dla przykładuutwórzmy przestrzeń tabel w bazie danych o rozmiarze bloku 8 KB:

"'�������6��������K=J&�2���$����N-9(�����/'�����-9(6 -9J�� ��(6$N���C��� K(�$��������'���>��������+ ����������������������+ �����������������-�����������?�������Q<'C���'C�Z���6���C����H������'C����

Nie podaliśmy maksymalnej ilości obszarów. Utwórzmy teraz tabelę i sprawdźmy, jakabędzie dla niej domyślna wartość 4�9 9" �).

�'�������6���K=J&���>1���-��)�'���'�>� ?!�1-������-6�'?Q&�6����C����H������'C����

Sprawdźmy teraz nadaną jej wartość 4�9 9" �) w tabeli *���������.

�������&�6��J#�-�!�D������J1�����!�K��J1��������$'�-�F�1�J&��01����'��&�6��J#�-��G�NK=J&��NQ&��01J#�K1���������������������D#D&D�0J1L&1#&�K�LJ1L&1#&�777777777777777777777777777777�77777777777777�77777777777K=J&������������������������������������+�4������������+ +

Jak widać, maksymalna ilość obszarów odpowiada wartości domyślnej dla bazy danycho długości bloku 8K.

Do monitorowania wzrostu tabel w bazie danych można wykorzystać poniższy skrypt:

�'�-����<��:2X�#D1�I��3K1#&�"�D�/�D1B&[:���X=�2�#="8Q�'�-������-��/���'����'�������J)�����/���'J;�'����-�����-���J#�-��$�'-���� ����(����N/6A����#�-��N����-�����-���J&9���$�'-����%����(����N&�6��PD�(��N����-���9����$�'-���%%%!%%%!%%%����(����N�9�������(�N����-��1�������$�'-���%%%����(����N#���N6'�������/���'������������������������'�N�����'��$'��-�����A����6��N��������7���$��NF���'C9H�N�/���'J;�'��������������/���'!����������-���J#�-�!����������-���J&9��!��������9���!

Page 24: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 283

�������K��J1������!�������1�������$'�-�2��J�13K1#&����'���1������W+ ����(����-���J&9���G�N&��01N�'(�'�69�/���'!����-���J#�-�!����-���J&9��!�K��J1������P������������'�N����'��$'��-�����A����(���@��N��������7���$��NF���'C9H��N�/���'J;�'��������������/���'�!����������-���J#�-�!����������-���J&9��!��������9���!�������K��J1������!�������1�������$'�-�2��J�13K1#&����'��1�������W+ ����(����-���J&9���G�ND#21LN����(�/���'��������>N�=�N!�N�=�&1KN?�'(�'�69�/���'!���-���J#�-�!���-���J&9��!K��J1������P

Skrypt sprawdza dowolną tabelę lub indeks, dla których ilość obszarów przekracza 50.Oczywiście poziom ten można zmienić tak, aby był sensowny dla innego środowiska.Pomysł polega na kontrolowaniu tych tabel, które ze względu na wzrost mogą wymagaćwiększej ilości obszarów, niż została im przydzielona. Wynik wykonania skryptu wy-gląda tak:

�<��:2X�#D1�I��3K1#&�"�D�/�D1B&[:���X=�2�#="8Q

�������������������������������������������'��$'��-�����A����6��F���'C9H�&1�&/6A����#�-���������������������&�6��PD�(���9�������(��K�LJ1L&1#&��#��777777777777777777777777777777�777777777�777777777777�77777777777�7777�13JD#�����������������������&��01�������� +!���!5 ���������� ��+�4�13J/F&����������������������&��01���������!555!�4 ���������� ������������������������������������������������'��$'��-�����A����(���@�

F���'C9H��&1�&

/6A����#�-���������������������&�6��PD�(���9�������(��K�LJ1L&1#&��#��777777777777777777777777777777�777777777�777777777777�77777777777�7777D2LJ�1�JD#���������������������D#21L��������!�5�!� ���������+ +����5�D2LJ�13J/F&��������������������D#21L��������!%�+!�� ���������+ +����4D2LJ�13J/F&J�������������������D#21L�������! ��! ���������+ +�������=�J" ++%+��������������������D#21L��������!�5%!�5 ���������+ +���� �=�J" ++%���������������������D#21L��������!�� !� ���������+ +����4

Jak widać, maksymalna ilość obszarów dla tabel ��+�$, i ��+� *� jest większa od war-tości domyślnej. W części raportu dotyczącej indeksów widzimy dwa indeksy, którychnazwy rozpoczynają się od �����. Jeżeli zostanie utworzony indeks bez nazwy, Oracleautomatycznie przypisze mu identyfikator ����� zakończony numerem. Pomimo że nieistnieją żadne ograniczenia w tworzeniu takich indeksów, trudno jest uchwycić ichzwiązek z tabelami, na których zostały zbudowane. Zalecamy jawne nazywanie indek-sów w czasie ich tworzenia i wykorzystywanie konwencji nazw, pozwalającej na szyb-ką identyfikację odpowiadających im tabel.

Page 25: Oracle9i. Administrowanie bazami danych od podstaw

284 Część II � Zarządzanie bazą danych

Jako alternatywę możemy uruchomić taki skrypt:

����$��(6�����$$�Q������'-��$$Q����������C��5 Q������������ Q����������C��� Q����26J#�-�����J)��������������������ND#�&�#"1�#�K1N��2���'������!�;�����26J#�-��$'�-�;O<���K1&1������'������'>#�-�?�G�N2�J#�K1NP������������'����������N��</�&�<�X1�&�X1#DP&��10P/��X���"8N����-��&�6�������J#�-��$�'-�����+����(����N&��01�<�"1Y#�K1N����-�����-���J#�-��$�'-�����+����(����N&��01Y#�K1N����-��1�������$�'-���%%%%%����(����N1L&1#&�N����-��K��J1�������$�'-���%%%%%����(����NK�L1L&1#&�N����-��/���'�$�'-����� ����-�����-���J&9����$�'-���������(����N&��01Y&=<1N6'�������&�6�������J#�-������������'���'������������J������������������&�6�������J#�-�!����-���J#�-�!���-���J&9��!�/���'!�1������!�K��J1��������$'�-�2��J�13K1#&�����'�����-���J&9�����������>N"�"81N!�N�/00��"BN!�N21I1��12��/00��"BN�?����(�>>�1������P(���(�>K��J1������! !�!K��J1������??M� W�+����'�>1�������W�+ ���(�K��J1�������G���4�4�54+?�?�'(�'�69�&�6�������J#�-�!/���'!����-���J#�-�P�������$$����

Ta wersja skryptu tworzy raport o wszystkich segmentach (tabelach, indeksach, seg-mentach chwilowych), które mają już zaalokowane więcej niż 25 procent wartości mak-symalnej obszarów (4�9 " �")) lub, jeżeli wartość maksymalna jest nieograniczona,w których wypełnionych jest więcej niż 250 obszarów. Polecenie � �'� w klauzuli:� ! zabezpiecza wyrażenie przed ewentualnym dzieleniem przez zero. Wyniki wyko-nania raportu mogą wyglądać tak:

������������������������</�&�<�X1�&�X1#DP&��10P/��X���"8&��01�<�"1������&��01�����������&��01#�K1������������#�K1������������&=<1���/:#1���1L&1#&��7�K�L1L&1#&�777777777777777�777777777777777�7777777�7777777777777��77777777777F�1��������������13JD#����������&��01���&1�&�������+��������� 2D"&K3K&��������/;1�K�L���������&��01�����"810������������4�4�54+

Niezależnie od monitorowania obiektów, których rozmiar zbliża się do maksymalnejilości zdefiniowanych dla nich obszarów, powinniśmy wiedzieć, które z nich nie są w sta-nie w ogóle zwiększyć swoich rozmiarów. Kolejny skrypt umożliwia identyfikację obiek-tów, dla których następny obszar przekracza ilość wolnego miejsca w przestrzeni tabel.

����-��\/��1"&\�$�'-����� ����-��\&��01�<�"1\�$�'-����� ����-��\&=<1\�$�'-����5����-��\#1L&�>K?�\�$�'-���%%%%%����-��\1L&1#&�\�$�'-����%%%����������5 �������\���</�&�<�X1B�/"X1#D��B/01�#="8�/��X��[:�\�����������-���J#�-��\/�01"&\!����-���J&9����\&=<1\!�1�������\1L&1#&�\!

Page 26: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 285

��������'���(�>#���J1�����P� �4P� �4?��\#1L&�>K?\!��������(��&�6�������J#�-��\&��01�<�"1\!�'���(>($�0'������P� �4P� �4?��\0�3�&1L&\��$'�-�2��J�13K1#&��(�!�����������>�������&�6�������J#�-��\&��01�<�"1\!�-��>�9���?��\0�3�&1L&\���������������$'�-�2��JI�11J�<�"1����������������'����69��&�6�������J#�-�?�($����'���(��&�6�������J#�-���G�($�\&��01�<�"1\������(�#���J1������W�\0�3�&1L&\������(��(�����-���J&9����������>N�/00��"BN!�N21I1��12��/0��"BN!�N&1K</���=N?P<�]���9�������������������������������������������������������������������'����������������������������������</�&�<�X1B�/"X1#D��B/01�#="8�/��X��[:/�01"&��������������������&=<1���1L&1#&����#1L&�>K?�&��01�<�"1�������������0�3�&1L&777777�7777777�7777777777�77777777777777777777�7777777777777777777777777777777777777&�L�1&F�#������������������&��01�����������������+�����K�00&�0���������������������4

Raport pokazuje, że następny obszar dla tabeli ��8���*�,�ma rozmiar 5 MB, podczasgdy największy dostępny w przestrzeni tabel obszar ma wielkość 4 MB. Jeżeli tabelabędzie musiała zwiększyć swoją wielkość, to transakcja, która tego zażąda nie zostaniewykonana z powodu braku wystarczającej ilości wolnego miejsca w przestrzeni tabel.Jeżeli liczba aktualnie alokowanych obszarów jest znaczna, można rozważyć ewentual-ną przebudowę tabeli z większymi obszarami początkowym i kolejnym. W wypadkugdy w bazie danych istnieją przestrzenie z małymi, średnimi i dużymi rozmiarami ob-szarów, w grę wchodzi tez zmiana przestrzeni tabel, do której należy tabela.

Wiemy już, kiedy próba rozszerzenia tabeli zakończy się negatywnie, ale jak określić,kiedy będzie ona zwiększać swój rozmiar? Chcemy teraz odpowiedzieć na to pytanie.

Pozostała przestrzeń

Pomimo że skrypty w poprzednim podrozdziale dostarczają informacji o poziomie frag-mentacji tabel i indeksów, umożliwiając tym samym porównywanie wyników na prze-strzeni wielu dni lub tygodni i obserwowanie częstotliwości powiększeń obiektów, niedostarczają żadnej informacji o tym, kiedy należy spodziewać się zwiększenia ich roz-miarów.

Dlaczego powinniśmy wiedzieć, jaką przestrzeń zajmują obiekty bazy danych? Otóżwyobraźmy sobie sytuację, w której wszystkie obiekty jednocześnie próbują zwiększyćswoje wymiary. Czy w bazie danych istnieje tyle wolnego miejsca, by sprostać takiejsytuacji, czy też nagle go zabraknie, a kolejni zniecierpliwieni użytkownicy będą sy-gnalizować brak przestrzeni? Czy w naszej przestrzeni tabel istnieje wystarczająco dużyniezajęty obszar zdolny pomieścić największy kolejno alokowany obszar?

Jedynym sposobem na utrzymanie kontroli nad taką sytuacją jest utworzenie tabeliprzeznaczonej do przechowywania informacji o historii obiektów i charakterystyk ichprzechowywania. Można ją wykorzystać do analizowania trendów i tworzyć na jej po-stawie dzienne raporty ostrzegające o obiektach, którym brakuje miejsca do rozszerzenia.Pokazany poniżej skrypt wykorzystujemy do utworzenia tabeli informacji historycz-nych. Wypełniamy tę tabelę informacjami początkowymi o największych i najczęściejaktualizowanych obiektach. Pozostałe skrypty tego podrozdziału służą do wpisywaniadziennych statystyk dotyczących obiektów, których zachowanie analizujemy oraz do

Page 27: Oracle9i. Administrowanie bazami danych od podstaw

286 Część II � Zarządzanie bazą danych

raportowania wyników. Oracle dostarcza pakiet ��������, który można znaleźć w pod-katalogu /rdbms/admin, ORACLE_HOME. Pakiet ten zawiera procedurę *,*��������dostarczającą raport o rozmiarze alokowanej przestrzeni, która nie jest wykorzystywanadla danych. Przed wykorzystaniem tego pakietu trzeba zalogować się do bazy danychi zainstalować go w przedstawiony niżej sposób (przykład dotyczy systemu Unix):

�*������\P�����9�(6�\^O/��"01J8/K1P'(6-�P�(-��P(6-�������*�^O/��"01J8/K1P'(6-�P�(-��P�')��������6

Można teraz wykorzystać pakiet ��������.

�'�������6���1L&3�/:�>�����-���������;��"8��>��?��#/&�#F00�!���������������;��"8��> ?��#/&�#F00�!3'��(����������2�&1���������#/&�#F00�!����9����������;��"8���>��?�!����6����������;��"8���> ?�!1��������������#FK�1��!#��������������#FK�1��!&6�$'����������#FK�1��!8�-������������#FK�1��!&��69����������#FK�1��!F��(69���������#FK�1��!"�����$'�������#FK�1��!I'�������������#FK�1��!&6�������������#FK�1�?��6��������&//0�����'����>��������������%� ������������������������%� ����������-������������ ����������-�����������+ +����������������'����� ?P����'���6���1L&3�/:��((������'�����1L&3�/:J<B�������'�-�'9���9�>�����-�!������!3'��(���?��������������(�����6��������&//0�JD2L���������'����>��������������%� �����������������������������%� ���������������-������������ ���������������-�����������+ +���������������������'����� ?Q

Stopień wzrostu tej tabeli zależy od ilości analizowanych tabel i indeksów. Część in-formacji dotyczy przestrzeni tabel, w których znajdują się obiekty, pozostałe to dane natemat samych obiektów.

Do wstępnego wypełnienia tej tabeli można wykorzystać pokazany niżej skrypt. Po uru-chomieniu prosi on o nazwę użytkownika tabeli i indeksu. Można go uruchamiać wielo-krotnie, dla każdego użytkownika bazy danych, którego obiekty zamierzamy kontrolować.

D���'�������1L&3�/:>�����-�!������!3'��(���!����9��!����6�!1���!����������������������#������!&6�$'��!8�-!&��69���!F��(69���!����������������������"�����$'��!I'�����!�&6�����?

Page 28: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 287

���������������-���J#�-�!/���'!��������������J(���>��J���'>�9�(���7�!N===KK22N?!N===KK22N?!���������������-���J&9��!&�6�������J#�-�! ! ! ! ! ! ! ! ! ������$'�-�2��J�13K1#&��������'��/���'G�����'>NR��N?�������(����-���J&9������>N&��01N!ND#21LN?P

Codzienne uzupełnianie danych umożliwia kolejny skrypt, wymagający daty w forma-cie ������� jako parametru wejściowego. Należy podać tu aktualną datę, procedura za-kłada, że odpowiada ona pozycjom w tabeli �8�+� 7 z poprzedniego dnia.

(����'���&����J�����������#FK�1�Q��&����J�9���������#FK�1�Q��F����(J����������#FK�1�Q��F����(J�9��������#FK�1�Q��0��JI���JD(������#FK�1�Q��0��J�����JD(�����#FK�1�Q��0���JF��(J�������#FK�1�Q��&J#�-������������1L&3�/:������-�S&=<1Q��&�J#�-�����������1L&3�/:�����6�S&=<1Q��8�-��������������#FK�1�Q��&J1��������������#FK�1�Q��&J/��������������1L&3�/:�������S&=<1Q��#J1��������������#FK�1�Q��&JI'�������������#FK�1�Q��#J1��J�9���������#FK�1�Q��0J"��������������#FK�1�Q��26J���J��C�������#FK�1�Q

����'��'�&���<�"1���������������&�6��J#�-�!������������(��/���'!������������(��&�6�������J#�-�!������������(��#���J1�����!������������1������!������������(���������������$'�-�2��J&��01��(�!�1L&3�/:���!�2��J�13K1#&��(���������'���&�6��J#�-��G������-�����������(�(��/���'�G�����������������(�(��/���'�G�����������������(����-���J#�-��G������-�����������(�3'��(����G���J(���>NR�N!N====KK22N?7��Q

����'��'�D#2�<�"1�����������������D�(��J#�-�!��������������(��/���'!��������������(��&�6�������J#�-�!��������������(��#���J1�����!��������������1���������������$'�-�2��JD#21L1��(�!�1L&3�/:���!�2��J�13K1#&��(�����������'���D�(��J#�-��G�����-�������������(�(��/���'�G������������������(�(��/���'�G������������������(����-���J#�-��G�����-�������������(�3'��(����G���J(���>NR�N!N====KK22N?7��Q

Page 29: Oracle9i. Administrowanie bazami danych od podstaw

288 Część II � Zarządzanie bazą danych

��6��������������;�����������������26J���J��C���������$'�-��=��;JO<���K1&1����������'������'>#�-�?�G�N2�J�0/"BJ�DX1N�Q�������&���<�"1Q�������������$�����&���<�"1������������&J#�-�!������������&J/��!������������&�J#�-�!������������#J1��J�9���!������������&J1���!������������8�-Q���������������&���<�"1S#/&I/F#2Q

����2�K�J�<�"1�F#F�12J�<�"1>&J/��!&J#�-�!N&��01N!&����J������!&����J�9���!�����������������������F����(J������!F����(J�9���!0��JI���JD(!0��J�����JD(!�����������������������0���JF��(J�����?Q���8�-G8�-M26J���J��C�Q���������������>M?!������������->�9���?!����������-��>�9���?���������#J1���!&JI'��!0J"���������$'�-�2��JI�11J�<�"1������'��&�6�������J#�-�G�&�J#�-�Q

������'�������1L&3�/:�>�����-�!������!3'��(���!���&9��!����6�!1���!�����������������������#������!&6�I'��!8�-!&��69���!F��(69���!"�����$'��!�����������������������I'�����!&6�����?�������������)������>&J#�-�!&J/��!��J(���>NR�N!N====KK22N?!N&��01N!&�J#�-�!���������������������&J1���!#J1��J�9���!&JI'��!8�-!&����J�9���!���������������������>&����J�9���7F����(J�9���?!0J"����!���������������������>F����(J�9���P&����J�9���?M� !#J1���?Q�������--��Q���(�����Q��������&���<�"1Q

�������D#2�<�"1Q�����������$�����D#2�<�"1������������&J#�-�!������������&J/��!������������&�J#�-�!������������#J1��J�9���!������������&J1���Q����������������D#2�<�"1S#/&I/F#2Q�������2�K�J�<�"1�F#F�12J�<�"1>&J/��!&J#�-�!ND#21LN!&����J������!&����J�9���!�����������������������F����(J������!F����(J�9���!0��JI���JD(!0��J�����JD(!�����������������������0���JF��(J�����?Q������������������>M?!���������������->�9���?!�������������-��>�9���?������������#J1���!&JI'��!0J"��������������$'�-�2��JI�11J�<�"1�����������'��&�6�������J#�-�G�&�J#�-�Q

Page 30: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 289

�����������'�������1L&3�/:�>�����-�!������!3'��(���!���&9��!����6�!1���!�����������������������#������!&6�I'��!8�-!&��69���!F��(69���!"�����$'��!�����������������������I'�����!&6�����?�������������)������>&J#�-�!&J/��!��J(���>NR�N!N====KK22N?!ND#21LN!&�J#�-�!���������������������&J1���!#J1��J�9���!&JI'��!8�-!&����J�9���!���������������������>&����J�9���7F����(J�9���?!0J"����!���������������������>F����(J�9���P&����J�9���?M� !#J1���?Q�������--��Q���(�����Q��������D#2�<�"1Q���(QP

Skrypt ten jest wykorzystywany do wypełnienia tabeli �8�+� 7 informacjami o prze-strzeni dostępnej i wykorzystanej przez obiekty, których nazwy zostały w niej umiesz-czone dla przekazywanej jako parametr daty. Kod PL/SQL, który nie jest przechowy-wany w bazie danych jako procedura lub pakiet, nazywany jest anonimowym blokiemPL/SQL i jest kompilowany przed każdym wykonaniem. Jeżeli zamierzamy uruchamiaćgo częściej niż raz dziennie, wskazane jest przekształcenie go do postaci proceduryskładowanej, tak by Oracle mógł wykonywać go szybciej, pomijając etap kompilacji.

Posiadając wszystkie potrzebne informacje, potrzebujemy przedstawić je w jasnej i czy-telnej formie. Jest to zadanie kolejnego skryptu, który pobiera i formatuje wiersze tabeliw oparciu o przekazane mu parametry. Wyniki jego działania są zapisywane do pliku )���� !�"�&)5�.

����������C��+ ��'�-���������������C���+ �)�'�$9��$$�$��(6�����$$����������$$���'-��$$���������-�������$�'-����� ��������������(������N/��1"&N�����������������$�'-����� ��������������(������N/:#1�N��������9��������$�'-����+��������������(�������N&=<1N��������6��������$�'-����� ��������������(������N&��01�<�"1N����1������������$�'-���%%%��������������(������N/��1L&�N����#������������$�'-���%!%%%!%%%!%%%����(������N#1L&�1L&1#&N����&6�$'��������$�'-���%!%%%!%%%!%%%����(������N&/&�0�&���I�11N����8�-����������$�'-���%!%%%!%%%!%%%����(������N8D38:�&1��K��BN����&��69��������$�'-���%!%%%!%%%!%%%����(������N&/&��0/"��<"N����F��(69�������$�'-���%!%%%!%%%!%%%����(������NF�12��<�"1N����"�����$'�����$�'-���%!%%%!%%%!%%%����(������N0��31�&�I�11N����I'�����������$�'-���%%%!%������������(������NS�I�11N����&6�����������$�'-���%%%%�������������(������N&��1L&�N��-�������-��$�#��������������6�6'�������'���'���������6������������������$'������&6���������������������������6�!��������&6�$'��!��������"�����$'��!��������&6�����!��������������!�������������-�!������������9��!��������8�-!��������&��69���!��������F��(69���!1���!��������#������!��������I'��������$'�-�1L&3�/:

Page 31: Oracle9i. Administrowanie bazami danych od podstaw

290 Część II � Zarządzanie bazą danych

�����'��I'�����VR����(�3'��(����G���J(���>NR�N!N====KK22N?�������(�����6�����������'>NSRSN?��'(�'�69�����6�!���/��!���#�-�

��������������T��������������'��JR�����P����

Po uruchomieniu skrypt wymaga trzech parametrów wejściowych: procentowej ilościwolnej przestrzeni, którą należy wziąć pod uwagę, daty analizy w formacie ��������i nazwy przestrzeni tabel. Jeżeli zamierzasz zobaczyć dane dla wszystkich obiektów, któ-rym pozostało 10 procent lub mniej wolnej przestrzeni 10 marca 2002 roku, to należyuruchomić skrypt z argumentami:

^^�����'����� ��� � � �\S\

Przykładowy wynik jego działania pokazano poniżej. Ilość uzyskiwanych danych jestznaczna i listing zawija się w kilku liniach.

&��01�<�"1�&/&�0�&���I�11���0��31�&�I�11�&��1L&��/:#1�������/��1"&����������������13&=<18D38:�&1��K��B���&/&��0/"��<"�����F�12��<�"1�/��1L&�����#1L&�1L&1#&�S�I�117777777777�77777777777777�77777777777777�7777777�7777777777�77777777777777777777�77777777777777777�77777777777777�77777777777777�77777777777777�7777777�77777777777777�777777�=�&1K����������5! ��!�5�������5! ��!�5�����������=����������""1��O��������������&��01�!44+!����������!44+!����������+��������� �!4 ������ ����������������5! ��!�5��������������������������������������3FK1#&O������������&��01�!�5+! ���������!�5+! ������������������ �!4 ������ ����������������5! ��!�5������������������������������������"/KO�����������������&��014��!�����������4 �!4 ��������+��������� �!4 ������+����������������5! ��!�5������������������������������������"/#O�����������������&��014+! +5���������4+! +5�����������������!�5������� ����������������5! ��!�5������������������������������������21<1#21#"=O����������&��01�!5�4!5���������!5!�������������������� �!4 �����������������������5! ��!�5������������������������������������2F�0�����������������&��01MMMMMMMMMM����������������MMMMMMMMMMMMMM�MMMMMMM�MMMMMMMMMM77777777777777��-!%+5!�5

Polecenie ������ wykorzystuje zmienne w miejscu wpisywanych na stałe wartości, takwięc nie trzeba po zmianie daty lub innych danych wejściowych, wykonywać jego po-prawek. Jesteśmy zdecydowanymi zwolennikami takiego sposobu kodowania. Skrypttworzony jest raz, bez potrzeby wracania do niego i wykonywania drobnych poprawek.

Po podstawieniu wartości ��� do pierwszego parametru (;�) można zobaczyć każdą tabelęi indeks dla daty podanej jako drugi parametr. Skrypt oczekuje jej w formacie �������i dołącza do dziennika wyjściowego. Wykorzystanie takiego formatu umożliwia sor-townie plików raportu pod względem daty. Ponieważ Oracle nie oznacza końca wczy-tanego parametru, skrypt zmienia znak łączenia na < przed wywołaniem zmiennej włą-czonej do nazwy pliku raportu.

Znak = wykorzystywany jest przez Oracle jako wieloznacznik (ang. wildcard), dopusz-czający dowolną wartość. Parametr ;>�ujęty pomiędzy = informuje, że wybrane mają byćwszystkie przestrzenie tabel posiadające w swojej nazwie podany pomiędzy znakiem =

Page 32: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 291

fragment. Przekazanie parametru = jako wartości trzeciego parametru powoduje wybra-nie wszystkich przestrzeni tabel.

Przeanalizujmy teraz nieco dokładniej informacje uzyskane w wyniku wykonania pole-cenia ������. Każda z linii raportu zawiera ich znaczną ilość i na wydruku jest przed-stawiona w dwóch kolejnych liniach tekstu. Bez dodatkowych wskazówek interpretacjawyników może okazać się trudna.

&��01�<�"1�&/&�0�&���I�11���0��31�&�I�11�&��1L&��/:#1�������/��1"&����������������13&=<18D38:�&1��K��B���&/&��0/"��<"�����F�12��<�"1�/��1L&�����#1L&�1L&1#&�S�I�117777777777�77777777777777�77777777777777�7777777�7777777777�77777777777777777777�77777777777777777�77777777777777�77777777777777�77777777777777�7777777�77777777777777�777777F�1����������5 !5+!�������55!�4!�4 ���������&1�&����������D2LJ�13JD#���������D#21L�����������������!5� ����������!5� ������������������������4 !%5 ����� ��������������������������������������������������������������D2LJ�13J/F&��������D#21L���������������!5��!44 ������!�5�!44 ��������5 ��������������4 !%5 ��44!%%�!5+5���4! 4%!�� �����4! 4%!�� ���������������������4 !%5 ����������������������������������������������������������������13J/F&&��01���+!+�!� ���+�!+� !�� �����+�!4��!� ��������4������������! 4�!+�5�������5MMMMMMMMMMMM��MMMMMMMMMMMM���MMMMMMMMMMMM����MMMMMMMM���MMMMMMMMMMMMMM�������������������������������������������������������77777777777777777����-������������������������������������������������������!���!4+5

Co możemy stwierdzić na podstawie tego wydruku? Przestrzeń tabel o nazwie *���� ma603,635,712 wolnych bajtów z największym ciągłym obszarem o rozmiarze 66,314,240.Przestrzeń tabel jest znacznie pofragmentowana i całkowita wolna przestrzeń dostępnajest w 327 obszarach. Informacje te są wydrukowane tylko w pierwszej linii z powoduwydanego w raporcie polecenia 6! ��, łatwiej jest w ten sposób określić, kiedy pojawiasię zmiana.

Żaden z obiektów pokazanych na listingu nie ma kolejnego obszaru większego niż naj-większy wolny w przestrzeni tabel. Suma następnych obszarów dla procentowej ilościpozostałego wolnego miejsca, wynosi 1,171,456 bajtów, które mogą zostać łatwo umiesz-czone w całkowitej wolnej przestrzeni tabel lub w jej największym niezajętym obszarze.Wszystkie obiekty wykazują mały procent wolnego miejsca, co sygnalizuje, że wkrótcemoże nastąpić ich rozszerzenie. Lista może, ale nie musi, zawierać wszystkie obiektyprzestrzeni tabel. Jedynym sposobem zdobycia absolutnej pewności, że dysponujemywystarczającą ilością wolnego miejsca, jest uruchomienie raportu z wartością jegopierwszego parametru równą ���, co umożliwia obserwację wszystkich obiektów ze stu-procentową lub mniejszą wartością pozostałej wolnej przestrzeni.

Pliki śladu

Kiedy w czasie sesji użytkownika lub podczas działającego w tle procesu wystąpi błądwewnętrzny, Oracle tworzy plik śladu (ang. trace file), który ułatwia debugowanie i roz-poznanie jego rodzaju. Administrator bazy danych (DBA) może zdefiniować miejsce jegoutworzenia i maksymalny rozmiar, wykorzystując poniższe parametry inicjujące:

� ��8��*��/$����$?� — maksymalna, możliwa do osiągnięcia, wielkość plikuśladu.

Page 33: Oracle9i. Administrowanie bazami danych od podstaw

292 Część II � Zarządzanie bazą danych

� ��@+� *,���*������ — lokalizacja pliku śladu tworzonego przez pracującew tle procesy Oracle.

� *�����*������ — położenie plików śladów tworzonych poza sesjamiużytkowników.

Pliki śladu utworzone przez pracujące w tle procesy otrzymują nazwy zawierające okre-ślenie tworzącego je procesu, nazwy plików generowanych przez procesy użytkowni-ków uwzględniają ich identyfikatory (ID).

Dobrym zwyczajem jest przeniesienie katalogów dla plików śladów ze standardowejlokalizacji ORACLE_BASE na odrębny dysk. Pliki śladów nie są automatycznie kaso-wane i ich liczba może znacznie wzrosnąć. W większości będą to prawdopodobnie sta-re, aktualnie bezwartościowe pliki. Z tego powodu należy zastanowić się nad czasemich utrzymywania i częstotliwością opróżniania katalogu. Jedyną zaleta wynikającąz długiego utrzymywania plików śladu jest szansa uchwycenia momentu pojawieniasię problemu.

Wystąpienie błędu wewnętrznego, niezależnie od utworzenia pliku śladu, powoduje za-pis do dziennika ostrzeżeń. Umieszczana tam linia zawiera numer błędu Oracle, a takżenazwę i lokalizację pliku śladu. Jeżeli po sprawdzeniu numeru błędu okaże się, że niejest to błąd programowy lub błąd użytkownika, zalecane jest wywołanie strony pomocytechnicznej Oracle (MetaLink) i zalogowanie się tam jako ����. Użytkownik zostaniepoproszony o przesłanie pliku śladu do analizy.

Poniżej umieściliśmy dwa przykładowe pliki śladów. Pierwszy z nich pochodzi z kata-logu plików śladów użytkownika, który prawdopodobnie włączył śledzenie wykonywa-nia wydawanych przez siebie poleceń SQL. Jeżeli występuje tu jakiś problem, to z całąpewnością jego usunięcie nie należy do pomocy technicznej.

2�-��$�����./'����.�(-��.6(% �.�(�-�./�� ��4�&�"&��������5�� �5�4�� �/��"01�;%� �������7�<'�(�������)�����G )���*�G� �)����'G:��(����� �;+� !���')����<�����!�"<F��9���+�5/'����%��1���'�'����1(��������������%� �������7�<'�(���������')�'���������%� ����� �7�<'�(������:��(����� �;+� !���')����<�����!�"<F��9���+�5D����������-��(6% �

��(����'��(�-�����(�69����������������

/'������'��������-6�'��

:��(������'��(��(���4!��-����/��"01�1L1MMM�� �7 �7�5�� �5�4� MMM��1��D/#�D2>��5+?�� �7 �7�5�� �5�4� �<<#�K1�-�(GN�_0M<���N�-�G55%%4% �4����GNN���G4 �%����4 GGGGGGGGGGGGGGGGGGGGG<���D#3�D#�"F��/��,�����G��(��G ���(G�%����G4����(G�%���-G � 54 ���)G��%�%+4�4�(GN6��46 N����'��������������*�J�'���G�'��1#2�/I��&K&1L1"�,��G !�G !�G !�'G !��G !-��G�!'G !(��G !��G4!��-G � �54 �

Page 34: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 293

MMM�� �7 �7�5�� 4��5� GGGGGGGGGGGGGGGGGGGGG<���D#3�D#�"F��/��,�����G4�(��G����(G ����G���(G ���-G�%4��4 ���)G�4+4 �% %�(GN6$6� +�N����������',!�9��,�$'�-����'O����'����-�G�1#2�/I��&K&GGGGGGGGGGGGGGGGGGGGG<���D#3�D#�"F��/��,������G%��(��G����(G ����G���(G ���-G�%��54 ���)G�4 �+�5�(GN6�4��4�N�������(�������>7�'�)�����,?!�)�>������O! ?�$'�-��9�����O����'���'�����,G����(�'�)�����,V 1#2�/I��&K&<���1�,���G !�G� !�G !�'G !��G !-��G�!'G !(��G�!��G !��-G�%��54 �1L1"�,���G !�G+ !�G !�'G !��G !-��G !'G !(��G�!��G4!��-G�%�%�4 �I1&"8�,���G !�G !�G !�'G�!��G !-��G !'G !(��G�!��G4!��-G�%�%�4 ��&�&�,����(G�����G ���(G ����G ��6AG ���GN�/�&�F#D_F1�N�&�&�,����(G�����G ���(G�����G���6AG%����GN&��01��""1����=�D#21L��/:D2

Drugi przykład zawiera niewielki fragment pliku śladu umieszczonego w katalogu śla-dów procesów. Ilustruje on zapis błędu ������, po którego wystąpieniu należy bez-względnie zawiadomić pomoc techniczną.

P� P��-�P�'����P�'�(���P�� �+P'(6-�P�'�(J�'�J� �5 ��'����/'������1���'�'����1(���������������� �+� � �7<'�(���������<0P�_0����������� �+� � �7<'�(���������/��"01J8/K1�GP� P��-�P�'����P�'�(���P�� �+����9���-���-����������/����#�(����-�������������������+�����;�'���������3���'��J� 5+4�7 ����K�������������4����D����������-����<�/2�����(����'��(�-�����(�69��������������� �V����W���/'������'��������-6�'�� ���F�����'��������(���� �5 !���-�����'���<�/2

���MMM�� �� ����������� ������(-������'�����'�$������''�'���/��7 5 �����'�����''�'���(�!��'��-�������B3K�F�= !��� !�� !�� !�� !�� !�� !�� ���"�''�����_0���$�'-���������)����6���7������������

Jak widzieliśmy w pierwszym przykładzie, możliwe jest wygenerowanie pliku śladu prze-znaczonego specjalnie do celów dostrajania zapytań. Umożliwia to opcja )5��"!�� � A��*�, ustawiona w pliku parametrów inicjujących lub w czasie sesji użytkownika. Plikiśladów tego typu są wykorzystywane przez �@� / do analizy wyrażeń SQL. Jeżeli jednakopcja ta jest włączona w większej ilości wypadków niż sesja pojedynczego użytkownika,pociąga za sobą obniżenie wydajności. Zalecamy zatem jej wykorzystywanie w przy-padku specyficznej kontrolowanej sesji albo ustawienie jej na ��*� dla całej bazy danychw ograniczonym i kontrolowanym przedziale czasu. Druga ewentualność wymaga za-trzymania i powtórnego uruchomienia bazy danych, zatem spadek wydajności jest po-dwójny. Po pierwsze wiąże się z ustawieniem opcji na ��*� (kiedy nadajemy jej wartość��*�B, po drugie z wykonanymi dwa razy procesami zatrzymania i uruchomienia bazydanych (wyłączenie i włączenie przy zmianie wartości na /����). Z całą pewnością możnastwierdzić, że nie jest wymagana dłuższa praca bazy danych z wartością ��*�. Dokład-niejszy opis �@� / zawiera rozdział 13.

Page 35: Oracle9i. Administrowanie bazami danych od podstaw

294 Część II � Zarządzanie bazą danych

Status sesji użytkownika

Perspektywa -.����$ , umożliwia sprawdzenie statusu sesji każdego z aktualnych użyt-kowników bazy danych. Poniższy skrypt zwraca ilość sesji zgrupowanych ze względuna ich status w bazie danych. Dlaczego należy kontrolować tę wartość? Administrator,przypisując wartość parametrowi ) ))�'�) w pliku inicjującym, jawnie lub niejawnie,ustala limit sesji dla bazy danych.

Jeżeli w bazie danych istnieje znaczna liczba sesji określonych jako @$���� lub �,$��,która nie maleje z upływem czasu, oznacza to, że liczba sesji możliwych do utworzeniamaleje. Jedynym sposobem usunięcia takich sesji jest zamknięcie i powtórne urucho-mienie bazy danych.

����������������!"����>M?����$'�-�;O�1��D/#��������'����69�������P

Zwracana jest lista:

�&�&F������"/F#&>M?77777777�7777777777�"&D;1������������5D#�"&D;1���������5 BD0012����������� "�"812������������+�#D<12������������

Wartości kolumny �"�"0) mogą powodować nieporozumienia. Wartość $,���$-� nie-koniecznie oznacza, że proces użytkownika nie jest aktywny. Stwierdza on tylko, żew chwili wykonania zapytania proces nie realizował polecenia SQL. Sesje oznaczone jako���$-� wykonują aktualnie zapytania SQL, @$���� są przeznaczone do usunięcia z bazydanych, �,$���są aktualnie nieaktywne i oczekują na działanie klienta. Sesje ���C�� sąobsługiwane przez Oracle*XA, zewnętrzny interfejs umożliwiający obsługę globalnychtransakcji przez manager transakcji inny niż Oracle. Jeżeli liczba sesji typów @$����,�,$��� i ���C�� nie zmienia się lub systematycznie się zwiększa, sygnalizuje to pro-blem w bazie danych, a kolejne sesje są niepotrzebnie zajmowane. W takiej sytuacji po-zostaje jedynie zatrzymanie i ponowne uruchomienie bazy danych.

Monitorowanie modyfikacji obiektów

Sprawdzenie zmian wprowadzonych do obiektów bazy danych umożliwia perspektywasłownika danych *���� D���� lub ��� D����. Dlaczego powinny nas interesować ter-miny ostatnich zmian w obiektach? Jeżeli system bazy danych jest środowiskiem eks-ploatacyjnym, zapewne chcesz wiedzieć, kto i kiedy wykonuje takie zmiany. Możnaw tym celu wykorzystać obserwację uprawnień (ang. privilege auditing), która jednaknie informuje, jaki obiekt został zmieniony. Perspektywy ��� D����� i *���� D����zawierają kolumnę o nazwie ��)"�������4 , zawierającą czas ostatniej modyfikacji obiektu.

Page 36: Oracle9i. Administrowanie bazami danych od podstaw

Rozdział 9. � Codzienne czynności 295

Ponieważ jednak Oracle uważa dodanie uprawnień lub indeksu za modyfikacje obiektu,pole to może nie zawierać czasu zmiany struktury samego obiektu. W kolumnie znacz-nika czasowego ��4 )"�4� obu perspektyw znajduje się czas modyfikacji zapisany jako-���C��EF�B, który należy przekształcić na datę. Wskazane jest stworzenie uruchamia-nego raz dziennie zadania wsadowego wykonującego poniższy skrypt SQL:

����/���'��������$�'-�����+����/6A���J#�-���$�'-����� ����&�-����-�����$�'-�����%�����������������$�'-���������/6A���J&9����$�'-����� �������/���'!�/6A���J#�-�!�/6A���J&9��!������!�&�-����-����$'�-�2��J/��1"&��������'���F��&�>&�-����-�!�!� ?G�&/J"8��>�9�(���7�!N====7KK722N?�����'(�'�69�/���'!/6A���J#�-�P

Uruchomienie tego skryptu umożliwia pokazanie wszystkich obiektów, zmienionychw poprzednim dniu, uporządkowanych według właścicieli. Raport zawiera kolumnę �"��"0), ponieważ procedury, funkcje i pakiety są obiektami, których zmiana może je unie-ważnić. Przykładowe wyniki wykonania skryptu wyglądają następująco:

/:#1������������/��1"&J#�K1����������/��1"&J&=<����&�&F�������&DK1�&�K<777777777777777�77777777777777777777�7777777777�77777777�7777777777777777777�=��������������2���1J&1K<�����������&��01���������;�0D2����� �7 �7��� 54+�=��������������&�<�"1J&1K<����������&��01���������;�0D2����� �7 �7��� 4%�4�=��������������D2LJ�13JD#�����������D#21L���������;�0D2����� �7 �7��� 4%�5�=��������������&1K<JD#��������������<�"B�31�������;�0D2����� �7 �7��� 4%�5�=��������������&1K<JD#��������������<�"B�31J�/2=��D#;�0D2��� �7 �7��� 4%�+

Raport sygnalizuje, że albo skompilowana postać pakietu ����$, zawiera błędy, albouległa zmianie jedna z tabel, do których się odwołuje, ponieważ status ma wartość$,-��$�. W takiej sytuacji pierwszy krok polega na próbie rekompilacji pakietu:

����'�����������-�J���'���-����Q

Jeżeli po tej operacji nadal występują błędy, należy skontaktować się z odpowiedzial-nym za pakiet programistą i powierzyć mu usunięcie problemu.