Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Strojenie,administracja itp Adam Pelikant. System Monitor SMON Zapytania równoległe Pnnn Process Monitor PMON Zakleszczenia Locks LCK Odzyskiwanie rozproszone.

Podobne prezentacje


Prezentacja na temat: "Strojenie,administracja itp Adam Pelikant. System Monitor SMON Zapytania równoległe Pnnn Process Monitor PMON Zakleszczenia Locks LCK Odzyskiwanie rozproszone."— Zapis prezentacji:

1 Strojenie,administracja itp Adam Pelikant

2 System Monitor SMON Zapytania równoległe Pnnn Process Monitor PMON Zakleszczenia Locks LCK Odzyskiwanie rozproszone Tx RECO Odświeżanie migawek SNPn Pamięć współdzielona Shared_Pool_size Bufor plików danych DB_Block_Buffers & DB_block_size Bufor plików wycofywania SGA System Global Area DBWRLGWR ARCH Serwer współdzielony Shared Server [PGA] Użytkownik [UGA] Pliki danych Pliki wycofywania Pliki kontrolneinit.ora Plik parametrów Obszar SQL Bufor słownika SQL Area is also known as “Library Cache” Pozostałe procesy CKPT Archiwalne pliki wycofywania

3 Pliki związane z system ORACLE Plik parametrów Pliki kontrolne Pliki śladu Pliki ostrzeżeń Pliki danych Pliki dziennika powtórzeń Arch. pliki dziennika powtórzeń

4 Struktura fizyczna bazy danych pliki parametrów (konfiguracyjne), pliki dziennika powtórzeń (co najmniej 2), pliki kontrolne, pliki danych, pliki ostrzeżeń, pliki śladu, archiwalne pliki dziennika powtórzeń

5 Plik parametrów definiuje instancję i jest plikiem o charakterze tekstowym. Zawiera parametry konfiguracyjne. Utrata pliku parametrów powoduje utratę ustawień instancji. Plik parametrów jest odczytywany w momencie startu instancji. Jakiekolwiek zmiany zawartości pliku zostaną uwzględnione po zamknięciu i ponownym uruchomieniu instancji. Domyślna nazwa pliku parametrów ma postać init.ora Parametry konfiguracyjne dotyczą między innymi: nazwy bazy danych, wielkości obszaru SGA, trybu pracy bazy danych, nazwy i położenia plików kontrolnych położenia plików śladu i ostrzeżeń

6 Plik parametrów optymalizację wydajności przez dostosowanie struktury pamięci (np. ilość buforów danych w pamięci), ustawienie wartości domyślnych dla całej bazy w momencie tworzenia, ustawienie limitów bazy (np. maksymalna ilość użytkowników bazy), wyspecyfikowanie plików bazy. Plik inicjalizacyjne (parametrów) umożliwiają:

7 Plik SPFILE (server parameter file) Administrator może przechowywać parametry inicjalizacyjne serwera w pliku binarnym (SPFILE). Plik ten jest binarnym repozytorium przechowującym parametry serwera. SPFILE jest przechowywany na serwerze, na którym zainstalowany jest Serwer Oracle. W przeciwieństwie do pliku parametrów, zmiany wartości parametrów wprowadzone w czasie działania instancji są odnotowywane w pliku SPFILE. Tak więc nie ma konieczności ręcznego edytowania pliku parametrów. Pliku SPFILE nie można edytować ręcznie. SPFILE tworzony jest komendą CREATE SPFILE na podstawie tekstowego pliku parametrów. Polecenie STARTUP domyślnie korzysta z pliku SPFILE. Jeżeli zamiast pliku binarnego chcemy skorzystać z tekstowego pliku parametrów to należy w poleceniu STARTUP użyć klauzuli PFILE. Jeśli natomiast SPFILE został utworzony lub nie znajduje się w odpowiedniej lokalizacji, system domyślnie skorzysta z tekstowego pliku parametrów init.ora.

8 Tworzenie pliku SPFILE CREATE SPFILE FROM PFILE=’/opt/oracle/init.ora’ CREATE SPFILE=’/opt/oracle/orcl_spfile.ora’ FROM PFILE=’/opt/oracle/init.ora’ Parametr SPFILE zawiera informację o aktualnym położeniu pliku SERVER PARAMETER FILE. Aby do startu instancji wykorzystać inny niż domyślny plik SPFILE należy w tekstowym pliku parametrów wpisać parametr SPFILE, np. SPFILE=/opt/oracle/orcl_spfile.ora a następnie uruchomić serwer komendą STARTUP np. STARTUP PFILE=/opt/oracle/init.ora

9 Zmiana parametrów ALTER SYSTEM wzbogacone o parametr SCOPE. Parametr SCOPE może przyjmować następujące wartości: ALTER SYSTEM SET JOB_QUEUE_PROCESSES=20 SCOPE=SPFILE; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=20 SCOPE=BOTH; ALTER SYSTEM SET JOB_QUEUE_PROCESSES=20 SCOPE=MEMORY; SPFILEzmiana parametru zapisywana jest w tylko pliku SPFILE. Polecenie ALTER SYSTEM SET nie wpływa w tym przypadku na zmianę parametru w instancji MEMORYzmiana parametru odnosi się do aktualnie działającej instancji – nie ma wpływu na plik SPFILE. BOTHjest to domyślna wartość parametru. Zmiana parametru odbywa się jednocześnie w pliku SPFILE i w instancji.

10 Przywrócenie domyślnych wartości parametrów Aby przywrócić domyślne ustawienia parametrów można posłużyć się poleceniem: ALTER SYSTEM SET parametr=' '; Jednak dla parametrów o typie numerycznym lub logicznym trzeba jawnie wyspecyfikować domyślną wartość parametru.

11 Eksport pliku SPFILE do pliku tekstowego PFILE Zawartość pliku binarnego można wyeksportować do pliku tekstowego – w tym celu można posłużyć się poleceniem CREATE PFILE. CREATE PFILE=’/opt/oracle/init.ora’ FROM SPFILE=’/opt/oracle/orcl_spfile.ora’; Parametry i ich wartości można odnaleźć w perspektywie słownika danych V$PARAMETER lub za pomocą polecenia SHOW PARAMETER.

12 Plik kontrolny Plik kontrolny zawiera informacje o fizycznej strukturze bazy danych oraz pewne informacje kontrolne potrzebne przy odtwarzaniu. W związku z tym, że dane zawarte w pliku kontrolnym są niezbędne do otwarcia i pracy bazy danych oraz do odtwarzania, bardzo często powiela się plik kontrolny na innym dysku (wskazane co najmniej dwa!!!).

13 Plik kontrolny Na wielkość plików kontrolnych mają wpływ między innymi następujące parametry: MAXLOGFILES określa maksymalną ilość grup dziennika powtórzeń, jaka kiedykolwiek zostanie utworzona w bazie danych. Wartość domyślna, minimalna oraz maksymalna uzależniona jest od systemu operacyjnego. MAXLOGMEMBERS określa maksymalna ilość poszczególnych plików dla każdej grupy dziennika powtórzeń. Wartość minimalna wynosi 1, wartość maksymalna uzależniona jest od systemu operacyjnego. MAXDATAFILES określa szacunkową wielkość bazy danych. Parametr ten jest ściśle związany z parametrem startowym DB_FILES, który określa maksymalną ilość plików wchodzących w skład bazy danych.

14 Plik kontrolny Zawartość pliku kontrolnego określa między innymi: –nazwę i datę utworzenia bazy danych, –informacje o wszystkich grupach dziennika powtórzeń wraz ze wskazaniem bieżącej grupy: Nazwę, rozmiar i lokalizację każdego pliku dziennika, Numer sekwencyjny bieżącego pliku dziennika, –nazwę, rozmiar i lokalizację oraz status (tylko do odczytu, odczyt/zapis, włączony/wyłączony/wymagający odtworzenia) każdego pliku danych, –informacje dotyczące punktu kontrolnego, –Informacje synchronizujące, potrzebne do odtworzenia bazy danych, –informacje dotyczące wykonanych kopii bezpieczeństwa przy otwartej bazie danych.

15 Plik kontrolny Parametry pliku konfiguracyjnego związane z plikiem kontrolnym: CONTROL_FILES=("plik1”, "plik2”,...) – określa nazwy i położenie plików kontrolnych. Przykład: CONTROL_FILES=("C:\Baza\Ctl1Baza.ora”, "C:\Baza\Ctl2Baza.ora”) Aby dodać nowy plik kontrolny dla istniejącej bazy należy: wyeksportować plik SPFILE do pliku tekstowego, zamknąć bazę danych, skopiować istniejący plik kontrolny w nowe miejsce, zmienić parametr CONTROL_FILES w pliku parametrów, utworzyć nowy plik SPFILE ze zmodyfikowanego pliku tekstowego, otworzyć bazę danych. V$CONTROLFILE – informacje o lokalizacji plików kontrolnych w bazie danych. V$CONTROLFILE_RECORD_SECTION – szczegółowe informacje o wszystkich rekordach zawartych w pliku kontrolnym.

16 Punkt kontrolny (checkpoint) Cyklicznym zdarzeniem systemowym, dzięki któremu proces DBWR zapisuje dane z bloków bufora danych pamięci SGA do odpowiednich plików na dysku. Informacje odnośnie punktu kontrolnego zachowywane są w pliku kontrolnym. Modyfikowane są także informacje zawarte w pliku kontrolnym oraz nagłówki plików danych, wpisywane są tam: –Data i czas zarejestrowania oraz numer ostatniego SCN w momencie wystąpienia zdarzenia, –Liczba punktów kontrolnych wykonanych dla pliku danych. –Punkt kontrolny zgłaszany jest przez proces CKPT. Punkt kontrolny można wymusić przy pomocy polecenia SQL: ALTER SYSTEM CHECKPOINT;

17 Rodzaje punktu kontrolnego Punkt kontrolny bazy danych: –Wykonywany jest dla wszystkich plików. –Występuje, gdy zaistnieje którakolwiek z poniżej wymienionych okoliczności: Przełączenie na inną grupę dziennika powtórzeń, Stan określony parametrami –LOG_CHECKPOINT_TIMEOUT –LOG_CHECKPOINT_INTERVAL –FAST_START_IO_TARGET –Administrator wymusił punkt kontrolny poleceniem: ALTER SYSTEM CHECKPOINT; –Dokonano zamknięcia instancji w trybie NORMAL/IMMEDIATE/ TRANSACTIONAL. Punkt kontrolny plików danych: –Jest wykonywany dla określonych plików danych. –Występuje, gdy zaistnieje którakolwiek z poniżej wymienionych okoliczności: Rozpoczęto wykonywanie kopii bezpieczeństwa wybranych przestrzeni tabel poleceniem: ALTER TABLESPACE nazwa_przestrzeni BEGIN BACKUP; Wyłączono przestrzeń tabel z przynajmniej jednym plikiem w stanie online poleceniem: ALTER TABLESPACE nazwa_przestrzeni OFFLINE;

18 Punkt kontrolny W pliku kontrolnym i w nagłówku każdego pliku danych są przechowywane informacje o punkcie kontrolnym, m.in.: –numer SCN w czasie wystąpienia punktu kontrolnego, –data i czas zarejestrowania SCN, –licznik punktów kontrolnych (checkpoint counter). Licznik punktów kontrolnych informuje o liczbie punktów kontrolnych wykonanych dla pliku danych. Jego wartość jest zwiększana każdorazowo po wystąpieniu punktu kontrolnego dla pliku danych.

19 Pliki śladu (trace files) Zawierają informacje o błędach, jakie wystąpiły w trakcie pracy instancji. Pliki śladu są plikami tekstowymi. Błędy wykrywane są przez proces serwera lub procesy tła. Pliki śladu mogą zawierać także wszystkie polecenia realizowane w ramach sesji. Wśród statystyk, które mogą być zbierane przez narzędzie TRACE są ilości czasu zajmowane przez pewne działania (opcja TIMED_STATISTIC=True). –wartość tę można ustawić w pliku init.ora/SPFILE, za pomocą polecenia ALTER SYSTEM, – lub dla danej sesji (poleceniem ALTER SESSION). Wzrost obciążenia po włączeniu tej opcji jest nieznaczny.

20 Pliki śladu (trace files) Parametry związane z plikami śladu: BACKGROUND_DUMP_DEST podaje ścieżkę na dysku, gdzie umieszczane są pliki śladu z opisem błędów wykrytych przez procesy tła. USER_DUMP_DEST podaje ścieżkę na dysku, gdzie umieszczane są pliki śladu z opisem błędów wykrytych przez proces serwera. SQL_TRACE=TRUE podawany w pliku parametrów powoduje włączenie zapisu do plików śladu informacji na temat realizowanych poleceń SQL. Informacje o błędach zapisywane są niezależnie od wartości tego parametru. TIMED_STATISTICS=TRUE podawany w pliku parametrów powoduje włączenie generowania statystyki dotyczącej ilości czasu potrzebnego do wykonania poleceń Parametry mogą być włączone dla bieżącej sesji poleceniem: ALTER SESSION SET SQL_TRACE=True; ALTER SESSION SET TIMED_STATISTICS=True;

21 Plik ostrzeżeń (alert file) Plik tekstowy zawierający chronologicznie uporządkowane komunikaty o błędach oraz inne informacje. –MS Windows NT: Plik ostrzeżeń posiada nazwę alert_.log. –UNIX: Plik ostrzeżeń posiada nazwę alert-SID.log Zawartość pliku ostrzeżeń: –Komunikaty o błędach wewnętrznych. –Błędy mówiące o uszkodzeniu bloków dyskowych. –Błędy mówiące o zakleszczeniach. –Informacje dotyczące operacji wykonywanych na bazie danych tzn.: zamknięcie lub otwarcie bazy, działania administratorskie przy pomocy poleceń DDL (zmiana struktury bazy danych), ARCHIVE LOG, RECOVER, wartości parametrów konfiguracyjnych z jakimi otwarto bazę danych. –Błędy w odświeżaniu migawek. W pliku konfiguracyjnym BACKGROUND_DUMP_DEST - podaje ścieżkę na dysku, gdzie umieszczany jest plik

22 Pliki dziennika powtórzeń Zawierają informacje o wszystkich zmianach w bazie danych (co zostało zmienione w wierszu, co zostało zapisane w segmencie wycofania, czy transakcja została potwierdzona, czy był realizowany punkt kontrolny, czy jest transakcja rozproszona,...) i są wykorzystywane podczas odtwarzania.

23 Pliki dziennika powtórzeń Pliki Dziennika Powtórzeń Dysk1 LGWR Dysk2 Grupa 1 Log1.ora Grupa 2Grupa 3 Log2.oraLog3.ora Log2.ora

24 Pliki dziennika powtórzeń (redo log files) są elementem mechanizmu ochrony instancji zawartej w buforze danych i są wykorzystywane w momencie awarii instancji lub bazy danych. Wszystkie zmiany dokonane w bazie (wstawienie, modyfikacja, usunięcie rekordu, utworzenie, zmodyfikowanie, usunięcie tabeli) przez zatwierdzone lub nie zatwierdzone transakcje są zapisywane do dziennika powtórzeń. Pliki dziennika powtórzeń są podzielone na grupy, w każdej z nich powinna być jednakowa liczba plików o jednakowym rozmiarze. Muszą istnieć co najmniej dwie grupy plików dziennika powtórzeń, zalecane jest aby w każdej grupie były przynajmniej dwa pliki umieszczone na różnych dyskach (patrz: schemat na slajdzie obok). Wszystkie pliki należące do danej grupy posiadają taki sam rozmiar i zawierają identyczne informacje.

25 Pliki dziennika powtórzeń (redo log files) LGWR dokonuje zapisu jednocześnie do wszystkich plików należących do danej grupy. Jeżeli jeden z plików grupy na skutek awarii dysku jest niedostępny, to zapisywanie jest kontynuowane do pozostałych plików grupy. Gdy wszystkie pliki grupy stają się niedostępne sygnalizowany jest błąd i instancja zostaje zamknięta. Zapis do plików dziennika powtórzeń odbywa się w sposób cykliczny tzn. zapełnienie jednej grupy powoduje przełączenie się na drugą i kontynuowanie zapisu. Po zapełnieniu ostatniej grupy następuje przełączenie się na pierwszą i nadpisanie informacji w niej zawartych. Ręczne przełączenie na inną grupę plików dziennika powtórzeń: Administrator bazy danych (DBA) może wymusić przełączenie na inną grupę dziennika powtórzeń poleceniem: ALTER SYSTEM SWITCH LOGFILE;

26 Pliki dziennika powtórzeń (redo log files) Dla dużych plików dziennika powtórzeń, administrator może wymusić dodatkowe punkty kontrolne przy pomocy następujących parametrów inicjalizacyjnych w pliku init.ora: LOG_CHECKPOINT_INTERVAL Określa opóźnienie docelowego punktu kontrolnego względem końca pliku dziennika powtórzeń. Opóźnienie to nie może być większe niż zadeklarowana w parametrze liczba bloków. Wartość tego parametru liczona jest w blokach systemu operacyjnego, a nie w blokach bazy danych LOG_CHECKPOINT_TIMEOUT Określa, że do odtwarzania instancji po awarii będzie potrzeba co najwyżej tyle bloków dziennika powtórzeń, ile zostało zapisanych w podanym przez parametr okresie czasu. Wartość 0 wyłącza mechanizm pomiaru odstępów czasowych. FAST_START_IO_TARGET Określa ilość operacji I/O, które serwer ORACLE będzie musiał wykonać podczas odtwarzania. Parametr ten poprawia wydajność odtwarzania po awarii instancji. Im mniejsza wartość parametru, tym częściej proces DBWR zapisuje bloki na dysk.

27 Pojęcia związane z plikami dziennika powtórzeń LSN – Log Sequence Number W momencie przełączenia na następną grupę dziennika powtórzeń, pliki należące do niej uzyskują kolejny numer sekwencyjny dziennika. Podczas odtwarzania system Oracle wykorzystuje informacje kolejno z plików o wzrastającym numerze sekwencyjnym Bieżący numer sekwencyjny jest zapisany w pliku kontrolnym. SCN – System Change Number Każda zatwierdzona transakcja otrzymuje SCN, plik dziennika powtórzeń przechowuje numery SCN transakcji, z którymi związane są opisy w nim zawarte. Serwer ORACLE może więc kontrolować spójność bez potrzeby opierania się na zegarze systemowym.

28 Dodanie nowej grupy dziennika powtórzeń wraz z odpowiednią liczbą plików ALTER DATABASE [nazwa_bazy] ADD LOGFILE GROUP nr_grupy (plik_1, plik_2,...) SIZE rozmiar; nr_grupynumer kolejnej grupy plików dziennika powtórzeń, plik_nnazwa tworzonego pliku wraz ze ścieżką dostępu, Numer nowo tworzonej grupy nie musi być numerem kolejnym. Jeżeli zostanie pominięty, wówczas serwer Oracle sam przypisze grupie odpowiedni identyfikator.

29 Administracja plikiem powtórzeń Dodanie pliku do istniejącej grupy: ALTER DATABASE [nazwa_bazy] ADD LOGFILE MEMBER plik TO GROUP nr_grupy; Czyszczenie plików dziennika powtórzeń: ALTER DATABASE CLEAR [UNARCHIVED] LOGFILE GROUP nr_grupy; ALTER DATABASE CLEAR [UNARCHIVED] LOGFILE plik;

30 Administracja plikiem powtórzeń Usunięcie pliku z istniejącej grupy dziennika powtórzeń: ALTER DATABASE [nazwa_bazy] DROP LOGFILE MEMBER plik; Usunięcie całej grupy plików dziennika powtórzeń: ALTER DATABASE [nazwa_bazy] DROP LOGFILE GROUP nr_grupy; Nie można usunąć pliku dziennika powtórzeń będącego w stanie zapisu. Należy wówczas wymusić przełączenie całej grupy. Nie można również usunąć ostatniego elementu grupy dziennika powtórzeń. Usunięcie pliku dziennika powtórzeń powoduje tylko skasowanie informacji o nim ze słownika bazy danych. Jednak plik w systemie operacyjnym pozostaje

31 Informacje dotyczące pliku dziennika powtórzeń V$LOGFILEinformacje nt. lokalizacji plików dziennika powtórzeń. V$LOGinformacje nt. utworzonych grup dziennika powtórzeń V$THREADinformacja o liczbie grup dziennika powtórzeń, numerze bieżącej grupy i numerów sekwencyjnych. V$LOG_HISTORYinformacje nt. wszystkich przełączeń plików dziennika powtórzeń, uporządkowane wg numeru sekwencyjnego.

32 Archiwizacja plików dziennika powtórzeń Archiwizacja plików dziennika powtórzeń wykonywana jest przez proces drugoplanowy ARCH w trybie automatycznym lub manualnie przez administratora bazy danych. Możliwość archiwizacji plików dziennika powtórzeń zależy od trybu bazy danych. Baza danych może pracować w jednym w dwóch poniższych trybów: –Tryb ARCHIVELOG, –Tryb NOARCHIVELOG (domyślny).

33 Tryb NOARCHIVELOG bazy danych Domyślnie Oracle zapisuje nowe grupy dziennika powtórzeń w miejsce starych według zasady cykliczności. Wystarcza to do naprawy instancji, ponieważ przełączanie rejestrów wymusza wykonanie operacji momentu kontrolnego, co z kolei powoduje zapisanie na dysk wszystkich brudnych bloków w buforze bazy danych

34 Tryb ARCHIVELOG bazy danych Jeśli baza danych działa w trybie ARCHIVELOG, plik dziennika powtórzeń przed nadpisaniem zawartych w nim informacji musi zostać koniecznie zarchiwizowany. Aby uchronić dane zgromadzone w bazie przed awarią nośnika, konieczne jest utrzymywanie archiwum dziennika powtórzeń, co najmniej od chwili wykonania ostatniej fizycznej kopii bezpieczeństwa. Pełna kopia bezpieczeństwa łącznie ze zarchiwizowanymi plikami dziennika powtórzeń zagwarantuje, że w momencie awarii w pełni będzie można odzyskać utracone dane. Uwaga: Korzystanie z bazy danych w trybie ARCHIVELOG może wpłynąć na potrzeby dyskowe bazy danych (zależnie od tego, jak dużo operacji wykonywanych jest przez bazę danych).

35 Archiwizacja Plików Dziennika Powtórzeń – Określenie trybu pracy Archiwizacja automatyczna, Archiwizacja manualna. Sprawdzenie trybu archiwizacji : ARCHIVE LOG LIST SELECT LOG_MODE FROM V$DATABASE; SELECT ARCHIVER FROM V$INSTANCE;

36 Automatyczna Archiwizacja Plików Dziennika Powtórzeń Parametry inicjalizacyjne: –LOG_ARCHIVE_START –LOG_ARCHIVE_DEST –LOG_ARCHIVE_FORMAT Polecenie włączające tryb ARCHIVELOG bazy danych: –ALTER DATABASE ARCHIVELOG; LOG_ARCHIVE_DESTParametr ten służy do określenia katalogu, w którym będą zapisywane zarchiwizowane pliki. W wersji Enterprise Edition można wskazać do 10 lokalizacji LOG_ARCHIVE_DEST_n. LOG_ARCHIVE_FORMATOkreśla wzorzec nazwy zarchiwizowanego pliku (np.: arc%S.log). Zastosowanie symbolu %S lub %s oznacza użycie w nazwie numeru sekwencyjnego (poprzedzonego zerami lub nie).

37 Uruchomienie automatycznej archiwizacji plików dziennika powtórzeń Po zmianach w pliku init.ora należy wystartować bazę w trybie MOUNT ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; Proces ARCH można wystartować także na otwartej bazie poleceniem: ALTER SYSTEM ARCHIVE LOG START [TO katalog];

38 Zatrzymanie automatycznej archiwizacji plików dziennika powtórzeń wystartować bazę w trybie MOUNT ALTER DATABASE NOARCHIVELOG ALTER DATABASE OPEN; Proces ARCH można zatrzymać na otwartej bazie poleceniem: ALTER SYSTEM ARCHIVE LOG STOP;

39 Archiwizacja ręczna plików dziennika powtórzeń ALTER SYSTEM ARCHIVE LOG Opcja [TO Katalog]; OPCJAOPIS ALLarchiwizacja wszystkich plików, CURRENTaktualnego pliku, NEXTwskazanego parametrem Next Log Sequence to Archive, LOGFILE nazwa plikupliku o podanej nazwie, SEQUENCE numer_sekwencyjny pliku o podanym numerze sekwencyjnym, CHANGE numer_SCNplik zawierający zapis z numerem SCN, GROUP numer_grupypliki dziennika należące do wskazanej grupy.

40 Struktura bazy ORACLE obszar globalny systemu SGA procesy drugoplanowe bufory dziennika powtórzeń bufory bazy danych obszar dzielony CKPARCHRECOSNPnDBnn SMON PMON procesy usługowe (servers) procesy użytkowników proces DBWR proces LGWR CKPT pliki bazy danych pliki kontrolne plik konfiguracyjny pliki dziennika powtórzeń istnieje, jeśli CHECKPOINT_PROCESSES = true CONTROL_FILES - identyfikacja plików kontrolnych LOG_BUFFER- rozmiar buforów dziennika powtórzeń DB_BLOCK_BUFFERS liczba bloków w buforach DB_BLOCK_SIZE - rozmiar bloku LOG_CHECKPOINT_TIMEOUT LOG_CHECKPOINT_INTERVAL SHARED_POOL_SIZE - określenie rozmiaru maksymalny czas między punktami kontrolnymi max liczba bloków zapisanych na plik dziennika między punktami kontrolnymi SAVEPOINTS max. liczba pkt. wycofania w transakcji SNAPSHOT_REFRESH_PROCESSES liczba procesów SNPn, obsługujących aut. odświeżanie replikacji zdalnych tablic (opcja rozproszona)

41 Procesy drugoplanowe Liczba procesów drugoplanowych pracujących w instancji Oracle jest zależna od ustawienia parametrów bazy. Istnieje jednak grupa procesów niezbędnych do pracy bazy: DBWR (ang. Database Writer) – proces zapisujący dane wprowadzane przez użytkowników do bazy z buforów SGA do plików dyskowych. LGWR (ang. Log Writer) – proces zapisujący dane z buforów dziennika powtórzeń do plików dziennika powtórzeń. PMON (ang. Process Monitor) – monitor procesów trzymający pieczę nad zasobami bazy wykorzystywanymi przez użytkowników bazy. Proces ten odzyskuje zasoby zwolnione przez użytkownika, wycofuje niepotwierdzone transakcje, czyści nienormalnie zakończone połączenia, wykrywa zakleszczenia. SMON (ang. System Monitor) – monitor systemu utrzymujący porządek w SGA. Proces ten obsługuje plik kontrolny, odzyskuje przestrzeń po segmentach tymczasowych, wykonuje automatyczne odtwarzanie instancji.

42 Struktura logiczna bazy danych Na strukturę logiczną bazy danych składają się następujące elementy: Bloki - najmniejsza jednostka wejścia/wyjścia, pojedynczy blok logiczny odpowiada jednemu lub większej liczbie bloków systemu operacyjnego Obszary – (ang. extent) jest zbiorem kolejnych bloków zaalokowanych przez segment. Pierwszy obszar zwany jest obszarem inicjacyjnym (ang. initial), natomiast następne – przyrostowymi (ang. incremental). Oracle uważa bloki z następującymi po sobie numerami identyfikacyjnymi jako ciągłe, chociaż nie oznacza to, że są one ciągłe na dysku. Segmenty - są zbiorem jednego lub więcej obszarów, w których zawarte są dane określonego typu logicznej struktury pamięci w przestrzeni tabel. Typy segmentów: danych, indeksu, tymczasowy, wycofania, otwarcia. Każdy segment w bazie jest tworzony z co najmniej jednym obszarem dla danych., jednakże segment wycofania zawsze ma co najmniej dwa obszary, Przestrzenie tabel - są logicznym obszarem, w którym baza przechowuje zapisane w niej dane. Każda przestrzeń składa się z jednego lub więcej plików systemu operacyjnego, które dla serwera Oracle tworzą integralną całość

43 Struktura logiczna bazy danych Przykładowe rozmieszczenie obiektów w przestrzeniach tabel Plik danych nr 1 Plik danych nr 2 Tablica Indeks Przestrzeń tabel nr 1Przestrzeń tabel nr 2 Tablica Plik danych nr 3 Indeks

44 Globalny Obszar Systemowy (System Global Area - SGA). Globalny Obszar Systemowy Obszar Współdzielony Bufor Bibliotek Bufor Słownika Współdzielony Obszar Poleceń SQL Bufor Dziennika Powtórzeń Bufor Danych SGA (System Global Area) jest obszarem pamięci służącym do przechowywania informacji współdzielonych przez procesy bazy danych. Zawiera dane i informacje sterujące serwera Oracle. Globalny obszar systemowy umiejscowiony jest w pamięci komputera. rozmiar SGA z podziałem na podstawowe : SHOW SGA

45 Bufor danych (database buffer cache) zawiera kopie bloków danych odczytywanych z dysku, dostępny jest dla wszystkich użytkowników podłączonych do bazy. Bloki w buforze danych dzielimy na: wolne – niezmodyfikowane, gotowe do użycia, zaczepione – obecnie używane przez procesy serwera, brudne – zmodyfikowane, wymagające zapisu na dysk. Parametry: DB_CACHE_SIZE - rozmiar bufora danych określany dynamicznie, wprowadzony w Oracle 9i DB_BLOCK_SIZE - rozmiar bloku podany w bajtach (2048, 4096, itd.) DB_BLOCK_BUFFERS - licza bloków w buforze danych. ALTER SYSTEM SET DB_BLOCK_SIZE=4096

46 Bufor dziennika powtórzeń (redo log buffer) bufor cykliczny (po zapisaniu ostatniego bajtu zapis rozpoczyna się od pierwszego). Proces serwera podczas przetwarzania transakcji zapisuje blok wycofania jak i obrazy późniejsze (bloki ze zmienionymi danymi) co pozwala na odtworzenie dokonanych zmian po awarii instancji bazy danych. Parametr określający wielkość Bufora Dziennika Powtórzeń LOG_BUFFER – określa rozmiar bufora w bajtach, musi być całkowitą wielokrotnością DB_BLOCK_SIZE

47 Obszar współdzielony (shared pool). Bufor Bibliotek (library cache) Bufor Bibliotek (library cache) zawiera struktury sterujące oraz Współdzielone Obszary Poleceń SQL, w obszarze tym przechowywane są: treść poleceń SQL lub PL/SQL, analiza składniowa poleceń, plan wykonania poleceń. Użytkownicy realizujący to samo polecenie korzystają z tego samego Współdzielonego Obszaru Poleceń SQL. Polecenia SQL są uważane za identyczne jeśli: zapis polecenia jest taki sam z dokładnością do małych i wielkich liter oraz separatorów, odwołują się do tych samych obiektów, typy i nazwy zmiennych są identyczne.

48 Obszar współdzielony (shared pool). Bufor Słownika Danych (data dictionary cache) Słownik Danych zawiera tabele, widoki i synonimy systemowe dostarczające informacji o obiektach bazy danych i uprawnieniach użytkowników. Część tych informacji jest sprowadzona do bufora słownika danych i jest wykorzystywana przy analizie składniowej poleceń. Parametr określający wielkość Obszaru Współdzielonego: –SHARED_POOL_SIZE - określa wielkość obszaru podaną w bajtach (np bajtów) Od wersji Oracle parametr SHARED_POOL_SIZE może być modyfikowany dynamicznie podczas pracy instancji. ALTER SYSTEM SET SHARED_POOL_SIZE = wartość

49 Obszar pamięci PGA (Process Global Area lub Program Global Area) alokowany w momencie uruchomienia procesu serwera w związku z zaistniałym procesem użytkownika. Jest fragmentem pamięci operacyjnej zawierającym dane i informacje sterujące dotyczące pojedynczego procesu serwera lub pojedynczego procesu drugoplanowego. Nie jest, w przeciwieństwie do SGA, współdzielony przez wiele procesów. Obszar pamięci PGA zawiera następujące elementy: Obszar sortowania potrzebny przy przetwarzaniu polecenia SQL. Informacje dotyczące sesji, takie jak uprawnienia użytkownika oraz statystyki wydajności. Stany kursorów wskazujące aktualny etap przetwarzania poleceń SQL wykorzystywanych w sesji. Parametr związany z obszarem pamięci PGA: SORT_AREA_SIZE – wskazuje w bajtach, ile pamięci PGA ma zostać zarezerwowane na wykonywanie sortowań.

50 Procesy Drugoplanowe DBWR - proces sekretarza bazy danych: Pliki bazy danych DBWR Pliki danych Procesy drugoplanowe (procesy tła) LGWRDBWRLGWR PMON CKPT SMON Globalny Obszar Systemowy SGA

51 Proces Sekretarza Bazy Danych (Database Writer) automatycznie uruchamiany w momencie uruchamiania instancji (jego działanie jest niezbędne). –Zarządza blokami w buforze danych w taki sposób aby procesy serwera mogły znaleźć zawsze wolne bloki. –Zapisuje wszystkie brudne bloki do plików danych. –Wykorzystuje listę LRU w celu pozostawienia ostatnio używanych bloków w pamięci SGA. –Optymalizuje operacje Wejścia/Wyjścia dzięki opóźnieniu zapisów. Zapis brudnych bloków do plików następuje gdy: Lista brudna osiągnie limit długości. Upłyną trzy sekundy od ostatniego zapisu (time_out). Zgłoszony zostaje punkt kontrolny. Proces przeszuka określoną liczbę bloków na liście LRU i nie znajdzie wolnego.

52 LGWR – Proces Sekretarza Dziennika Powtórzeń (Log Writer) LGWR – Proces Sekretarza Dziennika Powtórzeń LGWR Pliki dziennika powtórzeń

53 LGWR – Proces Sekretarza Dziennika Powtórzeń (Log Writer) automatycznie uruchamiany w momencie uruchamiania instancji (jego działanie jest niezbędne). Zapisuje informacje z bufora dziennika powtórzeń do plików tego dziennika. Zapis następuje gdy: następuje zatwierdzenie transakcji przez użytkownika, bufor dziennika powtórzeń jest w 1/3 zapełniony, upłyną trzy sekundy od ostatniego zapisu (time_out), zostaje zgłoszony punkt kontrolny. Właściwości procesu: dokonuje zapisu do plików dziennika powtórzeń zanim DBWR dokona zapisu zawartości bufora danych na dysk. zatwierdzenie transakcji przez użytkownika powoduje zapisanie pozycji dziennika powtórzeń dotyczących innych użytkowników zanim sami podejmą decyzję o zatwierdzeniu, podczas długich transakcji bufor dziennika powtórzeń może wypełnić się bardziej niż w 1/3 zanim dokonany zostanie zapis.

54 SMON – Proces Monitora Systemu (System Monitor) SMON – Proces Monitora Systemu SMON INSTANCJA SGA Procesy tła

55 Proces Monitora Systemu (System Monitor) automatycznie uruchamiany w momencie uruchamiania instancji (jego działanie jest niezbędne). Kiedy instancja Oracle ulega uszkodzeniu, cała nie zapisana informacja z SGA jest tracona. Po utracie instancji, w chwili ponownego otwarcia bazy danych proces SMON automatycznie wykonuje odtwarzanie instancji na podstawie informacji zawartych w plikach bazy danych. Zadania realizowane przez proces: Odtwarzanie instancji podczas jej uruchomienia. Czyszczenie nieużywanych segmentów temporalnych (przechowują dane tymczasowe np. wyniki sortowania), Scalanie wolnych obszarów pamięci dyskowej w jedną spójną przestrzeń

56 PMON – Proces Monitora Procesów (Process Monitor) PMON – Proces Monitora Procesów PMON INSTANCJA SGA Procesy tła

57 Proces Monitora Procesów (Process Monitor) automatycznie uruchamiany w momencie uruchamiania instancji (jego działanie jest niezbędne). Jest odpowiedzialny za obsługę sytuacji, w której proces użytkownika przestaje działać poprawnie. Zadania realizowane przez proces: Wycofanie nie zatwierdzonych transakcji. Zwolnienie blokad nałożonych przez przerwany proces. Zwolnienie zasobów SGA wykorzystywanych przez przerwany proces. Kontrola stanu procesów drugoplanowych i przełączających.

58 CKPT – Proces Punktu Kontrolnego (Checkpoint Process) CKPT – Proces Punktu Kontrolnego CKPT Nagłówki plików danych Nagłówek pliku kontrolnego

59 Proces Punktu Kontrolnego (Checkpoint Process) uaktualnia nagłówki wszystkich plików danych i plików kontrolnych, potwierdzając pomyślne zakończenie punktu kontrolnego. Po zgłoszeniu punktu kontrolnego proces DBWR zapisuje wszystkie zmodyfikowane bloki na dysk. DBWR zleca również procesowi CKPT uaktualnienie informacji nagłówkowej wszystkich plików danych poprzez zapisanie informacji kontrolnej. W poprzednich wersjach Oracle rolę procesu CKPT przejmował proces LGWR, a uruchomienie CKPT jako oddzielnego procesu wymagało ustawienia parametru inicjalizacyjnego CHECKPOINT_PROCESS na wartość TRUE (w pliku init.ora) lub gdy liczba plików w bazie danych przekraczała określoną wartość.

60 Inne Procesy Drugoplanowe ARCH Proces archiwizatora plików dziennika powtórzeń RECO SNPn Snnn Dnnn Proces odtwarzający Proces odświeżający migawki Proces zapewniający obsługę żądań użytkowników Proces ekspedytora (dotyczy serwera wielowątkowego)

61 Inne Procesy Drugoplanowe ARCH - Proces archiwizatora plików dziennika powtórzeń. Proces ten jest uruchamiany gdy baza danych znajduje się w trybie archiwizowania dziennika powtórzeń i włączone jest automatyczne archiwizowanie. RECO - Proces odtwarzający, rozwiązuje problemy związane z awarią transakcji rozproszonych na skutek niedostępności węzłów sieci. Uruchamiany gdy baza danych pracuje w trybie opcji rozproszonej (DISTRIBUTED_TRANSACTION=True w init.ora). SNPn - Proces odświeżający migawki (replikacje tabel przeznaczonych tylko do odczytu), odpowiada za kolejkę zadań serwera i kolejkę replikacji. Liczba takich procesów zależy od parametru SNAPSHOT_REFRESH_PROCESSES. Jego maksymalna wartość wynosi 10. Snnn - Proces serwera dzielonego zapewniający obsługę żądań użytkowników (proces usługowy). Dnnn - Proces ekspedytora, uruchamiany w wielowątkowej konfiguracji serwera, zapewnia obsługę wielu procesów użytkowników przez jeden proces serwera (proces usługowy).

62 Pliki danych (data files) Każdy plik danych posiada nagłówek, gdzie przechowywane są m.in. –bieżący numer punktu kontrolnego, –licznik punktów kontrolnych, –numer sekwencyjny bieżącego pliku dziennika powtórzeń w momencie wystąpienia punktu kontrolnego. Perspektywy słonika danych zawierające informacje dotyczące plików danych: V$DATAFILE DBA_DATA_FILES V$DATAFILE_HEADER (informacje nagłówkowe plików danych).

63 Tryby pracy instancji ORACLE NOMOUNTodczytanie pliku parametrów, inicjalizacja SGA oraz odszukanie plików kontrolnych MOUNTodczytanie plików kontrolnych oraz odszukanie pozostałych plików oraz sprawdzenie ich statusu OPENotworzenie pozostałych plików i udostępnienie bazy danych użytkownikom Uruchamianie i zatrzymywanie bazy danych z Instance Manager

64 Tryb NOMOUNT Wykorzystywany jest do: –tworzenia bazy danych –plików kontrolnych. Wykonywane są następujące operacje: –Odczytuje plik parametrów konfiguracyjnych. –Inicjalizuje pamięć SGA. –Uruchamia procesy drugoplanowe (procesy tła). –Otwiera pliki śladu oraz plik ostrzeżeń.

65 Tryb MOUNT Wykorzystywany jest do realizacji następujących czynności: –Wykonanie operacji związanych z plikami dziennika powtórzeń (zmiana położenia, tworzenie nowych, usuwanie istniejących). –Wykonanie zmiany nazwy lub położenia plików danych. –Przełączenie bazy danych w tryb ARCHIVELOG lub NOARCHIVELOG. –Wykonanie pełnego lub niepełnego odtworzenia bazy danych. System uruchamiając instancję w tym trybie przechodzi przez tryb NOMOUNT wykonując dodatkowo następujące operacje: –Otwiera wyspecyfikowane w pliku parametrów pliki kontrolne.

66 Tryb OPEN W trybie tym otwierane są pliki dziennika powtórzeń oraz pliki danych co sprawia, że baza staje się dostępna dla użytkowników !!!

67 Uruchamianie instancji w określonym trybie OPEN Startup Nomount Startup Mount Startup Open Alter Database Mount MOUNT NOMOUNT Alter Database Open SHUTDOWN

68 Uruchamianie instancji w określonym trybie STARTUP [FORCE] [RESTRICT] [PFILE=plik_parametrów] [tryb_pracy] Tryb pracy OPEN [opcje_montowania] - udostępnia bazę użytkownikom, bazę można otworzyć w trybie –READ WRITE – tryb do odczytu i zapisu –READ ONLY – tryb tylko do odczytu MOUNT [RECOVER] [nazwa_bazy_danych] [opcje_montowania], –RECOVER – po uruchomieniu bazy rozpoczyna odtwarzanie po awarii nośników, NOMOUNT [opcje_montowania]. Opcje montowania EXCLUSIVE – pozwala jedynie bieżącej instancji na dostęp do bazy danych PARALLEL – umożliwia dostęp do bazy wielu instancjom. FORCEprzed wykonaniem uruchomienia zamyka działającą instancję RESTRICTudostępnia bazę tylko użytkownikom z uprawnieniem RESTRICTED SESSION

69 Uruchamianie instancji w określonym trybie ALTER DATABASE [nazwa_bazy_danych] tryb_pracy Tryb pracy OPEN [RESETLOGS|NORESETLOGS] - udostępnia bazę użytkownikom –Użycie parametru RESETLOGS wymaga ostrożności i jest związane ściśle z archiwizacją i odtwarzaniem MOUNT [opcje_montowania] Opcje montowania EXCLUSIVE – pozwala jedynie bieżącej instancji na dostęp do bazy danych PARALLEL – umożliwia dostęp do bazy wielu instancjom. (uruchamia Serwer Równoległy Oracle)

70 Ograniczenie dostępu do bazy ALTER SYSTEM status RESTRICTED SESSION; status –ENABLE - ogranicza dostęp do bazy tylko dla użytkowników posiadających uprawnienie RESTRICTED SESSION –DISABLE – udostępnia bazę wszystkim użytkownikom

71 Wyciszanie bazy danych Wyciszenie (quiesce) bazy danych polega na wprowadzeniu jej w taki stan, w którym dopuszczalne są tylko sesje użytkowników posiadających rolę DBA. Wprowadzenie bazy w stan wyciszenia powoduje wstrzymanie wszystkich transakcji rozpoczętych przez użytkowników, którzy nie posiadają uprawnień z grupy DBA. Uaktywnienie opcji wymaga wpisu w pliku inicjalizacyjnym bazy danych: RESOURCE_MANAGER_PLAN = SYSTEM_PLAN konieczny jest restart bazy danych Oracle. stan wyciszenia : ALTER SYSTEM QUIESCE RESTRICTED; Przywrócenie pełnej funkcjonalności bazy danych ALTER SYSTEM UNQUIESCE;

72 Zawieszanie operacji IO w bazie danych uniemożliwia wykonanie jakiekolwiek polecenia w bazie danych, którego konsekwencją byłby zapis lub odczyt danych z dysku. zawieszenie operacji IO ALTER SYSTEM SUSPEND; Wznowienie operacji IO ALTER SYSTEM RESUME;

73 Zamykanie instancji bazy danych SHUTDOWN [tryb_zamknięcia] NORMALBaza zostaje zamknięta dopiero, gdy wszyscy użytkownicy zakończą sesje (odłączenie od bazy danych). Zawartość bloków buforów danych i dziennika powtórzeń są zapisywane na dysk, dostęp nowych użytkowników do bazy jest blokowany. Domyślny tryb zamykania. TRANSACTIONALUżytkownicy odłączani są automatycznie od bazy gdy zakończą aktualne transakcje, dostęp nowych użytkowników do bazy jest blokowany następnie baza jest zamykana.

74 Zamykanie instancji bazy danych SHUTDOWN [tryb_zamknięcia] IMMEDIATEKończy wykonanie poleceń SQL i wycofuje nie zatwierdzone transakcje, następnie odłącza użytkowników od bazy. ABORTNie czeka na zakończenie pracy przez użytkowników, nie wycofuje nie zatwierdzonych transakcji. Natychmiast zamyka SGA i procesy tła. Po w trybie ABORT, w momencie startu następuje odtwarzanie instancji. Znajduje zastosowanie, gdy nie można wykonać zamknięcia w innym z trybów,.

75 Parametry startowe bazy SHOW PARAMETERS wzorzec_nazwy Aktualne wartości parametrów w ramach sesji SELECT * FROM V$PARAMETER Wartości parametrów niezależnie od sesji SELECT * FROM V$SYSTEM_PARAMETER DBMS_UTILITY.GET_PARAMETER_VALUE

76 Zmiana parametrów sesji ALTER SYSTEM SET nazwa_parametru = wartość [DEFERRED] Klauzula DEFERRED wprowadza zmianę dla każdej sesji, która w przyszłości podłączy się do bazy danych Nie wszystkie parametry mogą być zmieniane na otwartej bazie danych

77 Pojęcia SESJA – czas pracy użytkownika od momentu podłączenia się do bazy poleceniem CONNECT aż do czasu zakończenia pracy polecenie EXIT (DISCONNECT). W ramach jednej SESJI użytkownik może realizować wiele TRANSAKCJI, jedna po drugiej lub zagnieżdżone. SADDR SID SERIAL# AUDSID PADDR USER# USERNAME COMMAND OWNERID TADDR LOCKWAIT STATUS SERVER SCHEMA# SCHEMANAME OSUSER PROCESS MACHINE..... DESC V$SESSION USERNAMECOMMANDSTATUSPROCESSMACHINE 0ACTIVE2112BAZY 0ACTIVE1584BAZY SYS53 KILLED 2772:2776LR\BAZY AP3ACTIVE3916:3284LR\PC21431 SELECT USERNAME, COMMAND, STATUS, PROCESS, MACHINE FROM V$SESSION

78 Przerywanie sesji Natychmiastowe zabicie sesji: ALTER SYSTEM KILL SESSION 'sid, serial#'; Rozłączenie użytkownika z serwerem: ALTER SYSTEM DISCONNECT SESSION 'sid, serial#'; Rozłączenie użytkownika po zakończeniu bieżącej transakcji: ALTER SYSTEM DISCONNECT SESSION 'sid, serial#'; POST TRANSACTION 'sid, serial#' - identyfikatory sesji użytkownika z perspektywy V$SESSION Muszą być podane obydwa parametry w apostrofie!!!!! Nie można zabić bieżącej sesji Zabijana sesja domyślnie jest zaznaczana do zabicia (KILLED) i zabijana po zakończeniu wszystkich jej transakcji Ponowna próba zbicia tej sesji generuje błąd ORA-00031: sesja zaznaczona do zlikwidowania

79 Słownik danych Tryb NOMOUNT: V$PARAMETER Informacje o parametrach inicjalizacyjnych V$SGA Zawiera zestawienie informacji o SGA V$OPTION Opcje, które zostały zainstalowane w serwerze Oracle V$PROCESS Informacje o aktualnych aktywnych procesach V$BGPROCESS Informacje o aktualnych aktywnych procesach drugoplanowych V$SESSION Aktualne informacje o otwartych sesjach V$VERSION Informacje o numerze wersji i zainstalowanych komponentach V$INSTANCE Informacje nt. stanu bieżącej instancji.

80 Słownik danych Tryb MOUNT: V$THREADInformacje o wątkach/kanałach, np. grupach dziennika powtórzeń V$CONTROLFILENazwy i lokalizacje plików kontrolnych V$CONTROLFILE_RE CORD_SECTION Informacje nt. rekordów pliku kontrolnego V$DATABASEOgólne informacje o bazie danych V$DATAFILEInformacje o plikach danych V$DATAFILE_HEADERInformacje nagłówkowe plików danych V$LOGFILEInformacje o plikach dziennika powtórzeń.

81 STRUKTURA BAZY DANYCH ORACLE INSTANCJA BAZA DANYCH PRZESTRZEŃ DANYCH SEGMENT TABELIINDEKSUKLASTRA WYCOFANIATYMCZASOWYCACHE EXTENT BLOK BAZY DANYCH PLIK BLOK SYSTEMU OPERACYJNEGO LOGICZNAFIZYCZNA INSTANCJA KONTROLUJE BAZĘ DANYCH BAZA ZBUDOWANA JEST Z PRZESTRZENI SEGMENTY TWORZĄ PRZESTRZENIE SEGMENTY ZBUDOWANE SĄ Z EXTENTÓW EXTENTY ZBUDOWANE SĄ Z BLOKÓW PLIKI PRZYPISANE SĄ DO OKREŚLONEJ PRZESTRZENI PLIKI ZBUDOWANE SĄ Z BLOKÓW SYSTEMU OPERACYJNEGO BLOK BAZY DANYCH JEST WIELOKROTNOŚCIĄ BLOKU SYSTEMOWEGO DYSK LOGICZNY

82 Blok bazy danych Najmniejsza jednostka alokacji przestrzeni dyskowej dla bazy danych. Wielkość bloku bazy danych jest wielokrotnością wielkości bloku systemu operacyjnego. Stosowane rozmiary bloków to 2048B, 4096B, 8192B, itd. Rozmiar bloku jest określony przez parametr DB_BLOCK_SIZE, który jednocześnie definiuje rozmiar bloku w buforze bazy danych pamięci SGA. Parametr DB_BLOCK_SIZE określa rozmiar standardowego bloku danych i nie może być zmieniany po utworzeniu bazy danych. Możliwe jest wyspecyfikowanie niestandardowe wielkości bloku bazodanowego. Bloki niestandardowe mogą mieć rozmiary: 2K, 4K, 8K, 16K, 32K. Niestandardowy rozmiar bloku można wyspecyfikować w klauzuli BLOCKSIZE polecenia CREATE TABLESPACE. Jeżeli baza danych korzysta z niestandardowego rozmiaru bloku to konieczne jest wydzielenie obszaru w SGA na przechowywanie bloków o niestandardowej wielkości. Służy do tego parametr DB_nk_CACHE_SIZE (gdzie nk – określa rozmiar niestandardowego bufora danych). Parametr ten określa liczbę bloków o niestandardowym rozmiarze. Przykład: DB_BLOCK_SIZE=8K DB_4k_CACHE_SIZE=10M DB_16K_CACHE_SIZE=30M Przykład utworzenia przestrzeni tabel o niestandardowym rozmiarze bloku: CREATE TABLESPACE DANE DATAFILE ‘C:\DANE.DBF’ SIZE 100M EXTENT MANAGEMENT DICTIONARY BLOCKSIZE 2K;

83 Blok bazy danych Nagłówek Bloku zawiera –adresu bloku i typy segmentu, w skład którego wchodzi blok transakcji operujących na wierszach zapisanych w bloku –przechowuje dwa słowniki: Katalog Tabel zawiera informacje dotyczące tabel, których rekordy są przechowywane w bloku Katalog rekordów przechowuje adresy każdego z rekordów znajdujących się w bloku. Wymaga narzutu 2B na każdy wiersz. Przestrzeń Danych Przechowuje dane zawarte w rekordach np. tabeli lub indeksu. Wolna Przestrzeń Bloku jest zarezerwowana na –modyfikacje (wstawianie, aktualizacja rekordów); –modyfikacje informacji zawartych w nagłówku bloku, w szczególności dotyczące transakcji operujących na bloku. Nagłówek bloku Przestrzeń danych Wolna przestrzeń bloku

84 Parametry określające właściwości bloku bazy PCTFREEokreśla ilość miejsca w bloku jaka musi zostać zarezerwowana na przyszłe modyfikacje zgromadzonych w nim danych. podaje w procentach, w stosunku do rozmiaru całego bloku, rozmiar wolnej przestrzeni. Wartość domyślna - 10%. PCTUSEDokreśla moment, w którym blok traktowany jest przez system jako przydatny do ewentualnych operacji wstawiania danych. Podaje w procentach rozmiar zajętej przestrzeni bloku, poniżej której blok jest uważany za wolny. Domyślna wartość - 40% INITRANSokreśla ilość miejsca w nagłówku bloku jaka zostaje zarezerwowana dla transakcji modyfikujących jego zawartość. Wartość domyślna - 1 transakcja MAXTRANSokreśla maksymalną liczbę transakcji jakie mogą modyfikować zawartość bloku. Wartość domyślna

85 Dobór wartości PCTFREE Mała wartość PCTFREE powoduje: –Lepsze zapełnienie bloków operacjami wstawiania. –Dane zostaną upakowane w mniejszej liczbie bloków. –Zwiększy koszty przetwarzania przy częstej reorganizacji bloków. –Może wywołać zjawisko Migracji. Duża wartość PCTFREE powoduje: –Rezerwację większej przestrzeni na przyszłe modyfikacje. –Dane będą upakowane w większej liczbie bloków. –Obniży koszty przetwarzania ponieważ bloki rzadziej wymagają reorganizacji. –Zmniejsza ryzyko wystąpienia zjawiska Migracji. Liczbę_wstawianych_bajtów_na_rekord można otrzymać dzięki: ANALYZE TABLE nazwa_tabeli COMPUTE STATISTICS; Wartość jest zawarta w kolumnie AVG_ROW_LEN widoku DBA_TABLES.

86 Dobór wielkości PCTUSED: Mała wartość PCTUSED: –Zmniejsza koszty przetwarzania gdyż bloki są rzadziej uważane za wolne. –Zwiększa nieużywaną przestrzeń Duża wartość PCTUSED: –Zwiększa koszty przetwarzania gdyż bloki są częściej uważane za wolne. –Poprawia wykorzystanie przestrzeni Zależności występujące pomiędzy PCTUSED i PCTFREE PCTUSED + PCTFREE <=100% Kompromis pomiędzy wykorzystaniem przestrzeni a efektywnością operacji I/O jest takie dobranie parametrów, aby: PCTUSED + PCTFREE +  =100% gdzie  - procent dostępnej przestrzeni bloku jaką zajmuje przeciętnie jeden rekord. Dodatkowo powinien być spełniony warunek: PCTUSED – PCTFREE >=  Duża różnica pomiędzy PCTUSED i PCTFREE zapobiega zjawisku migotania bloków (częste przesuwanie bloku na listę wolnych bloków i usuwanie z niej) Przykład: Rozmiar bloku wynosi 2048B, narzut na nagłówek 100B czyli pozostaje 1948B. Jeżeli przeciętny rekord zajmuje 195B czyli 10% tego co pozostało to suma PCTFREE i PCTUSED powinna wynosić 90%

87 Zjawisko migracji i łańcuchowania: Migracja wierszy: Pojawia się wtedy gdy rekord na skutek modyfikacji zwiększa swój rozmiar i zostaje przeniesiony w całości do nowego bloku, ponieważ w bieżącym bloku nie wystarczy miejsca na jego zapis. Rekord zostaje przeniesiony w całości do nowego bloku, którego adres zostaje zapisany w bloku dotychczas przechowującym zmodyfikowany rekord. Powoduje to podwojenie operacji I/O (odczyt adresu potem odczyt danych). Łańcuchowanie wierszy: Pojawia się wtedy gdy rekord tabeli jest tak długi, że nie mieści się w pojedynczym bloku. Kolejne części rekordu zapisywane są w blokach wchodzących w skład łańcucha. Poczynając od pierwszego, w którym znajduje się początek rekordu, bloki zawierają wskaźnik do reszty rekordu. Powoduje to zwielokrotnienie operacji I/O.

88 Wykrywanie zjawisk łańcuchowania i migracji ANALYZE TABLE nazwa_tabeli LIST CHAINED ROWS [INTO nazwa_tabeli_docelowej] Domyślnie informacje zapisywane są do tabeli CHAINED_ROWS, którą można utworzyć przy pomocy skryptu UTLCHAIN.SQL. Skrypt po zmodyfikowaniu może posłużyć do utworzenia Tabeli_Docelowej jeżeli informacje będące wynikiem analizy mają być do niej zapisane (opcja INTO)

89 Extenty i segmenty EXTENT BLOK1 BLOK2 BLOK3BLOK4BLOK5 SEGMENT EXTENT0EXTENT1EXTENT2EXTENT3EXTENT4 Rozszerzenie (extent) zbudowane jest z ciągłego obszaru bloków znajdujących się w jednym pliku dyskowym. Informacje o rozszerzeniach zawarte są w perspektywie słownika danych DBA_EXTENTS. Segment (segment) jest zbiorem rozszerzeń przydzielanych pojedynczemu obiektowi bazy danych. Informacje dotyczące segmentów można uzyskać z perspektywy słownika danych DBA_SEGMENTS.

90 Segment zbiór extentów przydzielanych pojedynczemu obiektowi bazy danych. Extenty te nie muszą znajdować się w jednym pliku. Segment jest utożsamiany z obiektem bazy danych. Każdy segment może należeć tylko do jednej przestrzeni tabel. W miarę rozrostu obiektu, segmentowi przydzielane są kolejne rozszerzenia z uwzględnieniem parametrów definiujących właściwości segmentu. Minimalna ilość extentów przydzielonych segmentowi wynosi 1. Wyjątkiem jest segment wycofania, dla którego minimum to wynosi 2. System zwalnia przydzielone extenty w następujących przypadkach: –Segment, do którego należały zostaje usunięty. –Segment, do którego należały jest obcinany poleceniem TRUNCATE. –Rozmiar segmentu jest większy niż zadeklarowany rozmiar optymalny i zawiera wolne extenty (dotyczy to tylko segmentów wycofania). Zbyt częste zwalnianie przydzielonych extentów prowadzi do niekorzystnego zjawiska fragmentacji wolnej przestrzeni co ma wpływ na wydajność systemu

91 Parametry określające właściwości segmentu INITIALokreśla w B, KB, MB wielkość pierwszego rozszerzenia przedzielonego segmentowi. Wartością domyślną jest rozmiar odpowiadający wielkości pięciu bloków (MINIMUM EXTENT). Parametru po utworzeniu segmentu nie można modyfikować. NEXTokreśla rozmiar drugiego rozszerzenia. Wartością domyślną jest rozmiar odpowiadający wielkości pięciu bloków (MINIMUM EXTENT). PCTINCREASEokreśla procentowy przyrost kolejnego rozszerzenia w stosunku do poprzedniego. Wartością domyślną jest 50% wyjątek stanowi segment wycofania dla którego wartość domyślna wynosi 0 i nie można jej zmienić

92 Parametry określające właściwości segmentu MAXEXTENTSokreśla maksymalną liczbę rozszerzeń jakie mogą być przypisane segmentowi. Istnieje możliwość użycia słowa UNLIMITED co powoduje, że rozszerzenia będą przydzielane w razie potrzeby. Nie zaleca się używania wartości UNLIMITED w przypadku segmentów tymczasowych i wycofania (utrata kontroli i możliwość całkowitego zapełnienia dysku). MINEXTENTSokreśla liczbę extentów jakie zostaną przypisane do segmentu w momencie jego tworzenia. Wartość domyślna wynosi 1 wyjątek stanowi segment wycofania, dla którego wartość wynosi to 2. Parametru po utworzeniu segmentu nie można modyfikować OPTIMALokreśla w bajtach optymalny rozmiar segmentu wycofania. Parametr ten znajduje zastosowanie jedynie w przypadku segmentów wycofania.

93 Parametry określające właściwości segmentu FREELISTSokreśla liczbę list wolnych bloków przypisanych do segmentu. Lista ta jest wykorzystywana przez transakcje w czasie wstawiania rekordów. Transakcje rywalizują o dostęp do listy. Wartość domyśla parametru to 1. W celu zwiększenia współbieżności parametr ten powinien zostać zwiększony. FREELISTS GROUPS określa liczbę grup list wolnych bloków używanych przez różne instancje w konfiguracji Parallel Serwer.

94 Rodzaje segmentów w bazie oracle TYMCZASOWE dostarczają dynamicznie przestrzeni potrzebnej przy wykonywaniu poleceń SQL przez użytkownika. CACHE zawiera definicje struktur słownikowych bazy. WYCOFANIA zapewniają spójność odczytu danych oraz możliwość wycofania zmian wprowadzonych przez użytkownika TABELI przechowują zgromadzone w bazie dane INDEKSU zawierają informacje umożliwiające skrócenie czasu wyszukiwania danych KLASTRA przechowują zgromadzone w bazie dane w odróżnieniu od segmentów tabeli są one inaczej przechowywane

95 Segmenty tymczasowe Dostarczają przestrzeni potrzebnej przy sortowaniu danych, Są tworzone dynamicznie przez system przy wykonywaniu operacji takich jak złączenia, sortowanie, tworzenie indeksów, Obiekty tego typu tworzone są w przestrzeni tabel związanej z użytkownikiem wykonującym operacje (w przypadku gdy brakuje miejsca w pamięci wewnętrznej). Administrator tworząc użytkownika decyduje jaka przestrzeń tabel jest przeznaczona do przechowywania segmentów tymczasowych. Zaleca się aby dla tego typu obiektów tworzyć specjalne przestrzenie tabel, gdyż ich dynamiczny rozrost powoduje fragmentację. Obiekty tymczasowe przypisane są zawsze do transakcji i w momencie jej zakończenia zwalniane są przez proces tła SMON Do plików dziennika powtórzeń nie są dokonywane zapisy dotyczące segmentów tymczasowych, ponieważ ich utrata nie stanowi zagrożenia dla zachowania spójności danych

96 Segment Cache (Bootstrap) Zawiera definicje struktur tabel stanowiących słownik danych. Należy do przestrzeni tabel SYSTEM a jego właścicielem jest użytkownik SYS. W przypadku tego obiektu nie jest wymagane podejmowanie żadnych działań ze strony administratora. Jest ładowany automatycznie w momencie otwierania bazy danych.

97 Segment wycofania (RollBack Segment) Są to fragmenty bazy danych przeznaczone do zapisywania danych sprzed modyfikacji przez nie zatwierdzoną transakcję. Każdej transakcji przydzielany jest dokładnie jeden segment wycofania. Segment wycofania może być wykorzystywany przez wiele transakcji. W przestrzeni tabel SYSTEM istnieje segment wycofania SYSTEM, jest on wykorzystywany przy modyfikacji informacji zawartych w słownikach bazy danych. Zadania segmentu wycofania Zapewnienie spójności odczytu danych przez inne transakcje. Umożliwienie wycofania nie zatwierdzonych zmian jakie zostały wprowadzone do bazy, przez wykorzystanie informacji zawartych w plikach dziennika powtórzeń w momencie odtwarzania bazy danych po awarii. Odtworzenie poprzednich danych w przypadku wycofania transakcji.

98 Segmenty wycofania – cechy Przy dodawaniu rekordu w segmencie zapisywany jest jego numer. Przy usuwaniu rekordu pamiętane są wartości wszystkich pól. W przypadku długotrwałych transakcji wielkość segmentu wycofania może gwałtownie rosnąć. W przypadku, gdy w extencie wszystkie aktywne transakcje zostaną zakończone, wielkość segmentu jest automatycznie zmniejszana do rozmiaru określonego parametrem OPTIMAL. Informacje zapisywane są w segmencie w postaci tak zwanych rekordów wycofania. Rekord taki jest uważany za aktywny jeżeli został wprowadzony przez nie zatwierdzoną transakcję. Jeżeli transakcja wymaga więcej miejsca w segmencie wycofania ORACLE szuka najpierw rozszerzeń z nieaktywnymi rekordami wycofania, jeżeli znajdzie takie to przydziela je transakcji nadpisując zawartą w nich informację. W przypadku nie znalezienia rozszerzenia z nieaktywnymi rekordami przydzielane są nowe extenty aż do osiągnięcia wartości MAXEXTENTS, później zgłaszany jest błąd systemowy.

99 Tworzenie segmentu wycofania CREATE [PUBLIC] ROLLBACK SEGMENT nazwa_segmentu TABLESPACE nazwa_przestrzeni STORAGE ( [INITIAL rozmiar [K/M]] [NEXT rozmiar [K/M]] [MINEXTENTS liczba] [MAXEXTENTS liczba | UNLIMITED] [OPTIMAL rozmiar [K/M]] | NULL); Aby skorzystać z segmentów wycofania trzeba ustawić parametr inicjalizacyjny w pliku parametrów. UNDO_MANAGEMENT = MANUAL; Przydzielenie transakcji określonego segmentu wycofania: SET TRANSACTION USE ROLLBACK SEGMENT nazwa_segmentu; Dotyczy serwerów równoległych (Private dotyczy tylko bieżącej instancji)

100 Modyfikacja parametrów składowania segmentu wycofania ALTER ROLLBACK SEGMENT nazwa_segmentu STORAGE (parametry składowania); Włączenie lub wyłączenie segmentu: ALTER ROLLBACK SEGMENT nazwa_segmentu [ONLINE|OFFLINE]; system zapobiega przydzielaniu wyłączonego segmentu nowym transakcjom pozwalając jednocześnie dokończyć transakcje z niego korzystające Zmniejszenie aktualnego rozmiaru segmentu wycofania: ALTER ROLLBACK SEGMENT nazwa_segmentu SHRINK [TO rozmiar [K/M]]; jeżeli nie zostanie podany rozmiar to nastąpi obcięcie segmentu do wartości określonej parametrem OPTIMAL Usunięcie segmentu wycofania: DROP ROLLBACK SEGMENT nazwa_segmentu; Usunąć można tylko segment wyłączony.

101 Perspektywy słownika danych, zawierające informacje o segmentach wycofania: V$ROLLSTAT V$ROLLNAME DBA_ROLLBACK_SEGS DBA_SEGMENTS - zawiera informacje na temat wszystkich segmentów

102 Segment Tabeli Tabela to rodzaj segmentu przechowujący dane użytkowników lub dane systemowe. BUDOWA REKORDU: Nagłówek rekorduPrzestrzeń danych Wartości poszczególnych pól rekordu przechowywane są obok siebie. Rozmiar i typ pola rekordu wskazuje na liczbę bajtów potrzebnych do przechowania wartości pola. Dodatkowo należy doliczyć 1 bajt w nagłówku bloku jeżeli pole przechowuje do 250 bajtów lub 3 bajty jeżeli pole przechowuje powyżej 250 bajtów. Każdy rekord posiada: nagłówek – znajduje się tu zapis o liczbie kolumn, informacji o łańcuchowaniu, blokach, przestrzeń danych – dla każdej kolumny serwer Oracle zapisuje jej długość i wartość.

103 Tworzenie tabeli CREATE TABLE nazwa_tabeli (nazwa_pola TYP [DEFAULT wyrażenie] [, ]) [PCTFREE liczba] [PCTUSED liczba] [INITRANS liczba] [MAXTRANS liczba] [TABLESPACE nazwa_przestrzeni] STORAGE ( [INITIAL rozmiar [K/M]] [NEXT rozmiar [K/M]] [PCTINCREASE liczba] [MINEXTENTS liczba] [MAXEXTENTS liczba]); Ograniczenia przy tworzeniu tabeli: Nazwa pola tabeli nie może przekraczać 30 znaków. Ilość kolumn w ramach jednej tabeli nie może przekroczyć 1000.

104 Tabela tymczasowa CREATE GLOBAL TEMPORARY TABLE nazwa_tabeli (pole1 typ, pole2 typ,...) [ON COMMIT DELETE|PRESERVE ROWS] ; ON COMMIT DELETE ROWSpowoduje przechowywanie danych w tabeli tymczasowej na czas trwania transakcji ON COMMIT PRESERVE ROWSpowoduje przechowywanie danych w tabeli tymczasowej na czas trwania sesji

105 Zmiana parametrów składowania tabeli ALTER TABLE nazwa_tabeli [PCTFREE liczba] [PCTUSED liczba] [INITRANS liczba] [MAXTRANS liczba] STORAGE ([NEXT rozmiar [K/M]] [PCTINCREASE liczba] [MINEXTENTS liczba] [MAXEXTENTS liczba]);

106 Słownik danych informacje dotyczące tabel Widoki słownika danych: DBA_TABLES, USER_TABLES, ALL_TABLES informacje o utworzonych tabelach. DBA_TAB_COLUMNS informacje nt. struktury tabeli, w podziale na kolumny. DBA_OBJECTS informacje nt. wszystkich obiektów utworzonych w bazie danych. DBA_SEGMENTS informacje nt. wszystkich segmentów utworzonych w bazie danych. DBA_EXTENTS informacje nt. przydzielonych extentów.

107 Parametry wykorzystania miejsca dla indeksów PCTFREE określa procent każdego bloku pozostawiony do wykorzystania przez nowe pozycje indeksów. Jednak miejsce to, inaczej niż w przypadku tabeli, rezerwowane jest podczas tworzenia indeksu. Po utworzeniu indeksu blok zapełni się maksymalnie nawet, jeśli każda nowa pozycja spowoduje przekroczenie wartości PCTFREE, ponieważ pozycje indeksów muszą być przechowywane w określonej kolejności. Ze względu na to, że blok indeksu musi zawierać pozycje należące do pewnego zakresu wartości, usunięcie czegoś z bloku niekoniecznie musi czynić go wolnym dla nowych pozycji. Miejsce to zostanie ponownie wykorzystane tylko wtedy, gdy nowa pozycja ma wartość umożliwiającą umieszczenie jej pomiędzy pozycjami sąsiadującymi dotychczas z usuniętą. Do wpływania na to zachowanie nie jest potrzebny parametr PCTUSED służący do określenia wykorzystania miejsca. INITRANS musi mieć wartość wynoszącą co najmniej 2 (a nie 1 - jak w przypadku tabel). Jeśli blok musi się podzielić, potrzebna będzie dodatkowa szczelina transakcji.

108 Segment Indeksu Zapytania odnoszące się do poindeksowanych kolumn zostają rozwiązane bez odwoływania się do tabeli. Krótszy czas wyszukiwania danych. Ułożenie danych w sposób uporządkowany. Jeżeli indeks nie jest potrzebny do przyspieszenia przetwarzania, powinno się go usunąć na czas silnego obciążenia tabeli. Należy usuwać indeksy, w których często dochodzi do dzielenia bloków. Regularnie powinno się wyznaczać ilość zajmowanego miejsca i wydajność indeksów. Lepiej jest przechowywać indeksy w małej liczbie dużych rozszerzeń niż w wielu małych extentach.

109 Tworzenie indeksu typu B*-Drzewo CREATE INDEX nazwa_indeksu ON nazwa_tabeli (pole1, pole2,.....) [PCTFREE liczba] [PCTUSED liczba] [INITRANS liczba] [MAXTRANS liczba] [TABLESPACE nazwa_ przestrzeni] [NOSORT] STORAGE ( [INITIAL rozmiar [K/M]] [NEXT rozmiar [K/M]] [PCTINCREASE liczba] [MINEXTENTS liczba] [MAXEXTENTS liczba]); NOSORT - parametr wykorzystywany jest w przypadku, gdy rekordy tabeli są już posortowane rosnąco wg pola, dla którego tworzony jest indeks. Eliminowana jest w ten sposób konieczność wstępnego posortowania tabeli i skracany jest czas utworzenia indeksu.

110 Rodzaje segmentów – KLASTER Klaster (cluster) jest grupą tabel, które dzielą ten sam zestaw bloków danych ze względu na pewne wspólne dla wszystkich kolumny, które są często wykorzystywane w złączeniach. Tabele klastrowe redukują liczbę operacji I/O i zmniejszają czas dostępu do danych przy złączeniach. Każda wartość klucza klastra jest przechowywana tylko raz dla wszystkich wierszy z tą kolumną, dlatego też tabele klastrowe zajmują mniej miejsca. Jednak pełne przeglądy danych są zwykle spowolnione.

111 Rodzaje segmentów – KLASTER Tabele kandydujące do klastra: –Często przeszukiwane, natomiast rzadko aktualizowane. –Zawierające powtarzające się wartości w polu stanowiącym klucz klastra. –Tabele, które często są łączone w różnego rodzaju zapytaniach. Klucz klastra: –Dobrymi kluczami klastra są kolumny używane do połączenia tabel, –Kluczem powinny być kolumny zawierające szeroki zakres wartości, –Kluczem klastra nie powinno być pole zawierające niewiele różnych wartości, często modyfikowane (oznacza to konieczność zmiany organizacji składowania danych w blokach).

112 Segment klastra - rodzaje KLASTER INDEKSOWYKLASTER HASZOWY Indeks klastra Tabele klastra Funkcja haszująca Tabele klastra

113 Zasady dotyczące segmentu klastra Klucz klastra podobnie jak indeks nie może być oparty na polach typu LONG lub LONGROW. Kryteria wyboru klucza klastra są takie same jak przy wyborze pól do indeksu. Wiersze o tej samej wartości klucza klastra przechowywane są razem, przy zmianie wartości klucza wiersz przenoszony jest do innego bloku, dlatego kolumny często aktualizowane nie są dobrymi kluczami. Jeżeli dla danej wartości klucza istnieje wiele wierszy to są one przechowywane w łańcuchu, w kolejnych blokach (zjawisko łańcuchowania), dlatego nie należy stosować jako kluczy pól wprowadzających małe rozróżnienie np. płeć. W przypadku gdy z daną wartością klucza klastra wiąże się mała liczba wierszy, przestrzeń w bloku byłaby marnowana aby tego uniknąć ustawiamy dla klastra parametr SIZE na małą wartość.

114 Segment klastra – klaster indeksowy Kowalski Nowak Kowalski Nowak Indeks na T1 Dyrektor6000 Urzędnik 2000 Dyrektor6000 Urzędnik 2000 Tabela T1 Tabela T2 Indeks na T2 Dane każdej tabeli nie należącej do klastra przechowywane są oddzielnie Klucz klastra: (prac_id) Kowalski Dyrektor6000 Nowak Urzędnik2000 Klucz klastra: (prac_id) Kowalski Dyrektor6000 Nowak Urzędnik2000 Klaster indeksowy Dane tabeli będącej indeksem klastra, które mają taką samą wartość klucza klastra przechowywane są razem. Klaster K1 zasada przechowywania danych w klastrze dwutabelowym

115 Tworzenie klastra CREATE CLUSTER nazwa_klastra (pole1 typ, pole2 typ,....) [PCTFREE liczba] [PCTUSED liczba] [INITRANS liczba] [MAXTRANS liczba] [TABLESPACE nazwa_ przestrzeni] [SIZE rozmiar [K/M]] STORAGE ( [INITIAL rozmiar [K/M]] [NEXT rozmiar [K/M]] [PCTINCREASE liczba] [MINEXTENTS liczba] [MAXEXTENTS liczba]);

116 Tworzenie tabel w ramach klastra CREATE TABLE nazwa_tabeli (pole1 typ, pole2 typ,......) CLUSTER nazwa_klastra (kol1_klucza,kol2_klucza); nie można specyfikować parametrów składowania, gdyż zostały one określone dla klastra: Utworzenie indeksu na kluczu klastra: CREATE INDEX nazwa_indeksu ON CLUSTER nazwa_klastra;

117 Klastry haszujące Klaster haszujący stosuje funkcję haszującą w celu obliczenia adresu poszukiwanego wiersza. Funkcja ta wykorzystuje klucz klastra i może być wygenerowana przez system albo zdefiniowana przez użytkownika. Klaster haszuący zwiększa szybkość przeszukiwań opartych o warunki równościowe kolumn klucza klastra w porównaniu do odczytów indeksowych. Klastrów haszujących nie należy używać, jeśli tabela stale rośnie, a przebudowa istniejącego klastra jest praktycznie niemożliwa.

118 Segment klastra – słownik danych DBA_TABLES DBA_ CLUSTERS DBA_ CLU_COLUMNS DBA_SEGMENTS DBA_OBJECTS DBA_EXTENTS

119 Przestrzenie tabel Przestrzeń tabel to jednostka logiczna, przechowująca obiekty bazy danych. Każdej przestrzeni tabel przyporządkowany jest przynajmniej jeden plik danych Przestrzenie tabel a pliki danych SYSTEM USERS System01.dbf Dysk CDysk DDysk E System02.dbf Users01.dbfUsers02.dbf

120 Zasadność wprowadzenia podziału na przestrzenie tabel Przestrzeń tabel SYSTEM zawiera segmenty będące własnością użytkownika SYS, natomiast wszystkie segmenty innych użytkowników są logicznie oddzielone od siebie. Przestrzeń tabel ułatwia zarządzanie przestrzenią dyskową, pliki należące do przestrzeni mogą być położone na różnych dyskach, co równoważy ich obciążenie i zwiększa efektywność systemu. Istnieje możliwość określenia limitów wykorzystania przestrzeni przez poszczególnych użytkowników. Sterowanie dostępnością danych poprzez włączanie lub wyłączanie wybranej przestrzeni tabel. Przestrzenie ułatwiają wykonanie kopii bezpieczeństwa online (przy działającej bazie danych), gdyż mogą być pojedynczo archiwizowane. Zwiększenie efektywności odtwarzania bazy danych po awarii nośników dzięki mechanizmowi odtwarzania pojedynczych przestrzeni tabel lub pojedynczego pliku.

121 Proponowane przestrzenie tabel (minimalny podział) SYSTEMprzestrzeń tabel dla użytkownika SYS, przestrzeń zarezerwowana na słownik danych; USERSprzestrzeń przechowująca dane i obiekty użytkowników. INDXprzestrzeń przechowująca indeksy. TEMPprzestrzeń przechowująca obiekty tymczasowe. RBSprzestrzeń przechowująca segmenty wycofania

122 Przestrzenie tabel – sposób zarządzania Istnieją dwa sposoby zarządzania przestrzenią tabel: –Przestrzeń tabel zarządzana przez słownik danych (EXTENT MANAGEMENT DICTIONARY); –Przestrzeń tabel zarządzana lokalnie (EXTENT MANAGEMENT LOCAL).

123 Przestrzenie tabel – tworzenie: CREATE TABLESPACE nazwa_przestrzeni DATAFILE 'plik_danych’ SIZE rozmiar K/M [AUTOEXTEND ON NEXT rozm K/M MAXSIZE maks_rozm K/M] [ONLINE | OFFLINE] [PERMANENT | TEMPORARY] [EXTENT MANAGEMENT LOCAL [AUTOALLOCATE|UNIFORM SIZE rozm K/M]] |EXTENT MANAGEMENT DICTIONARY] DEFAULT STORAGE (parametry składowania); AUTOEXTEND ON NEXT rozm automatyczne zwiększenie rozmiaru pliku o zadeklarowaną wielość. MAXSIZE maks_rozm określa maksymalny rozmiar pliku. PERMANENT przestrzeń przeznaczona jest dla stałych obiektów bazy TEMPORARY przestrzeń przeznaczona jest dla obiektów tymczasowych bazy

124 Przestrzeń tabel zarządzana lokalnie Klauzula: EXTENT MANAGEMENT LOCAL [AUTOALLOCATE | UNIFORM SIZE rozmiar K/M] wskazuje, że przestrzeń danych będzie zarządzana lokalnie, jest domyślnym zachowaniem bazy danych. AUTOALLOCATE przestrzeń tabel będzie zarządzana przez system, użytkownicy nie mogą definiować rozmiarów rozszerzeń (EXTENTS) UNIFORM przestrzeń tabel będzie wykorzystywać rozszerzenia o jednakowej (parametr SIZE lub gdy nie podano SIZE domyślnie 1MB). Jeśli podano UNIFORM nie można w definicji tworzenia przestrzeni tabel wyróżnić parametrów STORAGE oraz MINIMUM EXTENT.

125 Zalety lokalnego zarządzania przestrzeniami tabel Zarządzanie lokalne odbywa się przy użyciu map bitowych, gdzie zapisywane są informacje o wolnym obszarze w przestrzeni tabel. Redukuje to rywalizację o dostęp do tabel słownika danych. Zmiany wewnątrz map bitowych nie generują informacji o wycofaniu, ponieważ nie dochodzi do modyfikacji tabel słownika danych. W mapach bitowych automatycznie odnajdywane są wolne bloki sąsiadujące ze sobą. Eliminuje to potrzebę późniejszego scalania wolnych extentów

126 Tworzenie tymczasowej przestrzeni tabel CREATE TEMPORARY TABLESPACE przestrzeń_tymczasowa TEMPFILE ‘nazwa_pliku_danych’ SIZE rozmiar K/M [AUTOEXTEND ON NEXT rozm K/M MAXSIZE maks_rozm K/M] [EXTENT MANAGEMENT LOCAL [AUTOALLOCATE|UNIFORM SIZE rozm K/M]] |EXTENT MANAGEMENT DICTIONARY] DEFAULT STORAGE (parametry składowania);

127 Tymczasowa przestrzeń tabel Właściwości tymczasowej przestrzeni tabel : –nie mogą się w niej znajdować żadne obiekty stałe. –poprawiaja wydajność sortowań w przypadku, kiedy sortowania nie można wykonać w pamięci operacyjne Właściwości plików danych należących do przestrzeni tymczasowej –nie można zmienić ich nazwy, –pracują zawsze w trybie NOLOGGING, –nie są potrzebne do odtwarzania bazy danych po awarii, –nie można ich przełączyć w tryb read only, –tworzenie kopii pliku kontrolnego nie generuje żadnych informacji dla plików tymczasowych.

128 Modyfikacja parametrów przestrzeni ALTER TABLESPACE nazwa_przestrzeni DEFAULT STORAGE ( [NEXT rozmiar [K/M]] [PCTINCREASE liczba] [MINEXTENTS liczba] [MAXEXTENTS liczba]); Zmiana rozmiaru pliku danych ALTER DATABASE DATAFILE ‘plik’RESIZE nowy_rozmiar[K/M]; Dodanie nowego pliku danych do przestrzeni tabel: ALTER TABLESPACE nazwa_przestrzeni ADD DATAFILE ‘plik’ SIZE rozmiar K/M [AUTOEXTEND ON NEXT rozmiar K/M MAXSIZE maksymalny_rozmiar K/M];

129 Modyfikacja parametrów przestrzeni Włączenie automatycznego zwiększania rozmiaru pliku ALTER DATABASE DATAFILE ‘plik’ [AUTOEXTEND ON NEXT rozmiar [K/M] MAXSIZE maksymalny_rozmiar [K/M]]; Wyłączenie automatycznego zwiększania rozmiaru pliku ALTER DATABASE DATAFILE ‘plik’ AUTOEXTEND OFF;

130 Metody przenoszenia plików danych ALTER TABLESPACE nazwa_przestrzeni RENAME DATAFILE ‘stara_ścieżka_wraz_z_nazwą_pliku’ TO ‘nowa_ścieżka_wraz_z_nazwą_pliku’; daje możliwość przeniesienia każdego pliku danych za wyjątkiem plików przestrzeni tabel SYSTEM; Kolejność czynności : –Wyłączenie przestrzeni tabel, do której należy plik. –Kopiowanie pliku. przy pomocy poleceń systemu operacyjnego do nowej lokalizacji –Wykonanie polecenia ALTER TABLESPACE RENAME DATAFILE. –Włączenie przestrzeni tabel.

131 Metody przenoszenia plików danych ALTER DATABASE [nazwa_bazy] RENAME FILE ‘stara_ścieżka_wraz_z_nazwą_pliku’ TO ‘nowa_ścieżka_wraz_z_nazwą_pliku’; daje możliwość przeniesienia każdego pliku danych. Kolejność czynności: –Zamknięcie bazy danych. –Skopiowanie pliku przy pomocy poleceń systemu operacyjnego do nowej lokalizacji. –Uruchomienie bazy do tryb MOUNT. –Wykonanie polecenia ALTER DATABASE RENAME FILE. –Otwarcie bazy danych.

132 Przestrzenie tabel – sterowanie dostępem Włączenie lub wyłączenie pliku danych ALTER DATABASE DATAFILE ‘plik’ ONLINE; ALTER DATABASE DATAFILE ‘plik’ OFFLINE [DROP]; DROP - umożliwia wyłączenie pliku danych w bazie pracującej bez archiwizacji plików dziennika powtórzeń. Wyłączenie wszystkich plików należących do przestrzeni nie spowoduje przełączenia przestrzeni tabel w stan offline. W takim przypadku pliki uzyskają status RECOVER. Aby rzywrócić stan normalny po włączeniu plików należy skorzystać z polecenia RECOVER DATABASE.

133 Włączenie lub wyłączenie przestrzeni tabel ALTER TABLESPACE nazwa_przestrzeni [ONLINE | OFFLINE] [TEMPORARY|IMMEDIATE]; Wyłączenie przestrzeni tabel powoduje automatyczne przełączenie plików danych przypisanych do niej w stan offline. Nie można wyłączyć przestrzeni tabel SYSTEM oraz przestrzeni tabel z aktywnymi segmentami wycofania.

134 Stany Read-Only oraz Read-Write ALTER TABLESPACE nazwa_przestrzeni READ ONLY; ALTER TABLESPACE nazwa_przestrzeni READ WRITE; przełączenie w stan READ ONLY nie pozwala na żadne modyfikacje w ramach nowych transakcji, natomiast pozwala na zakończenie transakcji, które w chwili wprowadzenia przestrzeni w stan READ ONLY były rozpoczęte.

135 Przestrzenie Tabel – Usunięcie DROP TABLESPACE nazwa_przestrzeni [INCLUDING CONTENTS [AND DATAFILES] [CASCADE CONSTRAINTS]] ; INCLUDING CONTENTSpowoduje automatyczne usunięcie tabel należących do przestrzeni tabel (nie można usunąć przestrzeni bez wcześniejszego usunięcia tabel nie usuwa plików fizycznych), AND DATAFILESpowoduje automatyczne usunięcie plików fizycznych, CASCADE CONSTRAINTSpowoduje podczas usuwania tabel usunięcie występujących ograniczeń integralnościowych

136 Przestrzeń wycofania Przestrzeń wycofania (undo tablespace) zastępuje tradycyjne segmenty wycofania. W instancji można korzystać albo z tradycyjnych segmentów wycofania lub z przestrzeni wycofania. Nie można jednocześnie korzystać z obu tych mechanizmów. Zmianę pomiędzy przestrzenią wycofania a segmentami można przeprowadzić tylko poprzez restart instancji. Jeśli instancja wykorzystuje przestrzeń wycofania to taki tryb pracy instancji nazywany jest: AUTOMATIC UNDO MANAGEMENT MODE. Tryb ten jest włączany parametrem: UNDO_MANAGEMENT=AUTO Jeżeli instancja ma korzystać z segmentów wycofania to parametr UNDO_MANAGEMENT = MANUAL. Oracle może korzystać tylko z jednej przestrzeni wycofania. Przestrzeń, z której korzysta instancja jest określona parametrem: UNDO_TABLESPACE= Jest to parametr dynamiczny, czyli można zmieniać przestrzeń wycofania podczas pracy instancji. Jeżeli przestrzeń wycofania posiada aktywne transakcje to Oracle przełącza nowe transakcje na nową przestrzeń, a stare transakcje kończą działanie na starej przestrzeni tabel. Jeśli instancja korzysta z przestrzeni wycofania – Oracle sam tworzy w tej przestrzeni segmenty wycofania – sam nimi zarządza (włącza, wyłącza) – administrator nie ma na nie żadnego wpływu.

137 Zarządzanie przestrzenią wycofania Po przestawieniu bazy danych w pliku konfiguracyjnym na tryb automatycznego zarządzania przestrzenią wycofania: UNDO_MANAGEMENT = AUTO można utworzyć przestrzeń wycofania CREATE UNDO TABLESPACE nazwa DATAFILE 'sciezka_do_pliku' SIZE rozmiar M AUTOEXTEND [ON|OFF]; Przełączenie pomiędzy przestrzeniami wycofania można wymusić prez ALTER SYSTEM SET UNDO_TABLESPACE = nazwa; lub w pliku konfiguracyjnym: UNDO_TABLESPACE = nazwa; można ustawić okres czasu, przez jaki w przestrzeni przechowywane będą informacje dotyczące zmodyfikowanych danych. Parametr ustawiony jest w pliku konfiguracyjnym: UNDO_RETENTION = 900 domyślnie 900 (sekund). Można go zmienić dynamicznie: ALTER SYSTEM SET UNDO_RETENTION = s= 12 h

138 Informacja o przestrzeniach tabel DBA_TABLESPACES informacje nt. utworzonych przestrzeń tabel, V$TABLESPACE nazwa i numer wszystkich utworzonych przestrzeni tabel, DBA_FREE_SPACE informacje nt. wolnego miejsca w poszczególnych przestrzeniach tabel. V$DBFILE, V$DATAFILE, DBA_DATA_FILES informacje nt. plików danych, (utworzonych poleceniem CREATE TABLESPACE ), DBA_TEMP_FILES, V$TEMPFILE informacje nt. plików przestrzeni tymczasowych (utworzonych poleceniem CREATE TEMPORARY TABLESPACE...). SELECT tablespace_name, SUM(bytes)/1024 „wolne w KB” FROM DBA_FREE_SPACE GROUP BY tablespace_name;

139 Pliki zarządzane przez Oracle Automatyczne zarządzanie obejmuje : –pliki danych, –pliki kontrolne, –pliki dziennika powtórzeń. Wykorzystywane jest przy tworzeniu lub usuwaniu powyższych plików podczas następujących operacji: –tworzenie, modyfikowanie lub usuwanie przestrzeni tabel, –tworzenie bazy danych, pliku kontrolnego, –modyfikowanie bazy (dodawanie, usuwanie plików dziennika powtórzeń).

140 Zalety automatycznego zarządzania przez Oracle ułatwienie administracji (nie ma potrzeby podawania lokalizacji, nazwy czy rozmiaru pliku). eliminacja błędów administratora (np. niewłaściwa nazwa pliku). automatyczne usuwanie przestarzałych plików (np. po operacji usunięcia przestrzeni tabel). łatwe tworzenie testowych baz danych. niezależność skryptów od platformy systemowej.

141 Specyfikacja miejsc składowania plików zarządzanych automatycznie Aby włączyć opcję automatycznego zarządzania plikami należy określić następujące parametry inicjalizacyjne w pliku init.ora: DB_CREATE_FILE_DEST DB_CREATE_ONLINE_LOG_DEST_n DB_CREATE_FILE_DESTdomyślna lokalizacja plików danych i plików tymczasowych (gdy nie zostanie podana podczas operacji tworzenia). DB_CREATE_ONLINE_LOG_DEST_n domyślna lokalizacja dla bieżących plików dziennika powtórzeń i plików kontrolnych (gdy nie zostanie podana podczas operacji tworzenia). Możemy wyspecyfikować maksymalnie pięć miejsc składowania (n=1..5).

142 Specyfikacja miejsc składowania plików zarządzanych automatycznie Jeśli wyspecyfikowano tylko parametr DB_CREATE_FILE_DEST, to pliki dziennika powtórzeń i pliki kontrolne tworzone są w tej samej lokalizacji co pliki danych. Jeśli wyspecyfikowano wyłącznie parametr DB_CREATE_ONLINE_LOG_DEST_n, tylko bieżące pliki dziennika powtórzeń i pliki kontrolne mogą być tworzone z opcją automatycznego zarządzania. Parametry można zmieniać dynamicznie ALTER SESSION SET DB_CREATE_FILE_DEST=’e:\dane’ ; ALTER SYSTEM SET DB_CREATE_ONLINE_LOG_DEST_2=’d:\dane’; Wyspecyfikowane katalogi muszą istnieć oraz muszą posiadać odpowiednie uprawnienia, by Oracle mógł tworzyć tam pliki.

143 Szablony nazw plików Typ plikuFormat nazwy Plik danychora_%t_%u.dbf Plik tymczasowyora_%t_%u.tmp Plik kontrolnyora_%u.ctl Plik dziennika powtórzeńora_%g_%u.log %t –pierwszych 8 znaków nazwy przestrzeni tabel %u –8 znaków gwarantujących unikalność nazwy pliku %g – numer grupy plików dziennika powtórzeń CREATE TABLESPACE dane; ↓ ora_dane_v3kb34bc0.dbf

144 Mechanizm automatycznego zarządzania plikami Wskazany zostaje katalog, w którym mają być tworzone pliki danych i pliki tymczasowe oraz katalog dla plików kontrolnych i plików dziennika powtórzeń (np. w pliku init.ora ustawiamy odpowiednie parametry). Oracle sam zakłada pliki we wskazanych lokalizacjach podczas wydawania komend np. CREATE TABLESPACE, ALTER DATABASE ADD LOGFILE, jeśli nie podaliśmy specyfikacji pliku lub sam usuwa pliki (DROP TABLESPACE), jeśli były one zarządzane przez serwer. Jeśli komenda tworząca plik zarządzany automatycznie zwróci błąd, wtedy plik stworzony przez tą komendę powinien być automatycznie usunięty, ale zdarzają się sytuacje, kiedy taki plik należy usunąć ręcznie. Jeśli komenda tworząca plik zarządzany automatycznie zakończy się sukcesem, to nazwa pliku jest zapisywana do pliku alertu.

145 Współbieżność w systemie Oracle Wszystkie operacje wykonywane w Oracle odbywają się w trybie transakcyjnym. Transakcja może być realizowana w jednym z trzech trybów. –READ COMMITTED, –READ ONLY, –SERIALIZABLE. Z transakcjami wiąże się ściśle zjawisko blokowania danych. Blokowanie danych ma na celu zapewnienie synchronizacji zapisów.

146 Własności transakcji w ORACLE Zatwierdzenie lub wycofanie aktualnej transakcji jest początkiem następnej. Polecenia z grupy DDL (np. Create, Alter, Drop Table) oraz polecenia z grupy DCL (Grant, Revoke) kończą się niejawnym zatwierdzeniem transakcji. Atomowoś ć wszystkie operacje wykonywane w ramach transakcji muszą zakończyć się pomyślnie, niepowodzenie jednej z nich powoduje wycofanie całej transakcji. Spójnośćw wyniku realizacji transakcji otrzymujemy spójny stan bazy danych, w którym żadne z ograniczeń integralnościowych nie jest naruszone. Izolacjazmiany wprowadzone przez transakcję są widoczne dla innych użytkowników dopiero w momencie jej zatwierdzenia. Trwałośćpo zatwierdzeniu transakcji zmiany są zapisywane na trwałe do bazy.

147 Tryb READ COMMITTED domyślnie transakcje w Systemie Oracle wykonywane są w tym trybie. Transakcja T1 widzą dane zmodyfikowane przez transakcję T2 dopiero po jej zatwierdzeniu poleceniem COMMIT. przestawienie pojedynczej transakcji w tryb Read Commited: SET TRANSACTION ISOLATION LEVEL READ COMMITTED; Polecenie należy wykonać jako pierwsze w ramach transakcji. ustawienie trybu Read Commited dla wszystkich transakcji realizowanych w ramach sesji: ALTER SESSION SET ISOLATION_LEVEL=READ COMMITTED; Polecenie należy wykonać jako pierwsze w ramach sesji.

148 Tryb READ ONLY Transakcja T1 operuje na wersji danych z momentu jej rozpoczęcia. Nie widzi zmian wprowadzonych w między czasie przez inne, zatwierdzone transakcje. Tryb Read Only stosowany jest w przypadku obliczeń analitycznych np. Bilansów. przestawienie pojedynczej transakcji w tryb Read Only: SET TRANSACTION READ ONLY; Polecenie należy wykonać jako pierwsze w ramach transakcji.

149 Tryb SERIALIZABLE Transakcja w trybie Serializable, podobnie jak transakcja w trybie Read Only, operuje na wersji danych z momentu jej rozpoczęcia. Różnica polega na tym, że można modyfikować dane, które nie zostały zmienione przez inne transakcje w trakcie jej trwania. przestawienie pojedynczej transakcji w tryb Serializable: SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; Polecenie należy wykonać jako pierwsze w ramach transakcji. ustawienie trybu Serializable dla wszystkich transakcji w sesji: ALTER SESSION SET ISOLATION_LEVEL= SERIALIZABLE; Polecenie należy wykonać jako pierwsze w ramach sesji. Tryb Serializable może być włączony na stałe poprzez ustawienie w pliku parametrów Init.Ora parametru SERIALIZABLE=TRUE. Domyślnie jego wartość wynosi FALSE co oznacza, że wszystkie transakcje są realizowane w trybie Read Committed;

150 Snapshot Too Old ORA-1555 – SnapShot Too Old ostrzega zwykle o tym, że co najmniej jeden z segmentów wycofania jest za mały do przechowywania liczby rekordów wystarczającej do zachowania spójności danych przy odczycie. Metody rozwiązania problemu pojawiania się błędu ORA-1555: –większe wartości MINEXTENTS; –większy rozmiar rozszerzeń EXTENTS; –większa wartość OPTIMAL

151 Mechanizm Blokowania Danych W systemie Oracle stosowana jest tylko i wyłącznie metoda blokowania w odróżnieniu od innych systemów gdzie znajduje zastosowanie metoda porządkowania wg etykiet czasowych lub metoda walidacji. Blokady zakładane są na czas trwania transakcji. Dwie blokady są ze sobą zgodne jeżeli mogą być założone na tę samą daną przez wiele transakcji. Mechanizm segmentów wycofania zapewnia spójność odczytu natomiast mechanizm blokad zapewnia synchronizację zapisów. Blokowanie może dotyczyć: tabeli (table lock), rekordu (row lock).

152 Mechanizm Blokowania Danych Blokowanie całej tabeli zmniejsza stopień współbieżności transakcji, ułatwiając zarządzanie blokadami i szybsze wykrywanie związanych z nimi konfliktów. Blokowanie całej tabeli powoduje, że blokada dotyczy wszystkich jej rekordów a co za tym idzie system nie musi blokować każdego z nich oddzielnie. Sposób zakładania blokad zależy od ustawienia parametrów: SERIALIZABLE = False ROW_LOCKING = Always Są to ustawienia domyślne, przy których blokady są zakładane tylko w przypadku wykonywania poleceń modyfikujących dane (DELETE, UPDATE, INSERT). Operacja SELECT nie wymaga nakładania blokady na tabeli i rekordzie. Blokowanie rekordów odbywa się zawsze w trybie EXCLUSIVE (X). Dwie blokady X nie są ze sobą zgodne. Blokowanie tabeli odbywa się w trybie RS, RX, S, SRX oraz X.

153 Blokowanie tabel i rekordów Sposoby założenia blokady na tabeli (rekordzie): –Jawny –Niejawny Założenie blokady na tabelę w sposób jawny LOCK TABLE nazwa_tabeli IN tryb MODE ;

154 Zgodność blokad tabeli w systemie ORACLE BrakRSRXSSRXX BrakTAK RSTAK Nie RXTAK Nie STAK NieTAKNie SRXTAK Nie XTAKNie RS ROW SHARE RX ROW EXCLUSIVE S SHARE SRX SHARE ROW EXCLUSIVE X EXCLUSIVE

155 Blokowanie tabel i rekordów - właściwości blokad Rodzaj BlokadyOpis ROW SHAREZakładana jest w intencji późniejszego zmodyfikowania rekordów, uniemożliwia zmianę zawartości rekordów przez inne transakcje. ROW EXCLUSIVE Zakładana jest automatycznie w przypadku realizacji poleceń DELETE, INSERT, UPDATE SHAREZakładana jest gdy transakcja chce uniemożliwić zmianę danych w tabeli przez inne równolegle działające transakcje. ROW SHARE ROW EXCLUSIVE Zakładana jest wtedy gdy transakcja będzie modyfikować dane tabeli i jednocześnie chce uniemożliwić zmianę danych w tej tabeli przez inne równolegle działające transakcje EXCLUSIVUniemożliwia modyfikowanie danych dopuszczając tylko ich przeglądanie.

156 Właściwości blokady RS (ROW SHARE) Zakładana w celu późniejszej modyfikacji rekordów, uniemożliwia zmianę zawartości rekordów przez inne transakcje. Zakładana automatycznie np. przy realizacji polecenia SELECT lista_pól FROM nazwa_tabeli WHERE warunek_selekcji FOR UPDATE [NOWAIT] Użycie NOWAIT powoduje, że polecenie zostanie automatycznie przerwane, jeżeli nie można założyć blokady RS ze względu na istnienie innej blokady z nią niezgodnej

157 Właściwości blokady RX (ROW EXCLUSIVE) Zakładana jest automatycznie w przypadku realizacji poleceń DELETE, INSERT, UPDATE. Modyfikowane rekordy są zawsze blokowane w trybie EXCLUSIVE (X). Pojawienie się blokady tego typu oznacza, że niektóre lub wszystkie rekordy tabeli zostały zmodyfikowane.

158 Właściwości blokady S (SHARE) Zakładana jest gdy transakcja T1 chce uniemożliwić zmianę danych w tabeli przez inne równolegle działające transakcje i jednocześnie sama nie będzie ich modyfikowała. Transakcje nie zmieniające zawartości tabeli mogą współpracować z transakcją T1.

159 Właściwości blokady SRX (SHARE ROW EXCLUSIVE) Zakładana jest wtedy gdy transakcja T1 będzie modyfikować zawartość tabeli i jednocześnie chce uniemożliwić zmianę danych w tej tabeli przez inne równolegle działające transakcje. Inne transakcje wymagające aby w trakcie ich pracy zawartość tabeli pozostała niezmieniona lub chcące ją zmodyfikować nie mogą współpracować z transakcją T1.

160 Właściwości blokady X (EXCLUSIVE) Uniemożliwia modyfikowanie danych dopuszczając tylko ich przeglądanie. Założenie innej blokady nie jest możliwe.

161 Blokowanie tabel i rekordów – słownik danych Informacje o założonych blokadach uzyskujemy ze słownika danych, z następujących perspektyw: –SESSION –V$LOCK –SYS.OBJ$

162 Przykład zapytania wyświetlającego informacje o założonych blokadach SELECT S.username, L.type, O.name, DECODE(L.lmode, 0,’BRAK’, 2,’RS’, 3,’RX’, 4,’S’, 5,’SRX’, 6,’X’, L.lmode) AS "LOCK", DECODE(L.request, 0,’BRAK’,2,’RS’, 3,’RX’, 4,’S’, 5,’SRX’, 6,’X’,L. request) AS "REQUEST", S.sid, S.status, S.osuser, S.machine, S.terminal, S.program FROM V$SESSION S, V$LOCK L, SYS.OBJ$ O WHERE S.sid=L.sid AND L.id1=O.obj#(+); W kolumnie LOCK uzyskamy typ założonej blokady, a w kolumnie REQUEST typ blokady oczekującej na założenie. W kolumnie TYPE wartość TM oznacza blokadę tabeli natomiast TX blokadę rekordu

163 Przykład zapytania wyświetlającego informacje o założonych blokadach USERNAMEnazwa użytkownika bazy danych NAMEnazwa obiektu którego dotyczą blokady SIDnumer sesji STATUSstatus sesji użytkownika OSUSERnazwa użytkownika w systemie operacyjnym MACHINEnazwa komputera z którego użytkownik dołączył się do bazy danych TERMINALrodzaj terminala wykorzystanego do podłączenia się do bazy danych PROGRAMnazwa programu za pomocą którego użytkownik dołączył się do bazy

164 Zakleszczenia Zakleszczenie powstaje, gdy dwie równolegle działające transakcje próbują modyfikować te same dane i w pewnym momencie dochodzi do wzajemnego zablokowania zasobów

165 Zakleszczenia (deadlocks) Zaletą metody blokowania danych jest zapewnienie synchronizacji zapisu w przypadku wielu transakcji próbujących modyfikować te same dane. Metoda ta posiada jednak dwie wady: zmniejsza stopień współbieżności (transakcja, która próbuje założyć blokady niezgodne z blokadami już założonymi przez inną transakcję, musi czekać na zdjęcie blokad); –wprowadza możliwość wystąpienia zakleszczenia (deadlock), kiedy dwie transakcje blokują sobie wzajemnie zasoby. Wówczas żadna z transakcji nie może kontynuować pracy. System Oracle wykrywa zakleszczenie i rozwiązuje je wykorzystując algorytm wyboru tej transakcji, która zostanie przerwana, tj. jej ostatnie polecenie zostanie przerwane, wycofane. Właściciel transakcji, dla której nastąpiło zakleszczenie otrzymuje wówczas komunikat: ORA-00060: deadlock detected while waiting for resource Algorytm wyboru transakcji do przerwania nie został wyspecyfikowany w dokumentacji Oracle.

166 Wyzwalacze DDL – oparte na zdarzeniach w bazie danych wyzwalacze DDL oparte na zdarzeniach: ALTER, AUDIT, DROP, GRANT, RENAME, REVOKE oparte na zdarzeniach w bazie danych: LOGON, LOGOFF, STARTUP, SHUTDOWN, SUSPEND dają nowe możliwości monitorowania czynności podejmowanych przez użytkowników. CREATE OR REPLACE TRIGGER nazwa_wyzwalacza BEFORE | AFTER zdarzenie_DDL | zdarzenie_w_bazie_danych ON DATABASE | SCHEMA nazwa_schematu BEGIN /* ciało wyzwalacza napisane w PL/SQL */ END;

167 Wyzwalacze DDL – oparte na zdarzeniach w bazie danych ZDARZENIA DDL ALTER, ANALYZE, ASSOCIATE STATISTICS, AUDIT, COMMENT, CREATE, DISASSOCIATE STATISTICS, DROP, GRANT, NOAUDIT, RENAME, REVOKE, TRUNCATE Wyzwalacze oparte na zdarzeniach DDL można tworzyć jako BEFORE lub AFTER oraz rozgraniczać ich zasięg z całej bazy do konkretnego schematu. ZDARZENIE W BAZIE DANYCH SERVERERROR (tylko AFTER ), LOGON (tylko AFTER ), LOGOFF (tylko BEFORE ), STARTUP (tylko AFTER ), SHUTDOWN (tylko BEFORE ), SUSPEND (tylko AFTER ). Wyzwalacze AFTER STARTUP oraz BEFORE SHUTDOWN mogą być utworzone tylko i wyłącznie dla całej bazy danych.

168 Wyzwalacze DDL – przykład create or replace trigger log_on after logon on database begin if user = 'DEMO' then raise_application_error (-20001,'Autoryzacja z tego konta jest zabroniona'); end if; end; SKUTEK DZIAŁANIA SQL> connect demo Enter password: ERROR: ORA-00604: error occurred at recursive SQL level 1 ORA-20001: Autoryzacja z tego konta jest zabroniona ORA-06512: at line 3 Warning: You are no longer connected to ORACLE.

169 Podział kompetencji dla dużych baz danych administrator bazy danych, menadżerowie bezpieczeństwa, administratorzy sieciowi, programiści, projektanci aplikacji, użytkownicy.

170 Podział kompetencji dla dużych baz danych Administrator bazy danych –instalacją i uaktualnianiem oprogramowania na serwerze, –zarządzaniem i planowaniem rozmieszczenia struktur bazy danych na dyskach, –tworzeniem podstawowych struktur w bazie danych na potrzeby programistów i projektantów aplikacji, –modyfikowaniem struktury bazy na podstawie propozycji projektantów aplikacji, –kontrolowaniem dostępu do bazy danych przez użytkowników, –monitorowaniem i optymalizacją wydajności serwera, –planowaniem tworzenia kopii zapasowych, –kontaktami z asystą techniczną w celu wyjaśniania ewentualnych problemów

171 Podział kompetencji dla dużych baz danych Menadżerowie bezpieczeństwa –zarządzenie użytkownikami, –monitorowanie dostępu użytkowników do struktur bazy danych, –planowanie i zapewnienie bezpieczeństwa dla struktur bazy danych, –zapewnienie bezpieczeństwa od strony systemu operacyjnego

172 Podział kompetencji dla dużych baz danych Projektanci aplikacji –projektowanie i tworzenie struktury aplikacji, –projektowanie i tworzenie struktury bazy danych pod kątem potrzeb aplikacji, –planowanie i określanie parametrów składowania dla poszczególnych obiektów, –monitorowanie i optymalizacja wydajności aplikacji. Programiści –tworzenie kodu aplikacji, struktur bazy danych: tabel, widoków, migawek itp. zgodnie z założeniami projektu wykonanego przez zespół projektantów Użytkownicy –wstawiania oraz modyfikowania danych do wcześniej zaprojektowanych struktur bazy danych przy pomocy aplikacji, –generowania raportów, zestawień czyli prezentowania informacji zapisanych w bazie danych

173 Tworzenie użytkowników CREATE USER nazwa_użytkownika IDENTIFIED [BY hasło | EXTERNALLY] DEFAULT TABLESPACE przestrzeń_tabel TEMPORARY TABLESPACE przestrzeń_tabel QUOTA [liczba K/M | UNLIMITED] ON przestrzeń_tabel PASSWORD EXPIRE ACCOUNT [LOCK | UNLOCK] PROFILE nazwa_profilu ;

174 Modyfikowanie użytkowników ALTER USER nazwa_użytkownika IDENTIFIED [BY hasło | EXTERNALLY] DEFAULT TABLESPACE przestrzeń_tabel TEMPORARY TABLESPACE przestrzeń_tabel QUOTA [liczba K/M | UNLIMITED] ON przestrzeń PASSWORD EXPIRE ACCOUNT [LOCK | UNLOCK] PROFILE nazwa_profilu;

175 Tworzenie użytkowników autoryzowanych przez system Czynności przygotowujące możliwość autoryzacji przez system operacyjny: 1.Ustawienie odpowiednich wartości dla parametrów w pliku parametrów. –REMOTE_OS_AUTHENT=TRUE –OS_AUTHENT_PREFIX=”OPS$” 2.W pliku SQLNET.ORA dokonanie zmiany nazwy serwisu autoryzacji na SSPI (dla systemu MS Windows NT) lub NTS (dla systemu UNIX). –SQLNET.AUTHENTICATION_SERVICES=(SSPI) Tworzenie użytkownika autoryzowanego przez SO: 1.Utworzenie użytkownika w systemie operacyjnym. 2.W bazie danych utworzenie użytkownika o nazwie: Parametr OS_AUTHENT_PREFIX + nazwa użytkownika jak w pkt.1 –CREATE USER OPS$JAN IDENTIFIED EXTERNALLY; Po zalogowaniu do OS bez wpisywania użytkownika i hasła można podłączyć się do bazy danych

176 Użytkownicy bazy danych - słownik danych: Informacje na temat użytkowników utworzonych w bazie danych uzyskać można z następujących perspektyw słownika danych: DBA_USERS parametry wszystkich użytkowników w bazie danych DBA_TS_QUOTAS limity użytkowników na poszczególne przestrzenie danych ALL_USERS wszyscy użytkownicy widoczni dla bieżącego użytkownika USER_USERS informacje o bieżącym użytkowniku USER_TS_QUOTAS limity bieżącego użytkownika na przestrzenie danych

177 Uprawnienia systemowe Uprawnienia można klasyfikować na kilka różnych sposobów: ze względu na rodzaj obiektu którego dotyczą –np. uprawnienia CREATE USER, ALTER USER, DROP USER dają odpowiednio możliwość tworzenia, modyfikowania użytkownika oraz jego usunięcie; ze względu na zasięg –np. CREATE TABLE daje możliwość tworzenia tabeli we własnym schemacie, natomiast CREATE ANY TABLE daje możliwość tworzenia tabeli w schemacie innych użytkowników. Wszystkie uprawnienia systemowe znajdują się w widoku systemowym SYSTEM_PRIVILEGE_MAP.

178 Uprawnienia do obiektów Uprawnienie do danego obiektu może nadać jedynie właściciel tego obiektu. Uprawnienia obiektowe mogą dotyczyć: – zmiany struktury obiektu ( ALTER ), –kasowania danych w ramach obiektu ( DELETE ), –dopisywania danych w ramach obiektu ( INSERT ), –modyfikowania danych w ramach obiektu ( UPDATE ), –przeglądania danych w ramach obiektu ( SELECT ), –wykonywania procedur ( EXECUTE ), –tworzenia indeksów dla tabeli ( INDEX )

179 Uprawnienia do obiektów Wybrane rodzaje uprawnień do obiektów TABELAWIDOKSEKWENCJAPROCEDURA, FUNKCJA, PAKIET MIGAWKA ALTER√√ DELETE√√ EXECUTE√ INSERT√√ SELECT√√√√ UPDATE√√ INDEX√ REFERENCES√

180 Przyznawanie uprawnień systemowych GRANT uprawnienie [, uprawnienie [...]] TO użytkownik [, użytkownik [...]] [WITH ADMIN OPTION]; W celu przyznania uprawnienia wszystkim użytkownikom należy zamiast nazwy użytkownika użyć zamiast nazwy użytkownika słowa kluczowego PUBLIC.

181 Przyznawanie uprawnień do obiektów GRANT uprawnienie [, uprawnienie [...]] ON obiekt TO użytkownik [, użytkownik [...]] [WITH GRANT OPTION]; W celu przyznania uprawnienia wszystkim użytkownikom należy zamiast nazwy użytkownika użyć zamiast nazwy użytkownika słowa kluczowego PUBLIC. Uprawnienia INSERT, UPDATE i REFERENCES można zawęzić do wybranych kolumn, np.: GRANT SELECT, UPDATE(kolumna) ON tabela TO użytkownik;

182 Odbieranie uprawnień systemowych REVOKE uprawnienie [, uprawnienie [...]] FROM użytkownik [, użytkownik [...]]; UPRAWNIENIA SYSTEMOWE NIE SĄ ODBIERANE KASKADOWO Zamiast wymieniać wszystkie uprawnienia które chcemy odebrać użytkownikowi można wykorzystać słowo kluczowe ALL. Zamiast wymieniać wszystkich użytkowników którym chcemy odebrać uprawnienie można wykorzystać słowo kluczowe PUBLIC.

183 Odbieranie uprawnień do obiektów REVOKE uprawnienie [, uprawnienie [...]] ON obiekt FROM użytkownik [, użytkownik [...]]; UPRAWNIENIA DO OBIEKTÓW SĄ ODBIERANE KASKADOWO Zamiast wymieniać wszystkie uprawnienia do obiektu które chcemy odebrać użytkownikowi można wykorzystać słowo kluczowe ALL. Zamiast wymieniać wszystkich użytkowników którym chcemy odebrać uprawnienie do obiektu można wykorzystać słowo kluczowe PUBLIC

184 Uprawnienia w bazie danych – słownik danych Ponadto dostępne są jeszcze widoki systemowe: –ALL_TAB_PRIVS –ALL_TAB_PRIVS_MADE –ALL_TAB_PRIVS_RECD –USER_TAB_PRIVS –USER_TAB_PRIVS_MADE –USER_TAB_PRIVS_RECD –USER_SYS_PRIVS DBA_SYS_PRIVS Informacje o przekazanych uprawnieniach systemowych DBA_TAB_PRIVS Informacje o przekazanych uprawnieniach do obiektów DBA_COL_PRIVS Informacje o przekazanych uprawnieniach do konkretnych kolumn obiektów. SESSION_PRIVS Informacje o przydzielonych uprawnieniach w ramach danej sesji

185 Autoryzacja przez plik haseł Autoryzacja przez plik haseł dostępna jest dla użytkowników posiadających uprawnienia SYSOPER lub SYSDBA. –SYSDBA Wykonywanie poleceń STARTUP i SHUTDOWN. Wykonywanie polecenia ALTER DATABASE z klauzulami: OPEN, MOUNT, BACKUP, CHANGE CHARACER SET. Wykonywanie polecenia CREATE DATABSE. Wykonywanie poleceń ARCHIVELOG oraz RECOVERY. Tworzenie binarnego pliku parametrów poleceniem CREATE SPFILE. Zawierają uprawnienie RESTRICTED SESSION. –SYSOPER Wykonywanie poleceń STARTUP i SHUTDOWN. Wykonywanie polecenia ALTER DATABASE z klauzulami: OPEN, MOUNT, BACKUP, CHANGE CHARACER SET. Wykonywanie poleceń ARCHIVELOG oraz RECOVERY. Tworzenie binarnego pliku parametrów poleceniem CREATE SPFILE. Zawierają uprawnienie RESTRICTED SESSION. Plik haseł znajduje się w lokalizacji: $ORACLE_HOME\database\pwd.ora

186 Autoryzacja przez plik haseł Nowy plik można utworzyć z linii poleceń poleceniem orapwd file= password= entries= fileparametr powinien zawierać pełną ścieżkę do nowego pliku haseł wraz z jego nazwą. Nazwa pliku haseł to PWD.ora (w systemie Windows NT/2000) lub orapw (w systemach Unix/Linux). passwordhasło które będzie obowiązywało wszystkich uprawnionych użytkowników do autoryzacji poza bazą danych. entriesilość wpisów zarezerwowanych dla użytkowników z uprawnieniami SYSOPER oraz SYSDBA. Po osiągnięciu limitu konieczne jest wygenerowanie nowego pliku.

187 Autoryzacja przez plik haseł Przed utworzeniem nowego pliku haseł należy: –zamknąć bazę danych –zatrzymać usługę uruchamiającą bazę danych w środowisku Windows NT. autoryzacja przez plik haseł występuje przy połączeniu użytkownika z klauzulą AS SYSOPER lub AS SYSDBA, np. CONNECT SYS AS SYSOPER; Uwaga: Podczas instalacji binariów Oracle w systemie operacyjnym Windows NT/2000 tworzona jest grupa robocza, w systemie Windows NT jest grupa ORA_DBA. Użytkownicy systemu operacyjnego dopisani do tej grupy, którzy posiadają uprawnienie SYSOPER lub SYSDBA nie są proszeni o podawanie hasła podczas autoryzacji przez plik haseł.

188 Role Rola jest zbiorem uprawnień systemowych oraz uprawnień do obiektów, który może być przypisany użytkownikowi. Role głównie tworzone są po to aby ułatwić zarządzanie uprawnieniami. Role mogą być przypisywane także innym rolom. W celu zwiększenia bezpieczeństwa dostępu do określonych zasobów rolom może zostać przypisane hasło. Role nie są związane z żadnym schematem - przechowywane są w słowniku bazy danych. Administrator bazy danych może sterować dostępnością ról i ich zakresem. Role zostają przypisane użytkownikom w momencie przydzielenia ich poleceniem GRANT. Jednak DBA ma możliwość wyboru, które role będą rolami domyślnymi ( ALTER USER ), a które będą włączane w trakcie trwania sesji użytkownika.

189 Role predefiniowane Nazwa roliCONNECTRESOURCE Uprawnienia przydzielone roli ALTER SESSION CREATE CLUSTER CREATE DATABASE LINK CREATE SEQUENCE CREATE SESSION CREATE SYNONYM CREATE TABLE CREATE VIEW CREATE CLUSTER CREATE INDEXTYPE CREATE OPERATOR CREATE PROCEDURE CREATE SEQUENCE CREATE TABLE CREATE TRIGGER CREATE TYPE UNLIMITED TABLESPACE

190 Role predefiniowane CONNECT, RESOURCE, DBA, EXP_FULL_DATABASE, IMP_FULL_DATABASE EXECUTE_CATALOG_ROLE, DELETE_CATALOG_ROLE, SELECT_CATALOG_ROLE.

191 Tworzenie roli Do utworzenia roli potrzebne jest uprawnienie systemowe CREATE ROLE. Użytkownik który utworzył rolę otrzymuje ją automatycznie wraz z opcją administracyjną. CREATE ROLE nazwa_roli [IDENTIFIED BY hasło]; nazwa roli musi być unikalna w bazie danych i nie może być taka sama jak nazwa któregokolwiek z użytkowników. IDENTIFIED BY umożliwia zabezpieczenie roli hasłem przed jej włączeniem - patrz rozdział poświęcony zabezpieczeniu ról.

192 Modyfikowanie roli Do modyfikacji roli potrzebne jest uprawnienie ALTER ANY ROLE lub rola musi być przekazana z opcją administracyjną. ALTER ROLE nazwa_roli [IDENTIFIED BY hasło];

193 Role – tworzenie zestawu uprawnień Uprawnienia do roli przekazywane są poleceniem GRANT w którym zamiast nazwy użytkownika wymienić należy nazwę roli: GRANT uprawnienie TO rola; GRANT uprawnienie ON obiekt TO rola; –Przyznanie roli nie daje użytkownikowi od razu możliwości wykorzystania uprawnień. –Role są weryfikowane podczas otwierania sesji, podłączeni użytkownicy mogą skorzystać z uprawnień nowej roli dopiero w następnej sesji. –Jeśli użytkownik posiada rolę i w trakcie trwania jego sesji administrator przekaże roli nowe uprawnienia to widziane są one od razu. Uprawnienia odbierane są rolom za pomocą polecenia REVOKE : REVOKE uprawnienie FROM rola; REVOKE uprawnienie ON obiekt FROM rola; –Zabranie roli uprawnienia u użytkownika objawi się natychmiastowym brakiem danego uprawnienia. – Zabranie roli użytkownikowi podczas trwania sesji będzie nieodczuwalne do czasu otwarcia następnej sesji (rola nie będzie widoczna)

194 Usuwanie roli Aby usunąć rolę należy posiadać uprawnienie DROP ANY ROLE lub mieć przyznaną rolę z opcją WITH ADMIN OPTION. DROP ROLE nazwa_roli; Usunięcie roli u użytkownika objawia się natychmiastową utratą uprawnień, które wraz z tą rolą otrzymał.

195 Role domyślne Rolą domyślną są wszystkie role, jaki zostaną nadane użytkownikowi, chyba że administrator określi inny zbiór ról stanowiących role domyślne. Role domyślne są automatycznie włączane użytkownikowi w momencie otwierania sesji. Wszystkie pozostałe role, mimo tego, że zostały użytkownikowi nadane, są nieaktywne. ALTER USER nazwa_użytkownika DEFAULT ROLE opcja; OPCJAOPIS ALLwszystkie role które zostały nadane użytkownikowi będą domyślne. ALL EXCEPTwszystkie role za wyjątkiem ról wymienionych po słowie kluczowym EXCEPT. NONEżadna rola nie będzie domyślna. ROLAnazwa roli lub lista ról, które będą domyślne

196 Role zabezpieczone hasłem Użytkownik, aby uaktywnić rolę zabezpieczoną hasłem, musi podać hasło. Jeżeli rola zabezpieczona hasłem zostanie określona jako domyślna dla użytkownika to system włączy ją bez pytania o hasło. CREATE ROLE nazwa_roli IDENTIFIED BY hasło; lub ALTER ROLE nazwa_roli IDENTIFIED BY hasło;

197 Włączanie i wyłączanie ról Te role, które nie są określone jako domyślne, użytkownik może włączyć poleceniem: SET ROLE opcja [IDENTIFIED BY hasło]; OPCJAOPIS ALLmają być włączone wszystkie role, które użytkownik ma przydzielone. Nie można skorzystać z tej opcji dla ról zabezpieczonych hasłem; ALL EXCEPTzostaną włączone wszystkie role za wyjątkiem ról wymienionych po słowie kluczowym EXCEPT NONEwyłącza wszystkie role ROLAokreślona rola ma być włączona Wszystkie role, które nie zostaną wymienione włączone staną się nieaktywne. Włączanie i wyłączanie ról odnosi się tylko do bieżącej sesji użytkownika

198 Role – Słownik Danych Informacje o rolach w bazie danych można uzyskać z następujących perspektyw: DBA_ROLES zawiera informacje o rolach zdefiniowanych w bazie danych DBA_ROLE_PRIVS zawiera informacje o rolach przekazanych użytkownikom bazy danych; ROLE_SYS_PRIVS zawiera informacje o uprawnieniach systemowych przekazanym rolom; ROLE_TAB_PRIVS zawiera informację o prawach dostępu do obiektów przyznanym rolom; ROLE_ROLE_PRIVS zawiera informacje o rolach przyznanych innym rolom

199

200 DO ZROBIENIA VPD – dostęp na poziomie wiersza –

201

202 Profile KATEGORIE PROFILI: –profile ograniczające dostęp do zasobów serwera, np. czas procesora, ograniczenie operacji wejścia/wyjścia, itd.; –profile umożliwiające kontrolę dołączania do bazy danych oraz kontrolę haseł użytkowników. W celu uaktywnienia sprawdzania profili należy ustawić wartość parametru RESOURCE_LIMIT na TRUE. Jeżeli instancja pracuje, uaktywnianie sprawdzania profili można włączyć poleceniem: ALTER SYSTEM SET RESOURCE_LIMIT=TRUE Domyślnie w bazie danych zdefiniowany jest jeden profil o nazwie DEFAULT. Profil ten nie posiada żadnych ograniczeń, ale administrator może go zmienić.

203 Tworzenie profilu i kojarzenie z użytkownikiem CREATE PROFILE nazwa_profilu LIMIT PARAMETR1 wartość PARAMETR2 wartość...; Po utworzeniu profilu można go skojarzyć z użytkownikiem wykorzystując klauzulę PROFILE w poleceniach ALTER USER oraz CREATE USER : ALTER USER nazwa_uzytkownika PROFILE nazwa_profilu; CREATE USER nazwa_uzytkownika IDENTIFIED BY haslo PROFILE nazwa_profilu; Każdy użytkownik może być skojarzony tylko z jednym profilem.

204 Limity dotyczące wykorzystania zasobów systemowych SESSIONS_PER_USER liczba jednoczesnych sesji użytkownika; CPU_PER_SESSION maksymalny czas pracy procesora dla sesji użytkownika (podany w setnych częściach sekundy) ; CPU_PER_CALL maksymalny czas pracy procesora dla pojedynczego polecenia użytkownika (podany w setnych częściach sekundy); CONNECT_TIME maksymalny czas trwania sesji użytkownika (podany w minutach); IDLE_TIME maksymalny czas bezczynności użytkownika (podany w minutach); LOGICAL_READS_PER_SESSION maksymalna liczba bloków danych odczytanych przez polecenia użytkownika w ramach sesji; LOGICAL_READS_PER_CALL maksymalna liczba bloków danych odczytanych przez pojedyncze polecenie; COMPOSITE LIMIT limit złożony obliczany jako średnia ważona dla poszczególnych składowych (dotyczy tylko ograniczeń zasobów).

205 Limity ograniczające dostęp do bazy danych PASSWORD_LIFE_TIMEokreśla liczbę dni, podczas których może być używane dane hasło. Jeżeli hasło nie zostanie zmienione to konto zostanie zablokowane; PASSWORD_REUSE_TIMEokreśla liczbę dni, przed upływem których hasło nie może być ponownie użyte. Zdefiniowanie tego parametru wymaga ustawienia na UNLIMITED parametru PASSWORD_REUSE_MAX; PASSWORD_REUSE_ MAXokreśla liczbę zmian haseł zanim bieżące hasło będzie mogło być ponownie użyte. Zdefiniowanie tego parametru wymaga ustawienia na UNLIMITED parametru PASSWORD_REUSE_ TIME; FAILED_LOGIN_ATTEMPT S określa maksymalną liczbę nieudanych prób logowania, po której konto użytkownika zostanie zablokowane; PASSWORD_LOCK_TIMEokreśla liczbę dni, przez które konto pozostanie zablokowane po przekroczeniu maksymalnej liczby nieudanych prób logowania (np. 1 godzina to wartość 1/24); PASSWORD_GRACE_TIMEokreśla liczbę dni po wygaśnięciu hasła, podczas których użytkownik może się podłączyć i zmienić hasło; PASSWORD_VERIFY_ FUNCTION specyfikuje nazwę funkcji PL/SQL, która będzie weryfikować złożoność hasła użytkownika (np. sprawdzać ilość znaków w haśle).

206 Modyfikacja profilu ALTER PROFILE nazwa_profilu LIMIT PARAMETR1 wartość PARAMETR2 wartość...; –Wartości parametrów mogą przyjąć ściśle określoną wartość zgodnie ze specyfikacją parametru. –Można też wartość ograniczenia określić jako UNLIMITED, co zezwala na nieograniczoną wartość danego parametru, lub jako DEFAULT, co oznacza, że dany zasób będzie limitowany jak w profilu o nazwie DEFAULT ).

207 Usunięcie profilu DROP PROFILE nazwa_profilu [CASCADE]; –Jeżeli usuwany profil był przypisany do użytkownika to należy użyć opcji CASCADE. System skasuje profil, a użytkownikowi przypisze profil DEFAULT. –Profilu DEFAULT nie można usunąć.

208 Funkcja weryfikacji hasła Funkcja weryfikacji hasła umożliwia narzucenie użytkownikom takich ograniczeń jak: –minimalna długość hasła, –złożoność hasła pod względem zawartości np. liter i liczb, –różnica w stosunku do hasła poprzedniego. –oraz wiele innych. Powiązanie funkcji weryfikującej hasło z kontem użytkownika następuje przez parametr PASSWORD_VERIFY_FUNCTION podczas tworzenia lub modyfikacji profilu.

209 Funkcja weryfikacji hasła Nagłówek funkcji weryfikującej hasło powinien być zgodny z następującą specyfikacją: CREATE OR REPLACE FUNCTION nazwa_funkcji (USERNAME VARCHAR2, PASSWORD VARCHAR2, OLD_PASSWORD VARCHAR2) RETURN BOOLEAN IS... Funkcja powinna zostać utworzona w schemacie użytkownika SYS z uprawnieniem SYSDBA.

210 Funkcja weryfikacji hasła Przykładowa funkcja do weryfikacji hasła może zostać utworzona przez skrypt UTLPWDMG.sql, który znajduje się w katalogu : $ORACLE_HOME\RDBMS\ADMIN.

211 Funkcja weryfikacji hasła Przykładowa funkcja do weryfikacji hasła CREATE OR REPLACE FUNCTION SPRAWDZ_HASLO (USERNAME VARCHAR2, PASSWORD VARCHAR2, OLD_PASSWORD VARCHAR2) RETURN BOOLEAN IS BEGIN IF LENGTH(PASSWORD) < 6 THEN RAISE_APPLICATION_ERROR (20001, ‘HASLO MUSI POSIADAC CO NAJMNIEJ 6 ZNAKOW’); END IF; RETURN (TRUE); END;

212 Profile – słownik danych Informacje o profilach zdefiniowanych w bazie WidokOpis DBA_PROFILES Informacja nt. utworzonych profili i ich limitów. DBA_USERS Informacja o tym, jaki profil został przypisany do użytkownika

213 Monitorowanie pracy użytkowników Administrator bazy danych może śledzić pracę użytkowników lub tylko wybrane operacje w celu: –Przygotowania raportów wykorzystania bazy danych dla celów zarządzania. –Zapisywania nieudanych prób podłączenia się do bazy danych. –Znajdowania najbardziej obciążonych tabel w celu regulacji. –Badania podejrzanych zmian w tabelach o kluczowym znaczeniu. –Planowania zużycia zasobów przez użytkowników. –itp.

214 Monitorowanie pracy użytkowników Rozróżniane są trzy metody monitorowania pracy użytkowników: –monitorowanie poleceń - STATEMENT AUDITING, –monitorowanie uprawnień - PRIVILEGE AUDITING, –monitorowanie obiektów - OBJECT AUDITING. Dodatkową strukturę w postaci tabel oraz widoków związanych z monitorowanie można założyć uruchamiając skrypt CATAUDIT.SQL lub usunąć przy pomocy skryptu CATNOAUDIT.SQL. Pierwszy z nich jest wywoływany automatycznie podczas tworzenia bazy danych po uruchomieniu skryptu CATALOG.SQL. Informacje generowane w wyniku monitorowania zapisywane są do Dziennika Obserwacji SYS.AUD$.

215 Monitorowanie pracy użytkowników Włączenie monitorowania odbywa się poprzez ustawienie w pliku konfiguracyjnym AUDIT_TRAIL= opcja Ze względu na duże obciążenie systemu zaleca się korzystanie z monitorowania tylko w konieczności normalnie zaleca się wyłączenie monitorowania. OPCJAOPIS DB lub TRUEzapis następuje do Dziennika Obserwacji ORACLE, OSzapis następuje do Dziennika Systemu Operacyjnego, NONEwyłączenie monitorowania

216 Monitorowanie poleceń Włączenie monitorowania poleceń AUDIT polecenie [, polecenie [... ] ] [BY użytkownik [, użytkownik [... ] ] [BY {SESSION | ACCESS} ] [WHENEVER [NOT] SUCCESSFUL ]; polecenie nazwa kategorii monitorowanych poleceń, użytkownik nazwa monitorowanego użytkownika, BY SESSION jeden zapis na sesję niezależnie od ilości wykonanych poleceń, BY ACCESS jeden zapis dla każdego wykonanego polecenia, SUCCESSFUL rejestrowane będą tylko pomyślnie zakończone polecenia, NOT SUCCESSFUL rejestrowane będą tylko nieudane polecenia

217 Monitorowanie – kategorie poleceń KATEGORIA POLECEŃOBEJMOWANE POLECENIA SQL ALTER SYSTEM CLUSTERCREATE CLUSTER ALTER CLUSTER TRUNCATE CLUSTER DROP CLUSTE DATABASE LINKCREATE DATABASE LINK DROP DATABASE LINK INDEXCREATE INDEX ALTER INDEX REBUILD INDEX NOT EXISTSwszystkie polecenia SQL kończące się błędem w wyniku odwołania do nieistniejących obiektów

218 Monitorowanie – kategorie poleceń KATEGORIA POLECEŃOBEJMOWANE POLECENIA SQL PROCEDURECREATE FUNCTION CREATE PACKAGE CREATE PACKAGE BODY CREATE PROCEDURE DROP FUNCTION DROP PACKAGE DROP PROCEDURE PUBLIC DATABASE LINKCREATE PUBLIC DATABASE LINK DROP PUBLIC DATABASE LINK PUBLIC SYNONYMCREATE PUBLIC SYNONYM DROP PUBLIC SYNONYM ROLECREATE ROLE ALTER ROLE SET ROLE DROP ROLE

219 Monitorowanie – kategorie poleceń KATEGORIA POLECEŃOBEJMOWANE POLECENIA SQL ROLLBACK SEGMENTCREATE ROLLBACK SEGMENT ALTER ROLLBACK SEGMENT DROP ROLLBACK SEGM SEQUENCECREATE SEQUENCE DROP SEQUENCE SESSION przyłączenie do bazy i odłączenie SYNONYMCREATE SYNONYM DROP SYNONYM SYSTEM AUDITAUDIT NO AUDIT SYSTEM GRANT przyznanie i odebranie uprawnień systemowych TABLECREATE TABLE ALTER TABLE DROP TABLE

220 Monitorowanie – kategorie poleceń KATEGORIA POLECEŃOBEJMOWANE POLECENIA SQL TABLESPACECREATE TABLESPACE ALTER TABLESPACE DROP TABLESPACE TRIGGERCREATE TRIGGER ALTER TRIGGER ENABLE | DISABLE ALTER TABLE ENABLE, DISABLE, DROP USERCREATE USER ALTER USER DROP USER VIEWCREATE VIEW DROP VIEW

221 Monitorowanie – kategorie poleceń KATEGORIA POLECEŃOBEJMOWANE POLECENIA SQL ALTER SEQUENCE ALTER TABLE COMMENT TABLE COMMENT ON tabela, perspektywa, migawka, atrybut DELETE TABLE DELETE FROM tabela, perspektywa EXECUTE PROCEDURE wywołanie procedury i funkcji składowanej GRANT PROCEDUREGRANT prawo ON procedura REVOKE prawo FROM procedura GRANT SEQUENCEGRANT prawo ON licznik REVOKE prawo FROM licznik GRANT TABLE GRANT prawo ON tabela, perspektywa, migawka REVOKE prawo FROM tabela, perspektywa, migawka

222 Monitorowanie – kategorie poleceń KATEGORIA POLECEŃOBEJMOWANE POLECENIA SQL INSERT TABLE INSERT INTO tabela, perspektywa LOCK TABLE LOCK TABLE tabela, perspektywa SELECT SEQUENCE odwołanie do licznika SELECT TABLE SELECT... FROM tabela, perspektywa, migawka UPDATE TABLE UPDATE tabela, perspektywa

223 Wyłączenie monitorowania poleceń NOAUDIT polecenie [, polecenie [... ] ] [BY użytkownik [, użytkownik [... ] ] [WHENEVER [NOT] SUCCESSFUL ]; Znaczenie parametrów takie same jak dla załączenia monitorowania

224 Monitorowanie obiektów Włączenie monitorowania obiektów: AUDIT operacja, [,operacja [... ]] ON obiekt [BY {SESSION | ACCESS} ] [WHENEVER [NOT] SUCCESSFUL ]; Wyłączenie monitorowania uprawnień: NOAUDIT operacja [, operacja [... ]] ON obiekt [BY {SESSION | ACCESS} ] [WHENEVER [NOT] SUCCESSFUL ]; Słownik danych: DBA_OBJ_AUDIT_OPTS operacja nazwa monitorowanej operacji, ALL zamiast nazwy operacji oznacza wszystkie dopuszczalne operacje na tym obiekcie; obiekt nazwa monitorowanego obiektu, DEFAULT - zamiast nazwy obiektu oznacza monitorowanie każdego utworzonego w przyszłości obiektu bazy danych.

225 Monitorowanie obiektów - zakresy OperacjaTabelaWidokLicznikMigawkaProcedura ALTER XX AUDIT XXXX COMMENT XX DELETE XX EXECUTE X GRANT XXXX INDEX X INSERT XX LOCK XX RENAME XXX SELECT XXXX UPDATE XX

226 Monitorowanie obiektów Informacje o aktualnie włączonym monitorowaniu operacji na obiektach można wyświetlić z perspektywy DBA_OBJ_AUDIT_OPTS Stan monitorowania jest określany następująco: -brak monitorowania Amonitorowanie By Access S monitorowanie By Session

227 Odczytywanie dziennika obserwacji Dziennik obserwacji jest tabelą słownika danych (SYS.AUD$), Ze względu na niewielką czytelność dziennika obserwacji, zwykle wykorzystuje się perspektywy słownika danych DBA_AUDIT_TRAIL pokazuje wszystkie wpisy wygenerowane podczas monitorowania; DBA_AUDIT_STATEMENT pokazuje wpisy związane z monitorowaniem poleceń GRANT, REVOKE, AUDIT, NOAUDIT, ALTER SYSTEM ; DBA_AUDIT_SESSION pokazuje wpisy związane z monitorowaniem początku i końca sesji użytkownika; DBA_AUDIT_OBJECT pokazuje wpisy związane z monitorowaniem obiektów; DBA_AUDIT_EXISTS pokazuje wpisy związane z monitorowaniem sytuacji, w których użytkownik odwołuje się do nieistniejących obiektów

228 Odczytywanie dziennika obserwacji W bazie istnieją także odpowiednie widoki z przedrostkiem USER umożliwiające zwykłemu użytkownikowi oglądanie wpisów związanych z monitorowaniem jego poleceń lub obiektów. USER_AUDIT_TRAIL pokazuje wszystkie wpisy wygenerowane podczas monitorowania; USER_AUDIT_STATEMENT pokazuje wpisy związane z monitorowaniem poleceń GRANT, REVOKE, AUDIT, NOAUDIT, ALTER SYSTEM ; USER_AUDIT_SESSION pokazuje wpisy związane z monitorowaniem początku i końca sesji użytkownika; USER_AUDIT_OBJECT pokazuje wpisy związane z monitorowaniem obiektów; USER_AUDIT_EXISTS pokazuje wpisy związane z monitorowaniem sytuacji, w których użytkownik odwołuje się do nieistniejących obiektów PONIEWAŻ DZIENNIK OBSERWACJI JEST TABELĄ SŁOWNIKA DANYCH, A MONITOROWANIE POWODUJE CIĄGŁE POWIĘKSZANIE SIĘ TEGO DZIENNIKA, ZALECA SIĘ OKRESOWO CZYŚCIĆ JEGO ZAWARTOŚĆ

229 Monitorowanie pracy użytkowników - słownik danych Stan monitorowania poleceń i uprawnień Stan monitorowania dostępu do obiektów DBA_STMT_AUDIT_OPTS informacja o włączeniu monitorowania poleceń i uprawnień; DBA_PRIV_AUDIT_OPTS informacja o włączeniu monitorowania uprawnień DBA_OBJ_AUDIT_OPTS zawiera opis stanu monitorowania obiektów istniejących w bazie; ALL_DEF_AUDIT_OPTS zawiera tylko jeden wiersz opisujący stan monitorowania obiektów, które zostaną utworzone w bazie

230 Dodatkowe zabezpieczenia w SQL Plus Program SQL Plus posiada dodatkowy mechanizm stosowany aby uniemożliwić użytkownikowi wydawanie pewnych poleceń. Z konta SYSTEM można wygenerować tabelę SQLPLUS_PRODUCT_PROFILE za pomocą $ORACLE_HOME\sqlplus\admin\pupbld.sql Jeśli użytkownik nie powinien wykonywać pewnych poleceń, z poziomu programu SQL Plus należy do tabeli wprowadzić informację: INSERT INTO PRODUCT_USER_PROFILE (PRODUCT,USERID,ATTRIBUTE,CHAR_VALUE) VALUES ('SQL*PLUS','JANEK','CONNECT','DISABLED'); COMMIT; Przykładowe polecenie zabrania użytkownikowi JANEK wykonywania polecenia CONNECT. Dzięki temu z programu SQL Plus użytkownik nie będzie mógł się przełączyć na inne konto. UWAGA: Ta opcja działa tylko w programie SQL Plus. Wprowadzając dane do tabeli należy uwzględnić duże i małe litery. PRODUCT_USER_PROFILE jest publicznym synonimem tabeli SQLPLUS_PRODUCT_PROFILE w schemacie użytkownika SYSTEM

231 Przejmowanie konta użytkownika – opcja nieudokumentowana Administrator mimo, że dzięki uprawnieniu SELECT ANY TABLE może przeczytać zawartość tabeli każdego z użytkowników, nie może przekazać praw do tabeli innego użytkownika – to może zrobić tylko właściciel obiektu. Administrator może zmienić hasło użytkownika ale nie może poznać jakie hasło użytkownik ma ustawione dla swojego konta w bazie danych.

232 Przejmowanie konta użytkownika – opcja nieudokumentowana Przykładowy scenariusz przejęcia może wyglądać następująco: 1.Administrator zakłada konto JANEK w bazie danych z domyślnym hasłem JANEK CREATE USER JANEK IDENTIFIED BY JANEK; GRANT CONNECT, RESOURCE TO JANEK; 2.Użytkownik przy pierwszym logowaniu do bazy danych zmienił swoje hasło ALTER USER JANEK IDENTIFIED BY nowe_hasło; Co można zrobić, żeby podłączyć się na konto użytkownika JANEK, w taki sposób aby hasło użytkownika pozostało niezmienione?

233 Przejmowanie konta użytkownika – opcja nieudokumentowana 3.Bieżące hasło użytkownika w postaci zaszyfrowanej można odczytać z widoku DBA_USERS : SELECT USERNAME, PASSWORD FROMDBA_USERS WHERE USERNAME = 'JANEK'; 4.Po zapisaniu hasła administrator może zmienić hasło użytkownika poleceniem: ALTER USER JANEK IDENTIFIED BY TEST; Teraz bez przeszkód można podłączyć się na konto użytkownika JANEK z hasłem TEST.

234 Przejmowanie konta użytkownika – opcja nieudokumentowana 1.Oryginalne hasło można przywrócić poleceniem: ALTER USER JANEK IDENTIFIED BY VALUES '25B66128A38279F2'; gdzie wartość '25B66128A38279F2' pochodzi z odczytanej wcześniej perspektywy DBA_USERS ; Cała operacja, jeśli zostanie wykonana poprawnie jest dla użytkownika niewidoczna. Opisana właściwość jest nieudokumentowana i nie ma gwarancji na to, że będzie działać na każdej platformie i dla każdej wersji systemu Oracle.

235 Pusty

236

237 db_name = "baza" db_domain = world instance_name = baza service_names = baza.world db_files = 1024 control_files = ("D:\baza\control1.ctl","D:\baza\control2.ctl") open_cursors = 100 db_block_size = 8192 db_file_multiblock_read_count = 8 db_block_buffers = 2048 shared_pool_size = log_checkpoint_interval = log_checkpoint_timeout = 1800 processes = 50 log_buffer = audit_trail = false max_dump_file_size = global_names = true background_dump_dest = D:\baza\bdump user_dump_dest = D:\baza\udump remote_login_passwordfile = exclusive os_authent_prefix = "" compatible = Tworzenie bazy danych - u tworzenie pliku parametrów np.:

238 Tworzenie bazy dany Utworzenie struktury katalogów dla plików bazy danych Należy pamiętać o wyznaczeniu miejsca dla poszczególnych plików wchodzących w skład bazy danych (pliki kontrolne, pliki dziennika powtórzeń, pliki danych, pliki śladu, plik ostrzeżeń, pliki śladu sesji użytkowników) np.: D:\baza\ zawiera pliki kontrolne, pliki dziennika powtórzeń, pliki danych D:\baza\bdumpzawiera pliki śladu i plik ostrzeżeń D:\baza\udumpzawiera pliki śladu sesji użytkowników

239 Tworzenie bazy dany Ustawienie zmiennej środowiskowej ORACLE_SID Zmienną można ustawić poleceniem: set ORACLE_SID=SID_Bazy_Danych wydanym w linii poleceń. Ważne jest aby pozostałe czynności związane z tworzeniem bazy danych wykonywać w tym samym oknie poleceń, w którym została ustawiona zmienna ORACLE_SI

240 Tworzenie bazy dany Utworzenie serwisów oraz pliku haseł Krok ten należy wykonać tylko w przypadku tworzenia bazy danych w systemie operacyjnym Windows NT/2000. W celu utworzenia serwisów wraz z odpowiednimi wpisami w rejestrze systemu oraz pliku haseł należy skorzystać z programu ORADIM. ORADIM –NEW –SID sid [-INTPWD password] [SRVC svrcname] [-MAXUSERS number] [-STARTMODE auto, manual] [-PFILE filename] Opis parametrów polecenia ORADIM można uzyskać wykonując komendę ORADIM -?

241 Tworzenie bazy dany Utworzenie serwisów oraz pliku haseł Przykład tworzenia serwisu za pomocą polecenia ORADIM: ORADIM –NEW –SID baza -INTPWD oracle -STARTMODE auto –PFILE d:\baza\initbaza.ora. W przypadku systemów z rodziny Unix/Linux, zamiast serwisu należy utworzyć plik haseł dla nowo tworzonej bazy danych. Służy do tego polecenie ORAPWD: orapwd file=$ORACLE_HOME/dbs/orapw password=oracle entries=5

242 Tworzenie bazy dany Uruchomienie nowo utworzonej instancji w trybie NOMOUNT Z linii poleceń należy wywołać narzędzie SQL Plus, a następnie podłączyć się do instancji poleceniem jako użytkownik SYS z hasłem podanym przy tworzeniu serwisu programem ORADIM (wartość parametru – INTPWD; w systemie Windows NT/2000) lub ORAPWD (w systemie Unix/Linux) Kolejnym krokiem jest uruchomienie instancji w trybie NOMOUNT przy pomocy polecenia: STARTUP NOMOUNT PFILE=D:\BAZA\INITBAZA.ORA

243 Tworzenie bazy dany Utworzenie bazy danych poleceniem CREATE DATABASE Przykładowa zawartość skryptu baza.sql: CREATE DATABASE baza controlfile reuse logfile GROUP 1 ('C:\BAZA\redo01a.log', 'C:\BAZA\redo01b.log') size 1M, GROUP 2 ('C:\BAZA\redo02a.log', 'C:\BAZA\redo02b.log') size 1M datafile 'C:\BAZA\system01.dbf' size 80M autoextend on next 1M maxsize 100M maxdatafiles 32 maxlogfiles 32 maxlogmembers 3 character set EE8MSWIN1250;

244 Tworzenie bazy dany Utworzenie bazy danych poleceniem CREATE DATABASE Polecenie CREATE DATABASE tworzy bazę danych. Jednocześnie wykonywany jest skrypt sql.bsq i tworzone są następujące obiekty: przestrzeń danych SYSTEM, pliki danych dla przestrzeni SYSTEM, pliki kontrolne oraz pliki dziennika powtórzeń, segment wycofania SYSTEM, tabele systemowe (nie tworzone są jeszcze perspektywy słownika danych), użytkownika SYS z hasłem change_on_install oraz użytkownika SYSTEM z hasłem manager, określa zestaw znaków dla bazy danych. Po utworzeniu bazy danych jest ona automatycznie uruchamiana.

245 Tworzenie bazy dany Utworzenie w bazie odpowiednich przestrzeni tabel Tworzenie przestrzeni tabel dla danych, tymczasowych przestrzeni danych, przestrzeni dla segmentów wycofania

246 Tworzenie bazy dany Założenie struktur słownikowych Po utworzeniu bazy danych należy użyć skryptów w kolejności do stworzenia powszechnie używanych perspektyw słownika danych i obsługi PL/SQL.

247 Tworzenie bazy dany Założenie struktur słownikowych Skrypt catalog.sql tworzy perspektywy oparte na tabelach bazowych i na dynamicznych perspektywach wydajności. Uruchamia tez inne skrypty, które tworzą obiekty dla: podstawowego środowiska PL/SQL, m.in. deklaracje, śledzenia, importu/exportu, SQL*Loadera, zainstalowanych opcji dodatkowych. Skrypt catproc.sql umożliwia wykorzystywanie PL/SQL. Tworzy też dodatkowe pakiety i perspektywy dla alertów,, obiektów, dużych obiektów, zaawansowanego kolejkowania, opcji replikacji.

248 Tworzenie bazy dany Utworzenie segmentów wycofania w przeznaczonej dla nich przestrzeni tabel Przy pomocy polecenia CREATE ROLLBACK SEGMENT należy utworzyć odpowiednią liczbę segmentów wycofania przełączając je w stan online. Jeżeli tworzone segmenty są segmentami PRIVATE to należy w pliku parametrów ustawić w sposób odpowiedni wartość parametru ROLLBACK_SEGMENTS (patrz: rozdział o segmentach wycofania). Uwaga: Po wykonaniu powyższych czynności należy dokonać konfiguracji Sieciowego Procesu Komunikacyjnego

249 Tworzenie bazy danych create database MYNEW maxinstances 1 maxloghistory 1 maxlogfiles 5 maxlogmembers 5 maxdatafiles 100 datafile 'D:\oracle\oradata\mydb\system01.dbf' size 325m reuse autoextend on next 10240k maxsize unlimited character set WE8MSWIN1252 national character set AL16UTF16 logfile group 1 ('d:\oracle\oradata\mydb\redo01.log') size 100m, group 2 ('d:\oracle\oradata\mydb\redo02.log') size 100m, group 3 ('d:\oracle\oradata\mydb\redo03.log') size 100m default temporary tablespace TEMP tempfile 'd:\oracle\oradata\mydb\temp01.dbf' extent management local uniform size 1m undo tablespace UNDO_TS datafile 'd:\oracle\oradata\mydb\temp01.dbf' size 150m reuse autoextend on next 10240k maxsize unlimited;

250 ALTER SYSTEM Modify system settings. ALTER SYSTEM ARCHIVE LOG archive_log_clausearchive_log_clause ALTER SYSTEM CHECKPOINT [GLOBAL | LOCAL] ALTER SYSTEM CHECK DATAFILES [GLOBAL | LOCAL] ALTER SYSTEM FLUSH SHARED POOL ALTER SYSTEM SWITCH LOGFILE ALTER SYSTEM {ENABLE | DISABLE} DISTRIBUTED RECOVERY ALTER SYSTEM {ENABLE | DISABLE} RESTRICTED SESSION ALTER SYSTEM {SUSPEND | RESUME} ALTER SYSTEM SHUTDOWN [IMMEDIATE] dispatcher_name ALTER SYSTEM KILL SESSION 'int1, int2' [POST TRANSACTION] [IMMEDIATE] ALTER SYSTEM DISCONNECT SESSION 'int1, int2' [IMMEDIATE] ALTER SYSTEM SET option(s) Also: (new in Oracle 9) ALTER SYSTEM QUIESCE RESTRICTED ALTER SYSTEM UNQUIESCE

251 ALTER SYSTEM Modify system settings. options: AQ_TM_PROCESSES = int BACKGROUND_DUMP_DEST = 'text' BACKUP_TAPE_IO_SLAVES = {TRUE | FALSE} DEFERRED CONTROL_FILE_RECORD_KEEP_TIME = int CORE_DUMP_DEST = 'text' CREATE_STORED_OUTLINES = {TRUE | FALSE | 'category_name' } [NOOVERRIDE] CURSOR_SHARING = {force|exact} DB_BLOCK_CHECKING = {TRUE | FALSE} DEFERRED DB_BLOCK_CHECKSUM = {TRUE | FALSE} DB_BLOCK_MAX_DIRTY_TARGET = int DB_FILE_DIRECT_IO_COUNT = int DEFERRED DB_FILE_MULTIBLOCK_READ_COUNT = int FAST_START_IO_TARGET = int FAST_START_PARALLEL_ROLLBACK = {FALSE | LOW | HIGH} FIXED_DATE = { 'DD_MM_YY' | 'YYYY_MI_DD_HH24_MI-SS' }

252 ALTER SYSTEM Modify system settings. GC_DEFER_TIME = int GLOBAL_NAMES = {TRUE | FALSE} HASH_MULTIBLOCK_IO_COUNT = int HS_AUTOREGISTER = {TRUE | FALSE} JOB_QUEUE_PROCESSES = int LICENSE_MAX_SESSIONS = int LICENSE_MAX_USERS = int LICENSE_SESSIONS_WARNING = int LOG_ARCHIVE_DEST = string LOG_ARCHIVE_DEST_n = {null_string | {LOCATION=local_pathname | SERVICE=tnsnames_service} [MANDATORY | OPTIONAL] [REOPEN[=integer]]} LOG_ARCHIVE_DEST_STATE_n = {ENABLE | DEFER} LOG_ARCHIVE_DUPLEX_DEST = string LOG_ARCHIVE_MAX_PROCESSES = int LOG_ARCHIVE_MIN_SUCCEED_DEST = int LOG_ARCHIVE_TRACE = int LOG_CHECKPOINT_INTERVAL = int LOG_CHECKPOINT_TIMEOUT = int

253 ALTER SYSTEM Modify system settings. MAX_DUMP_FILE_SIZE = { size | 'unlimited'} [DEFERRED] MTS_DISPATCHERS = dispatcher_clause MTS_SERVERS = int OBJECT_CACHE_MAX_SIZE_PERCENT = int DEFERRED OBJECT_CACHE_OPTIMAL_SIZE = int DEFERRED OPTIMIZER_MAX_PERMUTATIONS = int NOOVERRIDE PARALLEL_ADAPTIVE_MULTI_USER = {TRUE | FALSE} PARALLEL_INSTANCE_GROUP = 'text' PARALLEL_THREADS_PER_CPU = int PLSQL_V2_COMPATIBILITY = {TRUE | FALSE} [DEFERRED] QUERY_REWRITE_ENABLED = {TRUE | FALSE} [DEFERRED | NOOVERRIDE] QUERY_REWRITE_INTEGRITY = {ENFORCED | TRUSTED | STALE_TOLERATED}

254 ALTER SYSTEM Modify system settings. REMOTE_DEPENDENCIES_MODE = {TIMESTAMP | SIGNATURE} RESOURCE_LIMIT = {TRUE | FALSE} RESOURCE_MANAGER_PLAN = plan_name SORT_AREA_RETAINED_SIZE = int DEFERRED SORT_AREA_SIZE = int DEFERRED SORT_MULTIBLOCK_READ_COUNT = int DEFERRED STANDBY_ARCHIVE_DEST = string TIMED_STATISTICS = {TRUE | FALSE} TIMED_OS_STATISTICS = int TRANSACTION_AUDITING = {TRUE | FALSE} DEFERRED USE_STORED_OUTLINES = {TRUE | FALSE| 'category_name' } [NOOVERRIDE] USER_DUMP_DEST = 'directory_name' Oracle 7 options now obsolete in v8 CACHE_INSTANCES = int SCAN_INSTANCES = int "An expert is someone who knows some of the worst mistakes that can be made in his subject and how to avoid them." - Werner HeisenbergWerner Heisenberg

255 ALTER DATABASE Open an existing database, and /or modify associated files. Syntax: ALTER DATABASE database_name options open / mount options: MOUNT MOUNT STANDBY DATABASE MOUNT CLONE DATABASE MOUNT PARALLEL MOUNT STANDBY DATABASE CONVERT OPEN [READ ONLY] OPEN [READ WRITE] RESETLOGS|NORESETLOGS ACTIVATE STANDBY DATABASE [NATIONAL] CHARACTER SET char_set

256 Konfiguracja sieciowego procesu nasłuchu Dla sieciowego procesu komunikacyjnego istotne są następujące pliki: –SQLNET.ORA, –LISTENER.ORA, –TNSNAMES.ORA Należy pamiętać aby na komputerze użytkownika chcącego podłączyć się zdalnie do bazy danych systemu Oracle po zainstalowaniu oprogramowania klienta umieścić w odpowiednim katalogu pliki SQLNET.ORA i TNSNAMES.ORA pochodzące z serwera i zweryfikować zawarte w nich wpisy. Procesy nasłuchu mogą współpracować z protokołami sieciowymi TCP/IP, IPX/SPX, NAMED PIPES.

257 Konfiguracja sieciowego procesu nasłuchu Plik SQLNET.ORA W pliku można określić wartości parametrów diagnostycznych. Parametr TRACE_LEVEL_CLIENT odpowiedzialny jest za włączenie śledzenia pracy procesu nasłuchu. Może przyjmować następujące wartości: OFF wyłącza śledzenie pracy procesu nasłuchu USER lub ADMIN włącza śledzenie pracy procesu na różnym poziomie szczegółowości Informacje związane ze śledzeniem pracy procesu nasłuchu zapisywane są do pliku śladu, którego nazwa określona jest parametrem TRACE_FILE_LISTENER umieszczonego w katalogu określonym przez parametr TRACE_DIRECTORY_LISTENER. Parametr SQLNET.EXPIRE_TIME określa w minutach czas po jakim proces nasłuchu weryfikuje poprawność połączenia klienta z bazą danych.

258 Konfiguracja sieciowego procesu nasłuchu Zawiera następujące informacje: nazwy i adresy wszystkich procesów nasłuchu działających na danym serwerze, nazwy i adresy baz danych obsługiwanych przez procesy nasłuchu, numery portów wykorzystywanych przez te procesy. Przykład: W pliku listener.ora w sekcji SID_LIST dotyczącej procesu nasłuchu o nazwie LISTENER należy dodać wpis identyfikujący nową bazę danych np. założoną przez nas zgodnie z procedurą przedstawioną w punkcie 4 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = baza.world) (ORACLE_HOME = D:\Oracle\Ora81) (SID_NAME = baza) ) Plik LISTENER.ORA

259 Konfiguracja sieciowego procesu nasłuchu Plik zawiera następujące informacje: zbiór adresów zdalnych baz danych wraz ze specyfikacją ich nazw informacje specyficzne dla danego protokołu sieciowego np. TCP/IP Przykład: W pliku tnsnames.ora należy dodać wpis identyfikujący nową bazę danych np. założoną przez nas zgodnie z procedurą przedstawioną w punkcie 5 niniejszego skryptu. BAZA.WORLD = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL=TCP)(HOST= )(PORT=1521)) ) (CONNECT_DATA = (SERVICE_NAME = BAZA.WORLD) ) Plik TNSNAMES.ORA

260 Testowanie poprawności konfiguracji procesu nasłuchu Poprawność konfiguracji procesu nasłuchu można sprawdzić komendą wywołaną z linii poleceń: TNSPING nazwa_bazy_danych liczba_prób np. TNSPING Baza.world 5 powoduje pięciokrotne sprawdzenie połączenia z utworzoną przez nas bazą o nazwie Baza.world.

261 Testowanie poprawności konfiguracji procesu nasłuchu Przy pomocy komendy LSNRCTL uruchamianej z linii poleceń, z odpowiednimi parametrami uruchamiamy program o nazwie LISTENER. Zastosowanie polecenia LSNRCTL Uruchomienie procesu nasłuchu LSNRCTL START nazwa_procesu_nasłuchu Uwaga: Jeżeli nie podamy nazwy procesu nasłuchu, to komenda będzie dotyczyła domyślnego procesu nasłuchu o nazwie LISTENER.

262 Testowanie poprawności konfiguracji procesu nasłuchu Zatrzymanie procesu nasłuchu LSNRCTL STOP nazwa_procesu_nasłuchu Uzyskanie informacji na temat procesu nasłuchu LSNRCTL STATUS nazwa_procesu_nasłuchu Przeładowanie procesu nasłuchu LSNRCTL RELOAD nazwa_procesu_nasłuchu Jest konieczne po zmianie zawartości pliku LISTENER.ORA. Włączenie lub wyłączenie śledzenia pracy procesu nasłuchu LSNRCTL TRACE nazwa_procesu_nasłuchu Opcja gdzie opcja może przyjąć wartości OFF, USER, ADMIN.

263 Rekompilacja pakietów SET SERVEROUTPUT ON; DECLARE CURSOR invalid_prog_obj IS SELECT object_name, object_type FROM user_objects WHERE status = 'INVALID'; rec invalid_prog_obj%ROWTYPE; status NUMERIC; BEGIN DBMS_OUTPUT.enable; OPEN invalid_prog_obj; LOOP -- recompile each stored program object FETCH invalid_prog_obj INTO rec; EXIT WHEN invalid_prog_obj%NOTFOUND; DBMS_OUTPUT.put('Recompile ' || rec.object_type || ' ' || rec.object_name); DBMS_DDL.alter_compile(rec.object_type, NULL, rec.object_name); DBMS_OUTPUT.put_line(' SUCCESSFUL'); -- recompile succeeded END LOOP; -- invalid program objects CLOSE invalid_prog_obj; EXCEPTION WHEN OTHERS THEN --- no begin needed status := SQLCODE; DBMS_OUTPUT.put_line(' FAILED with ' || SQLERRM(status)); IF (invalid_prog_obj%ISOPEN) THEN CLOSE invalid_prog_obj; END IF; end; -- u should end the block as u have began it by bigin command

264 Recompile all Best solution is to recompile all the INVALID objects run the utlrp.sql as sys - located in $ORACLE_HOME/rdbms/admin EXEC DBMS_UTILITY.COMPILE_SCHEMA('sys'); Schemat do powtórnej kompilacji

265 RECOVER Recover a Database, Tablespace, Data or Log file. Syntax: RECOVER [AUTOMATIC] [FROM 'location'] [STANDBY] DATABASE [UNTIL CANCEL] [UNTIL TIME date] [UNTIL CHANGE int] [USING BACKUP CONTROLFILE] RECOVER [AUTOMATIC] [FROM 'location'] TABLESPACE tablespace [, tablespace2...] RECOVER [AUTOMATIC] [FROM 'location'] STANDBY TABLESPACE tablespace [, tablespace2...] UNTIL [CONSISTENT] [WITH] CONTROLFILE RECOVER [AUTOMATIC] [FROM 'location'] DATAFILE 'filename' [, filename2...] RECOVER [AUTOMATIC] [FROM 'location'] STANDBY DATAFILE 'filename' [, filename2,...] UNTIL [CONSISTENT] [WITH] CONTROLFILE

266 RECOVER Recover a Database, Tablespace, Data or Log file. RECOVER [AUTOMATIC] [FROM 'location'] LOGFILE 'filename' RECOVER [AUTOMATIC] [FROM 'location'] CONTINUE [DEFAULT] RECOVER [AUTOMATIC] [FROM 'location'] CANCEL RECOVER MANAGED STANDBY DATABASE TIMEOUT integer RECOVER MANAGED STANDBY DATABASE CANCEL [IMMEDIATE]

267 RECOVER Recover a Database, Tablespace, Data or Log file. On a parallel server you can add to any of the above: PARALLEL Parallel Clause Key:Parallel Clause AUTOMATIC Automatically generate the name of the next archived redo log file needed to continue the recovery operation. FROM location The location from which the archived redo log file group is read. STANDBY Recover the standby database using the control file and archived redo log files copied from the primary database. The standby database must be mounted but not open. UNTIL CANCEL Partial recovery. Recovery proceeds by prompting you with the suggested filenames of archived redo log files, and recovery completes when you specify CANCEL instead of a filename.

268 RECOVER Recover a Database, Tablespace, Data or Log file. UNTIL CHANGE integer An incomplete, change-based recovery. integer is the System Change Number (SCN) following the last change you wish to recover. UNTIL TIME date Partial time-based recovery. Use the format: 'YYYY-MM-DD:HH24:MI:SS' UNTIL [CONSISTENT] [WITH] CONTROLFILE Recover an old standby datafile or tablespace using the current standby database control file. TABLESPACE tablespace Recover a tablespace. You may recover up to 16 tablespaces in one statement.

269 RECOVER Recover a Database, Tablespace, Data or Log file. CONTINUE [DEFAULT] Continues multi-instance recovery after it has been interrupted to disable a thread. Continues recovery using the redo log file that Oracle would automatically generate if no other logfile were specified. This option is equivalent to specifying AUTOMATIC, except that Oracle does not prompt for a filename. CANCEL Terminates cancel-based recovery. MANAGED STANDBY DATABASE Sustained standby recovery mode. TIMEOUT integer The number of MINUTES = the wait period of a sustained recovery operation. The RECOVER command is available in Server Manager/SQL*Plus, this is recommended for media recovery in preference to the syntax ALTER DATABASE RECOVER... (provided for backwards compatibility with older versions)

270 ALTER DATABASE Open an existing database, and /or modify associated files. archivelog options: ARCHIVELOG NOARCHIVELOG backup and recovery options: BACKUP CONTROLFILE TO 'filename' [REUSE] BACKUP CONTROLFILE TO TRACE BACKUP CONTROLFILE TO TRACE RESETLOGS CREATE STANDBY CONTROLFILE AS 'filename' [REUSE] RENAME FILE 'data_file_name' TO 'data_file_name' RENAME FILE 'redolog_file_name' TO 'redolog_file_name' RECOVER recover_clauserecover_clause DATAFILE 'filename' END BACKUP

271 ALTER DATABASE Open an existing database, and /or modify associated files. Datafile options: CREATE DATAFILE 'filename' AS filespecfilespec DATAFILE 'filename' ONLINE DATAFILE 'filename' OFFLINE [DROP] DATAFILE 'filename' RESIZE int K | M DATAFILE 'filename' AUTOEXTEND OFF DATAFILE 'filename' AUTOEXTEND ON [NEXT int K | M] [MAXSIZE int K | M] DATAFILE 'filename' END BACKUP TEMPFILE 'filename' ONLINE TEMPFILE 'filename' OFFLINE TEMPFILE 'filename' DROP TEMPFILE 'filename' RESIZE int K | M TEMPFILE 'filename' AUTOEXTEND OFF TEMPFILE 'filename' AUTOEXTEND ON [NEXT int K | M] [MAXSIZE int K | M]

272 ALTER DATABASE Open an existing database, and /or modify associated files. redo log options: ADD LOGFILE [THREAD int] [GROUP int] filespecfilespec ADD LOGFILE MEMBER 'filename' [REUSE] TO GROUP int ADD LOGFILE MEMBER 'filename' [REUSE] TO 'filename' DROP LOGFILE GROUP int DROP LOGFILE ('filename') DROP LOGFILE MEMBER 'filename' CLEAR [UNARCHIVED] LOGFILE GROUP int [UNRECOVERABLE DATAFILE] CLEAR [UNARCHIVED] LOGFILE ('filename') [UNRECOVERABLE DATAFILE] Parallel server options: CREATE STANDBY CONTROLFILE AS 'filename' [REUSE] SET DBLOW = 'text' SET DBHIGH = 'text' SET DBMAC = ON | OFF ENABLE [PUBLIC] THREAD int DISABLE THREAD int

273 ALTER DATABASE Open an existing database, and /or modify associated files. Backwards compatibility options: RENAME GLOBAL_NAME TO database [domain] RESET COMPATIBILITY Apart from RENAME, any option above that includes a 'filename' can be extended to cover multiple files using the syntax: ('filename1', 'filename2') database_name is defined when the database is created - it is normally set to the same as the database SID. Some of the commands above can only be used when the database is in a particular state: MOUNT, CONVERT - Require that the db is Not Mounted. ARCHIVELOG, NOARCHIVLOG, RECOVER - Require that the db is Mounted but not open (must be mount exclusive - not mount parallel). ENABLE, DISABLE, RENAME GLOBAL_NAME, RESET, SET - Require that the db is Open. All other options will work with the db mounted, open or closed as long as none of the files involved are 'in use'

274 Dodawanie plików log'a ALTER DATABASE ADD LOGFILE group 4 ('/db01/oracle/CC1/log_1c.dbf', '/db02/oracle/CC1/log_2c.dbf') size 5M; ALTER DATABASE ADD LOGFILE MEMBER '/db03/oracle/CC1/log_3c.dbf' TO group 4;

275 Uzyskanie informacji o parametrach bazy SELECT Name, Value, IsDefault FROM V$PARAMETER; DESC V$PARAMETER; NazwaWartość NULL? Typ NUMNUMBER NAMEVARCHAR2(64) TYPENUMBER VALUEVARCHAR2(512) ISDEFAULT VARCHAR2(9) ISSES_MODIFIABLEVARCHAR2(5) ISSYS_MODIFIABLEVARCHAR2(9) ISMODIFIEDVARCHAR2(10) ISADJUSTEDVARCHAR2(5) DESCRIPTIONVARCHAR2(64) UPDATE_COMMENTVARCHAR2(255)

276 Tworzenie przestrzeni tabel CREATE TABLESPACE Data_small DATAFILE 'C:\oracle\data\data_small.dbf' SIZE 10M EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

277 Sprawdzenie odczytów przez zapytania SQL SELECT Buffer_Gets, Disk_Reads, Executions, Buffer_Gets, Executions, SQL_Text FROM V$SQL ORDER BY Disk_Reads DESC; BUFFE R_GETS DISK_REA DS EXECUTIONSBUFFER_ GETS EXECUTION S SQL_TEXT select f.file#, f.block#, f.ts#, f.length from fet$ f, ts$ t where t.ts#=f.ts# and t.dflextpct!=0 and t.bitmapped= select i.obj#, i.flags, u.name, o.name from sys.obj$ o, sys.user$ u, sys.ind$ i where (bitand(i.flags, 256) = 256 or bitand(i.flags, 512) = 512) and (not((i.type# = 9) and bitand(i.flags,8) = 8)) and o.obj#=i.obj # and o.owner# = u.user#

278 DESC V$SQL; Nazwa SQL_TEXT SHARABLE_MEM PERSISTENT_MEM RUNTIME_MEM SORTS LOADED_VERSIONS OPEN_VERSIONS USERS_OPENING FETCHES EXECUTIONS USERS_EXECUTING LOADS FIRST_LOAD_TIME INVALIDATIONS PARSE_CALLS DISK_READS BUFFER_GETS ROWS_PROCESSED COMMAND_TYPE OPTIMIZER_MODE OPTIMIZER_COST PARSING_USER_ID PARSING_SCHEMA_ID KEPT_VERSIONS ADDRESS TYPE_CHK_HEAP HASH_VALUE PLAN_HASH_VALUE CHILD_NUMBER MODULE MODULE_HASH ACTION ACTION_HASH SERIALIZABLE_ABORTS OUTLINE_CATEGORY CPU_TIME ELAPSED_TIME OUTLINE_SID CHILD_ADDRESS SQLTYPE REMOTE OBJECT_STATUS LITERAL_HASH_VALUE LAST_LOAD_TIME IS_OBSOLETE CHILD_LATCH

279 Obciążenie plików bazy danych set pagesize 60 lines 80 clear breaks clear computes break on Dysk skip 1 on Report compute sum of Bloki_Odczyt on Dysk compute sum of Bloki_Zapis on Dysk compute sum of Liczba_IO on Dysk compute sum of Bloki_Odczyt on Report compute sum of Bloki_Zapis on Report compute sum of Liczba_IO on Report ttitle skip center "Obciazenie plikow bazy danych przez operacje wejscia-wyjscia" skip center "z podzialem na dyski" skip 2 select substr(DF.Name,1,5) Dysk, substr(DF.Name,1, 38) Nazwa_pliku, FS.Phyblkrd+FS.Phyblkwrt Liczba_IO, FS.Phyblkrd Bloki_Odczyt, FS.Phyblkwrt Bloki_Zapis from V$FILESTAT FS, V$DATAFILE DF where DF.File# = FS.File# order by Dysk, Nazwa_Pliku desc; DYSKNAZWA_PLIKULICZBA _IO BLOKI_O DCZYT BLOKI_ ZAPIS C:\ORC:\ORACLE\ORADA TA\ORACLE\ZOLA DR.ORA 651 C:\ORACLE\ORADA TA\ORACLE\XDB01. DBF 871 ··· SUM

280 Plik tnsnames.ora HQ =(DESCRIPTION= (ADDRESS= (PROTOCOL=TCP) (HOST=HQ) (PORT=1521)) (CONNECT DATA= (SID=loc))) S817.us.oracle.com = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = sdg-lap)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = S817.us.oracle.com) ) Baza 8.i i nowsze Baza 8.i starsze

281 Database Link – baza połączona CREATE PUBLIC DATABASE LINK Polaczona CONNECT TO Scott IDENTIFIED BY tiger USING 'ORACLE'; Tylko SYSDBA CREATE DATABASE LINK Polaczona USING 'ORACLE' Podłączenie do schematu połączonego użytkownika CREATE DATABASE LINK Polaczona CONNECT TO CURRENT_USER USING 'ORACLE' Podłączenie do schematu bieżącego (w chwili tworzenia) użytkownika SELECT * FROM

282 Tabela do planu wykonania create table PLAN_TABLE ( statement_id varchar2(30), timestamp date, remarks varchar2(80), operation varchar2(30), options varchar2(30), object_node varchar2(128), object_owner varchar2(30), object_name varchar2(30), object_instance numeric, object_type varchar2(30), optimizer varchar2(255), search_columns numeric, id numeric, parent_id numeric, position numeric, cost numeric, cardinality numeric, bytes numeric, other_tag varchar2(255), other long ); column operations format A79

283 Stworzenie planu wykonania EXPLAIN PLAN SET STATEMENT_ID='Wykonanie' INTO plan_table FOR SELECT Nazwa, Nazwisko FROM dzialy JOIN osoby ON dzialy.iddzialu=osoby.idosoby; SELECT SUBSTR(LPAD(' ', 2*( LEVEL-1))||operation,1,30) || ' ' || SUBSTR(options,1,15) || ' ' || SUBSTR(object_name,1,15) || ' ' || SUBSTR(DECODE(id,0, 'Kosz: ' || position),1,12) "Plan wykonania", SUBSTR(optimizer,1,10) "Optymalizator" FROM plan_table START WITH id=0 AND statement_id='wykonanie' CONNECT BY PRIOR id=parent_id AND statement_id='wykonanie'; Wyświetlenie planu wykonania

284 Strojenie Tekst Pakiet DBMS_STATS Do generowania statystyk dla optymalizatora kosztowego wykorzystuje się procedury pakietu DBMS_STATS. Optymalizator kosztowy na podstawie bieżących statystyk generuje plan wykonania zapytań SQL. Ważne jest, aby nie zaniedbać generowania tych statystyk,aby danie w nich się znajdujące odzwierciedlały aktualna charakterystykę obiektów bazy danych. Ogólnie pakiet DBMS_STATS służy do zarządzania tymi statystykami. Można powiedzieć, że jest to swego rodzaju alternatywa dla polecenia ANALYZE. Do utworzenia tabeli na potrzeby statystyk można użyć procedury CREATE_STAT_TABLE. Parametry tej procedury, to: ownname : nazwa schematu, w którym będą tworzone statystyki stattab : nazwa tabeli tblspace : nazwa przestrzeni tabel. Jeśli parametr ten nie zostanie podany przyjmuje się tu nazwę domyślnej przestrzeni tabel użytkownika. Przykład: DBMS_STATS.CREATE_STAT_TABLE('scott','stats_table'); Do zbierania statystyk należy użyć procedury GATHER_TABLE_STATS pakietu DBMS_STATS. Parametrami tej funkcji są: ownname : nazwa właściciela obiektu tabname : nazwa analizowanego obiektu partname : nazwa partycji analizowanego obiektu estimate_percent : procent rekordów, które maja być odczytane podczas oceniania statystyk block_sample : opcja określająca, czy pobieramy cale bloki zamiast pojedynczych rekordów method_opt : dodatkowe opcje zbierania statystyk degree : stopień zrównoleglenia granularity : stopień dokładności podczas zbierania statystyk cascade : parametr określający, czy zostaną zebrane statystyki indeksów stattab : nazwa tabeli, w której zbierane są statystyki statid : identyfikator statystyk statown : nazwa schematu, w którym są przechowywane statystyki. Przykład: DBMS_STATS.GATHER_TABLE_STATS ('scott','tab1',1, stattab=>'stats_table');

285 Strojenie Tekst Śledzenie zapytań - TKPROF Często w celu poprawiania wydajności aplikacji analizuje się jakie zapytania SQL są generowane w systemie i jak one obciążają system. Dokonuje się tego poprzez włączenie monitorowania instancji, czy tez konkretnej sesji. Śledzenie powoduje zbieranie informacji o liczbie parsowań, wykonań i pobrań. Ze śledzeniem zapytań SQL związane są następujące parametry instancji: TIMED_STATISTICS : jeśli ten parametr ustawimy na TRUE w danych statystycznych znajda się statystyki czasowe. MAX_DUMP_FILE_SIZE : parametr określający maksymalna długość pliku śladu. USER_DUMP_DEST : parametr określający położenie plików śladu. Domyślnie jest położenie zrzutów systemu operacyjnego. Włączenie śledzenia bieżącej sesji odbywa się poprzez polecenie: ALTER SESSION SET SQL_TRACE = TRUE; lub poprzez procedurę DBMS_SESSION.SET_SQL_TRACE. Aby włączyć śledzenie sesji innej niż bieżąca należy znać informacje o tej zewnętrznej sesji. Mając nazwę użytkownika tej zewnętrznej sesji informacje te możemy pobrać za pomocą polecenia: SELECT sid, serial#, osuser FROM v$session WHERE osuser = 'scott'; Teraz mając te dane możemy włączyć lub wyłączyć śledzenie dla tej sesji za pomocą polecenia: EXECUTE DBMS_SYSTEM.SET_SQL_TRACE_IN_SESSION( sid, serial#, TRUE ); Dwa pierwsze parametry są informacjami pobranymi z poprzedniego zapytania, trzeci parametr przyjmuje wartości TRUE lub FALSE i określa, czy włączamy,czy wyłączamy tą sesje. W przypadku włączania śledzenia na poziomie całej instancji należy parametr konfiguracyjny SQL_TRACE ustawić na TRUE. Wartością domyślną jest tutaj FALSE. Włączenie śledzenia dla całej instancji powoduje dość duże obciążenie systemu dlatego raczej zaleca się stosowanie śledzenia sesji, a śledzenie całej instancji stosować w wyjątkowych sytuacjach. Do zapisu danych ze śledzenia w postaci zrozumiałej dla człowieka służy polecenie TKPROF. Składnia tego polecenia ma postać: TKPROF infile outfile [parametry] gdzie: infile : plik wygenerowany w trakcie śledzenia outfile : nazwa pliku wynikowego zawierającego raport śledzenia. Dla każdego zapytania znajdującego się w raporcie przedstawione są następujące informacje: count : liczba wywołań procedur OCI (procedury pozwalające na uzyskanie dostępu do bazy) CPU : czas CPU wykonania w sekundach elapsed : czas oczekiwania na rezultat zapytania w sekundach disk : liczba fizycznych odczytów z dysku query : liczba odczytów bloków utrzymanych w trybie spójnym (z wykorzystaniem segmentu wycofania) current : liczba odczytów bloków utrzymanych w trybie bieżącym (bez wykorzystania segmentu wycofania) rows : liczba przetworzonych rekordów podczas pobierania lub wykonywania.

286 Strojenie Tekst Pakiet STATSPACK STATSPACK jest jednym z kilku mechanizmów Oracle pozwalający na badanie wydajności bazy danych. Można go uznać za pewnego rodzaju udoskonalenie skryptów UTLBSTAT i UTLESTAT. Poza informacjami generującymi przez te skrypty pakiet STATSPACK dysponuje dodatkowymi informacjami. W celu zainstalowania pakietu należy uruchomić skrypt spcreate.sql znajdujący się w standardowym katalogu ORACLE_HOME/rdbms/admin/. Skrypt ten tworzy specjalnego użytkownika PERFSTAT wraz z obiektami potrzebnymi do badania wydajności i za pomocą tego pakietu. Ze względu na bezpieczeństwo zaraz po uruchomieniu skryptu spcreate.sql należy zmienić hasło użytkownika PERFSTAT, które standardowo ustawiono na PERFSTAT. Wszystkie operacje za pomocą tego pakietu dalej powinny być wykonywane przez użytkownika PERFSTAT. Za pomocą tego pakietu generowane są specjalne migawki zawierające informacje wydajnościowe opisujące stan bazy podczas generowania tej migawki. Możemy generować kilka takich migawek, a następnie za pomocą pakietu STATSPACK możemy porównywać różnice pomiędzy migawkami wydajnościowymi zebranymi w rożnym czasie. Dzieje się tak dlatego, że każda migawka ma swój własny identyfikator, który w tabelach wydajnościowych utworzonych skryptem spcreate.sql grupuje informacje związane z jedna migawka. Aby wygenerować migawkę należy uruchomić procedurę SNAP pakietu STATSPACK: execute STATSPACK.SNAP; Wszystkie parametry związane z generowaniem tej migawki można modyfikować procedura MODIFY_STATSPACK_PARAMETER w przypadku, kiedy nie odpowiadają nam domyślne wartości tych parametrów. Parametrami tymi są: i_snap_level : poziom migawki i_ucomment : komentarz do migawki i_executions_th : próg liczby wykonań i_disc_reads_th : próg operacji odczytu z dysku i_parse_cals_th : próg liczby parsowań i_bufer_gets_th : próg operacji odczytu z bufora i_sharable_mem_th : próg wykorzystania wspólnej pamięci i_version_count_th : próg dla liczby wersji instrukcji SQL i_sesion_id : identyfikator sesji, w przypadku, jeśli statystyki dotyczy konkretnej sesji i_modify_parameter : wartość logiczna TRUE lub FALSE określa, czy zmiana parametru ma dotyczyć również kolejnych migawek. Przykład: execute STATSPACK.MODIFY_STATSPACK_PARAMETER( i_snap_level->4, i_modify_parameter->TRUE); Aby wygenerować raport należy uruchomić skrypt spreport.sql. Ważne jest, aby przed uruchomieniem tego skryptu dokonać analizy schematu STATSPACK za pomocą polecenia: execute DBMS_UTILITY_SCHEMA('PERFSTAT','COMPUTE'); W celu usunięcia starych niepotrzebnych danych statystycznych należy uruchomić skrypt sppurge.sql. Innym sposobem usunięcia niepotrzebnych danych znajdujących się w tabelach wydajnościowych jest obcięcie tabel za pomocą skryptu sptrunc.sql. W celu odinstalowania pakietu STATSPACK należy wykonać skrypt spdrop.sql.


Pobierz ppt "Strojenie,administracja itp Adam Pelikant. System Monitor SMON Zapytania równoległe Pnnn Process Monitor PMON Zakleszczenia Locks LCK Odzyskiwanie rozproszone."

Podobne prezentacje


Reklamy Google