Pliki dziennika powtórzeń

Transkrypt

Pliki dziennika powtórzeń
Adam Pelikant
SGA
Pozostałe procesy System Global Area
Strojenie,administracja itp
System
Monitor
Process
Monitor
Zakleszczenia
Locks
Odzyskiwanie
rozproszone
Odświeżanie
migawek
Zapytania
równoległe
SMON
PMON
LCK
Tx RECO
SNPn
Pnnn
Pamięć współdzielona
Shared_Pool_size
Bufor plików danych
Bufor plików wycofywania
DB_Block_Buffers & DB_block_size
Bufor
słownika
Obszar
SQL
CKPT
Serwer współdzielony
DBWR
LGWR
Shared Server
[PGA]
ARCH
Pliki wycofywania
Użytkownik
[UGA]
Pliki danych
SQL Area is also known
as “Library Cache”
init.ora Plik parametrów
Pliki związane z system ORACLE
Pliki związane z system ORACLE
Pliki
kontrolne
Pliki danych
Pliki
ostrzeżeń
Pliki dziennika
powtórzeń
Pliki śladu
Plik
parametrów
Pliki kontrolne
Archiwalne pliki
wycofywania
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ń
Arch. pliki dziennika
powtórzeń
1
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<SID_BAZY>.ora
Plik parametrów
Plik inicjalizacyjne (parametrów) umożliwiają:
• 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,
• nazwy bazy danych,
• ustawienie limitów bazy (np. maksymalna ilość
użytkowników bazy),
• wielkości obszaru SGA,
• wyspecyfikowanie plików bazy.
Parametry konfiguracyjne dotyczą między innymi:
• trybu pracy bazy danych,
• nazwy i położenia plików kontrolnych
• położenia plików śladu i ostrzeżeń
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<SID_BAZY>.ora.
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
2
Zmiana parametrów
ALTER SYSTEM wzbogacone o parametr SCOPE.
Przywrócenie domyślnych wartości
parametrów
Parametr SCOPE może przyjmować następujące wartości:
SPFILE
zmiana parametru zapisywana jest w tylko pliku
SPFILE. Polecenie ALTER SYSTEM SET nie wpływa w
tym przypadku na zmianę parametru w instancji
MEMORY
zmiana parametru odnosi się do aktualnie działającej
instancji – nie ma wpływu na plik SPFILE.
BOTH
jest to domyślna wartość parametru. Zmiana parametru
odbywa się jednocześnie w pliku SPFILE i w instancji.
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.
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;
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’;
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!!!).
Parametry i ich wartości można odnaleźć w perspektywie
słownika danych V$PARAMETER
lub za pomocą polecenia SHOW PARAMETER.
3
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.
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,
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.
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.
• zmienić parametr CONTROL_FILES w pliku parametrów,
• utworzyć nowy plik SPFILE ze zmodyfikowanego pliku tekstowego,
• otworzyć bazę danych.
Punkt kontrolny można wymusić przy pomocy polecenia SQL:
ALTER SYSTEM CHECKPOINT;
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.
4
Rodzaje punktu kontrolnego
Punkt kontrolny
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;
Pliki śladu (trace files)
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.
Pliki śladu (trace files)
Parametry związane z plikami śladu:
Zawierają informacje o błędach, jakie wystąpiły w trakcie
pracy instancji. Pliki śladu są plikami tekstowymi.
BACKGROUND_DUMP_DEST
podaje ścieżkę na dysku, gdzie umieszczane są pliki
śladu z opisem błędów wykrytych przez procesy tła.
Błędy wykrywane są przez proces serwera lub procesy tła.
USER_DUMP_DEST
Pliki śladu mogą zawierać także wszystkie polecenia
realizowane w ramach sesji.
podaje ścieżkę na dysku, gdzie umieszczane są pliki
śladu z opisem błędów wykrytych przez proces
serwera.
SQL_TRACE=TRUE
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).
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ń
– wartość tę można ustawić w pliku init<sid>.ora/SPFILE, za pomocą
polecenia ALTER SYSTEM,
– lub dla danej sesji (poleceniem ALTER SESSION).
Wzrost obciążenia po włączeniu tej opcji jest nieznaczny.
Parametry mogą być włączone dla bieżącej sesji poleceniem:
ALTER SESSION SET SQL_TRACE=True;
ALTER SESSION SET TIMED_STATISTICS=True;
5
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_<SID>.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.
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.
W pliku konfiguracyjnym
BACKGROUND_DUMP_DEST - podaje ścieżkę na dysku, gdzie umieszczany jest
plik
Pliki dziennika powtórzeń
są elementem mechanizmu ochrony instancji zawartej w buforze danych i są
wykorzystywane w momencie awarii instancji lub bazy danych.
Pliki Dziennika Powtórzeń
Grupa 1
Dysk1
Log1.ora
Grupa 2
Log2.ora
Grupa 3
Log3.ora
Log1.ora
Log2.ora
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.
LGWR
Dysk2
Pliki dziennika powtórzeń
(redo log files)
Log3.ora
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.
6
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:
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<sid>.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.
ALTER SYSTEM SWITCH LOGFILE;
Dodanie nowej grupy dziennika
powtórzeń wraz z odpowiednią
liczbą plików
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
ALTER DATABASE [nazwa_bazy] ADD LOGFILE GROUP
nr_grupy (plik_1, plik_2, ...) SIZE rozmiar;
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.
nr_grupy
numer kolejnej grupy plików dziennika powtórzeń,
plik_n
nazwa 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.
7
Administracja plikiem powtórzeń
Administracja plikiem powtórzeń
Dodanie pliku do istniejącej grupy:
Usunięcie pliku z istniejącej grupy dziennika powtórzeń:
ALTER DATABASE [nazwa_bazy]
ALTER DATABASE [nazwa_bazy]
DROP LOGFILE MEMBER plik;
ADD LOGFILE MEMBER plik TO GROUP nr_grupy;
Usunięcie całej grupy plików dziennika powtórzeń:
Czyszczenie plików dziennika powtórzeń:
ALTER DATABASE [nazwa_bazy]
DROP LOGFILE GROUP nr_grupy;
ALTER DATABASE
CLEAR [UNARCHIVED] 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ń.
ALTER DATABASE
Usunięcie pliku dziennika powtórzeń powoduje tylko skasowanie
informacji o nim ze słownika bazy danych. Jednak plik w systemie
operacyjnym pozostaje
CLEAR [UNARCHIVED] LOGFILE plik;
Informacje dotyczące pliku dziennika
powtórzeń
V$LOGFILE
informacje nt. lokalizacji plików dziennika
powtórzeń.
V$LOG
informacje nt. utworzonych grup dziennika
powtórzeń
V$THREAD
informacja o liczbie grup dziennika powtórzeń,
numerze bieżącej grupy i numerów
sekwencyjnych.
V$LOG_HISTORY
informacje nt. wszystkich przełączeń plików
dziennika powtórzeń, uporządkowane wg
numeru sekwencyjnego.
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).
8
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
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).
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;
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_DEST
Parametr 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_FORMAT
Okreś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).
9
Uruchomienie automatycznej
archiwizacji plików dziennika powtórzeń
Zatrzymanie automatycznej
archiwizacji plików dziennika powtórzeń
Po zmianach w pliku init<sid>.ora należy
wystartować bazę w trybie MOUNT
wystartować bazę w trybie MOUNT
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE NOARCHIVELOG
ALTER DATABASE OPEN;
ALTER DATABASE OPEN;
Proces ARCH można wystartować także na otwartej bazie poleceniem:
Proces ARCH można zatrzymać na otwartej bazie poleceniem:
ALTER SYSTEM ARCHIVE LOG START [TO katalog];
ALTER SYSTEM ARCHIVE LOG STOP;
Archiwizacja ręczna plików dziennika
powtórzeń
CKP
ARCH
OPCJA
OPIS
archiwizacja wszystkich plików,
CURRENT
aktualnego pliku,
NEXT
wskazanego parametrem Next Log Sequence
to Archive,
LOGFILE nazwa pliku
pliku o podanej nazwie,
SEQUENCE
pliku o podanym numerze sekwencyjnym,
numer_sekwencyjny
CHANGE numer_SCN
GROUP numer_grupy
RECO
SMON
DBnn
PMON
Struktura
bazy
ORACLE
obszar globalny systemu SGA
SHARED_POOL_SIZE określenie rozmiaru
DB_BLOCK_BUFFERS
liczba bloków w buforach
DB_BLOCK_SIZE - rozmiar bloku
LOG_BUFFER- rozmiar buforów
dziennika
powtórzeń
bufory
dziennika
powtórzeń
bufory bazy
danych
obszar
dzielony
maksymalny czas między punktami kontrolnymi
LOG_CHECKPOINT_TIMEOUT
LOG_CHECKPOINT_INTERVAL
proces
DBWR
procesy
usługowe
(servers)
plik zawierający zapis z numerem SCN,
procesy
użytkowników
max liczba bloków
zapisanych na plik
dziennika między punktami
kontrolnymi
proces LGWR
pliki bazy
danych
CKPT
pliki dziennika należące do wskazanej grupy.
SNPn
procesy drugoplanowe
ALTER SYSTEM ARCHIVE LOG Opcja [TO Katalog];
ALL
SNAPSHOT_REFRESH_PROCESSES liczba
procesów SNPn, obsługujących aut. odświeżanie
replikacji zdalnych tablic (opcja rozproszona)
SAVEPOINTS
max. liczba pkt. wycofania w
transakcji
istnieje, jeśli CHECKPOINT_PROCESSES =
true
pliki kontrolne
pliki
dziennika
powtórzeń
plik
konfiguracyjny
CONTROL_FILES - identyfikacja plików
kontrolnych
10
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.
Struktura logiczna bazy danych
Przykładowe rozmieszczenie obiektów w przestrzeniach
tabel
Przestrzeń tabel nr 1
Przestrzeń tabel nr 2
Plik danych
nr 2
Plik danych
nr 1
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ść
Globalny Obszar Systemowy
(System Global Area - SGA).
Globalny Obszar Systemowy
Bufor Dziennika
Powtórzeń
Obszar Współdzielony
Bufor Bibliotek
rozmiar SGA z
podziałem na
podstawowe :
SHOW SGA
Współdzielony
Obszar Poleceń SQL
Plik danych nr 3
Bufor Danych
Bufor Słownika
Tablica
Indeks
Indeks
Tablica
Tablica
Indeks
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.
11
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.
Bufor dziennika powtórzeń
(redo log buffer)
bufor cykliczny (po zapisaniu ostatniego bajtu zapis
rozpoczyna się od pierwszego).
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.
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
ALTER SYSTEM SET DB_BLOCK_SIZE=4096
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.
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. 3 500 000 bajtów) Od wersji Oracle 9.0.1 parametr
SHARED_POOL_SIZE może być modyfikowany dynamicznie
podczas pracy instancji.
ALTER SYSTEM SET SHARED_POOL_SIZE = wartość
12
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.
Procesy Drugoplanowe
Procesy Drugoplanowe
Globalny Obszar Systemowy SGA
Procesy drugoplanowe (procesy tła)
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.
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.
LGWR
PMON
SMON
LGWR
CKPT
Pliki bazy danych
DBWR - proces sekretarza bazy danych:
DBWR
Parametr związany z obszarem pamięci PGA:
SORT_AREA_SIZE – wskazuje w bajtach, ile pamięci PGA ma zostać
zarezerwowane na wykonywanie sortowań.
Proces Sekretarza Bazy Danych
(Database Writer)
DBWR
Pliki danych
LGWR – Proces Sekretarza
Dziennika Powtórzeń (Log Writer)
LGWR – Proces Sekretarza
Dziennika Powtórzeń
LGWR
Pliki dziennika powtórzeń
13
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.
SMON – Proces Monitora
Systemu (System Monitor)
SMON – Proces Monitora Systemu
INSTANCJA
SGA
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.
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:
SMON
Procesy tła
PMON – Proces Monitora Procesów
(Process Monitor)
PMON – Proces Monitora Procesów
INSTANCJA
SGA
PMON
Procesy tła
• 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ń
14
Proces Monitora Procesów
(Process Monitor)
CKPT – Proces Punktu Kontrolnego
(Checkpoint Process)
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.
CKPT – Proces Punktu Kontrolnego
Zadania realizowane przez proces:
CKPT
• 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.
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<sid>.ora) lub
gdy liczba plików w bazie danych przekraczała określoną wartość.
Nagłówki plików danych
Nagłówek pliku
kontrolnego
Inne Procesy Drugoplanowe
Inne Procesy Drugoplanowe
ARCH
Proces archiwizatora plików dziennika powtórzeń
RECO
Proces odtwarzający
SNPn
Proces odświeżający migawki
Snnn
Proces zapewniający obsługę żądań
użytkowników
Dnnn
Proces ekspedytora (dotyczy serwera
wielowątkowego)
15
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<sid>.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).
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).
Tryb NOMOUNT
Tryby pracy instancji ORACLE
NOMOUNT
odczytanie pliku parametrów, inicjalizacja SGA oraz
odszukanie plików kontrolnych
MOUNT
odczytanie plików kontrolnych oraz odszukanie
pozostałych plików oraz sprawdzenie ich statusu
OPEN
otworzenie pozostałych plików i udostępnienie bazy
danych użytkownikom
Uruchamianie i zatrzymywanie bazy danych z Instance Manager
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ń.
16
Tryb MOUNT
Tryb OPEN
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.
W trybie tym otwierane są pliki dziennika
powtórzeń oraz pliki danych co sprawia, że baza
staje się
dostępna dla użytkowników !!!
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.
Uruchamianie instancji w
określonym trybie
Uruchamianie instancji w określonym trybie
STARTUP [FORCE] [RESTRICT] [PFILE=plik_parametrów] [tryb_pracy]
Startup Open
OPEN
Alter Database Open
MOUNT
Alter Database Mount
NOMOUNT
SHUTDOWN
Startup Mount
Startup Nomount
FORCE
przed wykonaniem uruchomienia zamyka działającą instancję
RESTRICT
udostępnia bazę tylko użytkownikom z uprawnieniem
RESTRICTED SESSION
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.
17
Uruchamianie instancji w określonym trybie
Ograniczenie dostępu do bazy
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)
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
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
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;
konieczny jest restart bazy danych Oracle.
stan wyciszenia :
ALTER SYSTEM QUIESCE RESTRICTED;
Przywrócenie pełnej funkcjonalności bazy danych
ALTER SYSTEM UNQUIESCE;
Wznowienie operacji IO
ALTER SYSTEM RESUME;
18
Zamykanie instancji bazy danych
Zamykanie instancji bazy danych
SHUTDOWN [tryb_zamknięcia]
Baza 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.
NORMAL
TRANSACTIONAL
Uż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.
Parametry startowe bazy
SHOW PARAMETERS wzorzec_nazwy
SHUTDOWN [tryb_zamknięcia]
IMMEDIATE
Kończy wykonanie poleceń SQL i wycofuje nie
zatwierdzone transakcje, następnie odłącza
użytkowników od bazy.
ABORT
Nie 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,.
Zmiana parametrów sesji
ALTER SYSTEM SET nazwa_parametru = wartość
[DEFERRED]
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
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
DBMS_UTILITY.GET_PARAMETER_VALUE
19
Pojęcia
Przerywanie sesji
DESC V$SESSION
SESJA – czas pracy użytkownika od
momentu podłączenia się do bazy poleceniem
CONNECT aż do czasu zakończenia pracy
polecenie EXIT (DISCONNECT).
SADDR
SID
SERIAL#
AUDSID
PADDR
USER#
W ramach jednej SESJI użytkownik może
realizować wiele TRANSAKCJI, jedna po
drugiej lub zagnieżdżone.
Natychmiastowe zabicie sesji:
ALTER SYSTEM KILL SESSION 'sid, serial#';
Rozłączenie użytkownika z serwerem:
ALTER SYSTEM DISCONNECT SESSION 'sid, serial#';
USERNAME
COMMAND
OWNERID
TADDR
Rozłączenie użytkownika po zakończeniu bieżącej transakcji:
ALTER SYSTEM DISCONNECT SESSION 'sid, serial#'; POST
TRANSACTION
LOCKWAIT
SELECT USERNAME, COMMAND, STATUS,
PROCESS, MACHINE FROM V$SESSION
STATUS
SERVER
'sid, serial#' - identyfikatory sesji użytkownika z perspektywy V$SESSION
SCHEMA#
USERNAME
COMMAND
STATUS
PROCESS
MACHINE
0
ACTIVE
2112
BAZY
0
ACTIVE
1584
BAZY
SCHEMANAME
OSUSER
PROCESS
MACHINE
SYS
53
KILLED
2772:2776
LR\BAZY
AP
3
ACTIVE
3916:3284
LR\PC21431
.....
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
Słownik danych
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
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.
aktywnych
procesach
Tryb MOUNT:
V$THREAD
Informacje o wątkach/kanałach, np. grupach
dziennika powtórzeń
V$CONTROLFILE
Nazwy i lokalizacje plików kontrolnych
V$CONTROLFILE_RE
CORD_SECTION
Informacje nt. rekordów pliku kontrolnego
V$DATABASE
Ogólne informacje o bazie danych
V$DATAFILE
Informacje o plikach danych
V$DATAFILE_HEADER Informacje nagłówkowe plików danych
V$LOGFILE
Informacje o plikach dziennika powtórzeń.
20
Blok bazy danych
STRUKTURA BAZY DANYCH ORACLE
LOGICZNA
FIZYCZNA
INSTANCJA
DYSK
LOGICZNY
INSTANCJA KONTROLUJE BAZĘ DANYCH
BAZA DANYCH
BAZA ZBUDOWANA JEST Z
PRZESTRZENI
PRZESTRZEŃ DANYCH
PLIKI PRZYPISANE SĄ DO
OKREŚLONEJ PRZESTRZENI
PLIK
SEGMENTY TWORZĄ PRZESTRZENIE
SEGMENT
TABELI
INDEKSU
WYCOFANIA
PLIKI ZBUDOWANE SĄ
Z BLOKÓW SYSTEMU
OPERACYJNEGO
KLASTRA
TYMCZASOWY
CACHE
SEGMENTY ZBUDOWANE SĄ Z EXTENTÓW
EXTENT
EXTENTY ZBUDOWANE SĄ Z BLOKÓW
BLOK BAZY DANYCH
BLOK BAZY DANYCH JEST
WIELOKROTNOŚCIĄ BLOKU SYSTEMOWEGO
Nagłówek bloku
BLOK SYSTEMU
OPERACYJNEGO
Blok bazy danych
Przestrzeń
danych
Wolna przestrzeń
bloku
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;
Parametry określające właściwości bloku bazy
PCTFREE
okreś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%.
PCTUSED
okreś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%
INITRANS
określa ilość miejsca w nagłówku bloku jaka zostaje
zarezerwowana dla transakcji modyfikujących jego
zawartość.
Wartość domyślna - 1 transakcja
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.
MAXTRANS określa maksymalną liczbę
modyfikować zawartość bloku.
Wartość domyślna - 255.
transakcji
jakie
mogą
21
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.
PCTFREE =
(max_ liczba _ bajtów _ na _ rekord) − (liczba _ wstawianych _ bajtów _ na _ rekord)
* 100%
(max_ liczba _ bajtów _ na _ rekord)
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.
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).
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%
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.
Ł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.
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)
22
Segment
Extenty i segmenty
zbiór extentów przydzielanych pojedynczemu obiektowi bazy danych.
Extenty te nie muszą znajdować się w jednym pliku.
EXTENT
BLOK2
BLOK1
BLOK3
BLOK4
BLOK5
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
EXTENT0
EXTENT1
EXTENT2
EXTENT3
EXTENT4
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.
Parametry określające właściwości
segmentu
INITIAL
określa w B, KB, MB wielkość pierwszego rozszerzenia
przedzielonego segmentowi.
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
Parametry określające właściwości
segmentu
MAXEXTENTS
Istnieje możliwość użycia słowa UNLIMITED co powoduje, że
rozszerzenia będą przydzielane w razie potrzeby.
Wartością domyślną jest rozmiar odpowiadający wielkości
pięciu bloków (MINIMUM EXTENT).
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).
Parametru po utworzeniu segmentu nie można modyfikować.
NEXT
określa rozmiar drugiego rozszerzenia.
Wartością domyślną jest rozmiar odpowiadający wielkości
pięciu bloków (MINIMUM EXTENT).
PCTINCREASE
MINEXTENTS
okreś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.
okreś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ć
określa maksymalną liczbę rozszerzeń jakie mogą być
przypisane segmentowi.
Parametru po utworzeniu segmentu nie można modyfikować
OPTIMAL
określa w bajtach optymalny rozmiar segmentu wycofania.
Parametr ten znajduje zastosowanie jedynie w przypadku
segmentów wycofania.
23
Parametry określające właściwości
segmentu
FREELISTS
FREELISTS
GROUPS
okreś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.
TYMCZASOWE
dostarczają dynamicznie przestrzeni potrzebnej
wykonywaniu poleceń SQL przez użytkownika.
Wartość domyśla parametru to 1.
CACHE
zawiera definicje struktur słownikowych bazy.
W celu zwiększenia współbieżności parametr ten powinien
zostać zwiększony.
WYCOFANIA
określa liczbę grup list wolnych bloków używanych przez
różne instancje w konfiguracji Parallel Serwer.
zapewniają spójność odczytu danych oraz możliwość
wycofania zmian wprowadzonych przez użytkownika
TABELI
przechowują zgromadzone w bazie dane
INDEKSU
zawierają informacje
wyszukiwania danych
KLASTRA
przechowują zgromadzone w bazie dane w odróżnieniu od
segmentów tabeli są one inaczej przechowywane
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).
•
Rodzaje segmentów w bazie oracle
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
umożliwiające
skrócenie
przy
czasu
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.
24
•
Segmenty wycofania – cechy
Segment wycofania (RollBack
Segment)
•
Są to fragmenty bazy danych przeznaczone do zapisywania danych sprzed
modyfikacji przez nie zatwierdzoną transakcję.
•
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ąć.
Przy dodawaniu rekordu w segmencie zapisywany jest jego numer.
•
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.
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.
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.
Tworzenie segmentu wycofania
Dotyczy serwerów równoległych (Private dotyczy tylko bieżącej instancji)
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;
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.
25
Perspektywy słownika danych, zawierające
informacje o segmentach wycofania:
Segment Tabeli
Tabela to rodzaj segmentu przechowujący dane użytkowników lub dane
systemowe.
BUDOWA REKORDU:
•
•
•
•
V$ROLLSTAT
V$ROLLNAME
DBA_ROLLBACK_SEGS
DBA_SEGMENTS - zawiera informacje na temat
wszystkich segmentów
Nagłówek rekordu
Przestrzeń 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ść.
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.
Tabela tymczasowa
CREATE GLOBAL TEMPORARY TABLE nazwa_tabeli
(pole1 typ, pole2 typ, ...)
[ON COMMIT DELETE|PRESERVE ROWS] ;
ON COMMIT DELETE ROWS
powoduje przechowywanie danych
w tabeli tymczasowej na czas
trwania transakcji
ON COMMIT PRESERVE ROWS
powoduje przechowywanie danych
w tabeli tymczasowej na czas
trwania sesji
26
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]);
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.
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
utworzonych w bazie danych.
DBA_SEGMENTS
informacje nt. wszystkich
utworzonych w bazie danych.
DBA_EXTENTS
informacje nt. przydzielonych extentów.
obiektów
segmentów
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.
27
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.
Rodzaje segmentów – KLASTER
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.
Segment klastra - rodzaje
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).
KLASTER INDEKSOWY
KLASTER HASZOWY
Funkcja haszująca
Indeks klastra
Tabele klastra
Tabele klastra
28
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ść.
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]);
Segment klastra – klaster indeksowy
zasada przechowywania danych w klastrze dwutabelowym
Tabela T1
Indeks na T1
Kowalski
Nowak
Klaster K1
Klaster
indeksowy
Kowalski
Dyrektor
Tabela T2
Indeks na T2
6000
Nowak
Urzędnik
Dyrektor 6000
Urzędnik 2000
Dane każdej tabeli nie należącej do
klastra przechowywane są
oddzielnie
Klucz klastra:
(prac_id)
2000
Dane tabeli będącej indeksem klastra,
które mają taką samą wartość klucza
klastra przechowywane są razem.
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;
29
Klastry haszujące
Segment klastra – słownik danych
• 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.
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
System01.dbf
Dysk C
System02.dbf
Dysk D
USERS
Users01.dbf
Dysk E
Users02.dbf
•
•
•
•
•
•
DBA_TABLES
DBA_ CLUSTERS
DBA_ CLU_COLUMNS
DBA_SEGMENTS
DBA_OBJECTS
DBA_EXTENTS
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.
30
Proponowane przestrzenie tabel
(minimalny podział)
SYSTEM
przestrzeń tabel dla użytkownika
zarezerwowana na słownik danych;
SYS,
przestrzeń
USERS
przestrzeń przechowująca dane i obiekty użytkowników.
INDX
przestrzeń przechowująca indeksy.
TEMP
przestrzeń przechowująca obiekty tymczasowe.
RBS
przestrzeń przechowująca segmenty wycofania
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 automatyczne zwiększenie rozmiaru pliku o
rozm
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
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).
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.
31
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
Tymczasowa przestrzeń tabel
Właściwości tymczasowej przestrzeni tabel :
– nie mogą się w niej znajdować żadne obiekty stałe.
– poprawiają wydajność sortowania 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,
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);
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:
– nie można ich przełączyć w tryb read only,
ALTER TABLESPACE nazwa_przestrzeni
– tworzenie kopii pliku kontrolnego nie generuje żadnych informacji
dla plików tymczasowych.
ADD DATAFILE ‘plik’ SIZE rozmiar K/M
[AUTOEXTEND ON NEXT rozmiar K/M
MAXSIZE maksymalny_rozmiar K/M];
32
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;
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.
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.
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 przywrócić stan normalny po włączeniu plików należy
skorzystać z polecenia RECOVER DATABASE.
33
Włączenie lub wyłączenie
przestrzeni tabel
Stany
Read-Only oraz Read-Write
ALTER TABLESPACE nazwa_przestrzeni
[ONLINE | OFFLINE]
[TEMPORARY|IMMEDIATE];
ALTER TABLESPACE nazwa_przestrzeni READ ONLY;
ALTER TABLESPACE nazwa_przestrzeni READ WRITE;
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.
Przestrzenie Tabel – Usunięcie
DROP TABLESPACE nazwa_przestrzeni
[INCLUDING CONTENTS [AND DATAFILES]
[CASCADE CONSTRAINTS]] ;
INCLUDING CONTENTS
powoduje 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 DATAFILES
powoduje automatyczne
fizycznych,
CASCADE CONSTRAINTS
powoduje podczas usuwania tabel usunięcie
występujących ograniczeń integralnościowych
usunięcie
plików
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.
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=<nazwa_przestrzeni>
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.
34
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 = 43200
43200s= 12 h
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ń).
Informacja o przestrzeniach tabel
DBA_TABLESPACES
informacje nt. utworzonych przestrzeń tabel,
V$TABLESPACE
nazwa i numer
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...).
wszystkich
utworzonych
SELECT tablespace_name, SUM(bytes)/1024 „wolne w KB”
FROM DBA_FREE_SPACE
GROUP BY tablespace_name;
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.
35
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_DEST
domyś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).
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.
Mechanizm automatycznego
zarządzania plikami
Szablony nazw plików
Typ pliku
Format nazwy
Plik danych
ora_%t_%u.dbf
Plik tymczasowy
ora_%t_%u.tmp
Plik kontrolny
ora_%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;
↓
•
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.
ora_dane_v3kb34bc0.dbf
36
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.
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:
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.
Izolacja
zmiany 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.
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.
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;
przestawienie pojedynczej transakcji w tryb Read Only:
SET TRANSACTION READ ONLY;
Polecenie należy wykonać jako pierwsze w ramach transakcji.
Polecenie należy wykonać jako pierwsze w ramach sesji.
37
Tryb SERIALIZABLE
• Transakcja w trybie Serializable, podobnie jak transakcja
w trybie Read Only, operuje na wersji danych z
momentu jej rozpoczęcia.
Snapshot Too Old
• Różnica polega na tym, że można modyfikować dane,
które nie zostały zmienione przez inne transakcje w
trakcie jej trwania.
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.
przestawienie pojedynczej transakcji w tryb Serializable:
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
Polecenie należy wykonać jako pierwsze w ramach transakcji.
Metody rozwiązania problemu pojawiania się błędu
ORA-1555:
ustawienie trybu Serializable dla wszystkich transakcji w sesji:
ALTER SESSION SET ISOLATION_LEVEL= SERIALIZABLE;
Polecenie należy wykonać jako pierwsze w ramach sesji.
– większe wartości MINEXTENTS;
– większy rozmiar rozszerzeń EXTENTS;
– większa wartość OPTIMAL
Tryb Serializable może być włączony na stałe poprzez ustawienie w pliku
parametrów Init<SID>.Ora parametru SERIALIZABLE=TRUE.
Domyślnie jego wartość wynosi FALSE co oznacza, że wszystkie transakcje są
realizowane w trybie Read Committed;
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).
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.
38
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;
Blokowanie tabel i rekordów - właściwości blokad
Rodzaj Blokady
Opis
ROW SHARE
Zakł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
SHARE
Zakł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
EXCLUSIVE
Uniemożliwia modyfikowanie danych dopuszczając
tylko ich przeglądanie.
Zgodność blokad tabeli w systemie
ORACLE
Brak
Brak TAK
RS TAK
RX TAK
S
TAK
SRX TAK
X
TAK
RS
TAK
TAK
TAK
TAK
TAK
Nie
RS
RX
S
SRX
X
RX
TAK
TAK
TAK
S
TAK
TAK
SRX
TAK
TAK
Nie
Nie
Nie
Nie
Nie
Nie
Nie
Nie
Nie
Nie
TAK
X
TAK
Nie
Nie
Nie
Nie
Nie
ROW SHARE
ROW EXCLUSIVE
SHARE
SHARE ROW EXCLUSIVE
EXCLUSIVE
Właściwości blokady RS
(ROW SHARE)
Zakładana w celu późniejszej
uniemożliwia zmianę zawartości
transakcje.
modyfikacji rekordów,
rekordów przez inne
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
39
Właściwości blokady RX
(ROW EXCLUSIVE)
Właściwości blokady S (SHARE)
Zakładana jest automatycznie w przypadku realizacji
poleceń DELETE, INSERT, UPDATE.
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.
Modyfikowane rekordy są zawsze blokowane w trybie
EXCLUSIVE (X).
Transakcje nie zmieniające zawartości
współpracować z transakcją T1.
tabeli
mogą
Pojawienie się blokady tego typu oznacza, że niektóre lub
wszystkie rekordy tabeli zostały zmodyfikowane.
Właściwości blokady SRX
(SHARE ROW EXCLUSIVE)
Właściwości blokady X
(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.
Uniemożliwia modyfikowanie danych dopuszczając tylko ich
przeglądanie. Założenie innej blokady nie jest możliwe.
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.
40
Przykład zapytania wyświetlającego informacje o
założonych blokadach
Blokowanie tabel i rekordów
– słownik danych
Informacje o założonych blokadach uzyskujemy
słownika danych, z następujących perspektyw:
–
–
–
ze
SESSION
V$LOCK
SYS.OBJ$
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
Przykład zapytania wyświetlającego informacje o
założonych blokadach
USERNAME
nazwa użytkownika bazy danych
NAME
nazwa obiektu którego dotyczą blokady
SID
numer sesji
STATUS
status sesji użytkownika
OSUSER
nazwa użytkownika w systemie operacyjnym
MACHINE
nazwa komputera z którego użytkownik
dołączył się do bazy danych
TERMINAL
rodzaj terminala wykorzystanego do
podłączenia się do bazy danych
PROGRAM
nazwa programu za pomocą którego
użytkownik dołączył się do bazy
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
41
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.
Wyzwalacze DDL – oparte na
zdarzeniach w bazie danych
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;
Wyzwalacze DDL – przykład
Wyzwalacze oparte na zdarzeniach DDL można tworzyć jako BEFORE
lub AFTER oraz rozgraniczać ich zasięg z całej bazy do konkretnego
schematu.
create or replace trigger log_on
after logon on database
begin
if user = 'DEMO' then
raise_application_error (-20001,'Autoryzacja
tego konta jest zabroniona');
end if;
end;
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.
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
ZDARZENIA DDL
ALTER,
ANALYZE,
ASSOCIATE
STATISTICS,
AUDIT,
COMMENT, CREATE, DISASSOCIATE STATISTICS, DROP,
GRANT, NOAUDIT, RENAME, REVOKE, TRUNCATE
z
Warning: You are no longer connected to ORACLE.
42
Podział kompetencji dla dużych baz
danych
Podział kompetencji dla dużych baz
danych
Administrator bazy danych
•
•
•
•
•
•
administrator bazy danych,
menadżerowie bezpieczeństwa,
administratorzy sieciowi,
programiści,
projektanci aplikacji,
użytkownicy.
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
– 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
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
43
Tworzenie użytkowników
Modyfikowanie 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 ;
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;
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
Parametr OS_AUTHENT_PREFIX + nazwa użytkownika jak w pkt.1
–
CREATE USER OPS$JAN IDENTIFIED EXTERNALLY;
nazwie:
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
Po zalogowaniu do OS bez wpisywania użytkownika i hasła można
podłączyć się do bazy danych
44
Uprawnienia do obiektów
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.
Uprawnienia do obiektów
ALTER
√
DELETE
√
WIDOK
SEKWENCJA PROCEDURA, MIGAWKA
FUNKCJA,
PAKIET
√
√
EXECUTE
INSERT
–
–
–
–
–
–
–
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)
Przyznawanie uprawnień systemowych
Wybrane rodzaje uprawnień do obiektów
TABELA
Uprawnienie do danego obiektu może nadać
jedynie właściciel tego obiektu.
Uprawnienia obiektowe mogą dotyczyć:
GRANT uprawnienie [ , uprawnienie [...]]
TO użytkownik [ , użytkownik [...]]
[WITH ADMIN OPTION];
√
√
√
SELECT
√
√
UPDATE
√
√
INDEX
√
REFERENCES
√
√
√
W celu przyznania uprawnienia wszystkim użytkownikom
należy zamiast nazwy użytkownika użyć zamiast nazwy
użytkownika słowa kluczowego PUBLIC.
45
Przyznawanie uprawnień do obiektów
GRANT uprawnienie [ , uprawnienie [...]]
ON obiekt
TO użytkownik [ , użytkownik [...]]
[WITH GRANT OPTION];
Odbieranie uprawnień systemowych
REVOKE uprawnienie [, uprawnienie [...]]
FROM użytkownik [, użytkownik [...]];
UPRAWNIENIA SYSTEMOWE NIE SĄ ODBIERANE KASKADOWO
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;
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.
Uprawnienia w bazie danych
– słownik danych
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
DBA_SYS_PRIVS
Informacje o przekazanych uprawnieniach
systemowych
DBA_TAB_PRIVS
Informacje o przekazanych uprawnieniach do
obiektów
DBA_COL_PRIVS
Informacje o przekazanych
konkretnych kolumn obiektów.
SESSION_PRIVS
Informacje o przydzielonych uprawnieniach w ramach
danej sesji
uprawnieniach
do
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
46
Autoryzacja przez plik haseł
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.
Nowy plik można utworzyć z linii poleceń poleceniem
orapwd file=<nazwa
entries=<liczba>
pliku>
password=<hasło>
file
parametr powinien zawierać pełną ścieżkę do nowego pliku
haseł wraz z jego nazwą. Nazwa pliku haseł to PWD<nazwa
bazy>.ora
(w
systemie
Windows
NT/2000)
lub
orapw<nazwa_bazy> (w systemach Unix/Linux).
password
hasło które będzie obowiązywało wszystkich uprawnionych
użytkowników do autoryzacji poza bazą danych.
entries
ilość
wpisów
zarezerwowanych
dla
użytkowników
z uprawnieniami SYSOPER oraz SYSDBA. Po osiągnięciu limitu
konieczne jest wygenerowanie nowego pliku.
Plik haseł znajduje się w lokalizacji:
$ORACLE_HOME\database\pwd<SID>.ora
Autoryzacja przez plik haseł
Role
Przed utworzeniem nowego pliku haseł należy:
– zamknąć bazę danych
– zatrzymać usługę uruchamiającą
Windows NT.
bazę
danych
Rola jest zbiorem uprawnień systemowych oraz uprawnień do obiektów,
który może być przypisany użytkownikowi.
w
środowisku
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ł.
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.
47
Role predefiniowane
Nazwa roli
CONNECT
RESOURCE
Uprawnienia
przydzielone
roli
ALTER SESSION
CREATE CLUSTER
CREATE CLUSTER
CREATE INDEXTYPE
CREATE DATABASE LINK CREATE OPERATOR
CREATE SEQUENCE
CREATE PROCEDURE
CREATE SEQUENCE
CREATE SESSION
CREATE SYNONYM
CREATE TABLE
CREATE TABLE
CREATE TRIGGER
CREATE VIEW
CREATE TYPE
UNLIMITED TABLESPACE
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.
Role predefiniowane
•
•
•
•
•
•
•
•
CONNECT,
RESOURCE,
DBA,
EXP_FULL_DATABASE,
IMP_FULL_DATABASE
EXECUTE_CATALOG_ROLE,
DELETE_CATALOG_ROLE,
SELECT_CATALOG_ROLE.
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];
48
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)
Role domyślne
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ł.
Role zabezpieczone hasłem
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.
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.
ALTER USER nazwa_użytkownika DEFAULT ROLE opcja;
CREATE ROLE nazwa_roli IDENTIFIED BY hasło;
OPCJA
OPIS
ALL
wszystkie role które zostały nadane użytkownikowi będą domyślne.
ALL EXCEPT
wszystkie role za wyjątkiem ról wymienionych po słowie kluczowym
EXCEPT.
NONE
żadna rola nie będzie domyślna.
ROLA
nazwa roli lub lista ról, które będą domyślne
lub
ALTER ROLE nazwa_roli IDENTIFIED BY hasło;
49
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:
Role – Słownik Danych
Informacje o rolach w bazie danych można uzyskać
z następujących perspektyw:
SET ROLE opcja [IDENTIFIED BY hasło];
DBA_ROLES
które użytkownik ma
z tej opcji dla ról
zawiera informacje o rolach zdefiniowanych w bazie
danych
DBA_ROLE_PRIVS
zawiera
informacje
o
rolach
użytkownikom bazy danych;
ALL EXCEPT
zostaną włączone wszystkie role za wyjątkiem ról wymienionych po
słowie kluczowym EXCEPT
ROLE_SYS_PRIVS
NONE
wyłącza wszystkie role
zawiera informacje o uprawnieniach systemowych
przekazanym rolom;
ROLA
określona rola ma być włączona
ROLE_TAB_PRIVS
zawiera informację o prawach dostępu do obiektów
przyznanym rolom;
OPCJA
OPIS
ALL
mają być włączone wszystkie role,
przydzielone. Nie można skorzystać
zabezpieczonych hasłem;
Wszystkie role, które nie zostaną wymienione włączone staną się
nieaktywne.
przekazanych
ROLE_ROLE_PRIVS zawiera informacje o rolach przyznanych innym
rolom
Włączanie i wyłączanie ról odnosi się tylko do bieżącej sesji użytkownika
DO ZROBIENIA
• VPD – dostęp na poziomie wiersza –
50
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ć.
Tworzenie profilu i kojarzenie z
użytkownikiem
Limity dotyczące wykorzystania zasobów systemowych
SESSIONS_PER_USER
liczba jednoczesnych sesji użytkownika;
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:
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);
ALTER USER nazwa_uzytkownika
PROFILE nazwa_profilu;
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).
CREATE USER nazwa_uzytkownika
IDENTIFIED BY haslo
PROFILE nazwa_profilu;
Każdy użytkownik może być skojarzony tylko z jednym profilem.
51
Limity ograniczające dostęp do bazy danych
PASSWORD_LIFE_TIME
okreś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_TIME
okreś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_ MAX
okreś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_TIME
okreś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_TIME
okreś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).
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).
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ąć.
Funkcja weryfikacji hasła
Funkcja
weryfikacji
hasła
umożliwia
użytkownikom takich ograniczeń jak:
–
–
–
–
narzucenie
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.
52
Funkcja weryfikacji hasła
Funkcja weryfikacji hasła
Nagłówek funkcji weryfikującej hasło powinien być zgodny
z następującą specyfikacją:
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.
CREATE OR REPLACE FUNCTION nazwa_funkcji
(USERNAME VARCHAR2,
PASSWORD VARCHAR2,
OLD_PASSWORD VARCHAR2)
RETURN BOOLEAN IS ...
Funkcja powinna zostać utworzona w
użytkownika SYS z uprawnieniem SYSDBA.
schemacie
Funkcja weryfikacji hasła
Profile – słownik danych
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;
Informacje o profilach zdefiniowanych w bazie
Widok
Opis
DBA_PROFILES
Informacja nt. utworzonych profili i ich limitów.
DBA_USERS
Informacja o tym, jaki profil został przypisany do
użytkownika
53
Monitorowanie pracy użytkowników
Monitorowanie pracy użytkowników
Rozróżniane są trzy metody monitorowania pracy użytkowników:
Administrator
bazy
danych
może
śledzić
użytkowników lub tylko wybrane operacje w celu:
pracę
– 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.
– monitorowanie poleceń - STATEMENT AUDITING,
– monitorowanie uprawnień - PRIVILEGE AUDITING,
– monitorowanie obiektów - OBJECT AUDITING.
Dodatkową strukturę w postaci tabel oraz widoków związanych
monitorowanie można założyć uruchamiając skrypt
CATAUDIT.SQL
z
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$.
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.
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ę
wykonanych poleceń,
niezależnie
od
OPCJA
OPIS
DB lub TRUE
zapis następuje do Dziennika Obserwacji ORACLE,
BY ACCESS
jeden zapis dla każdego wykonanego polecenia,
OS
zapis następuje do Dziennika Systemu Operacyjnego,
SUCCESSFUL
NONE
wyłączenie monitorowania
rejestrowane
polecenia,
będą
tylko
pomyślnie
ilości
zakończone
NOT SUCCESSFUL rejestrowane będą tylko nieudane polecenia
54
Monitorowanie – kategorie poleceń
KATEGORIA POLECEŃ
OBEJMOWANE POLECENIA SQL
ALTER SYSTEM
ALTER SYSTEM
CLUSTER
CREATE CLUSTER
ALTER CLUSTER
TRUNCATE CLUSTER
DROP CLUSTE
DATABASE LINK
CREATE DATABASE LINK
DROP DATABASE LINK
INDEX
CREATE INDEX
ALTER INDEX
REBUILD INDEX
NOT EXISTS
wszystkie polecenia SQL kończące
się błędem w wyniku odwołania do
nieistniejących obiektów
Monitorowanie – kategorie poleceń
KATEGORIA POLECEŃ
OBEJMOWANE POLECENIA SQL
PROCEDURE
CREATE FUNCTION
CREATE PACKAGE
CREATE PACKAGE BODY
CREATE PROCEDURE
DROP FUNCTION
DROP PACKAGE
DROP PROCEDURE
PUBLIC DATABASE LINK
CREATE PUBLIC DATABASE LINK
DROP PUBLIC DATABASE LINK
PUBLIC SYNONYM
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
ROLE
CREATE ROLE
ALTER ROLE
SET ROLE
DROP ROLE
Monitorowanie – kategorie poleceń
KATEGORIA POLECEŃ OBEJMOWANE POLECENIA SQL
ROLLBACK SEGMENT
SEQUENCE
SESSION
SYNONYM
CREATE ROLLBACK SEGMENT
ALTER ROLLBACK SEGMENT
DROP ROLLBACK SEGM
CREATE SEQUENCE
DROP SEQUENCE
przyłączenie do bazy i odłączenie
CREATE SYNONYM
DROP SYNONYM
SYSTEM AUDIT
AUDIT
NO AUDIT
SYSTEM GRANT
przyznanie i odebranie uprawnień systemowych
TABLE
CREATE TABLE
ALTER TABLE
DROP TABLE
Monitorowanie – kategorie poleceń
KATEGORIA POLECEŃ OBEJMOWANE POLECENIA SQL
TABLESPACE
CREATE TABLESPACE
ALTER TABLESPACE
DROP TABLESPACE
TRIGGER
CREATE TRIGGER
ALTER TRIGGER ENABLE | DISABLE
ALTER TABLE
ENABLE, DISABLE, DROP
USER
CREATE USER
ALTER USER
DROP USER
VIEW
CREATE VIEW
DROP VIEW
55
Monitorowanie – kategorie poleceń
KATEGORIA POLECEŃ OBEJMOWANE POLECENIA SQL
ALTER SEQUENCE
ALTER SEQUENCE
ALTER TABLE
ALTER TABLE
COMMENT TABLE
DELETE TABLE
COMMENT ON tabela, perspektywa, migawka,
atrybut
DELETE FROM tabela, perspektywa
EXECUTE PROCEDURE
wywołanie procedury i funkcji składowanej
GRANT PROCEDURE
GRANT prawo ON procedura
REVOKE prawo FROM procedura
GRANT SEQUENCE
GRANT prawo ON licznik
REVOKE prawo FROM licznik
GRANT TABLE
GRANT prawo ON tabela, perspektywa,
migawka
REVOKE prawo FROM tabela, perspektywa,
migawka
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
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 ...
migawka
UPDATE TABLE
UPDATE tabela, perspektywa
FROM
tabela,
perspektywa,
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.
56
Monitorowanie obiektów
Monitorowanie obiektów - zakresy
Operacja
ALTER
Tabela
Widok
X
Licznik
Migawka
Procedura
X
AUDIT
X
X
COMMENT
X
X
DELETE
X
X
GRANT
X
X
INDEX
X
INSERT
X
X
LOCK
X
X
RENAME
X
X
X
X
X
X
EXECUTE
Informacje o aktualnie włączonym monitorowaniu operacji
na obiektach można wyświetlić z perspektywy
DBA_OBJ_AUDIT_OPTS
X
Stan monitorowania jest określany następująco:
SELECT
X
X
UPDATE
X
X
X
X
X
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
podczas monitorowania;
wygenerowane
A
S
brak monitorowania
monitorowanie By Access
monitorowanie By Session
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
monitorowania;
wpisy
wygenerowane
podczas
USER_AUDIT_STATEMENT
pokazuje wpisy związane z monitorowaniem poleceń GRANT,
REVOKE, AUDIT, NOAUDIT, ALTER SYSTEM;
DBA_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;
DBA_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
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
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ŚĆ
57
Monitorowanie pracy użytkowników słownik danych
Stan monitorowania poleceń i uprawnień
DBA_STMT_AUDIT_OPTS
informacja o włączeniu
poleceń i uprawnień;
monitorowania
DBA_PRIV_AUDIT_OPTS
informacja o włączeniu monitorowania
uprawnień
Stan monitorowania dostępu do obiektów
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
Przejmowanie konta użytkownika – opcja
nieudokumentowana
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
Przejmowanie konta użytkownika – opcja
nieudokumentowana
Przykładowy scenariusz przejęcia może wyglądać następująco:
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.
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?
58
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
FROM
DBA_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.
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
wcześniej perspektywy DBA_USERS;
z
odczytanej
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.
Pusty
59
db_name = "baza"
Tworzenie bazy danych db_domain = world
utworzenie
pliku parametrów np.:
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 = 5281792
log_checkpoint_interval = 10000
log_checkpoint_timeout = 1800
processes = 50
log_buffer = 32768
audit_trail = false
max_dump_file_size = 10240
global_names = true
background_dump_dest = D:\baza\bdump
user_dump_dest = D:\baza\udump
remote_login_passwordfile = exclusive
os_authent_prefix = ""
compatible = 8.0.5
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
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\bdump zawiera pliki śladu i plik ostrzeżeń
D:\baza\udump zawiera pliki śladu sesji użytkowników
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
wykonując komendę ORADIM -?
można
uzyskać
60
Tworzenie bazy dany
Utworzenie serwisów oraz pliku haseł
Przykład tworzenia serwisu za pomocą polecenia
ORADIM:
Tworzenie bazy dany
Uruchomienie nowo utworzonej instancji w trybie
NOMOUNT
ORADIM –NEW –SID baza -INTPWD oracle
-STARTMODE auto –PFILE
d:\baza\initbaza.ora.
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)
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:
Kolejnym krokiem jest uruchomienie instancji w trybie
NOMOUNT przy pomocy polecenia:
orapwd file=$ORACLE_HOME/dbs/orapw<nazwa_bazy>
password=oracle entries=5
STARTUP NOMOUNT PFILE=D:\BAZA\INITBAZA.ORA
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;
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.
61
Tworzenie bazy dany
Tworzenie bazy dany
Utworzenie w bazie odpowiednich przestrzeni tabel
Założenie struktur słownikowych
Po utworzeniu bazy danych należy użyć skryptów w kolejności
podanej poniżej:
Tworzenie przestrzeni tabel dla danych, tymczasowych
przestrzeni danych, przestrzeni dla segmentów wycofania
@%ORACLE_HOME%\rdbms\admin\catalog.sql
@%ORACLE_HOME%\rdbms\admin\catproc.sql
do stworzenia powszechnie używanych perspektyw słownika
danych i obsługi PL/SQL.
Tworzenie bazy dany
Tworzenie bazy dany
Założenie struktur słownikowych
Utworzenie segmentów wycofania w
przeznaczonej dla nich przestrzeni tabel
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.
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
konfiguracji Sieciowego Procesu Komunikacyjnego
dokonać
62
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;
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' }
ALTER SYSTEM
Modify system settings.
ALTER SYSTEM ARCHIVE LOG archive_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
ALTER SYSTEM
Modify system settings.
int
GC_DEFER_TIME =
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
63
ALTER SYSTEM
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}
ALTER DATABASE
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 Heisenberg
Konfiguracja sieciowego procesu nasłuchu
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
Dla sieciowego procesu
następujące pliki:
komunikacyjnego
istotne
są
– 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.
64
Konfiguracja sieciowego procesu nasłuchu
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
USER lub ADMIN
wyłącza śledzenie pracy procesu nasłuchu
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.
Konfiguracja sieciowego procesu nasłuchu
Plik TNSNAMES.ORA
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=10.1.1.1)(PORT=1521))
)
(CONNECT_DATA =
(SERVICE_NAME = BAZA.WORLD)
)
)
Plik LISTENER.ORA
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 tnsnames.ora
HQ =(DESCRIPTION=
(ADDRESS=
(PROTOCOL=TCP)
(HOST=HQ)
(PORT=1521))
(CONNECT DATA=
(SID=loc)))
Baza 8.i i nowsze
S817.us.oracle.com =
Baza 8.i starsze
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = sdg-lap)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = S817.us.oracle.com)
)
)
65
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
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
np.
LSNRCTL START nazwa_procesu_nasłuchu
TNSPING Baza.world 5
Uwaga: Jeżeli nie podamy nazwy procesu nasłuchu, to komenda będzie
dotyczyła domyślnego procesu nasłuchu o nazwie LISTENER.
powoduje pięciokrotne sprawdzenie połączenia z utworzoną
przez nas bazą o nazwie Baza.world.
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
SET SERVEROUTPUT ON;
EXCEPTION
DECLARE
WHEN OTHERS THEN
CURSOR invalid_prog_obj IS
--- no begin needed
SELECT object_name, object_type
status := SQLCODE;
FROM user_objects
DBMS_OUTPUT.put_line(' FAILED with ' ||
WHERE status = 'INVALID';
SQLERRM(status));
rec invalid_prog_obj%ROWTYPE;
IF (invalid_prog_obj%ISOPEN) THEN
status NUMERIC;
CLOSE invalid_prog_obj;
BEGIN
END IF;
DBMS_OUTPUT.enable;
end;
OPEN invalid_prog_obj;
-- u should end the block as u have began it by
LOOP
bigin command
-- 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;
Rekompilacja pakietów
66
Recompile all
Best solution is to recompile all the INVALID objects run the
utlrp.sql as sys
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...]
- located in $ORACLE_HOME/rdbms/admin
RECOVER [AUTOMATIC] [FROM 'location']
STANDBY TABLESPACE tablespace [, tablespace2...]
UNTIL [CONSISTENT] [WITH] CONTROLFILE
EXEC DBMS_UTILITY.COMPILE_SCHEMA('sys');
RECOVER [AUTOMATIC] [FROM 'location']
DATAFILE 'filename' [, filename2...]
Schemat do powtórnej kompilacji
RECOVER [AUTOMATIC] [FROM 'location']
STANDBY DATAFILE 'filename' [, filename2,...]
UNTIL [CONSISTENT] [WITH] CONTROLFILE
RECOVER
RECOVER
Recover a Database, Tablespace, Data or Log file.
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]
On a parallel server you can add to any of the above:
PARALLEL Parallel Clause
Key:
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.
67
RECOVER
RECOVER
Recover a Database, Tablespace, Data or Log file.
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.
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)
ALTER DATABASE
ALTER DATABASE
Open an existing database, and /or modify associated files.
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_clause
DATAFILE 'filename' END BACKUP
Datafile options:
CREATE DATAFILE 'filename' AS filespec
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]
68
ALTER DATABASE
ALTER DATABASE
Open an existing database, and /or modify associated files.
Open an existing database, and /or modify associated files.
redo log options:
ADD LOGFILE [THREAD int] [GROUP int] filespec
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
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;
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'
Uzyskanie informacji o parametrach
bazy
SELECT Name, Value, IsDefault FROM V$PARAMETER;
DESC V$PARAMETER;
Nazwa
Wartość NULL? Typ
NUM
NUMBER
NAME
VARCHAR2(64)
TYPE
NUMBER
VALUE
VARCHAR2(512)
ISDEFAULT
VARCHAR2(9)
ISSES_MODIFIABLE
VARCHAR2(5)
ISSYS_MODIFIABLE
VARCHAR2(9)
ISMODIFIED
VARCHAR2(10)
ISADJUSTED
VARCHAR2(5)
DESCRIPTION
VARCHAR2(64)
UPDATE_COMMENT
VARCHAR2(255)
69
Tworzenie przestrzeni tabel
CREATE TABLESPACE Data_small
DATAFILE 'C:\oracle\data\data_small.dbf' SIZE 10M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
DESC V$SQL;
PARSING_USER_ID
PARSING_SCHEMA_ID
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
EXECUTIONS
BUFFER_
GETS
EXECUTION
S
SQL_TEXT
30394
22412
334
30394
334
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=0
24255
13230
28
24255
28
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#
Obciążenie plików bazy danych
KEPT_VERSIONS
Nazwa
ADDRESS
SQL_TEXT
TYPE_CHK_HEAP
SHARABLE_MEM
HASH_VALUE
PERSISTENT_MEM
PLAN_HASH_VALUE
RUNTIME_MEM
CHILD_NUMBER
SORTS
MODULE
LOADED_VERSIONS
MODULE_HASH
OPEN_VERSIONS
ACTION
USERS_OPENING
ACTION_HASH
FETCHES
SERIALIZABLE_ABORTS
EXECUTIONS
OUTLINE_CATEGORY
USERS_EXECUTING
CPU_TIME
LOADS
ELAPSED_TIME
FIRST_LOAD_TIME
OUTLINE_SID
INVALIDATIONS
CHILD_ADDRESS
PARSE_CALLS
SQLTYPE
DISK_READS
REMOTE
BUFFER_GETS
OBJECT_STATUS
ROWS_PROCESSED
LITERAL_HASH_VALUE
COMMAND_TYPE
LAST_LOAD_TIME
OPTIMIZER_MODE
IS_OBSOLETE
OPTIMIZER_COST
CHILD_LATCH
DYSK
NAZWA_PLIKU
LICZBA
_IO
BLOKI_O
DCZYT
BLOKI_
ZAPIS
set pagesize 60 lines 80
C:\ORACLE\ORADA 6
C:\OR
5
1
clear breaks
TA\ORACLE\ZOLA
DR.ORA
clear computes
C:\ORACLE\ORADA 8
7
1
break on Dysk skip 1 on Report
TA\ORACLE\XDB01
compute sum of Bloki_Odczyt on Dysk
.DBF
···
···
···
···
compute sum of Bloki_Zapis on Dysk
SUM
57478
53638
3840
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;
70
Database Link – baza połączona
Tylko SYSDBA
CREATE PUBLIC DATABASE LINK Polaczona
CONNECT TO Scott
IDENTIFIED BY tiger
SELECT * FROM emp@Polaczona
USING 'ORACLE';
CREATE DATABASE LINK Polaczona
USING 'ORACLE'
CREATE DATABASE LINK Polaczona
CONNECT TO CURRENT_USER
USING 'ORACLE'
Podłączenie do schematu
połączonego użytkownika
Podłączenie do schematu
bieżącego (w chwili
tworzenia) użytkownika
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
);
Tabela do
planu
wykonania
column operations format A79
Strojenie Tekst
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;
Wyświetlenie planu wykonania
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.
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';
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');
71
Śledzenie zapytań - TKPROF
Strojenie Tekst
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.
Pakiet STATSPACK
Strojenie Tekst
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ą:
infile : plik wygenerowany w trakcie śledzenia
outfile : nazwa pliku wynikowego zawierającego raport śledzenia.
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:
Dla każdego zapytania znajdującego się w raporcie przedstawione są następujące informacje:
execute STATSPACK.MODIFY_STATSPACK_PARAMETER( i_snap_level->4, i_modify_parameter->TRUE);
count : liczba wywołań procedur OCI (procedury pozwalające na uzyskanie dostępu do bazy)
CPU : czas CPU wykonania w sekundach
l
d
ki
i
lt t
t i
k d h
Aby wygenerować raport należy uruchomić skrypt spreport.sql. Ważne jest, aby przed uruchomieniem tego skryptu dokonać
analizy schematu STATSPACK za pomocą polecenia:
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:
72

Podobne dokumenty