wykłady z administracji bazą danych oracle 2010 wykŁad 1stud.ics.p.lodz.pl/~aangiel/semestr...
TRANSCRIPT
Wykłady z Administracji bazą danych Oracle 2010
1
WYKŁAD 1
WWW.ploug.org.pl i www.oracle.com – strony z pomocami do Oracle
Rozwój Oracle DB:
• 1978 – Oracle v 1 – nigdy oficjalnie nie dystrybuowana
• 1979 – O v2 – pierwszy produkt komercyjny
• 1982 – zmiana nazwy firmy z Relational Software na ORacle Software
• 1985 – O v 5 – architektura klient-server
• 1988 – O v. 6 – wprowadzenie blokad, backupów „na gorąco”, języka PL/SQL
• 1992 – o7
• 1998 – o 8
• 1999 – o8i
• 2001 – o9i
• 2003 – o 10g (grid computing)
• 2007 – o 11
Oracle produkty i usługi:
• database:
o baza danych Oracle sprawdza się w instytucjach sieciowych
• application serwer – platforma Oracle j2ee integruje elementy potrzebne do rozwoju
wdrażania aplikacji webowych
• Oracle applications – jest zestawem aplikacji biznesowych pozwalających na zarządzanie i
automatyzacji całości procesów w organizacji
• Oracle collaboration suite – służy połączeniom i komunikacji w organizacji głosowym, e-mail,
fax, łączność bezprzewodowa, kalendarz informacji i pliki
• Oracle developer suite – to zintegrowane środowisko które laczy w sobie narzędzia do
rozbudowy aplikacji orz narzędzia Business Intelligence
• Oracle services - Usługi takie jak Oracle consulting i Oracle university dostarczają
niezbędnych ekspertyz dla projektów Oracle
Oracle Database 11g
• „g” oznacza „grid” – sieć siatka
• Global Grid forum (GGF) www.gridforum.org
• Technologia sieci Oralce obejmuje: Sieć aplikacji ,Kontrola w sieci
• ASM pozwala na rozplanowanie bazy danych na wszystkich dyskach. dodanie lub usuniecie
dysku powoduje ponowne rozplanowanie danych
• RAC – pozwala na używanie przez więcej niż jedna instancje tych samych plików, bazy danych
rozmieszczonych na rożnych serwerach. Jeśli jeden z serwerów ulegnie awarii Instancja bazy
danych na innym serwerze będzie przetwarzała transakcje
• OS umożliwia przepływ i współdzielenie danych i zdarzeń w tej samej bazie danych lub
miedzy kilkoma bazami danych. Podczas aktualizacji umożliwia przechowywanie po każdej
stronie 2 zsynchronizowanych kopii
• Ułatwiają zarządzanie wszystkimi komponentami infrastruktury Oracle
Wykłady z Administracji bazą danych Oracle 2010
2
• Enterprise manager grid to zestaw narzędzi, które ułatwiają zarządzanie wszystkimi
komponentami infrastruktury Oracle
Architektury bazy danych Oracle:
• serwer Oracle jest systemem zarządzania baza danych który zapewnia otwarte,
kompleksowe, zintegrowane podejście do zarządzania informacją.
• Składa się z instancji Oracle oraz bazy danych Oracle
• serwer Oracle musi w niezawodny sposób zarządzać dużą ilością danych w środowisku z
wieloma użytkownikami
• serwer Oracle musi również zapobiegać nieautoryzowanemu dostępowi oraz dostarczać
efektywnych rozwiązań w przypadku problemów z odzyskiwaniem danych po awarii
Zadania dla administratora bazy danych ORacle:
• ocena sprzętu dla serwera bazy danych
• instalacja oprogramowania Oracle
• planowanie strategii dla bazy danych i bezpieczeństwa
• tworzenie, migracja i otwieranie bazy danych
• tworzenie kopii zapasowej bazy danych
• rejestrowanie użytkowników systemu i planowanie ich dostępu do sieci Oracle
• projektowanie i implementacja (realizacja(bazy danych)
• odzyskiwanie bazy danych po awarii
• Monitorowanie wydajności bazy danych
Oracle – produktu i usługi:
• OUI – służy do instalowania i konfiguracji wszystkich komponentów
• DBCA – pozwala na stworzenie bazy danych Oracle na podstawie dostarczonych szablonów;
umożliwia kopiowanie danych wstępnie skonfigurowanej bazy danych
• DBUA (database upgrade assistant (DBUA) - [pozwala na uaktualnianie istniejącej bazy
danych do nowej wersji Oracle
• Oracle Net Manager - używany do skonfigurowania połączeń z siecią dla baz danych i aplikacji
Oracle
• Oracle Enterprise Manager (EM) – zestaw narzędzi do zarządzania komponentami Oracle,
instancje baz danych, serwery aplikacji, serwery WWW, wspolpracuje z innymi narzędziami
oracle, udostępnia 3 główne narzędzia administracyjne,
• SQL*PLUS – stanowi wiersz poleceń do zarządzania baza danych iSQL*PLUS jest interfejsem
pracującym w oparciu o przeglądarkę
• RECOVERY MANAGER (RMAN) – zestaw narzędzi do tworzenia kopii zapasowych i
przywracania bazy danych lub poszczególnych jej plików
• ORACLE SECURE BCKUP – pozwala na tworzenie kopii zapasowych baz danych Oracle i
sieciowej pamięci masowej z wykorzystaniem napędów taśmowych wyposażony w funkcje
szyfrowania ochrony danych i dynamicznego współużytkowanie napędów
• DATA PUMP – umożliwia szybki transfer danych z jednej bazy do innej (można wykorzystać
np. podczas eksportu tabeli)
• SQL Loader – pozwala na załadowanie danych z pliku zewnętrznego
• Command Line to ols – do administracji Enterpise manager’em
Wykłady z Administracji bazą danych Oracle 2010
3
(emetl start | status | set | stop)
Uruchomienie lub zatrzymanie SQL plus (isqlpliusctrl start | stop)
Administracja procesem nasłuchiwania (lsnrctl help | start | status | stop)
Optimal Flexible Architecture (OFA)
OFA stanowi zestaw metod konfiguracji baz danych Oracle
• ułatwia organizacje oprogramowania
• ułatwia rutynowe zadania administracyjne
• ułatwia przełączanie miedzy wieloma bazami danych
• Zarządza i administruje odpowiednim przyrostem bazy danych
• Wspiera procesy eliminowania fragmentacji wolnego miejsca
pliki kontrolne: *.ctl
pliki dziennika powtórzeń: *.log
pliki danych: *.dbf
ORACLE_BASE: określa katalog startowy struktury katalogowej Oracle dla narzędzi OFA
ORACLE_HOME: określa katalog zawierający oprogramowanie Oracle.
ORACLE_SID: wstępna nazwa instancji. jest to ciąg cyfr i liter, musi zaczynać się od litery. sugerowane
żeby identyfikator systemu miał maksymalnie 8 znaków
NSL_LANG: określa początkowe ustawienia National language suport (NLS)
Planowanie bazy danych:
• DBA powinien zaplanować: strukturę logiczna przechowywania bazy danych i jej realizacje
fizyczna, kompleksowy projekt bazy danych
WYKŁAD 2 - Administrowanie bazą danych Oracle pl/SQL
Czym jest pl/SQL
• stanowi proceduralne rozszerzenie języka SQL
• jest standardowym językiem dostępu do danych dla relacyjnych baz danych Oracle
• integruje konstrukcje proceduralne z SQL
• zapewnia struktury blokowe dzięki czemu zarządzanie kodem jest łatwiejsze
• zapewnia konstrukcje proceduralne m In:
o zmienne, stałe i typy
o struktury kontrolne: instrukcje warunkowe i pętle
o jednostki programowe wielokrotnego wykorzystania (raz napisane, wykonane wiele
razy)
Struktura bloku pl/SQL
blok pl/SQL składa się z 3 części:
• deklaratywnej (opcjonalna): sekcji deklaracji zaczyna się słowem kluczowym Declare a kończy
się, gdy zaczyna się sekcja wykonywalna: deklaracje wszystkich stałych, zmiennych, kursorów
oraz wyjątków zdefiniowanych przez użytkownika - opcjonalna
Wykłady z Administracji bazą danych Oracle 2010
4
• wykonywalnej (wymagana): sekcja wykonywalna zaczyna się słowem kluczowym BEGIN, a
kończy END(END jest zakończone średnikiem). wykonywalna sekcja pl/SQL może zawierać
dowolną liczbę bloków.
• wyjątków (opcjonalnie) sekcja wyjątków jest zagnieżdżona w sekcji wykonywalnej.
Rozpoczyna się od słowa kluczowego EXCEPTION
UWAGA: słowa kluczowe DECLARE, BEGIN i EXCEPTION nie są zakończone średnikiem. Słowo
kluczowe END oraz wszystkie instrukcje SQL i PL/SQL muszą być zakończone średnikiem.
Typy bloków:
1. Bloki anonimowe:
[declare] Begin –statements [exception] end;
• są to bloki bez nazwy
• nie są przechowywane w bazie danych
• są przekazywane do realizacji przez silnik pl/SQL w czasie wykonywania
• Z takich bloków składają się wyzwalacze w Oracle
• Chcąc uruchomić ponownie ten sam blok należy go przepisać
• Nie można wywoływać wcześniejszych bloków, ponieważ przestają istnieć po wykonaniu
2. procedure:
PROCEDURE name is Begin –statements [exception] end;
• są nazwanymi blokami pl/sql
• przechowywane są w bazie danych
• można wywołać je w dowolnym momencie (zależnie od potrzeb aplikacji)
• Mogą być zdefiniowane jako procedury lub funkcje, funkcja musi zwrócić wartość
zazwyczaj procedury stosuje się do wykonywania określonych działań zaś funkcje
obliczania i zwracania wartości
• Podprogramy można przechowywać na serwerze lub w ramach aplikacji
wykorzystując komponenty Oracle (formularze raporty) można zadeklarować
procedury i funkcje w ramach aplikacji (formularza lub raportu ) i połączyć je z innymi
procedurami funkcjami i wyzwalaczami
FUNKCJE:
FUNCTION name return datatype IS BEGIN
---statements
BEGIN
zmienne – zastosowania
• czasowe składowanie danych
• manipulowanie przechowywanymi wartościami
• ponowne odwołania
Identyfikatory/ zmienne:
• Identyfikatory są wykorzystywane do nazywania zmiennych
• konwencje nazewnictwa zmiennych:
o muszą zaczynać sięod litery
Wykłady z Administracji bazą danych Oracle 2010
5
o mogą zawierać litery i cyfry
o mogą zawierać znaki specjalne (np. znak $, znak _ i znak #)
o limit długości do 30 znaków
o nie mogą być słowami zastrzeżonymi
• Zmienne są
o Deklarowane I inicjowane w sekcji deklaratywnej
o Używane i przypisywane nowym wartościom w sekcji wykonywalnej
o Przekazywane jako parametry do podprogramów PL/SQL
o Wykorzystywane do przechowywania wyników podprogramów PL/SQL
Składnia:
identyfikator[CONSTANT] typ_danych [NOT NULL] [:= | DEFAULT wyrażenie];
Przykłady:
emp_hiredatre DATE
emp_daptno NUMBER(2) NOT NULL := 10;
location VARCHAR(13) := ‘Atlanta’;
c_ comm CONSTANT NUMBER := 1400;
/ - wykonywanie bloku
Typy zmiennych:
• skalarne – posiadają jedną wartość, zależna od typu danych
• złożone – zawierają elementy wewnętrzne, które mogą być typu skalarnego lub złożonego
np. rekord, tabela;
• referencyjne – przechowują wskaźniki do miejsc składowania
• Large object (LOB) – przechowują wartości, zwane lokalizatorami, które określają lokalizację
dużych obiektów, takich jak obrazy graficzne
• Zmienne inne niż PL/SQL (Non-PL/SQL; Bind variables) - uwzględniają zmienne języka
zdeklarowane w programach prekompilowanych, pola ekranów formularzy oraz zmienne
hosta iSQL*Plus
Deklarowanie zmiennych w PL/SQL
• zmienna bez przypisanej wartości początkowej zawiera domyślnie NULL. Dobrze jest
inicjować wszystkie zmienne.
• Dwa obiekty mogą mieć taką samą nazwę tylko wtedy gdy SA zdefiniowane w rożnych
blokach. Tam gdzie współistnieją można używać dla nich etykiet
• Należy unikać nazywania zmiennych tak samo, jak kolumn. Jeśli zmienna PL/SQL wystąpi w
wyrażeniu SQL i ma taką samą nazwę, jak kolumna, Oracle zakłada, że jest to
• Należy nakładać ograniczenie NOT NULL, gdy zmienna musi zawierać wartość, Nie można
przypisać wartości null do zmiennej zdefiniowanej jako NOT NULL
• Po NOT NULL musi następować klauzula inicjalizacyjna np.: kod_pin NUMBER (15) NOT NULL
:= ‘1234’
BINARY_FLOAT i BINARY_DOUBLE – nowe typy danych
Wykłady z Administracji bazą danych Oracle 2010
6
Zmienne z atrybutem %TYPE
• służy do zadeklarowania zmiennej zgodnie z:
o definicją kolumny bazy danych – najczęściej
o inna zadeklarowana zmienna
• poprzedzany jest
o tabelą bazy danych i kolumną
o nazwą zadeklarowanej zmiennej
• Zalety:
o Można uniknąć błędów spowodowanych niezgodnością typów danych i złą precyzją
o Nie trzeba zmieniać deklaracji zmiennej w przypadku zmiany definicji kolumn PL/SQL
określa typ danych i rozmiar zmiennej gdy blok jest kompilowany – gwarantuje
zgodność zmiennej z kolumną, która jest używana do jej wypełnienia.
• Ograniczenie not null dla kolumny bzy danych nie przenosi się na zmienne zadeklarowaną
poprzez %TYPE – nie można do nie j przypisać NULL
Przykłady:
Składnia: identifier table.column_name%TYPE’
emp_lname employees.last_name%TYPE
balance NUMBER(7,2);
min_balance balance%TYPE := 1000;
Deklarowanie zmiennych Boolean
• do zmiennej logicznej mogą być przypisane tylko wartości TRUE, FALSE oraz NULL
• w celu sprawdzenia wartości zmiennej wyrażenia warunkowego wykorzystują operatory
AND, OR
• Wynikiem jest zawsze TRUE FALSE lub NULL
• Do zwracania wartości logicznej mogą być użyte wyrażenia arytmetyczne znakowe i daty
Zmienne związane:
VARIABLE return_code NUMBER
VARIABLE return_msg VARCHAR2(30)
• tworzone są w środowisku
• nazywane również zmiennymi hosta
• Tworzone są ze słowem kluczowym VARIABLE
• Używane w blokach SQL i PL/SQL
• Można z nich korzystać nawet po wykonaniu bloku PL/SQL
• Odwołania do nich poprzez poprzedzający dwukropek
Podstawienie zmiennych:
• ma na celu pobranie danych wprowadzonych przez użytkownika w czasie uruchamiania
• odwołanie w blok PL/SQL poprzez poprzedzający ampersand
• Wartości tekstowe są podstawiane w bloku PL/SQL przed wykonaniem bloku – nie można
podstawiać w pętli – monit pojawi się jeden raz
Wykłady z Administracji bazą danych Oracle 2010
7
DEFINE
set verify off Defie lname= Urman declare Name varchar2(25); Begin selekt first_name into Name
from employees where last_name=’&lname’; end; /
• Polecenie DEFINE określa zmienna użytkownika i przypisuje mu wartość typu CHAR (nawet
gdy wprowadzona będzie liczba np. 50000, przypisane zostanie wartość składająca się ze
znaków 5,0,0,0,0
• Odniesienie do zmiennej poprzez poprzedzający ampersand
Funkcje SQL w PL/SQL
Dostępne w wyrażeniach proceduralnych:
• Funkcje liczbowe
• Funkcje znakowe
• Konwersja typów danych
• Daty
• Timestamp
NIEDOSTEPNE w wyrażeniach proceduralnych:
• DECODE
• Funkcje grupujące
• Znaków I liczb
• Znaków I dat
Przykłady
• długość ciągu znaków:
desc_size INTEGER(5);
Konwersja typów danych
Rodzaje konwersji:
• niejawna – PL/ SQL obsługuje dynamicznie konwersję danych różnych typów w jednym
wyrażeniu: może dotyczyć:
o znaków i liczb
o znaków i dat
• jawna; poprzez wbudowane funkcje konwertujące m.in.
TO_CHAR
TO_DATE
TO_NUMBER
TO_TIMESTAMP
Znaków I liczb
Znaków I dat
• Jawna poprzez wbudowane funkcje konwertujące m.in.
TO_CHAR
TO_DATE
TO_NUMBER
TO_TIMESTAMP
• Konwersja jawna:
Wykłady z Administracji bazą danych Oracle 2010
8
Date_of_joining DATE:= TO_DATE(‘February 02.2000’,’Month DD YYYY’);Błąd: date of joining
DATE := ‘Februry 02,2000’;
konwersja jawna: Date_of_joining DATE:= TO_DATE(‘February 02.2000’,’Month DD YYYY’);
zagnieżdżone bloki może zawierać:
• Sekcja wykonywalna (BEGIN…END)
• Sekcja wyjątków
Polecenia SQL w kodzie PL/SQL
• obsługa pobierania wiersza z bazy danych za pomocą polecenia SELECT
• obsługa zmian w wierszach bazy danych za pomocą poleceń DML
• słowo kluczowe END nie kończy transakcji; kontrola transakcji odbywa sięga pomocą poleceń
COMMIT, ROLLBACK lub polecenia SAVEPOIN; transakcja może obejmować wiele bloków
oraz jeden blok może obejmować wiele transakcji
• PL/SQL bezpośrednio nie obsługuje poleceń DDL oraz DCL. Polecenia TE stanowią dynamiczny
SQL są wbudowane jako ciągi znaków w trakcie wykonywania, mogą zawierać parametry w
postaci symboli zastępczych; do wykonywania poleceń DDL służy polecenie EXECUTE
IMMEDIATE
Uwagi:
• Klauzula INTO jest wymagana
• Zapytanie może zwrócić co najwyżej jeden wiersz. PL/SQL zarządza tymi błędami poprzez
standardowe wyjątki które można obsłużyć w sekcji wyjątków (NO_DATA_FOUND i
TOO_MANY_ROWS);
Wstawianie danych
Podczas wstawiania danych z bloku PL/SQL można:
• używać funkcji SQL, takich jak USER i SYSDATE
• Generować wartości klucza podstawowego za pomocą istniejących w bazie danych sekwencji
• Pobierać wartość z bloków PL/SQL
Kursory SQL
• kursor to wskaźnik do obszaru prywatnego pamięci przydzielonej przez serwer Oracle
• istnieje dwa rodzaje kursorów:
o niejawne(domniemane) tworzone w celu przetwarzania SQL i zarządzane
wewnętrznie przez serwer Oracle nie ma do nich dostępu.
o Jawne – deklarowane są jawnie przez programistę w części deklaracyjnej, pozwalają
pracować na wielu wierszach jednocześnie
Atrybuty kursorów niejawnych:
• atrybuty kursora SQL pozwalają ocenić co się stało podczas ostatniego użycia domyślnego
kursora
• przedrostek SQL zastępuje nazwę kursora
• Atrybut SQL%NOTFOUND może być użyty jako warunek wyjścia z pętli. Jest przydatny w
UPDATE i DELETE, gdy nie było modyfikacji wierszy, ponieważ nie są zawracane wyjątki
Wykłady z Administracji bazą danych Oracle 2010
9
SQL%FOUND – atrybut boolean ma wartość true jeśli ostatnie polecenie SQL zwróciło przynajmniej
jeden wiersz
SQL%NOTFOUND – atrybut boolean ma wartość TRUE jeśli ostatnie polecenie SQL nie zwróciło ani
jednego wiersza
SQLROWCOUNT – wartość całkowita reprezentująca liczby wierszy przetworzonych przez ostatnie
polecenie SQL
NULL:
Uwagi:
• proste porównanie z NULL zawsze daje NULL
• zastosowanie operatora logicznego NOT dla NULL daje NULL
WYKŁAD 3
Kontrolowanie kursorów jawnych
• deklaracja kursora następuje w części deklaracyjnej bloku PL/SQL poprzez określenie nazwy i
zawiązanego zapytania
• polecenie OPEN wykonuje zapytanie i wiąże wszystkie zmienne, do których się odwołuje.
Wiersze wskazane przez zapytanie są od tego momentu dostępne do pobrania
• Pobranie danych z kursora. Po każdym pobraniu należy sprawdzić kursor pod katem
istniejących wierszy. Jeżeli nie ma więcej wierszy do przetwarzania, należy zamknąć kursor.
• Polecenie CLOSE zwalnia aktywny zestaw wierszy. W tym momencie można ponownie
otworzyć kursor z nowym aktywnym zestawem Deklarowanie kursora
Składnia: Cursor kursor_name is selekt_statement;
• deklaracja kursora nie zawiera klauzuli INTO – pojawia sięw poleceniu FETCH
• wskazane jest stosowanie klauzuli ORDER BY w zapytaniu
Przykłady
DECLARE
CURSOR EMP_CURSOR IS
SELECT EMPLOYEE_ID, LAST_NAME FROM EMPLOYEES
WHERE DEPARTAMENT_ID = 30
DECLARE
LOCID DEPT_CURSOR IS
SELECT *FROM DEPARTAMENTS
WHERE LOCATION_ID = LOCID;
Polecenie OPEN
DECLARE
CURSOR EMP_CURSOR IS
SELECT EMPLOYEE_ID, LAST_NAME FROM EMPLOYEE
WHERE DEPARTAMENT_ID = 30
…
Wykłady z Administracji bazą danych Oracle 2010
10
BEGIN
OPEN EMP_CURSOR
Polecenie OPEN wykonuje następujące operacje:
• dynamicznie przydziela pamięc
• przetwarza polecenie SELECT
• wiąże zmienne wejściowe
• określa aktywny zestaw (zbiór wierszy, które spełniają kryteria wyszukiwania)
• ustawia wskaźnik na pierwszy wiersz aktywnego zestawu
UWAGA: JEZELI KWERENDA NIE ZWRZACA ZADNYCH WIERSZY PL/SQL NIE ZGLOSI WYJATKU, MOZNA
SPRAWDZIC STAN KURSORA PO POBRANIU UZYWAJAC ATRYBUTY <CURSOR_NAME>% ROWCOUNT
Zamykanie kursora
…
LOOP
FETCH emp_cursor INTO Emino, lnami;
EXIT WHEN emp_curso%NOTFOUND
DBMS_OUTPUT, PUT_LINE(empno || ‘ ‘ || lname)
END LOOP
CLOSE emp_cursor
END;
/
• kursor może być ponownie otwarty tylko wtedy, gdy zostal zamkniety. Przy probie pobrania
danych z kursora po jego zamknieciu, zgłoszony zostanie wyjatek INVALID_CURSOR
• UwagaL Możliwe jest wyjscie z bloku PL/SQL bez zamykanie kursorów, jednak wskazane jest
zwalnianie zasobów
• Istnieje limit liczby otwartych kursorów na sesję , który jest określony przez Parameter
OPEN_CURSORS, w pliku parametrow, domyślnie OPEN_CURSORS = 50
Pętle for uparte na kursorze
Pętle for uparte na kursorze = kursory for
• Można skorzystać z pętli for dla kursora, która przetwarza wiersze z kursora jawnego
• kursor jest otwierany, ładowany i zamykany automatycznie
• Pętla sama wygasa automatycznie na końcu iteracji, w której ładowany jest ostatni wiersz
• Rekord dla pętli jest deklarowany domyślnie
FOR rekord_name IN cursor_name
statements1
statements2
…
END LOOP
Atrybuty kursorów jawnych:
Atrybut Typ Opis
%Isopen Boolean zwraca true jeśli kursor jest
otwarty
Wykłady z Administracji bazą danych Oracle 2010
11
%notfound Boolean zwraca true jeśli ostatnie
ładowanie nie zwróciło wiersza
%found Boolean Zwraca true jeśli ładowanie
zwróciło wiersz
%rowcount number zwraca całkowitą liczbę wierszy
Kursory FOR na podstawie zapytań
• nie trzeba deklarować kursora. Zestaw wierszy określany jest dla pętli na podstawie
zapytania SELECT
• Uwaga: Nie można jawnie odnieść się do atrybutów kursora, gdyż nie ma nazwy
SET SERVER OUTPUT ON
BEGIN
FOR emp_record IN (SELECT employee_id, last name FROM employee where departament_id = 30)
LOOP
DBMS_OUTPUT.PUT_LINE (EMP_record.employee.id || ‘’)
END LOOP;
END;
/
Kursory z paramerami:
CURSOR kursor_name
[(parameter_name datatype, …}]
IS
Selekt STATEMENT;
OPEN kursor_name(parameter_value,///);
• Każdy parametr formalny w deklaracji kursora musi mieć odpowiadający mu parametr w
poleceniu OPEN. Typy danych dla parametrów są takie same jak dla zmiennych, podaje się je
bez rozmiarów
• Kursory z parametrami wykorzystywane są przede wszystkim w sytuacjach gdy do danego
kursora wielokrotnie sie odwołuje
Można przekazywać parametry do kursorów FOR:
declare
kursor emp_cursor(p_deptno NUMBER, p_job varchar2) is select.begin…
Klauzula FOR UPDATE
• Służy do blokowania wierszy z zapytania kursora
SELECT…FROM…FOR UPDATE [OF kolumn_reference][NOWAIT |WAIT n];
DECLARE
CURSOR EMP_CURSOR IS
SLECT EMPLOYEE_ID, LAST_NAME FROM EMPLOYEES
WHERE DEPARTAMENT_ID = 80 FOR UPDATE OF SALARY
Wykłady z Administracji bazą danych Oracle 2010
12
NOWAIT;
…
Klauzula WHERE CURRENT OF
• Klauzula WHERE CURRENT OF jest stosowana w połączeniu z klauzulą FOR UPDATE (blokada
wiersza) w celu odwołania się do bieżącego wiersza w kursorze jawnym. Dzięki temu nie
trzeba odwoływać się bezpośrednio do ID wiersza
WHERE CURRENT OF CORSOR ;
UPDATE EMPLOYEES
SET SALARY = …
WHERE CURRENT OF EMP_CURSOR;
TWORZENIE PROCEDUR SKŁADOWANYCH I FUNKCJI
Bloki anonimowe:
• bloki bez nazwy
• kompilowane za każdym razem
• nie przechowywane w bazie
• nie mogą być wywoływane przez inne aplikacje
• nie zwracają wartości
• bez parametrów
PODPROGRAMY:
• Bloke nazwane
• Kompilowane tylko raz
• Przechowywane w bazie
• Mogą być wywoływane przez inne aplikacje (poprzez nazwę)
• Funkcje musza zwracać wartość
• Mogą być wywoływane z parametrami
Wywoływanie procedur
• po poprawnym wykonaniu kodu, można wyświetlić nazwę procedury z tabeli user_objects:
selekt object_name, object_type FROM user_objects
• Źrodlo procedury przechowywane jest w tabeli user_seurce:
SELECT * FROM user_source WHERE Name = ‘Add dept’
• Wywoływanie procedury z bloku anonimowego
BEGIN
Add_dept;
End;
/
Select depart_id, depart_name from dept where dep_id=30
• Można wywołać procedurę poprzez CALL <procedure_name>.
• Można wykorzystać polecenie DESCRIBE w celu sprawdzenia typu zwracanego przez funkcję:
Wykłady z Administracji bazą danych Oracle 2010
13
DESCRIBE check_sal;
Typy złożone:
• ułatwiają dostęp i zarządzanie danymi
• rodzaje typów złożonych:
o rekordy PL/SQL – zawierają logicznie powiązane zmienne różnych typów; jedno
wystąpienie zmiennej
o kolekcje PL/SQL - traktują zbiór jako całość; poszczególne elementy kolekcji są tego
samego typu; analogia do tablic w innych językach programowania; istnieją trzy
rodzaje kolekcji
� Tabele INDEX BY oraz tabele asocjacyjne
� Tabele zagnieżdżone
� VARRAY
• Rekord to grupa powiązanych ze sobą danych przechowywanych w polach, każde ze swoją
własną nazwą i typem danych
• podobne do struktur w innych językach programowania
• Mogą mieć przypisane wartości początkowe oraz ograniczone NOT NULL. Można
przypisywać DEFAULT,
• Można zdefiniować zmienną typu RECORD lub samemu zdefiniować rekordy w sekcji
deklaracji
Składnia:
type type_name is rekord (field_declaration[, field_declaration]…);
identifier type_name;
field_declaration:
field_name {field_type | variable%type…..
Struktura rekordu
• Pola w rekordzie są dostępne poprzez nazwę rekordu: record_name.field_name
• Przykład odniesienia do pola Job_id z rekordu emp_record: emp_record.job_id
• Przypisanie: Emp_record.job_id = ‘ST_CLERK *’;
Atrybut %ROWTYPE
DECLARE identifier reference%ROWTYPE;
• atrybut ROWTYPE% wykorzystuje się do deklaracji rekordu, który może przechowywać cały
wiersz tabeli lub widoku. Pola rekordu pobierają nazwy i typy danych z kolumn tabeli lub
widoku
• Prefiks dla %ROWTYPE stanowi nazwa tabeli lub widoku
• Rekord może również przechowywać cały wiersz danych pobranych z kursora
DECLARE Emp_record Employees%rowtype…
Zalety:
• Nie trzeba znać liczby I typów danych kolumn bazy danych mogą zmieniać się w czasie
działania
Wykłady z Administracji bazą danych Oracle 2010
14
• Przydatny podczas pobierania wierszy za pomocą selekt *; brak tego atrybutu wymusza
deklarację zmiennej dla każdej z kolumn pobieranych przez Select
OBSŁUGA WYJĄTKÓW
Wyjątki pozwalają na określenie ostatecznych działań przed zakończeniem bloku
• Metody zgłaszania wyjątków
o pojawia się błąd Oracle’a i automatycznie zgłaszany jest wyjątek; błędy
przekształcane są na predefiniowane wyjątki
o Wyraźne zgłoszenie wyjątku poprzez polecenie raise, można obsłużyć wyjątki
użytkownika lub predefiniowane istnieją również błędy Oracle’a, które nie są
predefiniowane i mogą być przypisane do jawnie zadeklarowanych wyjątków
Typy wyjątków:
1. Predefined Oracle Server terror – dowolny z około 20 najczęściej pojawiających się błędów w
kodziePL/SQL – nie trzeba deklarować tych wyjątków, SA predefiniowane przez serwer i
zgłaszane niejawnie
2. NON-redefined Oracle Server terror – dowolny z pozostałych standardowych błędów Oracle
Server
3. USER DEFINED ERROR – sytuacja, którą projektant uzna za niepożądaną – deklarowane i
zgłaszane jawnie
Przechowywanie innych błędów Oracle Server
• wyjtki dla innych niż predefiniowane błędów Oracle’a tworzy się za pomocą funkcji PRAGMA
EXCEPTION_INIT
• można przechwycić błędy Oracle poprzez ich zadeklarowanie. Zadeklarowane wyjątki są
wywoływane niejawnie. W PL/SQL, PRAGMA EXCEPTION_INIT informuje, żeby nazwę wyjątku
skojarzyć z numerem błędu Oracla,
• UWAGA: PRAGMA (= pseudoinstrukcja) to słowo kluczowe, które oznacza dyrektywę
kompilatora, która nie jest przetwarzana podczas wykonywania bloku PL/SQL
• Zadeklarowanie nazwy wyjątku: nazwa_wyjątku EXCEPTION;
• Skojarzenie ze standardowym numerem błędu Oracle’a za pomocą funkcji PRAGMA
EXCEPTION_INIT: PRAGMA EXCEPITON_INIT (nazwa_wyjąku, error_number);
• Odniesienie się do wyjątku za pomocą odpowiedniej obsługi wyjątku
Funkcje do przechwytywania wyjątków:
• Wyjątek można zidentyfikować za pomocą dwóch funkcji:
• Funkcja:
o SQLCODE – zwraca wartość numeryczną błędu
o SQLERRM – zwraca łańcuch znaków zawierający komunikat skojarzony z numerem
bledu
• SQLCODE VALUE
o 0
o 1
o +100
o negative number
Wykłady z Administracji bazą danych Oracle 2010
15
• Nie można wykorzystywać SQLCODE i SQLERRM bezpośrednio w poleceniach SQL
• Procedura RAISE_APPLICATION_ERROR przekazuje kod błędu i komunikat o błędzie. Za
pomocą RAISE_APPLICATION_ERROR można zgłaszać błędy do aplikacji i unikać
nieobsługiwanych wyjątków
WYZWALACZE
Wyzwalacz (trigger) jest blokiem lub procedurą PL/SQL związaną z tabelą, widokiem, schematem lub
bazą danych. Wyzwalacz jest wykonywany niejawnie, za każdym razem, gdy zachodzi określone
zdarzenie.
Wyróżnia się 2 typy wyzwalaczy:
• wyzwalacze aplikacyjne: uruchamiane gdy pojawi się zdarzenie z określonej aplikacji –
związane z poleceniem DML wywoływanym spod aplikacji (przykład Oracle Forms Developer)
• Wyzwalacze bazodanowe – niezależnie od użytkownika i aplikacji; uruchamiane, gdy nastąpi
dowolne zdarzenie związane z danymi lub zdarzenie systemowe:
o Operacje DML na tabeli
o Operacje DML na widoku
o Polecenia DML, tj. CREATE i ALTER
o Zalogowanie użytkownika
o Zamknięcie bazy danych
• wyzwalacz w zależności od typu wywoływany jest jednokrotnie dla polecenia DML lub dla
każdego wiersza którego dotyczy
• nazwa wyzwalacza musi być unikatowa w stosunku do innych wyzwalaczy w tym samym
schemacie
Wyzwalacz z poziomu instrukcji:
• wykonuje się raz dla zdarzenia wyzwalającego
• jest typem domyślnym
• Wykonuje się nawet gdy nie dotyczy żadnego z wierszy
Wyzwalacz z poziomu wierszy:
• Wykonuje się raz dla każdego wiersza, którego dotyczy czynnik wyzwalający
• Nie jest wykonywalny, jeżeli zdarzenie wywołujące nie dotyczy żadnych wierszy
• Definiowany poprzez klauzulę FOR EACH ROW
Elementy składni:
• timing – wskazuje kiedy wywołać wyzwalacz w stosunku do zdarzenia wywołującego: before,
after, instead of
• event - wskazuje operację DML, która powoduje uruchomienie wyzwalacza INSERT, UPDATE
[of column], DELETE
• Object_name – wskazuje tablice lub widok związany z wyzwalaczem
Na poziomie wiersza można określić:
• REFERENCING – klauzula do określenia referencji dla starych i nowych wartości w bieżącym
wierszu (domyślne nazwy do OLD i NEW)
Wykłady z Administracji bazą danych Oracle 2010
16
• FOR EACH ROW – wskazuje ze jest to wyzwalacz na poziomie wiesza
• WHEN – klauzula określająca warunek w nawiasach, sprawdzany dla każdego wiersza w celu
ustalenia wykonania ciała wyzwalacza
• Trigger_body – działania wykonywane przez wyzwalacz, realizowane poprzez:
o Anonimowy blok (DECLARE lub BEGIN i END)
o Klauzulę CALL wywołującą procedurę (samodzielną lub pakietową)
INSTEAD OF najczęściej stosuje się dla widoków
BEFORE
AFTER jest często stosowany gdy polecenie wyzwalające ma być zakończone przed wykonaniem
czynności wyzwalacza
Kwalifikatory OLD i NEW
• dla INSERT – tylko mamy wartość New,
• dla UPDATE – mamy zarówno wartość old jak i new
• dla DELETE – mamy tylko wartość OLD
Tworzenie wyzwalacza INSTEAD OF
Zarządzanie wyzwalaczami:
• włączenie/wyłączenie wyzwalacza:
ALTER TRIGGER trigger_nam DISABLE | ENABLE
• włączenie/ wyłączenie wszystkich wyzwalaczy dla tabeli:
ALTER TABLE table…
• Rekompilacja wyzwalacza:
ALTER TRIGGER trigger_name COMPILE
• Usunięcie wyzwalacza:
DROP TRIGGER trigger_name;
Uwaga: usuniecie tabeli powoduje usuniecie wszystkich jej wyzwalaczy
WYKŁAD 4
Tabele INDEX BY oraz tabele asocjacyjne
• stanowią struktury z dwiema kolumnami
• mają niezależny rozmiar od klucza
• klucz tabeli nie jest sekwencyjny
Metody tabel INDEX BY
Składnia: table_name.method_name[(parameters)]
Metody:
• exists(n) – zwraca TRUE, gdy istnieje element n
• count – zwraca liczbę elementów tabeli
• first i last – zwraca pierwszy i ostatni (największy i najmniejszy) numer indeksu; gdy tabela
jest pusta, zwraca NULL
• PRIOR(n) - zwraca nr poprzedzający indeks n
• NEXT(n) - zwraca nr kolejny po indeksie n
Wykłady z Administracji bazą danych Oracle 2010
17
• DELETE – usuwa wszystkie elementy z tabeli, Delete(n) usuwa element o numerze n;
delete(m,n) usuwa elementy z zakresu od m do n
• Można odnieść się do pół rekordu dept_table poprzez:
table(index).field
• Przykład (location_id stanowi pole dept_table)
Dept_table(15).location_id := 1700
Tabele zagnieżdżone
• Funkcjonalność tabel zagnieżdżonych jest zbliżona do tabel INDEX BY
• Kluczem nie może być PLS_INTEGER. Klucz nie może być ujemny
• Do pierwszej kolumny odnosi się, jak do klucza, jednak nie jest to klucz – tabela zagnieżdżona
nie ma klucza
• Dowolne elementy można usunąć – pozostaną klucze niesekwencyjne
• Wiersze tabeli nie mają określonego porządku. Dopiero przy pobraniu wartości z tabeli
wierszom przyporządkowuje się kolejne indeksy od 1
• Tabele sekwencyjne mogą być przechowywane w bazie danych (w przeciwieństwie do tabel
INDEX BY)
Tabele zagnieżdżone: najpierw tworzymy typ obiektowy i definiujemy jak on wygląda. Następnie
definiujemy typ tabelaryczny i deklarujemy kolumny typu zdefiniowanej kolekcji.
Tabele zagnieżdżone przechowywane są poza wierszem w tabelach przechowywania.
Varray
• Tablica o zmiennej wielkości (VARRAY) jest podobna do tabeli PL/SQL.
• VARRAY jest ograniczona pod względem wielkości. Maksymalny rozmiar VARRAY to 2GB (jak
w tabelach zagnieżdżonych)
• Różnica między tabelami zagnieżdżonymi i VARRAY dotyczy fizycznego modelu
przechowywania. Elementy VARRAY są przechowywane sąsiadująco w pamięci a nie w bazie
danych. Można tworzyć typ VARRAY w bazie danych za pomocą języka SQL.
• Przykład:
Type location_type is Varray of locations.city%type Office location_type;
Porównanie kolekcji: Tabele zagnieżdżone czy asocjacyjne
• tabele asocjacyjne stosuje się, gdy:
o trzeba zgromadzić dane nieznanych rozmiarów
o potrzebne są elastyczne indeksy (ujemne, nie-sekwencyjne lub oparte na ciągach
znaków) – dla indeksów ujemnych TYLKO tabele asocjacyjne,
o Trzeba przekazywać kolekcję z serwera bazodanowego I na serwer.
• Tabele zagnieżdżone stosuje się gdy:
o Wymagana jest trwałość
o Kolekcja ma być przekazywana jako parametr
Porównanie kolekcji: Tabele zagnieżdżone czy VARRAYS
• Varrays stosuje się, gdy:
o liczba elementów jest z góry znana,
o stosuje się sekwenycjny dostęp elementów
Wykłady z Administracji bazą danych Oracle 2010
18
o wymagają mniejszego dostępu do dysku (są przechowywane w pamięci) – bardziej
wydajne
o nie pozwalają na aktualizację części elementów
• Tabele zagnieżdżone stosuje się gdy:
o Wartości indeksów nie są kolejne
o Nie ma wstępnego górnego ograniczenia wartości indeksów
o Zachodzi konieczność usunięcia lub aktualizacji niektórych elementów, ale nie
wszystkich jednocześnie.
o Istnieje konieczność trwałego przechowywania dużej ilości danych dla każdego
wiersza - łatwiejsze w obsłudze
DYNAMICZNY SQL
• Polecenia SQL dostępne w PL/SQL ograniczają się do SELECT, INSERT, UPDATE, DELETE,
COMMIT oraz ROLLBACK. Przetwarzane są w czasie kompilacji – muszą mieć stałą strukturę.
• Dynamiczny SQL wykorzystywany jest:
o do tworzenia poleceń SQL, których struktura może ulec zmianie w czasie wykonania
o w celu zrealizowania poleceń DLL
• Dynamiczny SQL:
o Jest tworzony i przechowywany jako ciąg znaków w aplikacji
o Ma postać polecenia SQL wywoływanego z różnymi kolumnami lub różnymi
warunkami
• Wykonanie dynamicznego SQL odbywa się poprzez EXECUTEIMMEDIATE lub pakiet
DBMS_SQL
Polecenie EXECUTE IMMEDIATE
• Polecenie EXECUTE IMMEDIATE wykorzystywane jest przy dynamicznym SQL lub
anonimowych blokach PL/SQL:
EXECUTE IMMEDIATE dynamic_string [INTO {Defie_variable [, Defie_variable] … | rekord }]
[USING [IN|OUT|IN OUT] bind_argument
[, [IN|OUT|IN OUT] bind_argument
• INTO jest używane do pojedynczych wierszy zapytania, określa zmienne lub rekordy, do
których mają być pobierane wartości kolumn
• USING jest używane do przechowywania związanych argumentów.
Domyślny tryb to IN
Wykorzystanie pakietu DBMS_SQL
• Pakiet DBMS_SQL służy do zapisu dynamicznego SQL w procedurach przechowywanych I
analizowania poleceń DDL
• Niektóre procedury I funkcje pakietu
o OPEN_CURSOR
o PARSE
o BIND_VARIABLE
o EXECUTE
o FETCH_ROWS
o CLOSE_CURSOR
Wykłady z Administracji bazą danych Oracle 2010
19
Dynamiczny SQL vs DBMS_SQL
Zalety dynamicznego SQL:
• jest łatwiejszy w użyciu niż DBMS_SQL: zintegrowany z SQL, bardziej zwarty i czytelny,
wymaga mniej kodu niż DBMS_SQL
• Poprawia wydajność, ponieważ interpreter PL/SQL zapewnia dla niego wsparcie
• Obsługuje wszystkie typy statyczne SQL w PL/SQL w tym typy zdefiniowane przez
użytkownika
• Pozwala pobrać wiersze bezpośrednio do rekordu PL/SQL
PAKIETY
• Pakiety L/SQL umożliwiają łączenie w ramach jednego kontenera pokrewnych dla PL/SQL
typów, zmiennych, struktur, wyjątków i podprogramów.
Przykład: pakiet Human Resources może zawierać procedury zatrudniania i zwalniania,
prowizje i premie funkcyjne
• Pakiet składa się zazwyczaj z dwóch części przechowywanych w bazie danych oddzielnie:
o specyfikacji
o ciała (opcjonalnie)
• Sam pakiet nie może być wywoływany, parametryzowany lub zagnieżdżany
• Po napisaniu i kompilacji, zawartość pakietu może być współdzielona przez wiele aplikacji
• Cały pakiet jest ładowany do pamięci przy pierwszym wywołaniu jego elementu, kolejne
dostępy nie wymagają operacji I/O
Specyfikacja pakietu
Create [OR REPLACE] PACKAGE packane_name IS|AS public type and variable declarations
subprogram specifications END [packane_name];
• Opcja OR REPLACE usuwa i ponownie tworzy specyfikację pakietu.
• Zmienne zadeklarowane w specyfikacji pakietu, o ile nie są zainicjalizowane, są domyślnie
ustawiane na NULL.
• Wszystkie konstrukcje zadeklarowane w specyfikacji pakietu są widoczne dla użytkowników,
którzy mają nadane uprawnienia
• Uwaga: specyfikacja pakietu powinna zawierać procedury i nagłówki funkcji zakończone
średnikiem bez słowa kluczowego IS (lub AS). Definicja procedury lub funkcji która jest
zadeklarowana w specyfikacji pakietu znajduje się w ciele pakietu.
Przykład specyfikacji pakietu – comm_pkg
CREATE OR REPLACE PACKAGE comm_pkg IS std_comm NUMBER := 0.10; --initalized to 0.10
PROCEDURE reset_comm(New_comm NUMBER); END comm_pkg;
• STD_COMM jest zmienną globalną zainicjowaną wartością 0..10
• RESET_COMM jest publiczną procedurą wykorzystywaną do modyfikacji standardowej
prowizji w oparciu o określone zasady handlowe, jest realizowana w ciele pakietu.
Ciało pakietu
CREATE [OR REPLACE] PACKAGE BODY packane_name IS|AS private type and variable declarations
subprogram Dobies [BEGIN initalization statements] END [packane_name];
• Opcja OR REPLACE usuwa I ponownie tworzy zawartość pakietu
Wykłady z Administracji bazą danych Oracle 2010
20
• Należy pamiętać o właściwej kolejności podprogramów – zmienna lub nadprogram musi być
zadeklarowana przed użyciem
• Zakończenie realizacji wszystkich procedur lub funkcji zadeklarowanych w specyfikacji
pakietu w ciele pakietu
• Podanie nazwy pakietu po słowie kluczowym END jest opcjonalne
• [BEGIN inicjalization statements] jest blokiem opcjonalnym dla kodu inicjalizacyjnego który
wykonywany jest podczas pierwszego odtworzenia
Pakiety bez ciała: Zmienne i stałe zadeklarowane w samodzielnych podprogramach istnieją tylko w
czasie wykonywania podprogramu. Specyfikacji pakietu zawiera globalne zmienne i stałe, które
istnieją w czasie sesji użytkownika. W takim przypadku tworzy się specyfikację pakietu bez ciała.
Przeglądanie pakietów w słowniku danych
• kodem źródłowym pakietów można zarządzać oraz przeglądać go poprzez tabele słownikowe
USER_SOURCE oraz ALL_SOURCE.
• Wyświetlanie specyfikacji pakietu: SELECT text FROM user_source WHERE Name =
‘COMM_PKG’ AND type = PACKAGE
Korzyści z wykorzystania pakietów
• modułowość I łatwość obsługi: konstrukcje powiązane ze sobą logicznie stanowią integralną
całość mającą swoją nazwę
• łatwiejsze projektowanie aplikacji: kodowanie i kompilowanie specyfikacji oraz ciała odbywa
się oddzielnie
• ukrywanie pewnych informacji: tylko deklaracje w specyfikacji pakietu są widoczne i
dostępne dla aplikacji. Konstrukcje prywatne, umieszczone w ciele pakietu, są ukryte i
niedostępne. Również kod jest ukryty w ciele pakietu.
• Trwałość zmiennych i kursorów na czas sesji użytkownika
• Większa wydajność cały pakiet jest ładowany do pamięci podczas pierwszego wywołania.
Późniejsze wywołania nie wymagają dostępu do dysku
• Pakiety zapobiegają kaskadowym wywołaniom i kolejnym komplikacjom – uproszczona
hierarcha zależności
• Przeciążanie procedur i funkcji – można utworzyć wiele podprogramów o tej samej nazwie w
tym samym pakiecie, każdy z inną liczbą parametrów lub typem danych.
Przeciążanie w pakiecie STANDARD
• pakiet o nazwie STANDARD definiuje środowisko PL/SQL i funkcje wbudowane.
• Większość wbudowanych funkcji jest przeciążona
• Przykład: funkcja TO_CHAR
FUNCTION to_char (p1 date) return varchar2;
FUNCTION to_char( P1 DATE, p2 VARCHAR2) returna varchar2;
FUNCTION to_char (P1 number, p2 VARCHAR2) returna varchar2;
• Podprogram PL/SQL o takiej samej nazwie jak wbudowany program zastępuje standardową
deklarację w kontekście lokalnym, chyba że wbudowany podprogram zostanie wywołany z
nazwą pakietu
Wykłady z Administracji bazą danych Oracle 2010
21
Blok na końcu ciała pakietu wykonywany jest tylko raz i jest używany do inicjacji publicznych i
prywatnych zmiennych pakietu
Funkcje pakietowe w SQL
• Funkcje pakietowe mogą być wykorzystywane w SL
• Ograniczenia dla funkcji wywoływanych z zapytań lub poleceń DML:
o nie mogą kończyć bieżącej transakcji
o nie mogą tworzyć lub wycofywać do SAVEPOINT
o nie mogą zmieniać systemu lub sesji
o nie mogą wykonywać poleceń DML lub modyfikować bazę danych
o Nie mogą odczytywać lub modyfikować tabeli która jest zmieniana przez to
polecenie DML
• Uwaga: funkcje wywołujące podprogramy, które lamią wymienione ograniczenia również nie
są dozwolone
ZARZĄDZANIE ZALEŻNOŚCIAMI
Zależności
• Jeśli zmienia się definicja obiektu odniesienia, obiekty zależne mogą (lub nie) nadal działać
prawidłowo. Przykład: jeśli zmieni się definicja tabeli, procedura może kontynuować pracę
bez błędów lub pojawią się błędy.
• Serwer Oracle automatycznie rejestruje zależności między obiektami – wszystkie obiekty
mają status (VALID lub INVALID), który jest zapisany w słowniku danych.
VALID – obiekt schematu został skompilowany i w przypadku odniesienia może być
natychmiast użyty.
INVALID – obiekt przed wykorzystaniem musi zostać skompilowany
Wykorzystanie USER_DEPENDENCIES – kolejny przykład omawianej perspektywy
Zależności zdalne – przy pierwszym odwołaniu obiekty zależne nie są automatycznie rekompilowane
Zależności zdalne – sposoby kontroli
• Kontrola timestamp znacznika czasu
• kontrola signature sygnatury
REMOTE_DEPENDENCIES_MODE
Sposoby ustawienia trybu dla zależności zdalnych:
• jako parametr w pliku init.ora: REMOTE_DEPENDENCIES_MODE = value
• na poziomie systemu: ALTER SYSTEM SET REMOTE_DEPENDENCIES_MODE = VALUE
• Na poziomie sesji: ALTER SESSION SET REMOTE_DEPENDENCIES_MODE = VALUE
• VALUE := [TIMESTAMP] | [SIGNATURE]
Rekompilacja JEDNOSTKI PROGRAMOWJE pl/SQL
Wykłady z Administracji bazą danych Oracle 2010
22
• jeśli rekompilacja zakończy się powodzeniem, obiekt otrzymuje status VALID. JEŚLI nie Oracle
zwraca błąd i obiekt pozostaje INWALID. Podczas rekompilacji obiektu PL/sql, Oracle
najpierw rekompiluje wszystkie obiekty INVALID, od których jest on zależny
• Rekompilacja:
o Może być obsługiwana automatycznie
o Może być obsługiwana jawnie poprzez polecenie alter
ALTER PROCEDURE [SCHEMA] procedure_name COMPILE;
ALTER FUNCTION [SCHEMA] function_name COMPILE;
ALTER PACKAGE [SCHEMA] package_name COMPILE [package | specification \ body];
ALTER TRIGGER [SCHEMA] trigger_name [COMPILE[DEBUG]]
Rekompilacja – uwagi
Rekompilacja zależnych procedur I funkcji nie powiedzie sie gdy:
• obiekt odniesienia zostanie usunięty lub zmieni nazwę
• zmieni się typ danych kolumny odniesienia
• kolumna odniesienia zostanie usunięta
• widok, do którego jest odwołanie zostanie zastąpiony przez widok z innymi kolumnami
• zostanie zmodyfikowana lista parametrów dla procedury dla której jest odwołanie
REKOMPILACJA ZALEŻNYCH PROC I FUNKCJI POWIEDZIE SIĘ GDY:
• Tabela odniesienia ma nowe kolumny
• Typ danych kolumn się nie zmienił
• Prywatna tabela została usunięta, ale istnieje publiczna o takiej samej nazwie i strukturze
• Ciało procedury PL/SQL zostało zmienione i ponownie pomyślnie skompilowane
ROZWIĄZANIA POZWALAJĄCE NA ZMINIMALIZOWANIE PROBLEMÓW PRZY REKOMPILACJI:
• deklarowanie rekordów z atrybutem %ROWTYPE
• Deklarowanie zmiennych z atrybutem %TYPE
• Zapytania przez select *
• Uwzględnienie listy kolumn w poleceniach insert
WYKŁAD 5 - Struktura bazy danych i zarządzanie
Struktury pamięci systemu ORacle:
• System Blobal Area: wspólny dla wszystkich serwerów i działających w tle procesów
• Program Global Area (PGA globalny obszar programów): prywatny dla każdego serwera i
procesu w tle. Dla każdego procesu jest jeden PGA
• bufor podręczny bazy: przechowuje bloki ostatnio odczytanych lub zmodyfikowanych danych
z dysku
• bufor dziennika powtórzeń: przechowuje informacje dotyczące ostatnich zmian w blokach
danych plików danych dopóki nie zostaną fizycznie zapisane do pliku logów
• obszar współdzielonych: zawiera struktury które mogą być współdzielone przez wielu
użytkowników: pamięć podręczna, biblioteki i pamięć podręczna słownika danych
Wykłady z Administracji bazą danych Oracle 2010
23
• Obszar dużych struktur pamięciowych to opcjonalny obszar wykorzystywany przez niektóre
procesy (tworzenia kopii zapasowej, procesy odzyskiwania danych i procesy i/o serwera
• Obszar Javy używany przez Oracle Java Virtual Machine (JVM) do obsługi wszystkich kodów
języka Java oraz danych należących do sesji użytkownika
• Obszar strumieni jest używany przez Oracle Streams, który zarządza dzieleniem danych i
zdarzeń w środowisku rozproszonym
Struktury dla procesu:
• proces użytkownika rozpoczyna się w momencie gdy użytkownik bazy danych zażąda
podłączenia do serwera Oracle
• Proces serwera łączy się z instancją Oracle, jest uruchamiany gdy użytkownik ustanawia
sesję.
• Procesy w tle uruchamiane są, gdy uruchomiona zostaje instancja Oracla
Zarządzanie instancją Oracla
• Monitor systemu (SMON) wykonuje odzyskiwanie, gdy instancja jest uruchamiana po awarii.
Przywraca stan instancji poprzez wykonanie wpisów z plików dziennika powtórzeń w plikach
danych
• Monitor procesów (PMON) wykonuje oczyszczanie gdy proces użytkownika nie powiedzie się.
Czyści bufor pamięci podręcznej bazy danych ora wszystkie zasoby, z których korzystało
połączenie użytkownika.
• Database Writer (DBWn) zapisuje zmodyfikowane bloki z bufora podręcznego bazy danych
do plików danych na dysku.
• Proces punktów kontrolnych (CKPT) pomaga zmniejszyć ilość czasu potrzebną do
przywrócenia instancji. Aktualizuje wszystkie pliki danych i pliki kontrolne bazy danych w celu
wskazania najbardziej aktualnego punktu kontrolnego
• proces zapisujący do dziennika (LGWR), który zapisuje wpisy dziennika powtórzeń na dysku
• proces archiwizujący (ARCn) kopiuje pliki dziennika powtórzeń do archiwum, gdy nastąpi
przełączenie dzienników (dziennik powtórzeń zapełni się)
Proces serwera/Bufor podręczny bazy
• podczas przetwarzania zapytania, proces serwera Oracla przeszukuje bufor podręczny bazy w
poszukiwaniu potrzebnych bloków. Jeśli go tam nie znajdzie odczytuje ten blok z pliku
danych, a jego kopie umieszcza w buforze pamięci podręcznej bazy. Kolejne zapytania nie
wymagają już fizycznych odczytów i odwołują się tylko do pamięci.
• czyszczenie bufora odbywa się zgodnie z algorytmem LRU (east recently used).
Pliki sterujące, pliki danych i liki dziennika powtórzeń – stanowią bazę danych
Struktura fizyczna bazy danych
• pliki sterujące zawierają meta dane – informacje o fizycznej strukturze bazy danych
• musi istnieć przynajmniej jeden plik sterujący dla każdej bazy danych, niezbędny – warto go
zwielokrotnić
• pliki danych zawierają dane użytkowników i aplikacji
• pliki dziennika powtórzeń pozwalają na odzyskanie instancji bazy danych
Wykłady z Administracji bazą danych Oracle 2010
24
• wpisy z tych plików pozwalają na odzyskanie bazy danych, o ile nie zostaną uszkodzone pliki
danych
• Pliki parametrów inicjalizacyjnych służą do określenia parametrów konfiguracyjnych
Instalację bazy danych w momencie jej startu.
• Pliki kopii zapasowych wykorzystywane są do odzyskiwania bazy danych.
• zapełnione pliki dziennika powtórzeń przenoszone w trybie archivelog do archiwum
• pliki haseł służą uwierzytelnianiu administratorów chcących zdalnie podłączyć się do bazy
danych
• każdy proces serwera i proces tła w przypadku wystąpienia bledu może zapisywać
komunikaty o bledzie do związanego z procesem pliku śladu
• Niektóre z zapisanych w ten sposób informacji może wykorzystać administrator bazy danych,
inne przeznaczone są dla Oracle Support Servies
• Pliki alertu są specjalnymi plikami śladu zawierającymi chronologiczny dziennik komunikatów
i błędów
• Zaleca się systematyczną kontrolę wpisów w plikach alertu
Uruchamianie i zamykanie bazy danych
• po kliknięciu przycisku uruchamiania lub zamykania systemu pojawia się prośba o
potwierdzenie (zarówno podczas logowania do hosta jak i do bazy danych)
• Wybierając przycisk Adanced Options można zmienić opcję trybu uruchamiania lub
wyłączania
• Można również zobaczyć kod SQL wygenerowanych do uruchamiania lub zamykania (SHOW
SQL)
Tryb nomount
• instancja zwykle jest uruchamiana w trybie nomount podczas:
o tworzenia bazy danych
o ponownego tworzenia plików kontrolnych
o w niektórych scenariuszach tworzenia kopii zapasowych i odzyskiwania
Uruchamianie instancji obejmuje następujące zadania:
• przeszukiwanie <Oracle_home>/database w celu znalezienia pliku o danej nazwie w
następującej kolejności:
o spfile<SID>.ora
o spfile.ora
o init<SID>.ora
Określanie parametru pfile przy STARTUP zastępuje domyślne przeszukiwanie
• Przydzielanie SGA
• Uruchamianie procesów tła
• Otarcie pliku alert<sid>.log i plików śladu
Tryb Mount
• do wykonywania określonych czynności konserwacyjnych należy uruchomić instancje i
zmontować bazę danych ale nie otwierać jej:
Wykłady z Administracji bazą danych Oracle 2010
25
o zmiana nazw plików danych (pliki danych dla przestrzeni danych offline mogą być
zmieniane gdy baza danych jest otwarta)
o Włączanie i wyłączanie opcji archiwizowania online’owych plików dziennika
powtórzeń
o Wykonanie pełnego odzyskiwania bazy danych
• Montowanie bazy danych obejmuje następujące zadania
o skojarzenie bazy danych z wcześniej uruchomiona instancją
o zlokalizowanie plików kontrolnych określonych w pliku parametrów
o Odczyt plików kontrolnych celu uzyskania nazw i statusów plików danych i
online’owych plików dziennika powtórzeń (redo log files). Uwaga: w Tym momencie
nie ma sprawdzenia istnienia plików danych i plików dziennika powtórzeń
Tryb OPEN
• Zwykłej eksploatacji bazy danych odpowiada uruchomienie instancji oraz zmontowanie i
otwarcie bazy danych. W tym trybie każdy uprawniony użytkownik może podłączyć się do
bazy danych i wykonać typowe operacje dostępu.
• Otwarcie bazy danych obejmuje:
o otwarcie online’owych plików danych
o otwarcie online’owych plików dziennika powtórzeń
• Serwer Oracle zwróci błąd jeżeli brakuje jednego z plików danych lub online’owych plików
dziennika powtórzeń
• Podczas ostatniego etapu serwer Oracle sprawdza, czy wszystkie pliki danych i pliki dziennika
powtórzeń mogą zostać otwarte oraz sprawdza spójność bazy danych. Jeśli to konieczne,
proces monitora systemu (SMON) zainicjuje odzyskiwanie instancji.
• Można uruchomić instancję bazy danych w trybie ograniczonym, aby była dostępna tylko dla
użytkowników z uprawnieniami administracyjnymi. Aby uruchomić instancję bazy danych
tylko w trybie ograniczonym, należy wybrać opcję Restrict Access to database na zakładce
Advanced Startup Options
Zamykanie instancji bazy danych
Tryby zamknięcia:
• pozwala na nowe podłączenia
• czeka Az do zakończenia bieżącej sesji
• czeka Az do zakończenia bieżącej transakcji
Tryby
zamknięcia
ABORT IMMEDIATE TRANSACTIONAL NORMAL
pozwala na
nowe
podłączenia
NIE NIE NIE NIE
czeka Az do
zakończenia
bieżącej sesji
NIE NIE NIE TAK
Wykłady z Administracji bazą danych Oracle 2010
26
czeka aż do
zakończenia
bieżącej
transakcji
NIE NIE TAK TAK
wymusza punkt
kontrolny i
zamyka pliki
NIE TAK TAK TAK
Tryb normal jest domyślnym trybem zamykania instancji:
• nie ma możliwości wykonywania nowych połączeń
• serwer Oracle czeka na rozłączenie wszystkich użytkowników przed dokonaniem zamknięcia
• baza danych i bufory powtórzeń SA zapisywane na dysku
• procesy tła są zakończone a SGA jest usuwana z pamięci
• serwer Oracle zamyka się i odłącza bazę danych przed zamknięciem instancji
Tryb transactional chroni przez utratą danych:
• żaden klient nie może rozpocząć nowej transakcji na tej instancji
• klient jest odłączany, gdy kończy transakcje która jest w toku
• Gdy wszystkie transakcje zostały zakończone, natychmiast następuje wyłączenie.
Tryb Immediate zamyka w następujących warunkach:
• Aktualne polecenia SQL przetwarzane przez bazę danych Oracle nie są zakończone.
• Serwer nie czeka na rozłączenie użytkowników, który są aktualnie podłączeni do bazy danych
• Serwer wycofuje aktywne transakcje i rozłącza wszystkich podłączonych użytkowników
• Serwer zamyka się i odłącza bazę danych przed zamknięciem instancji
• Następne uruchomienie nie wymaga odzyskiwania instancji
Jeśli tryb NORMAL i IMMEDIATE nie zadziałają można bazę zamknąć w trybie ABORT przy
następujących warunkach:
• aktualne polecenia SQL przetwarzane przez serwer są natychmiast kończone
• serwer Oracle nie czeka na rozłączenie użytkowników aktualnie podłączonych do bazy
danych
• baza danych i bufory powtórzeń nie SA zapisywane na dysku
• Niezatwierdzone transakcje nie są wycofywane
• Instancja jest wyłączana bez zamykania plików
• Baza danych nie jest ani zamykana ani odmontowana
• Następne uruchomienie wymaga odzyskiwania instancji, które odbywa się automatycznie
Uwaga: nie zaleca się wykonywania kopii zapasowej dla bazy danych, która jest niespójna.
Tryby zamknięcia:
• Tryby zamykania stopniowo uwzględniają bieżące czynności:
o ABORT wykonuje najmniejsza ilość pracy przed zamknięciem. Ponieważ wymaga
odzyskania przez uruchomieniem, należy go używać tego tylko wtedy gdy jest to
konieczne. Jest zazwyczaj używany w sytuacjach gdy żaden z pozostałych trybów nie
Wykłady z Administracji bazą danych Oracle 2010
27
zadziałał gdy pojawiają się problemy podczas uruchamiania instancji lub gdy trzeba ja
zamknąć natychmiast z powodu zagrożenia np. zawiadomienie o awarii zasilania w
ciągu kilku sekund
o IMMEDIATE jest najczęściej używaną opcją. Niezakończone transakcje są
wycofywane
o TRANSACTIONAL pozwala na zakończenie transakcji
o NORMAL czeka na rozłączenie sesji
• Rozważając czas potrzebny do zamknięcia ABORT jest trybem najszybszym, NORMAL jest
najwolniejszy
SPÓJNA BAZA DANYCH
Przy zamykaniu:
• Niezatwierdzone zmiany są wycofywane w celu natychmiastowego zamknięcia
• Bufor pamięci podręcznej jest zapisywany do plików danych
• Zasoby są zwalniane
Przy uruchamianiu:
o nie ma odzyskiwania instancji
NIESPÓJNA BAZA DANYCH
Przy zamykaniu:
o Zmodyfikowane bufory nie zapisywane do plików danych
o Niezatwierdzone transakcje nie są wycofywane
Przy uruchamianiu:
o on linowe pliki dziennika powtórzeń wykorzystywane SA do ponownego uwzględnienia zmian
o segmenty wycofania wykorzystywane SA do wycofania niezatwierdzonych zmian
o zasoby SA zwalniane
Przy zamykaniu lub otwieraniu bazy danych, należy zalogować się jako SYSDBA lub SYSOPER.
Inicjalizacja plików z parametrami:
• Podczas startu instancji odczytywany jest plik parametrów inicjalizacyjnych. Wyróżnia się 2
typy plików z parametrami:
o plik parametrów serwera – preferowany typ plików parametrów inicjalizacyjnych.
Domyślna nazwa pliku, która jest automatycznie wyszukiwania na starcie jest
spfile<SID>.ora
o Tekstowy plik parametrów inicjalizacyjnych - ten typ pliku parametrów
inicjalizacyjnych może być odczytany przez serwer bazy danych ale nie przez niego
zapisywany. Domyślną nazwą pliku która jest automatycznie wyszukiwana przy
starcie, jeżeli nie został odnaleziony SPFILE jest init<SID>.ora
Uproszczona inicjalizacja parametrów:
• W większości przypadków aby uzyskać rozsądną wydajność bazy danych, konieczne jest
ustawienie i dostrojenie tylko 32 podstawowych parametrów
• zmiana zaawansowanych parametrów może być potrzebna do osiągnięcia optymalnej
wydajności tylko w rzadkich sytuacjach
Wykłady z Administracji bazą danych Oracle 2010
28
• Parametr podstawowy to taki, który prawdopodobnie będzie ustawiany w celu utrzymania
dobrych wyników pracy bazy danych. Wszystkie inne parametry są uznawane za
zaawansowane.
Inicjalizacja parametrów: CONTROL_FILES, DB_BLOCK_SIZE, DB_CACHE_SIZE, DB_FILES, PROCESSES,
SHARED_POOL_SIZE
Przeglądanie dziennika alertów
• plik alert_<sid>.log znajduje się w folderze określonym przez parametr inicjalizacyjny
bacground_dump_dest. Stanowi chronologiczny dziennik komunikatów i błędów, w tym:
o niestandardowe parametry inicjalizacji wykorzystywane przy starcie
o wewnętrzne bledy (ORA-600), błędy uszkodzenia bloku (ORA-1578) oraz bledy
zakleszczenia(ORA-60)
o czynności administracyjne takie jak: wyrażenia SQL CREATE, ALTER, DROP DATABASE
/ TABLESPACE oraz polecenia EM i SQL*plus STARTUP, SHUTDOWN,ARCHIVE LOG i
RECOVER
o Błędy podczas automatycznego odświeżania zmaterializowanych widoków
o EM monitoruje wpisy do pliku i powiadamia użytkowników o błędach krytycznych.
Można go również przeglądać, aby zobaczyć błędach nie będących krytycznymi i
komunikaty informacyjne. Plik może wzrosnąć do rozmiaru, którego nie można
odczytać. Wskazane jest tworzenie kopii zapasowych plików i usuwanie bieżącego
pliku. Podczas zapisu do pliku, baza ponownie utworzy nowy
Widoki (perspektywy) dynamiczne
• bazy danych Oracle przechowuje również bardziej dynamiczny zestaw danych dotyczących
funkcjonowania instancji bazy danych. Widoki te SA oparte na wirtualnych tabelach które są
zbudowane ze struktur pamięci wewnątrz serwera bazy danych. Oznacza to ze nie są one
tradycyjnymi tabelami , które znajdują się w bazie danych. Dlatego wyniki niektórych z nich
można przejrzeć przed zmontowaniem lub otwarciem bazy danych.
• Nazwy widoków zaczynają się od V$
Przykłady
• jakie sesje zalogowały się z komputera EDRSR9P1 w ciągu ostatniego dnia?
SQL>SELECT * from v$session where machine=’ EDRSR9P1’ and logon_time>SYSDATE – 1;
• jakie identyfikatory maja sesji które obecnie blokują innego użytkownika I jak długo trwa
blokada?
SQL>SELECT sid, ctime from v$lock where block > 0;
• Właścicielem widoków jest użytkownik SYS
• Różne widoki są dostępne w różnych sytuacjach
o Została uruchomiona instancja
o Baza danych jest zamontowana
o Baza danych jest otwarta
• Można przeszukać V$FIXED_TABLE aby zobaczyć wszystkie nazwy widoków.
• Widoki te są często określane jako „V-dollar views”
• Spójność odczytu dla widoków nie jest gwarantowana, ponieważ dane są dynamiczne.
Wykłady z Administracji bazą danych Oracle 2010
29
Przestrzenie tabel i pliki danych
• Oracle przechowuje dane logicznie w przestrzeniach tabel, fizycznie w plikach danych
• przestrzenie tabel:
o mogą należeć tylko do jednej bazy danych
o składają się z jednego lub więcej plików
o dzielą się na kolejne logiczne jednostki składowania
• można tworzyć przestrzenie wielko plikowe (big file tablespace), które osiągają rozmiar do 8
EB(exabajtów=1000000 TB)?
• Pliki danych:
o mogą należeć tylko do jednej przestrzeni tabel i jednej bazy danych
o stanowią repozytorium dla schematu danych obiektu
• najprostsza baza danych ma 2 wymagane przestrzenie tabel (SYSTEM i SYSAUX), każda z
jednym plikiem danych
• Przestrzeń SYSTEM wykorzystywana jest przy podstawowych funkcjach: np. tabele słownika
danych
• przestrzeń tabel SYSAUX wykorzystywana jest dla dodatkowych elementów bazy danych (np.
ENTERPRISE MANAGER REPOSITORY)
• Jedna baza danych może mieć maksymalnie 65534 pliki.
SEGMENTY, OBSZARY, BLOKI
• segmenty stanowią największą jednostkę logiczną przestrzeni tabel
• segmenty zbudowane są z obszarów (en. extents)
• Obszar stanowi grupa bloków danych
• Blokom danych odpowiadają bloki dyskowe
SEGMENT | OBSZAR | BLOKI DANCYH | BLOKI DYSKOWE
Logiczna struktura bazy danych
Baza danych jest podzielona na logiczne jednostki – przestrzenie tabel. Każda z przestrzeni zawiera
wiele logicznych bloków danych (najmniejsza jednostka logiczna). Parametr DB_BLOCK_SIZE określa
jak Duzy ma być blok logiczny (może wynosić od 2 KB do 32 KB domyślnie 8 KB). Określona liczba
sąsiednich bloków stanowi obszar (extent). Grupa obszarów przeznaczonych na określoną strukturę
logiczną tworzy segment.
Przechowywanie danych:
• Segment tworzony jest razem z tabelą
• Tabela zagnieżdża zbiór segmentów
• Logiczne tabele tworzą wiersze wartości z kolumn
Budowa bloku danych
• nagłówek bloku: zawiera typ segmentu (taki jak tabela lub indeks), adres bloku danych,
katalog tabeli, katalog wiersza i gniazda transakcji o wielkości 23 bajtów każdy, które są
wykorzystywane do zmian wprowadzonych do wierszy w bloku. Nagłówek bloku rośnie w dół
• Wiersz danych: dane rzeczywiste dla wierszy w bloku. Wiersza danych przyrasta w górę.
• Wolne miejsce jest w środku bloku. Umożliwia przyrosty nagłówka i przestrzeni rządów
danych. Początkowo wolne miejsce stanowi obszar ciągły.
Wykłady z Administracji bazą danych Oracle 2010
30
Oracle Managed FILES - określa operacje plikowe w zakresie obiektów bazy danych.
przykład:
SQL>ALTER SYSTEM SET DB_CREATE_FILE_DEST = ‘/u01/oradata’;
SQL> CREATE TABLESPACE tbs_1;
Tworzenie przestrzeni table:
• wybrać kartę Administration, następnie Tablespaces w nagłówku Storage (wybrać create)
• uwaga: Można utworzyć nową przestrzeń na podstawie już istniejącej (create like)
• wprowadzić nazwę przestrzeni
• Wybrać Locally Managed dla zarządzania obszarami (Extend Managenetm ) sposób bardziej
efektywny
• Wybrać stały typ przestrzeni (Permanent) – przechowuje trwałe obiekty bazy danych
tworzone przez system lub użytkowników wybierz status read write (ustawieni domyślne)
• wybierz add datafiles aby dodać pliki danych do przestrzeni tabel. Przestrzenie Bigfile
stosowane są dla bardzo dużych baz danych
• wprowadź nazwę pliku. Zaakceptuj domyślny folder i wprowadź rozmiar pliku
• Można wybrać opcję Automatically extend data file when full (Autoxtend) I podać wielkość
przyrostu. Pozwala to plików danych na automatyczne rozszerzanie za każdym razem, gdy
zabraknie miejsca. Wielkość pliku jest ograniczona tylko przez fizyczny nośnik
• po wybraniu opcji storage pojawi się strona Edit Tablespace – zaakceptować ustawienia
domyślne
Alokacja obszarów:
• automatyczna (Automatic): rozmiar obszarów zarządzany jest systemowo. Nie można
samemu określi rozmiaru obszaru. nie można zdefiniować (automatic) dla przestrzeni
tymczasowych
• Jednolita (uniform) przestrzeń tabel ma zdefiniowaną przez administratora jednolitą wielkość
obszarów (domyślnie 1MB) wszystkie obszary przestrzeni tymczasowych są jednolite o
wielkości dynamicznej. Nie można określić jednolitych obszarów dla przestrzeni wycofania
Zarządzanie przestrzenia segmentów dla lokalnie zarządzanej przestrzeni:
• automatyczne: bazy danych Oracle korzysta z bitmapy do zarządzania wolnym miejscem w
segmentach. Bitmapa opisuje status każdego bloku danych w segmencie odpowiadający
ilości wolnego miejsca w bloku. Taka forma zarządzania przestrzenia nazywa Automatic
Segment Spacing Managment
• Ręczna oznacza wykorzystywanie list w celu zarządzania wolnym miejscem w segmentach.
Wymaga określenia i dostrojenia parametrów przechowywania PTCUSED, FREELISTS i
FREELIST GROUPS. Podejście nie zalecane.
Modyfikacja przestrzeni tabel
• zmiana nazwy
• zmiana stanu: dostępne 3 statusy (Stany) – w zależności od rodzaju przestrzeni tabel:
o read write: przestrzeń tabel jest w trybie online można odczytywać i zapisywać
Wykłady z Administracji bazą danych Oracle 2010
31
o read Orly: wskazany w trybie przejściowym. W tym stanie istniejące transakcje
można zakończyć ale nie można wykonywać operacji na danych. Przestrzeń jest w
trybie online. Nie można ustawić read Orly przestrzeni system i sysaux
o Offline – ustawiamy aby część danych była niedostępna (reszta dostępna dla
użytkowników)
Usuwanie przestrzeni:
• aby usuwać przestrzenie i ich zawartość (segmenty) trzeba mieć przywilej DROP TABLESPACE
• można (opcjonalnie) bezpośredni z serwera Oracle usunąć pliki systemu operacyjnego (pliki z
danymi) które stanowiły usuniętą przestrzeń. Można to zrobić później z OS
• Nie można usuwać przestrzeni, która zawiera jakiekolwiek aktywne Segmenty
• Przykład:
Tabela z przestrzeni jest obecnie używana. Przestrzeń może być w trybie online lub offline,
ale zaleca się w przejście w tryb offline przed usunięciem.
Powiększenie rozmiaru bazy danych:
• Tworzenie nowych przestrzeni tabel
• Dodawanie pliku do istniejących przestrzeni tabel zwiększenie rozmiaru table
• zapewnienie dynamicznego przyrostu pliku danych
• działania te mogą być wykonywane z enterprises manager lub SQL. Końcowy rozmiar bazy
danych można określić jako rozmiar wszystkich jej przestrzeni
WYKŁAD 6 - Administracja bezpieczeństwem użytkownika
Konta użytkowników
Każde konto użytkownika bazy danych posiada:
• unikalną nazwę użytkownika
• metody uwierzytelniania
• domyślną przestrzeń tabel
• Tymczasową przestrzeń tabel
• Profil użytkownika
• blokady
Konta SYS i SYSTEM
• SYS i SYSTEM mają domyślnie przyznana role administratora bazy danych (DBA)
• Konto SYS ma ponadto wszystkie przywileje z AMIN OPTION i jest właścicielem słownika
danych
• Podłączenie do konta SYS następuj poprzez użycie klauzuli AS SYSDBA (o ile użytkownik
posiada przywileje SYSDBA).
• Tylko użytkowników, którzy mają nadany przywilej SYSDBA lub SYSOPER mają możliwość
uruchamiania i zamykania instancji bazy danych
• Konto SYSTEM ma domyślnie przyznaną role DBA, ale nie przywilej SYSDBA
• Praktyczne wskazówki:
o Stosować zasadę minimum uprawnień
Wykłady z Administracji bazą danych Oracle 2010
32
o Konta te nie powinny być wykorzystywane do rutynowych działań
o Użytkownicy, którzy potrzebują uprawnień DBA mają oddzielne konta z przyznanymi
wymaganymi uprawnieniami.
o Konta SYS i SYSTEM są wymagane w bazie danych. Nie mogą być usunięte.
W EM można zarządzać listą użytkowników bazy danych: tworzyć, usuwać i modyfikować ustawienia
użytkownika.
Autoryzacja użytkowników:
• hasło: szyfrowane w sieci przy użyciu zmodyfikowanego algorytmu DES
• zewnętrzne: uwierzytelnianie przez system operacyjny. Użytkownicy mogą połączyć się z
bazą danych bez podawania nazwy użytkownika i hasła. Hasło bazy danych nie jest
wykorzystywane do tego typu logowania. Jeśli system operacyjny zezwala na takie
uwierzytelnianie, należy ustawić parametr inicjalizacyjny OS_ATHENT_PREFIX i wykorzystać
prefix w nazwach użytkowników Oracle. Domyślna wartość tego parametru to OP$$ (ze
względu na poprzednie wersje.
• Globalne użycie opcji Oracle Advanced Security, globalne uwierzytelnianie, pozwala na
identyfikację poprzez wykorzystanie m.in. danych biometrycznych lub tokenów.
Przywileje
• Przywileje systemowe:
o każdy przywilej systemowy pozwala użytkownikowi na wykonanie określonej operacji
lub klasy operacji na bazie danych (np. przywilej tworzenia tabel)
o istnieje ponad sto różnych przywilejów
o wiele przywilejów (uprawnień) systemowych zawiera klauzulę ANY
• Przywileje obiektowe
o Pozwalają użytkownikowi na wykonanie określonego działania na konkretnych
obiektach (np. tabele, widoki, procedury)
o Bez specjalnych zezwoleń, użytkownicy mogą uzyskać dostęp tylko do swoich
obiektów.
o Przywileje obiektowe mogą być nadawane przez właściciela obiektu, admina lub
osobę która ma przywilej przyznawania uprawnień.
Przywileje systemowe:
• Przyznawanie uprawnień z klauzulą ANY oznacza ze dany przywilej dotyczy wielu schematów
Przykłady: create table pozwala na tworzenie tabeli tylko w obrębie własnego schematu.
selekt Any table pozwala na wybór z tabel innych użytkowników.
• Zaznaczenie opcji Admin pozwala na zarządzanie przywilejem i nadawanie go innym
użytkownikom.
• Niektóre przywileje systemowe są zwykle przyznawane przez administratorom:
• RESTRICTED SESSION: pozwala zalogować się nawet wtedy, gdy baza danych została otwarta
w trybie RESTRICTED
• SYSDBA i SYSOPER: pozwalają na zamknięcie, uruchomienie, odzyskiwanie i wykonywanie
innych zadań administracyjnych a bazie danych.
Wykłady z Administracji bazą danych Oracle 2010
33
• SYSOPER pozwala użytkownikowi na wykonywanie podstawowych operacji, ale bez
możliwości wglądu w dane użytkownika. Obejmuje następujące uprawnienia systemowe:
o STARTUP i SHUTDOWN
o CREATE SPFILE
o ALTER DATABASE OPEN / MOUNT / BACKUP
o ALTER DATABASE ARCHIVELOG
o ALTER DATABASE RECOVER (tylko pełne odzyskiwanie, niekompletne odzyskiwanie
(UNTIL TIME | CHANGE | CANCEL | CONTROLFILE ) wymaga SYSDBA
• RESTRICTED SESSION
• Przywilej systemowy SYSDBA dodatkowo upoważnia do niekompletnego odzyskiwania i
usuwania bazy danych. Przywilej systemowy SYSDBA pozwala użytkownikowi na podłączenie
jako użytkownik SYS
• DROP ANY OBJECT pozwala usunąć obiekty ze schematu innego użytkownika
• CREATE, MANAGE, DROP i ALTER TABLESPACE: pozwalają na zarządzanie przestrzenią tabel
m. In. tworzenie usuwanie i zmianę ich atrybutów
• CREATE ANY DIRECTORY: bazy danych Oracle umożliwia programistom wywołanie
zewnętrznego kodu (np. biblioteki C) z poziomu PL / SQL. Ze względów bezpieczeństwa,
katalog systemu operacyjnego w którym znajduje się kod musi być związany z wirtualnym
katalogiem (obiektem katalogowym) Oracle
• CREATE ANY DIRECTORY pozwala użytkownikowi na tworzenie obiektów katalogowych (do
odczytu i zapisu) do dowolnego katalogu.
• GRANT ANY OBJECT: przywilej pozwala na przyznawanie użytkownikowi uprawnień
obiektowych na obiekty, których nie jest właścicielem.
• ALTER DATABASE i ALTER SYSTEM: bardzo silne uprawnienia pozwalają na modyfikację bazy
danych i instancji Oracle (m.in. zmiana nazw plików danych)
Przywileje obiektowe nadaje się poprzez:
• Wybranie typu obiektu
• Wskazanie obiektu
• Wskazanie przywilejów
Nadawanie przywilejów z ADMIN / GRANT OPTION
Admin option – dla przywilejów systemowych i ról:
• daje prawo do nadawania lub odebrania przywileju systemowego lub roli innemu
użytkownikowi lub roli; użytkownicy nie mogą sami sobie odebrać roli
• można dalej przekazywać przywilej lub role z ADMIN OPTION
• można zmodyfikować lub usunąć role
Grant option – dla przywilejów obiektowych:
• Daje prawo do nadawani przywileju obiektowego innym użytkownikom (z GRANT OPRION
lub bez) lub rolom.
• Nie można przekazać z GRANT OPTION przywileju obiektowego rolom:
grant system_priv(s) to grantee [identified by password] [with admin option]
grant role to grantee [identified by password] [with admin option]
grant all privileges to grantee [identified by password] [with admin option]
Wykłady z Administracji bazą danych Oracle 2010
34
Cofanie przywilejów systemowych z ADMIN OPTION
• uprawnienia systemowe które zostały przyznane bezpośrednio poleceniem GRANT, mogą
zostać cofnięte przy użyciu REVOKE. Użytkownicy z przywilejem ADMIN OPTION mogą cofnąć
przywilej innym użytkownikom bazy danych. Odbierającym nie musi być ten sam użytkownik
który pierwotnie nadal przywilej.
• Nie ma efektu kaskadowego podczas uchylania przywileju, niezależnie od tego, czy nadany
został z ADMIN OPTION czy bez.
• PRZYKŁAD: REVOKE CREATE TABLE FROM jeff;
• Cofanie przywilejów obiektowych z GRANT OPTION odbywa się kaskadowo.
Przydzielanie przywilejów do ról:
• nadawanie uprawnień poszczególnym użytkownikom jest czasochłonne i zwiększa
prawdopodobieństwo bledu. Problemy te rozwiązują role. Rolą jest grupa powiązanych
ze sobą przywilejów, które są nadawane użytkownikom lub innym rolom.
• charakterystyka roli
o przywileje są przyznawane I odbierane rolom tak samo jak użytkownikom
o Role są przyznawane i odbierane użytkownikom lub innym rolom tak samo jak
przywileje
o Rola może składać się z przywilejów systemowych i obiektowych
o Rola może być włączona lub wyłączona dla każdego użytkownika, któremu
została przydzielona
o Rola do włączenia może wymagać hasła
o role nie mają właściciela, nie są w żadnym schemacie
Role predefiniowane
connect – create session
resource – create luster, create indextype, create operator, create procedure, create sequence,
create table, create trigger, create type
scheduler_admin – create any job, create external job, create job, execute any class, CEXECUTE ANY
PROGRAM, MANAGE SCHELUDER
DBA – Większość przywilejów systemowych, kilka innych ról, Nadawać tylko adminom
SELECT_CATALOG_ROLE – bez przywilejów systemowych, Zawiera HS_ADMIN_ROLE i ponad 1700
przywilejów obiektowych dla słownika danych
Bezpieczne role:
• role SA zwykle domyślnie włączone, co oznacza ze użytkownik może korzystać z przywilejów
danej roli jeśli zostanie mu przyznana. Istnieje możliwość:
• ustawienia roli jako domyślnej. Gdy rola jest przyznawana użytkownikowi należy usunąć
opcje DEFAULT. Użytkownik musi teraz jawnie włączyć role przed zrealizowaniem jej
przywilejów: SET ROLE VACATIONDBA;
• wymagania dodatkowego uwierzytelnienia dla roli (domyślnie jest NONE)
• Tworzenie bezpiecznych ról administracyjnych, które mogą być aktywne tylko przez
pomyślne wykonanie procedury PL/SQL. Procedura PL/SQL może sprawdzić m.in. adres
sieciowy użytkownika, jaki program uruchamia użytkownik, porę dnia.
o CREATE ROLE secure_application_role IDENTIFIED USING
<security_procedure_name>
Wykłady z Administracji bazą danych Oracle 2010
35
Profile I użytkownicy
• profil nakłada określony zestaw limitów zasobów na korzystanie z bazy danych I instancji.
Profile zarządzają również kontem i ograniczeniami dla haseł (m. In. długość, data
wygaśnięcia). każdy użytkownik ma przypisany profil i może należeć tylko do jednego profilu
w danym momencie.
• nie można narzucać ograniczeń zasobów dla użytkowników jeśli parametr inicjalizacyjny bazy
RESOURCE_LIMIT nie jest ustawiony TRUE. RESOURCE_LIMIT ma domyślnie False i wówczas
ograniczenia profilu są ignorowane.
• Profile pozwalają użytkownikowi na kontrolowanie następujących zasobów systemowych:
o czas użycia procesora (CPU/Session): 1000 oznacza, że jeżeli sesja zużywa więcej niż
10 sekund czasu procesora, to otrzymuje komunikat o błędzie i zostaje wylogowana
(ORA-02392 : exceded session limit on CPU Osage, you are being logged off) o
bledzie
• Ograniczenia połączeń (CPU/CALL): analogicznie do sesji dotyczy jednego polecenia. W
przypadku przekroczenia polecenia jest przerywane a użytkownik otrzymuje komunikat
• siec/pamięć: każda sesja bazy zużywa zasoby pamięci systemowej i zasoby sieciowe (o ile nie
jest lokalny). Można określić następujące elementy
o łącziny przed automatycznym wylogowaniem
o Idle time: przez ile minut sesji użytkownik może zostać bezczynny przed
automatycznym wylogowanie. Czas bezczynności nie bierze pod uwagę działania
aplikacji. Nie uwzględnia długotrwałych zapytań…
Równoczesne sesje …
Prywatny SGA – limity ilości miejsca w SGA, ograniczenie to zachodzi tylko wtedy gdy sesja
wykorzystuje serwer dzielony
Disc I/O: ogranicza ilość danych, które użytkownik może czytać w czasie sesji lub połączenia.
Realizacja bezpieczeństwa haseł
• blokowanie konta: automatyczne blokowanie kont na określony czas dla użytkowników
którym nie uda się zalogować do systemu w określonej liczbie prób (parametry
FAILED_LOGIN_ATTEMPTS i PASSWORD_LOCK_TIME
• Wygaśniecie hasła: parametry PASSWORD_LIFE_TIME i PASSWORD_GRACE_TIME
• historia haseł: hasło nie powinno być wykorzystywane ponownie przez określony czas lub
przed określoną liczbę zmian (parametry PASSWORD_REUSE_TIME I
PASSWORD_REUSE_MAX). Parametry te wykluczają się. Można ustawić tylko jeden.
• Weryfikacja złożoności hasła: parametr PASSWORD_VERIFY_FUNCTION określa funkcje
PL/SQL. Która wykonuje sprawdzanie hasła. Funkcja weryfikacji musi być własnością
użytkownika SYS i musi zwrócić wartość logiczną (PRAWDA lub FAŁSZ)
Funkcja weryfikacji VERIFY_FUNCTION
• funkcja jest tworzona w skrypcie <Oracle_home>/rdbms/admin/utlpwdmg.sql. Musi by
utworzona w schemacie SYS
• Profil DEAFULT można zmienić poprzez polecenie ALTER PROFILE
ALTER PROFILE DEFAULT LIMIT
PASSWORD_LIFE_TIME 60
Wykłady z Administracji bazą danych Oracle 2010
36
PASSWORD_GRACE_TIME 10
PASSWORD_REUSE_TIME 1800
PASSWORD_REUSE_MAX UNLIMITED
FAILED_LOGIN_ATTEMPTS 3
PASSWORD_LOCK_TIME 1/1440
PASSWORD_VERIFY_FUNCTION verify_function
• Utworzony użytkownik ma profil DEFAULT dopóki nie zostanie mu przydzielony inny
Przydzielanie ograniczeń użytkownikom
• Quota (ograniczenie, kwota) to miejsce do wykorzystania w danej przestrzeni tabel.
Domyślnie użytkownik nie ma żadnych ograniczeń. Dostępne są trzy opcje:
o unlimited: pozwala użytkownikowi na wykorzystanie dostępnego miejsca w
przestrzeni,
o wartość (value): liczba kilobajtów lub megabajtów, która użytkownik może
wykorzystać. Nie jest równoznaczne z miejscem przypisanym użytkownikowi.
wartość ta może być większa lub mniejsza od aktualnego miejsca w przestrzeni
tabel
o UNLIMITED TABLESPACE, przywilej systemowy zasłaniający indywidualne kwoty i
dający użytkownikowi nieograniczoną kwoty na wszystkie przestrzenie, w tym
SYSTEM i SYSAUX. Uwaga przyznawanie roli RESOURCE zawiera przyznawanie
tego przywileju.
• Ograniczenia są wykorzystywane, gdy użytkownik tworzy i rozszerza segmenty.
• Ograniczenia są uzupełniane, gdy użytkownik usuwa obiekty z klauzulą PURGE lub
obiekty w koszu są automatycznie usuwane.
Słownik danych
• stanowi opis bazy danych. zawiera nazwy i atrybuty wszystkich obiektów w bazie. Utworzenie
lub modyfikacja dowolnego obiektu powoduje aktualizacje odpowiednich danych słownika
• dane słownikowe przechowywane SA w tabelach. Dostęp do tabel powinien odbywać się
poprzez predefiniowane widoki zamiast odczytywania bezpośrednio z tabel
• wykorzystywany jest przez serwer bazy danych Oracle w celu znalezienia informacji o
użytkownikach, obiektach, ograniczeniach i przechowywaniu.
• Jest dostępny dla każdego użytkownika przeszukującego informacje o bazie danych.
• Jest własnością użytkownika SYS
• Nigdy nie powinien być modyfikowany bezpośrednio za pomocą SQL
selekt* from dictionary;
Widoki słownika danych
DBA_ - uprawnieni użytkownicy: DBA; zawiera wszystko; podzbiór: brak; uwagi: mogą zawierać
dodatkowe kolumny tylko dla użytku DBA
ALL_ - uprawnieni użytkownicy: każdy; zawiera wszystko do czego uprawniają przywileje; podzbiór:
widoki DBA_; uwagi: zawiera obiekty będące własnością użytkownika
USER_ - uprawnieni użytkownicy: każdy; zawiera wszystkie obiekty użytkownika; podzbiór: widoki
ALL_; uwagi: zwykle takie same jak ALL_ poza kolumną OWNER
• Prefixy widoków wskazują jakie i ile danych użytkownik może zobaczyć.
Wykłady z Administracji bazą danych Oracle 2010
37
• Globalny widok jest dostępny tylko dla użytkowników z uprawnieniami administratora (DBA)
za pomocą prefixu DBA_pos
• Poziom uprawnień z prefixem ALL_ reprezentuje wszystkie obiekty, których przeszukujący
użytkownik ma prawo zobaczyć (niezależnie od bycia właścicielem)
• Prefix USER_ reprezentuje najmniejszy zakres widoczności. Pokazuje tylko te obiekty, których
właścicielem jest użytkownik
• każdy zestaw widoków jest podzbiorem zestawu wyżej uprzywilejowanego
• nie wszystkie widoki maja swoje niższe odpowiedniki
• widoki DBA_ mogą być przeszukiwane przez użytkowników SYSDBA
ZARZADZANIE DANYMI I WIELODOSTEP
Blokady:
• zanim baza danych pozwoli na zmodyfikowanie danych sesji, sesja najpierw musi zablokować
dane, które ulegają modyfikacji. Blokada daje sesji wyłączną kontrolę nad danymi, tak aby
żadna inna transakcja nie mogła modyfikować tych danych od czasu zwolnienia blokady.
• Transakcje mogą zablokować pojedyncze wiersze danych, kilka wierszy lub całe tabele.
Oracle Database 10g obsługuje ręczne i automatyczne blokowanie. Blokady zakładane
automatycznie zawsze wybierają najniższy poziom blokowania, aby zminimalizować
potencjalne konflikty z innymi transakcjami.
Mechanizm blokowania:
• mechanizm blokowania ma na celu zapewnienia maksymalnego stopnia współbieżności
danych w bazie. Transakcje które modyfikują dane najczęściej blokują na poziomie wiersza
(nie na poziomie bloku lub tabeli).
• zapytanie o dane nie wymagają blokad i zapytanie kończy się nawet jeśli ktoś zablokował
dane (zawsze pokazywane SA dane sprzed blokady na podstawie informacji do wycofania).
• Jeśli wiele transakcji chce zablokować te same zasoby, blokadę założy pierwsza wnioskująca
transakcji , inne transakcje czekają na jej zakończenie, mechanizm kolejkowania jest
automatyczny i nie wymaga działań administracyjnych
• Wszystkie blokady są uwalniane na końcu transakcji. Transakcja kończy się wydaniem
polecenia COMMIT lub ROLLBACK. W przypadku niepowodzenia transakcji, ten sam proces
tła, który automatycznie wycofuje zmiany, zwalnia wszystkie blokady.
Współbieżność danych
• niski poziom blokowania sprawia ze rożne transakcje mogą aktualizować poszczególne
wiersze tej samej tabeli bez wzajemnej ingerencji.
• Chociaż model domyślny zakłada blokowanie na poziomie wiersza. Oracle umożliwia, w razie
konieczności ręczne blokowanie na wyższym poziomie:
SQL > LOCK TABLE employees IN EXCLUSIVE MODE; Table(s) Locked
Rodzaje blokad
• row share – pozwala na równoczesny dostęp do zablokowanej tabeli, ale zabrania sesjom
blokowania całej tabeli na wyłączny dostęp
• row exclusive – analogicznie do row share ale zabrania także blokad w trybie share. row
exclusive jest automatyczna podczas aktualizacji wstawiania lub usuwania danych
Wykłady z Administracji bazą danych Oracle 2010
38
• share – umożliwia jednoczesne zapytania ale zabrania aktualizacji na zablokowanej tabeli
blokada share jest wymagana (i automatyczna) podczas tworzenia indeksów na tabelach
• share row exclusive – używana do zapytań na całej tabeli pozwala innym na zapytania do
wierszy w tabeli. zabrania innym blokowania tabeli w trybie share lub aktualizacji wierszy
• EXCLUSIVE pozwala na zapytania na zablokowanej tabeli ale zabrania wszelkich innych
działań: blokada EXCLUSIVE jest wymagana podczas usuwania tabeli (DROP)
• Ręczne blokady – czekają na zwolnienie już istniejących blokad. Polecenie LOCK akceptuje
specjalny argument kontrolujący oczekiwanie : NOWAIT, NOWAIT zwraca kontrolę
natychmiast, jeśli dana tabel jest już zablokowana przez inną sesję (przerywa polecenie)
• Zazwyczaj nie jest konieczna ręczna blokada obiektów. Automatyczny mechanizm blokujący
zapewnia współbieżny dostęp do potrzebnych danych w większości zastosowań
Blokady DML
Każda transakcja DML otrzymuje dwie blokady:
• blokadę EXCLUSIVE na aktualizowane wiersze
• blokadę na poziomie tabeli ROW EXCLUSICE, która ma zapobiec zablokowaniu w całej tabeli
przez inną sesję. (prawdopodobnie z powodu usuwania lub obcinania tabeli)
Mechanizm kolejkowania blokad
• zadania blokad SA automatycznie umieszczane w kolejce. Gdy tylko zakończy się transakcja
trzymająca blokadę, otrzymuje ją kolejna sesja
• Sesje, które już posiadają blokady mogą żądać zmiany blokady bez konieczności
przechodzenia na koniec kolejki.
Przykład: sesja posiada blokadę SHARE na tabeli. Może zażądać przekształcenia blokady na
tryb exclusive. O ile nikt inny nie ma już założonej na tej tabeli blokady exclusive lub share,
sesja otrzyma blokade exclusive bez czekania w kolejce.
Konflikty blokad
Konflikty blokad pojawiają się często jednak są zwykle rozwiązywane poprzez upływ czasu oraz
mechanizm kolejkowania. Czasami konflikt blokad może wymagać interwencji administratora.
Możliwe przyczyny konfliktu blokad:
• najczęściej – niezatwierdzone zmiany
• długotrwale transakcje: wiele aplikacji używa przetwarzanie wsadowego, aby wykonać
masowych aktualizacji; zadania te SA zazwyczaj zaplanowane na godziny niskiej aktywności
użytkownika lub jej braku; w niektórych przypadkach mogą się w zadanym czasie nie
skończyć.
• Niepotrzebne wysokie poziomy blokad: nie wszystkie blokady bazy wspierają blokady
niskiego poziomu, niektóre bazy blokują na poziomie stron lub tabel (programiści aplikacji
przeznaczonych do różnych baz często piszą swoje aplikacje sztucznie wysokim poziomem
blokady tak żeby baza danych Oracle działała podobnie do innych systemów, analogicznie
programiści przechodzący z innych systemów do Oracle).
Wykłady z Administracji bazą danych Oracle 2010
39
Wykrywanie konfliktów blokad
• W EM można użyć strony Blocking Sessions. Sprzeczne blokady przedstawione są w układzie
hierarchicznym z sesją trzymającą blokadę na górze, a następnie poniżej, sesjami w kolejce.
• Dla każdej sesji konfliktu podana jest nazwa użytkownika, identyfikator sesji i liczba sekund
oczekiwania. Wybierając identyfikator sesji, można zobaczyć rzeczywisty kod SQL który jest
aktualnie wykonywany lub wnioskowany przez sesję.
• Automatic Database Diagnostic Monitor automatycznie wykrywa konflikty blokad i doradza
przy nieefektywnych blokadach.
Rozwiązanie konfliktów blokad
• rozwiązanie konfliktu blokad następuje w wyniku zwolnienia blokady przez trzymająca ja
sesje. najlepszym rozwiązaniem na zwolnienie blokady przed sesja jest skontaktowanie się z
jej użytkownikiem i poproszenie o zakończenie transakcji
• w nagłych przypadkach administrator może zakończyć sesję przytrzymującą blokadę poprzez
jej zabicie. Wiąże się to z utrata wszystkich prac w ramach ostatniej transakcji. Użytkownik
którego sesja została zabita musi zalogować się ponownie i powtórzyć wszystkie czynności od
ostatniego zatwierdzenia.
• Użytkownicy, których sesje zostały zabite, otrzymują podczas kolejnego wydania polecenia
SQL następujący komunikat o błędzie : ORA-03135: conection lost contact
Rozwiązywanie konfliktów blokad
• manipulacji sesjami można dokonywać poprzez wydawanie poleceń SQL
• szczegółowe informacje o wszystkich podłączonych sesjach zawiera tabela v$session.
Identifikator (ID) sesji blokującej zawiera kolumna blockin_session.
• Do zabicia sesji należy znać SID oraz SERIAL#
Zakleszczenia
• zakleszczenie jest specjalnym przykładem konfliktu blokad. Zakleszczenia powstają gdy dwie
lub więcej sesji czek na dane wzajemnie zablokowane. Ponieważ każdy czeka na każdego, nikt
nie może zakończyć transakcji w celu rozwiązania konfliktu
• bazy danych Oracle automatycznie wykrywa zakleszczenia i kończy bledem. Prawidłowa
odpowiedź na ten błąd to zatwierdzenie lub wycofanie, które zwalniają blokady tak aby inne
sesje mogły kontynuować transakcje
WYKŁAD 7
Operacje na danych /dane do wycofania
• operacji na danych można dokonywać poprzez polecenia DML języka SQL: INSERT, UPDATE,
DELETE i MERGE. Polecenia te są realizowane w ramach transakcji, która zaczyna się
pierwszym pomyślnym poleceniem DML i kończy się poleceniem COMMIT albo ROLLBACK
• Transakcja jest w całości zatwierdzana lub wycofywana
• Wycofanie może również wystąpić w przypadku awarii systemu lub procesu.
Dane do wycofania:
o Stanowią kopię oryginalnych danych
o Przechowywane są z każdej transakcji, która zmienia dane
o Pozostają przynajmniej do końca transakcji
Wykłady z Administracji bazą danych Oracle 2010
40
Transakcje / wycofywanie danych
• uruchomiona transakcja jest przypisywana do segmentu wycofania. W czasie jej trwania,
zmieniane (ale oryginalne) dane są kopiowane do segmentu wycofania. Poszczególne
przypisania (transakcji do segmentów) można sprawdzić w dynamicznym widoku
v$transaction
• Segmenty wycofania tworzone są automatycznie przez instancję. Analogicznie do innych
segmentów, składają się obszarów, a te z kolei z bloków danych. Segmenty wycofania mogą
automatycznie przyrastać i zmniejszać się w miarę potrzeb.
Przechowywanie informacji o wycofaniu:
• Segmenty wycofania mogą istnieć tylko w określonych przestrzeniach tabel – przestrzeniach
wycofania. Baza danych może mieć wiele przestrzeni wycofania, ale tylko jedna z nich w
danym czasie może być wyznaczona do zapisu danych
• Z danej przestrzeni może korzystać w danym czasie tylko jedna instancja
• Segmenty wycofania są zawsze własnością SYS. Każdy segment ma co najmniej dwa obszary
(działające cyklicznie).
• Przestrzenie wycofania są trwałe. Przestrzenie tabel mogą być odzyskane tylko w trybie
MOUNT.
Dane wycofywane i ponawiane:
• dane wycofywane i ponawiane pomimo podobieństw służą różnym celom. Wycofywanie
danych jest wymagane i zapewnia spójność wycofywania. Ponawianie danych jest konieczne
w przypadku gdy istnieje konieczność przeprowadzenia zmian ponownie po ich utracie
• proces zatwierdzenia wymaga zapewnienia, że zmiany w czasie transakcji zostały zapisane do
pliku dziennika powtórzeń. Ponadto jest on zwykle multipleksowany. W rezultacie na dysku
istnieje wiele kopii danych ponawianych
• Nawet jeśli zmiany nie zostały jeszcze zapisane w bazie danych w przypadku awarii (np. braku
prądu) na podstawie dziennika powtórzeń po restarcie można powtórzyć czynności.
WYCOFYWANIE PONAWIANIE
Wskazanie Wycofywanie zmian Ponawianie zmian
Zastosowanie RollBack (wycofanie), spójność Ponawianie (Rolling forward) zmian
Przechowywanie Segmenty wycofania Pliki dziennika powtórzeń
Chronią przed Niespójność odczytów przy wielu użytkownikach
Utrata danych
Monitorowanie wycofania:
• Zmiany dotyczące wycofywania, w większości przypadków są zarządzane automatycznie.
Zaangażowania administratora mogą wymagać sytuacje:
o niewystarczające miejsce na zmiany
o użytkownik otrzymał komunikat o błędzie: ORA-01555 snapshot too old (Nadpisanie
logów w segmentach ‘undo’ podczas długo wykonywanych operacji).
• Informacje do wycofania są zawsze zachowywane do czasu zakończenia transakcji. Oznacza
to ze jeśli bez zatwierdzenia usuwana jest lub aktualizowana bardzo duża ilość danych
(oryginalne dane dla INSERT to wartość NULL), przestrzeń wycofania musi być równie duża
Wykłady z Administracji bazą danych Oracle 2010
41
• Przykład: w tabeli o rozmiarze 50GB wszystkie wiersze są usuwane następującym
poleceniem:
SQL> DELETE FROM reallybugtable;
• Przestrzeń monitorowania powinna mieć wolne również 50GB na oryginalne dane, na
wypadek gdyby użytkownik zmienił zdanie i wycofał zmiany. Gdy zabraknie miejsca na
zmiany w przestrzeni tabel, użytkownicy otrzymują komunikat o błędzie:
ORA-01650: unable to extend rollback segment
• Czynne monitorowanie wykrywa problemy z miejscem w przestrzeniach wycofania zanim
odczytuje to użytkownik.
Administracja wycofaniem
• zaleca się stosowanie automatycznego zarządzania wycofaniem, skonfigurowanego poprzez
ustawienie parametru inicjalizacyjnego UNDO_MANAGEMENT na AUTO. Ręczne zarządzanie
wycofaniem dotyczy wcześniejszych wersji Oracle.
• DBA wskazuje jedynie przestrzeń wycofania przez parametr UNDO_TABLESPACE
UNDO_MANAGEMENT=AUTO;
UNDO_TABLESPACE=UNDOTBS1
Gwarancja przechowywania danych do wycofania
• domyślnie zastępuje się zatwierdzone transakcje (nawet nie zakończone), aby nie dopuścić
do braku miejsca na wycofanie.
• gwarancja przechowywania (retention guarantee) wymusza utrzymanie danych nawet jeżeli
spowodują niepowodzenie transakcji
• RETENTION GUARANTEE stanowi atrybut przestrzeni table (nie parametr inicjalizacyjny).
Może być zmieniony jedynie z linii poleceń SQL:
SQL> ALTER TABLESPACE undotbs1 RETENTION GUARANTEE
• Aby przywrócić zwykłe ustawienia należy użyć polecenia:
SQL> ALTER TABLESPACE undotbsl RETENTION NOGUARANTES;
• Gwarancja przechowywania odnosi się wyłącznie do przestrzeni wycofania. Dla innych
przestrzeni generuje błąd:
SQL> ALTER TABLESPACE ex ample RETENTION GUARANTEE;
ERROR AT LINE 1
ORA-30044: ‘Retention’ can only specified for undo tablespace
Undo advisor pozwala oszacować rozmiar przestrzeni wycofania, wymagany do utrzymania wycofań
przez ustalony czas
REALIZACJA ZABEZPIECZEŃ
• Użytkownicy DBA muszą być zaufani: trudno jest ograniczyć prawa DBA-DBA wymaga
wysokiego poziomu uprawnień; z uwagi na zaufane stanowisko, DBA muszą być dokładnie
sprawdzeni
• należy uwzględni następujące zagadnienia związane z bezpieczeństwem:
o nadużycie zaufania – DBA może wykorzystać zaszyfrowane hasła dostępnych w
widoku DBA_USERS;
o Monitorowanie (ścieżki audytu) – chroni zaufane pozycje, może wykazać, że dana
osoba nie naruszyła procedur lub popełniła szkodliwe działania: jeśli użytkownik
Wykłady z Administracji bazą danych Oracle 2010
42
potrzebuje rzucić podejrzenie na innego (zaufanego) użytkownika, dobrze
zaprojektowane ścieżki audytu są w stanie to wyłapać.
Zasada najmniejszej liczby przywilejów:
• zasada najmniejszej liczby przywilejów – użytkownik ma mieć tylko te uprawnienia, które są
niezbędne do efektywnego wykonywania zadań
• Ochrona słownika danych – parametr 07_DICTIONARY_ACCESSIBILITY jest domyślnie
ustawiony na FALSE. Nie powinien być zmieniany bez istotnego powodu – chroni tabele
słownikowe przed dostępem użytkowników z przywilejem ANY_TABLE. Dzięki niemu
użytkownik SYS może zalogować się tylko jako SYSDBA
O7_DICTIONARY_ACCESSIBILITY = FALSE
• Należy odebrać niepotrzebne przywileje roli PUBLIC:
REMOVE EXECUTE ON UTL_SMTP, UTL_TPC, UTL_HTTP, UTL_FILE from PUBLIC
Monitorowanie czynności:
• monitorowanie oznacza przechwytywanie I gromadzenie informacji o tym, co dzieje sięw
systemie. Zwiększa obowiązkowe czynności systemowe, więc powinien dotyczyć wybranych
zdarzeń (minimalizuje wpływ na wydajność systemu).
• obowiązkowy monitoring – działa niezależnie od opcji audytu i parametrów; uwzględnia m.
In. uruchamianie i zamykanie systemu;
• standardowy monitoring – ustalany na poziomie systemu za pomocą parametru
inicjalizacyjnego AUDIT_TRAIL; po wyłączeniu można wskazać obiekty i przywileje, które będą
monitorowane;
• Monitowanie wartości (Valued Based aufiting) – rozszerza standardowy monitoring na
wartości które zostały wprowadzone, uaktualnione lub usunięte (nie tylko same zdarzenia),
realizowany za pomocą wyzwalaczy.
• Monitorowanie precyzyjne (fine grained auditing =FGA) – rozszerza standardowy monitoring
na wydane polecenia SQL
• Monitorowanie DBA – przydziela obowiązek monitorowania audytorowi (lub
administratorowi bezpieczeństwa) oddzielając go od obowiązków DBA;
Standardowe monitorowanie (auditing) bazy:
• po włączeniu monitoringu bazy danych i określeniu opcji audytu (zdarzenia logowania,
korzystanie z systemu, przywileje obiektowe oraz wykorzystanie poleceń SQL), baza danych
rozpoczyna zbieranie informacji z monitoringu.
• jeśli AUDIT_TRAIL jest ustawiony na OS, rekordy audytu są przechowywane w systemie
operacyjnym (dla Windows jest to dziennik zdarzeń).
• Jeśli parametr AUDIT_TRAIL jest ustawiony na DB, Można przejrzeć wpisy audytu w widoku
DBA_AUDIT_TRAIL, który jest częścią schematu SYS.
• Jeśli AUDIT_TRAIL jest ustawiony na XML lub XML EXTENDED, wpisy audytu są odnotowane
w plikach XML w katalogu określonym parametrem AUDIT_FILE_DEST. Widok
V$XML_AUDIT_TRAIL pozwala przejrzeć wszystkie pliki XML w tym katalogu
• Utrzymanie audytu jest bardzo ważnym zadaniem administracyjnym z uwagi na bardzo duże
przyrosty (w zależności od opcji) – zbyt duże pliki wpływają na wydajność systemu.
Wykłady z Administracji bazą danych Oracle 2010
43
Włączenie monitoringu:
• przed określeniem ustawień audytu należy go włączyć na bazie danych kontroli
(AUDIT_TRAIL).
• Po zmianie statycznego parametru inicjalizacyjnego należy zrestartować bazę.
ALTER SYSTEM SET audit_trail=”XML” SCOPE=SPFILE
Określenie opcji audytu:
• monitorowanie poleceń SQL: można monitorować dowolne polecenie DDL, m. In. CREATE
TABLE, DROP TABLE, TRUNCATE TABLE;
AUDIT selekt Any table, create Any trigger;
• Monitoring poleceń SQL może dotyczyć użytkownika lub pozytywnego/negatywnego
zakończenia (monitoring skierowany)
AUDIT TABLE BY hr WHENEVER NOT SUCCESSFUL
Monitorowanie precyzyjne (FGA):
• opcje audytu FGA można skierować na poszczególne kolumny w tabeli lub widoku, mogą być
warunkowe – zgodne ze specyfikacją administratora. Domyślnie każda z kolumn obecnych w
poleceniu SQL poddawana jest audytowi
• Pakiet zasad audytu dla tabeli lub widoku tworzony jest za pomocą DBMS_FGA PL/SQL. Jeżeli
którykolwiek z wierszy zwróconych z zapytania pasuje do badanej kolumny i określonych
warunków audytu, generowany jest rekord audytu.
• Opcjonalne monitorowane zdarzenie może wykonać procedurę. FGA automatycznie skupia
audyt na poziomie poleceń: SELECT zwracający tysiąc wierszy generuje tylko jeden rekord
audytu.
Audyt poleceń DML / Zasady FGA:
• rekordy są monitorowane, jeśli warunek FGA jest spełniony oraz polecenie odwołuje się do
odpowiednich kolumn
• polecenie DELETE SA monitorowane niezależnie od kolumny niezależnie od wskazanych
kolumn
• polecenie MERGE podlegają monitorowaniu zgodnie z odpowiednimi poleceniami INSERT lub
UPDATE
• dla polecenia SELECT, FGA rejestruje samo polecenie, nie rzeczywiste wiersze
• W celu przeprowadzania audytu dla wszystkich poleceń nie należy wprowadzać żadnego
warunku
• Nazwa zasady audytu musi być unikatowa
• Monitorowanie tabela/widok musi istnieć w momencie tworzenia zasady
• Jeśli składnia warunku audytu jest nieprawidłowa, przy dostępie do monitorowanego obiektu
pojawi się błąd ORA-28112
• Jeśli w tabeli nie istnieje wskazana do audytu kolumna, żaden wiersz nie będzie
monitorowany
• Jeśli nie istnieje obsługa zdarzeń nie jest zwracany żaden błąd zaś rekord audytu jest
tworzony.
ODZYSKIWANIE BAZY DANYCH
Wykłady z Administracji bazą danych Oracle 2010
44
Metody odzyskiwania:
• odzyskiwanie zarządzane przez użytkownika:
o administrowanie i przenoszenie plików odbywa się ręcznie
o wykorzystywane są polecenia SQL*Plus
• odzyskiwanie poprzez RMAN
o Zarządzanie plikami odbywa się automatycznie
o Wykorzystane są funkcje RMAN, w tym zarządzanie repozytorium i raportowanie
o Można wykonać poprzez Enterprise Manager
o Metoda zalecana przez Oracle Corp.
Polecenie RECOVER
• użytkownik ma ręcznie przywrócić pliki z danymi poprzez skopiowanie ich z backupu. Jeśli
pliki z danymi nie są przywracane do pierwotnej lokalizacji, należy zaktualizować plik
kontrolny podając nową lokalizację (polecenie ALTER DATABASE RENAME FILE). Należy
również przywrócić pliki archiwizacji logów potrzebne do odzyskania przywracanych plików z
danymi.
• Przywracanie wszystkich plików bazy danych z backupu i odzyskanie bazy danych (tylko dla
odzyskiwania przy zamkniętej bazie danych):
SQL> RECOVER [AUTOMATIC] DATABASE
• Przywracanie uszkodzonych plików z backupu i odzyskiwanie plików danych (tylko dla
odzyskiwania przy otwartej bazie danych):
SQL> RECOVER [AUTOMATIC] TABLESPACE <NUMBER> | <NAME>
SQL> RECOVER [AUTOMATIC] TABLESPACE index_tbs
• Lub (przy zamkniętej lub otwartej bazie danych):
SQL> RECOVER [AUTOMATIC] DATAFILE <’filename’> | <NAME>
SQL> RECOVER [AUTOMATIC] DATAFILE ‘/oradata/index01.dbf’
• Słowo kluczowe AUTOMATIC służy do automatycznego generowania nazwy kolejnego pliku
archiwizacji logów niezbędnego podczas przeprowadzania odzyskiwania
RMAN: polecenia RESTORE i RECOVER
• RMAN podczas odzyskiwania przywraca z backupu wszystkie wymagane zarchiwizowane pliki
dziennika powtórzeń
• Odtworzenie treści całości lub części bazy danych z backupu obejmuje dwa etapy:
o pobieranie kopii pliku danych z backupu – polecenie RESTORE pobiera plik danych z
lokalizacji backupu i umieszcza na dysku udostępniając go serwerowi bazy danych
o zastosowanie zmian w pliku od czasu backupu na podstawie zarchiwizowanych i
bieżących plików dziennika powtórzeń – polecenie RECOVER
• UWAGA: przydatna opcja przy zarządzaniu przestrzenią dyskową DELETE ARCHIVELOG –
powoduje usunięcie odzyskanych zarchiwizowanych dziennika powtórzeń z dysku, gdy nie są
już one potrzebne do operacji RECOVER/
Run{
SQL ALTER TABLESPACE inv_tbs OFFLINE IMMEDIATE;
RESTORE TABLESPACE inv_tbs;
RESTORE TABLESPACE inv_tbs DELETEARCHIVELOG;
Wykłady z Administracji bazą danych Oracle 2010
45
Sql “ALTER TABLESPACE inv_tbs ONLINE”;
}
Odzyskiwanie pełne i niekompletne:
• Pełne odzyskiwanie przywraca bazę danych do chwili obecnej, uwzględniając wszystkie
zmiany danych do momentu zażądania odzyskiwania.
• Niekompletne odzyskiwanie przywraca bazę danych do określonego momentu w przeszłości
(przed zarządzaniem odzyskiwania) – w efekcie część transakcji oraz wszystkie zmiany danych
pomiędzy czasem przywrócenia a chwilą obecną, zostaną utracone. Najczęściej właśnie ta
utrata jest celem – pewne czynności powinny zostać usunięte. Odzyskiwanie niekompletne
(do punktu w przeszłości), to sposób na usunięcie niepożądanych transakcji.
Wskazania do niekompletnego odzyskiwania bazy:
• utrata dziennika powtórzeń: dziennik powtórzeń został utracony przed archiwizacją i nie ma
mirroringu – nie można kontynuować odzyskiwania z kolejnych plików
• brakujący plik zarchiwizowany: pełne odzyskiwanie nie powiedzie się z powodu braku lub
uszkodzenia dziennika archiwizacji. Odzyskiwanie może być odprowadzone tylko od tego
momentu
• BACKUP PLIKU KONTROLNEGO: wykorzystywany do otwarcia bazy danych zamiast obecnej
kopii. Backup pliku kontrolnego może być potrzebny gdy:
o Wszystkie pliki kontrolne zostaną utracone, plik kontrolny nie może być ponownie
utworzony, zaś istnieje jego kopia binarna. Mirroring pliku kontrolnego (na różnych
dyskach) i przechowywanie aktualnej wersji tekstowego polecenia CREATE CONTROL
FILE ogranicza prawdopodobieństwo konieczności skorzystania z tej metody.
o W pewnym momencie zmieniła się struktura bazy danych
• Podczas wykorzystywania kopii pliku kontrolnego przy odzyskiwaniu lub otwarciu bazy
danych, należy określić klauzulę USING BACKUP CONTROLFILE W POLECENIU RECOVER
DATABASE.
Rodzaje niekompletnego odzyskiwania:
• odtworzenie bazujące na czasie: poprzez klauzulę UNTIL TIME określa się moment do którego
baza danych powinna zostać odzyskana. Odzyskiwanie zostaje przerwane gdy wszystkie
zmiany do wskazanego momentu zostaną zatwierdzone. To podejście jest wykorzystywane
gdy użytkownik dokona niewłaściwych zmian w danych lub usunie ważne tabele oraz znane
jest przybliżony cza popełnienia bledu. Dobrze przetestowane programy zabezpieczenia i
procedury powinny zapobiegać potrzebie wykorzystania tego typu odzyskiwania
• ODTWARZANIE DO PRZERWANIA – w celu przerwania procesu odzyskiwania podaje się w linii
poleceń CANCEL (zamiast nazwy pliku log. Podejście wykorzystywane gdy:
o Bieżący plik dziennika powtórzeń jest uszkodzony – tego rodzaju odzyskiwaniu
zapobiega monitoring
o Utracony został zarchiwizowany plik dziennika powtórzeń – zapobieganie poprzez
częste tworzenie backupów i wielu miejsc docelowych dla archiwum.odtwarzanie
bazujące na numerach SCN (system change numer): poprzez klauzule UNTIL CHANGE
lub UNTIL SCN (dla RMAN) podaje się numer ostatniej zatwierdzonej zmiany która
ma zostać odzyskana. Metoda wykorzystywana przy odzyskiwaniu bazy danych w
Wykłady z Administracji bazą danych Oracle 2010
46
środowisku rozproszonym. Opcjonalnie można wykorzystać składnie UNTIL RESTORE
POINT i podać punktu przywracania (alias dla SCN)
• ODTWARZANIE BAZUJĄCE NA NUEMZRE PORZĄDKOWYM DZIENNIKA – w RMAN można
podać ostatni numer dziennika, który ma być użyty do odzyskiwania danych przez klauzulę
UNTIL SEQUENCE. Odzyskiwanie zostanie przerwane po wszystkich plikach dziennika do
Przykłady:
RECOVER [AUTOMATIC] DATABASE OPTION
• OPTION: until time ‘yyyy-mm-dd:hh24:mi:ss’
until cancel
until change <integer>
Rusing backup controlfile
• Uwaga: podczas odzyskiwania można ustawić automatyczne wykorzystanie plików dziennika
powtórzeń poprzez polecenie SQL*Plus SET AUTORECOVERY ON, Michał Kieszek: W linii
poleceń wprowadzenie AUTO lub wydanie polecenia RECOVER AUTOMATIC.
• Odzyskiwanie bazujące na czasie:
SQL> RECOVER DATABASE UNTIL TIME ’2005-12-14:12:12:03’;
• Odzyskiwanie do przerwania
SQL> RECOVER DATABASE UNTIL CANCEL
• Odzyskiwanie z wykorzystaniem backupu pliku kontrolnego
SQL> RECOVER DATABASE UNTIL TIME ’2005-12-14:12:12:03’ 2 USING BACKUP
CONTROLFILE
Odzyskiwanie bazy przez użytkownika:
1. Jeśli baza danych jest otwarta, zamkniecie z opcją NORMAL, IMMEDIATE lub
TRANSACTIONAL
2. Przywrócenie wszystkich plików danych z backupu (możliwie ostatniego). Być może będzie
istnieć konieczność przywrócenia zarchiwizowanych dzienników. Jeśli miejsca jest
wystarczająco należy przywrócić do lokalizacji LOG_ARCHIVE_DEST lub do zmiany lokalizacji
użyć polecenia ALTER SYSTEM ARCHIVE LOG START <LOCATION> lub polecenie SET
LOGSOURCE <LOCATION>
3. zamontowanie bazy danych
4. odzyskiwanie bazy danych za pomocą polecenia RECOVER DATABASE
5. Synchronizacja plików danych z plikami kontrolnymi i plikami dziennika powtórzeń poprzez
otwarcie bazy danych z opcją RESETKIGS
WYKŁAD 8 – uszkodzenie bazy danych
Uszkodzenie bloku
• zawsze gdy blok jest odczytywany lub zapisywany, sprawdzana jest jego spójność:
o wersja bloku
o wartość adresu bloku danych DBA (data Block address) w pamięci podręcznej w
porównaniu do wartości DBA w buforze bloku,
o suma kontrolna bloku
• Uszkodzenie bloku może być spowodowane:
Wykłady z Administracji bazą danych Oracle 2010
47
o Uszkodzeniem medium (fizycznym)
o Uszkodzeniem oprogramowania (logicznym)
Oznaki uszkodzenia bloku: ORA-01578
Błąd ORA-01578: Oracle data Block corrupted (file # %s, block # %s)
• jest generowany, gdy znaleziony zostanie uszkodzony blok danych
• Zawsze zwraca bezwzględny numer pliku i numer bloku
• Jest zwracany do sesji, która wydała zapytanie wykonywane podczas wykrycia uszkodzenia
• Pojawia się w pliku alert.log
Postępowanie przy uszkodzeniu:
• sprawdzenie wpisów dziennika komunikatów bazy i systemu operacyjnego
• użycie dostępnych narzędzi diagnostycznych, aby stwierdzić rodzaj uszkodzenia
• ustalenie czy błąd istnieje po wielokrotnym uruchomieniu diagnostyki
• Rozwiązanie problemów ze sprzętem:
o karty pamięci
o kontrolery dysków
o dyski
• w razie konieczności, odzyskiwanie danych z uszkodzonych obiektów.
Narzędzia diagnostyczne:
nazwa Typ uszkodzenia Możliwość naprawy
DBVERIFY FIZYCZNE NIE
ANALYZE LOGICZNE N
DB_BLOCK_CHECKIN L N
DB_BLOCK_CHECKSUM F N
EXP F N
FLASHBACK L TAK
DBMS_REPAIR L T
BLOCK MEDIA RECOVERY BRAK T
DBVERIFY:
• działa tylko na plikach danych. Pliki dziennika powtórzeń nie mogą być sprawdzane
• sprawdza spójność bloku
• może być stosowane gdy baza danych jest otwarta
• nazwa programu użytkowego: dbv
• sformułowanie „page” oznacza blok
• jeśli nagłówek i koniec bloku nie zgadzają się. DBVERIFY ponownie odczytuje blok. Jeśli się
ponownie nie zgadzają sygnalizowane jest uszkodzenie
Polecenie ANALYZE:
• wykonuje logiczne sprawdzenie bloku
• nie oznacza bloku uszkodzonego jedynie zgłasza uszkodzenie
• Aktualizuje (waliduje) wpisy do indeksu i tablicy
ANALYZE TABLE table_name VALIDATE STRUCTURE CASCADE;
Wykłady z Administracji bazą danych Oracle 2010
48
ANALYZE INDEX index_name VALIDATE STRUCTURE;
DB_BLOCK_CHECKING i DB_BLOCK_CHECKSUM:
• DB_BLOCK_CHECKING:
o stanowi parametr inicjalizacyjny – działa w czasie rzeczywistym
o kontroluje poziom zgodności dla każdego bloku w trakcie przetwarzania
o można zapobiec uszkodzeniu danych
o Może być ustawiony za pomocą polecenia ALTER SESSION
• DB_BLOCK_CHECKSUM
o Stanowi parametr inicjalizacyjny
o Stwierdza czy dla każdego bloku suma kontrolna jest utrzymywana i zweryfikowana
o Może zapobiegać uszkodzeniu spowodowanym przez operacje I/O.
EXP:
Typowy eksport może być wykorzystany do wykrycia uszkodzenia.
Pakiet DBMS_REPAIR:
Dostępne w ramach pakietu procedury:
• CHECK_OBJECT
• FIX_CORRUPT_BLOCKS
• DUMP_ORPHAN_KEYS
• SEGMENT_FIX_STATUS
• SKIP_CORRUPT_BLOCKS
• ADMIN_TABLES
Wykrycie USZKODZEŃ,
Oszacowanie kosztów i korzyści z DBMS_REPAIR
Przywrócenie użyteczności obiektu
Naprawienie uszkodzeń i przebudowanie utraconych danych
Plecenie BLOCKRECOVER:
• polecenie RMAN
• identyfikuje backupy zawierające bloki do odzyskania
• odczytuje backupy i gromadzi pożądane bloki w buforach pamięci
• Zarządzanie sesją odzyskiwania bloków poprzez odczyt zarchiwizowanych dzienników z
backupu
• Nie może być używane do niekompletnego odzyskiwania
RMAN> BLOCKRECOVER DATAFILE 6 BLOCK 3;
Wykonywanie kopii zapasowych
Kopie zapasowe – rozwiązania:
• Recovery MAnager
• Oracle Secure Backup
o RMAN i Oracle Secure Backup to kompleksowe, szybkie rozwiązania dla procesu
tworzenia kopii zapasowych
Wykłady z Administracji bazą danych Oracle 2010
49
o zapewniają niezawodną ochronę danych przy niższym koszcie i złożoności
• Kopie zapasowe wykonywane przez użytkownika
o Zazwyczaj stosuje się własne skrypty
o Wymagają przestawienia bazy w odpowiedni tryb do tworzenia kopii zapasowych
o Przy tworzeniu kopii zapasowych opierają się na poleceniach systemu operacyjnego
Definicje pojęć:
• Strategia tworzenia kopii zapasowych może obejmować:
o całą bazę danych (whole backup = całościowy)
o część bazy danych (partial = częściowy)
• Typ kopii zapasowej może uwzględniać:
o wszystkie bloki danych w ramach wybranych plików (full = pełen)
o tylko informacje, któ®e zmieniły się od czasu poprzedniej kopii zapasowej
(incremental=przyrostowy),
� Zbiorczy (cumulative – zmiany do ostatniego poziomu 0)
� Różnicowy (zmiany do ostatniej kopii przyrostowej)
• Kopie zapasowe mogą być przygotowane w trybie:
o Offline (cold = „na zimno”), spójna
o Online (hot = „na gorąco”), niespójna
Przełączenie w tryb backup
• polecenie DML mogą dotyczyć różnych części bloku modyfikowanych w różnym czasie – w
określonych momentach może zachodzić niespójność. Jeżeli w tym czasie ma nastąpić
kopiowanie z OS, blok musi zostać zablokowany („zamrożony”) na czas wykonania kopii
• RMAN dysponuje wewnętrznymi rozwiązaniami (odczytuje blok do czasu uzyskania
spójności)
• Dla administratora rozwiązanie stanowi przełączenie przestrzeni tabel (lub całej bazy) w tryb
kopii zapasowej. W efekcie generowanie jest dodatkowe ponawianie i obraz każdego bloku
przez modyfikacją umieszczany jest w dzienniku ponawiania – może być wykorzystywany
podczas odzyskiwania bloków.
• W celu zmniejszenia kosztów związanych z utrzymaniem dodatkowych danych ponawianych,
zaleca się przestawienie w tryb kopii zapasowej tylko tej przestrzeni tabel, której pliki są
aktualnie kopiowane
Określanie plików do ręcznego backupu
Kopiowaniu podlega tylko jeden plik kontrolny (pozostałe są takie same – multipleksowanie).
Kopia zapasowa w trybie NOARCHIVELOG:
Zamknąć bazę danych: SQL> SHUTDOWN IMMEDIATE
Skopiować pliki danych do lokalizacji kopii zapasowej:
$cp $ORACLE_BASE/ORCL/data file/*.dbf \
>/u02/backup/datafile
Uruchomić bazę danych: SQL> STARTUP
• Spójną, całościową kopię bazy danych w trybie NOARCHIVELOG należy wykonać przy zamkniętej
bazie danych – jedyna możliwość
Wykłady z Administracji bazą danych Oracle 2010
50
• W trybie ARCHIVELOG można wykonać kopię niespójną – podczas tworzenia backupu baza
danych może pracować
Kopia zapasowa w trybie ARCHIVELOG:
Określić przestrzenie tabel i należące do nich pliki: selekt file_name,tablespace_name from
dba_data_files;
Każdą z przestrzeni tabel należy przestawić w tryb kopii zapasowej:
alter tablespace sers Begin backup;
alter database Begin backup
• W trybie ARCHIVELOG nie trzeba zamykać bazy danych przed kopiowaniem plików. Rezultat
stanowi niespójna baza danych, którą można odzyskać poprzez dane ponawiane do trybu
spójnego
• Polecenie ALTER TABLESPACE dotyczy plików danych z jednej przestrzeni tabel
• Polecenie ALTER DATABASE dotyczy wszystkich plików danych w bazie
Kopia zapasowa w trybie ARCHIVELOG
Skopiować pliki danych dla danej przestrzeni do lokalizacji backupu,
Przywrócić przestrzeń tale z trybu backupu:
SQL> ALTER TABLESPACE sers END BACKUP
Backup należy zakończyć przywróceniem przestrzeni tabel z trybu kopii zapasowej – nie można
zamknąć bazy danych w tym trybie – zgłoszony zostanie błąd.
Kopia zapasowa pliku kontrolnego
Backup pliku kontrolnego poprzez skopiowanie obrazu do określonego pliku:
alter database backup controlfile to ‘/u01/backup/controlfile.bak’;
Backup pliku kontrolnego poprzez utworzenie skryptu go tworzącego w pliku śladu:
alter database backup controlfile to trace
• Backup pliku kontrolnego należy wykonać po każdej zmianie w strukturze bazy danych
• Backup pliku tworzy kopię binarną pliku kontrolnego
• W pliku śladu (np. $ORACLE_BASE/diag/rbdms/orcl/trace) powstaje wersja tekstowa pliku
kontrolnego, który po uruchomieniu stanowi skrypt uruchomieniowy dla pliku kontrolnego.
Autorzy: Justyna & Michał