Bazy danych 1 1 Architektura bazy danych Oracle Instancja (ang. instance) [14] - zestaw procesów uruchomiony w pamiÄ™ci komputera i udostÄ™pniajÄ…cy dane i operacje bazy danych; caÅ‚ość procesów i plików skÅ‚adajÄ…cych siÄ™ na pojedynczÄ… bazÄ™ danych Oracle 11g. Rodzaje wykorzystywanych plików [5] " pliki danych, " pliki dziennika powtórzeÅ„ (co najmniej dwa) przechowujÄ… informacje dotyczÄ…ce dodawania, modyfi- kowanie i usuwania danych, " archiwizowane pliki dziennika (tryb ARCHIVELOG), " pliki sterujÄ…ce zawierajÄ… informacje na temat fizycznej struktury samej bazy, " pliki parametrów inicjujÄ…cych, " pliki alertów przechowujÄ… informacje dotyczÄ…ce dziaÅ‚ania caÅ‚ej instancji, " dziennika Å›ladu zawierajÄ… informacje dotyczÄ…ce procesów dziaÅ‚ajÄ…cych w tle, " pliki kopii zapasowych, " pliki haseÅ‚. Struktury pamiÄ™ci [5] " Globalny obszar systemu (ang. System Global Area SGA) jest zbiorem struktur we wspólnej pamiÄ™ci, wykorzystywanych przez instancjÄ™ Oracle i wspólnie przez użytkowników instancji bazy danych. " Bufor podrÄ™czny (ang. buffer cache) przechowuje bloki danych z dysk, które zostaÅ‚y ostatnio odczytane dla potrzeb instrukcji SELECT lub zmodyfikowane bloki, które zostaÅ‚y zmienione lub dodane przez instrukcje DML. " Wspólny obszar (ang. shared pool) zawiera pamiÄ™ci podrÄ™czne: Pamięć podrÄ™czna biblioteki (ang. library cache) przechowuje informacje o instrukcjach SQL i PL/SQL wykonywanych w bazie danych. Pamięć podrÄ™czna sÅ‚ownika danych (ang. data dictionary cache) to kolekcja tabel bazy danych, których wÅ‚aÅ›cicielem sÄ… schematy SYS i SYSTEM i które zawierajÄ… metadane na temat bazy danych, jej struktur oraz uprawnieÅ„ i ról użytkowników bazy danych. Pamięć podrÄ™czna serwera (ang. server result cache) zawiera dwie pamiÄ™ci podrÄ™czne. Pierwsza SQL query result cache sÅ‚uży do przechowywania wyników zapytaÅ„ oraz fragmentów zapytaÅ„. Druga pamięć podrÄ™czna PL/SQL function result cache przechowuje wyniki funkcji. Inne. " Bufor dziennika powtórzeÅ„ (ang. redo log buffer) przechowuje najnowsze zmiany dokonane w blokach danych plików danych. Po zapeÅ‚nieniu bufora dziennika powtórzeÅ„ w jednej trzeciej lub co trzy sekundy wpisy dziennika powtórzeÅ„ zostajÄ… zapisane do plików dziennika powtórzeÅ„. " Obszar dużych struktur pamiÄ™ciowych (ang. large pool) to opcjonalny obszar SGA. Obszar ten używany jest przez transakcje, które operujÄ… na co najmniej dwóch bazach danych, bufory komunikatów dla procesów wykonujÄ…cych zapytania równolegÅ‚e oraz równolegÅ‚e operacje tworzenia kopii zapasowych i odtwarzania RMAN. 1 " Obszar Java (ang. Java pool) używany jest przez Oracle JVM (Java Virtual Machine) do obsÅ‚ugi wszystkich kodów jÄ™zyka Java oraz danych należących do sesji użytkownika. Kod Java i dane sÄ… przecho- wywane w obszarze Java w sposób analogiczny do sposobu, w jaki kody SQL i PL/SQL przechowywane sÄ… w pamiÄ™ci podrÄ™cznej we wspólnym obszarze. " Obszar strumieni (ang. streams pool) przechowuje dane i struktury kontrolne sÅ‚użące do obsÅ‚ugi funkcji Oracle Streams dostÄ™pnej w Oracle Enterprise Edition. Oracle Streams zarzÄ…dza dzieleniem danych i zdarzeÅ„ w Å›rodowisku rozproszonym. " Globalny obszar programów (ang. Program Global Area - PGA) to obszar pamiÄ™ci zaalokowany i do- stÄ™pny wyłącznie dla jednego procesu. Konfiguracja PGA zależy od sposobu konfiguracji połączenie z bazÄ… danych Oracle: serwer współdzielony (ang. shared server) wielu użytkowników współdzieli połączenie z bazÄ… danych, informacje na temat sesji użytkownika przechowywane sÄ… w SGA, serwer dedykowany (ang. dedicated server) każdy proces użytkownika posiada wÅ‚asne połączenie, pamięć sesji znajduje siÄ™ w PGA. Procesy drugoplanowe Procesy drugoplanowe (ang. background processes) [14] procesy realizujÄ…ce dostÄ™p do wystartowanej bazy danych Oracle 11g, a wiÄ™c peÅ‚niÄ…ce istotna rolÄ™ w implementacji bazy danych. Przy rozruchu bazy danych uruchamiane sÄ… różnorakie procesy, dziaÅ‚ajÄ…ce potem niezależnie od siebie i wykonujÄ…ce przeznaczone im czynnoÅ›ci, aż do zamkniÄ™cia bazy danych. Procesy drugoplanowe [5]: " SMON to proces monitora systemu (ang. system monitor). W razie uszkodzenia systemu albo awarii instancji na przykÅ‚ad z powodu przerwy w dostawie prÄ…du albo uszkodzenia procesora proces SMON przywraca stan instancji przez wykonanie wpisów z plików dziennika powtórzeÅ„ w plikach danych. " Jeżeli połączenie użytkownika zostanie zerwane albo w inny sposób ulegnie uszkodzeniu, PMON, znany również jako monitor procesów (ang. process monitor), wykona zadania porzÄ…dkowe. Proces czyÅ›ci bufor pamiÄ™ci podrÄ™cznej bazy danych, a także wszystkie inne zasoby, z których korzystaÅ‚o połączenie użytkownika. " RECO, czyli proces odtwarzania (ang. recovery process), obsÅ‚uguje awarie rozproszonych transakcji (to znaczy transakcji, które wykonujÄ… zmiany w tabelach należących do co najmniej dwóch baz danych). " DBWn Proces zapisujÄ…cy do bazy (ang. database writer), znany we wczeÅ›niejszych wersjach Oracle jako DBWR, zapisuje w plikach danych nowe lub zmienione bloki danych (tzn. bloki niezatwierdzone ang. dirty blocks), znajdujÄ…ce siÄ™ w buforze pamiÄ™ci podrÄ™cznej. " LGWR, czyli proces zapisujÄ…cy do dziennika (ang. log writer ), odpowiada za zarzÄ…dzanie buforem dziennika powtórzeÅ„. Transakcja jest uznawana za zakoÅ„czonÄ… dopiero wówczas, gdy LGWR zapisze w dzienniku powtórzeÅ„ dane powtórzeÅ„, włączajÄ…c w to rekord zatwierdzenia. Co wiÄ™cej, DBWn nie mo- że zapisać w plikach danych niezatwierdzonych buforów znajdujÄ…cych siÄ™ w buforze pamiÄ™ci podrÄ™cznej, dopóki LGWR nie zapisze danych powtórzenia. " Proces punktów kontrolnych (ang. checkpoint process), czyli CKPT, pomaga zmniejszyć ilość czasu potrzebnÄ… do przywrócenia instancji. " ARCn Jeżeli baza danych znajuje siÄ™ w trybie ARCHIVELOG, wówczas w momencie gdy dziennik powtórzeÅ„ ulegnie zapeÅ‚nieniu i dane powtórzeÅ„ zacznÄ… być zapisywane w nastÄ™pnym dzienniku powtó- rzeÅ„ w kolejce, proces archiwizujÄ…cy (ang. archiver process) skopiuje dzienniki powtórzeÅ„ do co najmniej jednego katalogu, urzÄ…dzenia lub sieciowej lokalizacji docelowe. 2 2 Oracle Net Services Oracle Net Services [14] to podsystem programowy, który obsÅ‚uguje połączenia sieciowe z bazÄ… danych w korporacyjnych, heterogenicznych systemach komputerowych opartych na sieci. CzęściÄ… podsystemu jest Oracle Net zawiadujÄ…ca transferem danych pomiÄ™dzy aplikacjami zdalnymi a bazÄ… danych Oracle; transfer danych jest realizowany na bazie standardowego protokoÅ‚u sieciowego, jak na przykÅ‚ad TCP/IP. Deskryptor połączenia [5] okreÅ›la protokół komunikacyjny, nazwÄ™ serwera i nazwÄ™ usÅ‚ugi instancji uży- wanÄ… podczas przetwarzania zapytania. PrzykÅ‚adowy deskryptor połączenia: (DESCRIPTION= (ADDRESS= (PROTOCOL=tcp)(HOST=server)(PORT=1521)) (CONNECT_DATA= (SERVICE_NAME=ORCL))) Użytkownicy [5] nie muszÄ… wprowadzać deskryptora połączenia każdorazowo, gdy chcÄ… uzyskać dostÄ™p do zdalnych danych. Administrator bazy danych może zdefiniować nazwy usÅ‚ug (lub aliasy), które odwoÅ‚ujÄ… siÄ™ do tych deskryptorów. Nazwy usÅ‚ug sÄ… przechowywane w pliku tnsnames.ora. UsÅ‚uga katalogowa Oracle Internet Directory [5] uÅ‚atwia obsÅ‚ugÄ™ serwerów LDAP (ang. Lightweight Directory Access Protocol), które w rozproszonym Å›rodowisku sieciowym Oracle zajmujÄ… siÄ™ scentralizowanym rozpoznawaniem nazw sieciowych. PrzykÅ‚adowa zawartość pliku tnsnames.ora: LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORACLR_CONNECTION_DATA = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) (CONNECT_DATA = (SID = CLRExtProc) (PRESENTATION = RO) ) ) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) ) Każdy serwer bazodanowy [5] znajdujÄ…cy siÄ™ w sieci musi mieć plik listener.ora. Zawiera on nazwy i adresy wszystkich procesów nasÅ‚uchujÄ…cych komputera, a także wyszczególnia instancje, które sÄ… przez te procesy obsÅ‚ugiwane. PrzykÅ‚adowa zawartość pliku listener.ora: LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) ) SID_LIST_LISTENER = (SID_LIST = (SID_DESC = 3 (SID_NAME = CLRExtProc) (ORACLE_HOME = C:\\...\\product\\11.2.0\\dbhome_1) (PROGRAM = extproc) (ENVS = "EXTPROC_DLLS=ONLY:C:\\...\\liborcl.dll") ) ) ADR_BASE_LISTENER = C:\... 3 Użytkownicy, schematy i profile Tworzenie użytkownika [8]: CREATE USER user IDENTIFIED { BY password | EXTERNALLY [ AS certificate_DN ] | GLOBALLY [ AS [ directory_DN ] ] } [ DEFAULT TABLESPACE tablespace | TEMPORARY TABLESPACE { tablespace | tablespace_group_name } | { QUOTA { size_clause | UNLIMITED } ON tablespace }... EDO | PROFILE profile | PASSWORD EXPIRE | ACCOUNT { LOCK | UNLOCK } [ DEFAULT TABLESPACE tablespace | TEMPORARY TABLESPACE { tablespace | tablespace_group_name } | { QUOTA { size_clause | UNLIMITED } ON tablespace }... | PROFILE profile | PASSWORD EXPIRE | ACCOUNT { LOCK | UNLOCK } ]... ] ; PrzykÅ‚ad: CREATE USER new_user IDENTIFIED BY 12345; Usuwanie użytkownika [8]: DROP USER user [ CASCADE ] ; PrzykÅ‚ad: DROP USER new_user CASCADE; Schemat użytkownika [5] posiada takÄ… samÄ… nazwÄ™ jak użytkownik. Schemat może zawierać różne rodza- je obiektów np. tabele, widoki, indeksy, sekwencje itd. WÅ‚aÅ›ciciel schematu lub administrator może może nadawać uprawnienia innym użytkownikom do tych obiektów. Profil bazy danych [5] to opatrzony nazwÄ… zestaw informacji o ograniczeniach korzystania z zasobów, przypisywanych konkretnemu użytkownikowi. 4 Uprawnienia i role Uprawnienie systemowe [13] umożliwia użytkownikowi wykonywanie okreÅ›lonych czynnoÅ›ci w bazie da- nych, takich jak uruchamianie instrukcji DDL. Na przykÅ‚ad uprawnienie CREATE TABLE umożliwia użyt- kownikowi utworzenie tabeli w jego schemacie. Uprawnienie obiektowe [13] pozwala użytkownikowi na wykonywanie okreÅ›lonych czynnoÅ›ci na obiektach bazy danych, takich jak uruchamianie instrukcji DML na tabelach. (...) role [5] to nazwana grupa uprawnieÅ„. Ponadto każdej roli można przypisać inne role. Nadanie uprawnieÅ„ systemowych [8]: 4 GRANT { system_privilege | role | ALL PRIVILEGES } [, { system_privilege | role | ALL PRIVILEGES } ]... TO grantee_clause [ WITH ADMIN OPTION ] PrzykÅ‚ad: GRANT CREATE SESSION TO new_user; Odebranie uprawnieÅ„ systemowych [8]: REVOKE { system_privilege | role | ALL PRIVILEGES } [, { system_privilege | role | ALL PRIVILEGES } ]... FROM grantee_clause PrzykÅ‚ad: REVOKE CREATE SESSION FROM new_user; Nadanie uprawnieÅ„ obiektowych [8]: GRANT { object_privilege | ALL [ PRIVILEGES ] } [ (column [, column ]...) ] [, { object_privilege | ALL [ PRIVILEGES ] } [ (column [, column ]...) ] ]... on_object_clause TO grantee_clause [ WITH HIERARCHY OPTION ] [ WITH GRANT OPTION ] PrzykÅ‚ad: GRANT SELECT ON other_user.test TO new_user; Odebranie uprawnieÅ„ obiektowych [8]: REVOKE { object_privilege | ALL [ PRIVILEGES ] } [, { object_privilege | ALL [ PRIVILEGES ] } ]... on_object_clause FROM grantee_clause [ CASCADE CONSTRAINTS | FORCE ] PrzykÅ‚ad: REVOKE SELECT ON other_user.test FROM new_user; 5 5 PrzykÅ‚adowa treść laboratorium Na podany temat każda grupa (2 osobowa) powinna przygotować nastÄ™pujÄ…ce skrypty (*.sql): 1. TworzÄ…cy co najmniej 7 - 10 procedur oraz funkcji zapewniajÄ…cych peÅ‚nÄ… obsÅ‚ugÄ™ bazy danych. 2. UsuwajÄ…cy procedury oraz funkcje. 3. TworzÄ…cy co najmniej 5-10 wyzwalaczy. 4. UsuwajÄ…cy wyzwalacze. Do wszystkich procedur, funkcji oraz wyzwalaczy powinien zostać dodany fragment kodu testujÄ…cy ich dziaÅ‚anie. Wszystkie podprogramy powinny znalezć siÄ™ w utworzonym pakiecie. Podprogramy bardzo proste oraz skopiowane z wykÅ‚adu lub instrukcji laboratoryjnych (po zmianie nazw tabel) nie bÄ™dÄ… oceniane. W skryptach należy co najmniej raz użyć: instrukcji SELECT INTO, kursora, kursora z co najmniej jednym parametrem, wÅ‚asnego wyjÄ…tku, błędu aplikacji oraz pakietu DBMS RANDOM. ProszÄ™ przynieść wszystkie materiaÅ‚y stworzone podczas laboratorium nr 11 oraz 12. Literatura [1] Thomas Connolly, Carolyn Begg, Systemy baz danych , Wydawnictwo RM, 2004 [2] Jeffrey D. Ullman, Jennifer Widom, Podstawowy wykÅ‚ad z systemów baz danych , WNT, 2001 [3] Jeffrey D. Ullman, Jennifer Widom, Systemy baz danych PeÅ‚ny wykÅ‚ad , WNT, 2006 [4] Kevin Loney, Bob Bryla, Oracle Database 10g PodrÄ™cznik administratora baz danych , Helion, 2008 [5] Scott Urman, Ron Hardman, Michael McLaughlin, Oracle Database 10g Programowanie w jÄ™zyku PL/SQL , Helion, 2008 [6] Ramez Elmasri, Shamkant B. Navathe, Wprowadzenie do systemów baz danych , Helion, 2005 [7] Jose A. Ramalho, Oracle 8i , Mikom, 2001 [8] Oracle®Database SQL Language Reference 11g Release 1 (11.1) B28286-02 (b28286.pdf) [9] Oracle®Database SQL Language Quick Reference 11g Release 1 (11.1) B28285-02 (b28285.pdf) [10] Joe Celko, SQL Zaawansowane techniki programowania , PWN, 2008 [11] Jason Price, Oracle Database 11g i SQL Programowanie , Helion, 2009 [12] Oracle®Database PL/SQL Language Reference 11g Release 1 (11.1) B28370-02 (B28370.pdf) [13] Jason Price, Oracle Database 11g i SQL Programowanie, Helion, 2009 [14] Oracle Database 11g. Przewodnik dla poczÄ…tkujÄ…cych , I. Abramson, M. Abbey, M. Corey, M. Malcher, Helion, 2010 6