Struktura bazy danych
Ćwiczenia laboratoryjne (1)
Podstawy uruchamiania serwera bazy danych
1.
Przy pomocy programu Putty, połącz się z serwerem miner.cs.put.poznan.pl. Dla
wygody otwórz dwie sesje w dwóch różnych okienkach.
2.
W jednej z Twoich sesji (będziemy ją nazywać Sesją A) uruchom program SQL*Plus
i zaloguj się jako „sys as sysdba”.
3.
Uruchom serwer bazy danych w trybie Open, korzystając z domyślnego pliku
parametrów.
startup pfile=
'$HOME/admin/pfile/initDB
x
.ora';
4.
utwórz dynamiczny plik parametrów
create spfile from pfile=
'$HOME/admin/pfile/initDB
x
.ora';
5.
Porównaj dynamiczny (
$ORACLE_HOME/dbs/spfileDB
x
.ora
) i
statyczny plik parametrów
6.
Po pomyślnym uruchomieniu serwera, w drugiej sesji systemu operacyjnego
(będziemy ją nazywać Sesją B) również uruchom program SQL*Plus i spróbuj
zalogować się jako użytkownik „scott” z hasłem „tiger”.
Zatrzymywanie serwera bazy danych
7.
Nie wylogowując użytkownika „scott” (Sesja B), spróbuj zatrzymać serwer bazy
danych w trybie Normal. Co się stało i dlaczego?
shutdown
8.
Wyloguj użytkownika „scott” z bazy danych. Czy teraz doszło do zatrzymania
serwera?
9.
Uruchom ponownie serwer bazy danych (Sesja A).
startup
10.
W innej sesji (Sesja B) zaloguj się ponownie jako „scott”. Wstaw jeden rekord do
tabeli Zespoly. Nie zatwierdzaj transakcji.
11.
Nie wylogowując użytkownika „scott” (Sesja B), spróbuj zatrzymać serwer bazy
danych w trybie Transactional. Co się stało i dlaczego?
shutdown transactional
12.
Zatwierdź transakcję rozpoczętą przez użytkownika „scott”. Następnie spróbuj
wykonać zapytanie do tabeli Zespoly. Co się stało i dlaczego?
13.
Uruchom ponownie serwer bazy danych (Sesja A).
startup
14.
W innej sesji (Sesja B) zaloguj się ponownie jako „scott”.
15.
Nie wylogowując użytkownika „scott” (Sesja B), spróbuj zatrzymać serwer bazy
danych w trybie Immediate. Co się stało i dlaczego?
shutdown immediate
Pozostałe tryby pracy serwera bazy danych
16.
Uruchom serwer bazy danych w trybie Nomount (Sesja A).
startup nomount
17.
W innej sesji (Sesja B) spróbuj zalogować się jako „scott”. Co się stało i dlaczego?
18.
Wprowadź serwer bazy danych w tryb Mount, a następnie Open.
alter database mount
alter database open
19.
W innej sesji (Sesja B) spróbuj zalogować się jako „scott”.
20.
Jako administrator (Sesja A), przełącz serwer bazy danych w tryb Restricted Session.
alter system enable restricted
session;
select logins from v$instance;
21.
Sprawdź, czy nadal zalogowany użytkownik „scott” może wykonywać zapytania do
bazy danych.
22.
Wyloguj użytkownika „scott” (Sesja B), a następnie spróbuj zalogować ponownie. Co
się stało i dlaczego?
23.
Jako administrator (Sesja A), wyłącz tryb Restricted Session. Czy teraz użytkownik
„scott” może się zalogować do bazy danych (Sesja B)? Pozostaw użytkownika „scott”
zalogowanego do bazy danych.
alter system disable
restricted session;
select logins from v$instance;
Zarządzanie sesjami użytkowników
24.
Jako administrator (Sesja A), korzystając z perspektywy V$SESSION wykonaj
zapytanie wyświetlające listę aktualnych sesji użytkowników. Jaki jest identyfikator,
numer seryjny i status sesji użytkownika „scott”?
select username, sid, serial#,
status from V$session;
25.
Jako administrator (Sesja A) przerwij sesję użytkownika „scott”. Jaki jest teraz status
sesji użytkownika „scott”?
alter system kill session
'sid,serial#'
26.
Jako „scott” (Sesja B) spróbuj wykonać zapytanie do bazy danych. Co się stało i
dlaczego?
Obserwacja struktury bazy danych
27.
Jako administrator (Sesja A), korzystając z perspektywy v$database wyświetl nazwę
Twojej bazy danych.
select name from v$database;
28.
Jako administrator (Sesja A), korzystając z perspektywy v$controlfile wyświetl nazwy
wszystkich plików kontrolnych Twojej bazy danych.
select name from
v$controlfile;
29.
Jako administrator (Sesja A), korzystając z perspektywy v$datafile wyświetl nazwy
wszystkich plików danych Twojej bazy danych.
select name from v$datafile;
30.
Jako administrator (Sesja A), korzystając z perspektywy v$tempfile wyświetl nazwy
wszystkich plików tymczasowych Twojej bazy danych.
select name from v$tempfile;
31.
Jako administrator (Sesja A), korzystając z perspektywy v$logfile wyświetl nazwy
wszystkich plików dziennika powtórzeń Twojej bazy danych.
select member from v$logfile;
Obsługa dziennika powtórzeń (wszystkie kroki jako administrator (Sesja A))
32.
Do każdej grupy dziennika powtórzeń dodaj po jednym dodatkowym pliku. Nowe
pliki umieść w tym samym katalogu, w którym znajdowały się dotychczasowe pliki
dziennika powtórzeń. Zweryfikuj wynik swojej pracy przy pomocy perspektywy
v$logfile.
alter database DB
x
add logfile member
'$HOME/oradata/redo11.log'
to group 1;
alter database DB
x
add logfile member
'$HOME/oradata/redo12.log'
to group 2;
select * from v$logfile;
alter system switch logfile;
alter system switch logfile;
alter system switch logfile;
select * from v$logfile;
33.
Do dziennika powtórzeń dodaj nową grupę o dwóch elementach o rozmiarze 500K
każdy. Zweryfikuj wynik swojej pracy przy pomocy perspektywy v$logfile.
alter database DB
x
add logfile group 3
('$HOME/oradata/redo03.log',
'$HOME/oradata/redo13.log')
size 5M;
select * from v$logfile;
34.
Która grupa dziennika powtórzeń jest w tej chwili aktywna (v$log)? Wymuś
przełączenie dziennika powtórzeń. Która grupa dziennika powtórzeń jest w tej chwili
aktywna?
select * from v$log;
alter system switch logfile;
select * from v$log;
35.
Usuń trzecią, dodaną przez Ciebie grupę dziennika powtórzeń. Pamiętaj też o ręcznym
skasowaniu jej plików z dysku (serwer bazy danych nie usunie plików).
alter database DB
x
drop logfile
group 3;
select * from v$logfile;
36.
Usuń po jednym, dodanym wcześniej, pliku z pozostałych grup dziennika powtórzeń
tak, aby przywrócić stan sprzed ćwiczenia. Pamiętaj też o ręcznym skasowaniu tych
plików z dysku.
alter database DB
x
drop logfile member
'$HOME/oradata/redo11.log';
alter database DB
x
drop logfile member
'$HOME/oradata/redo12.log';
Dublowanie pliku kontrolnego (wszystkie kroki jako administrator (Sesja A)) - SPFILE
37.
Zmodyfikuj dynamiczny plik parametrowy (spfile) dodając informacje o kopiach plikó
kontrolnego.
alter system set
control_files=
‘$HOME/oradata/control01.ctl’,
‘$HOME/oradata/control02.ctl’
scope=spfile;
38.
Zatrzymaj serwer bazy danych.
shutdown
39.
Na poziomie systemu operacyjnego wykonaj kopię pliku kontrolnego. Ustaw
uprawnienia „r” i „w” na pliku-duplikacie.
40.
Uruchom serwer bazy danych w trybie Open.
41.
Korzystając z perspektywy v$controlfile wyświetl nazwy wszystkich plików
kontrolnych Twojej bazy danych. Czy utworzony duplikat jest widoczny?
select * from v$controlfile
42.
Zatrzymaj serwer bazy danych.
shutdown
43.
Usuń dynamiczny plik parametrowy (spfile) i kopię pliku kontrolnego –
OSTROŻNIE!!!
44.
Uruchom instancje korzystając ze statycznego pliku parametrowego (pfile)
Dublowanie pliku kontrolnego (wszystkie kroki jako administrator (Sesja A)) - PFILE
45.
Zatrzymaj serwer bazy danych.
shutdown
46.
Na poziomie systemu operacyjnego wykonaj kopię pliku kontrolnego. Ustaw
uprawnienia „r” i „w” na pliku-duplikacie.
47.
Zmodyfikuj plik parametrów inicjalizacyjnych, dopisując informacje o drugim
egzemplarzu pliku kontrolnego.
48.
Uruchom serwer bazy danych w trybie Open.
49.
Korzystając z perspektywy v$controlfile wyświetl nazwy wszystkich plików
kontrolnych Twojej bazy danych. Czy utworzony duplikat jest widoczny?
select * from v$controlfile
50.
Ponownie utwórz dynamiczny plik parametrowy (spfile)
Obsługa przestrzeni tabel (wszystkie kroki jako administrator (Sesja A))
51.
Korzystając z perspektywy dba_tablespaces wyświetl nazwy wszystkich przestrzeni
tabel w Twojej bazie danych.
select TABLESPACE_NAME from
dba_tablespaces;
52.
Z których plików danych składa się przestrzeń tabel Users? Odpowiedzi szukaj w
perspektywie dba_data_files.
select FILE_NAME from
dba_data_files
where TABLESPACE_NAME =
'USERS'
53.
Utwórz nową przestrzeń tabel Moja, składającą się z jednego pliku danych o nazwie
Moja01.dbf i rozmiarze 5M. Przestrzeń Moja powinna być zarządzana lokalnie (extent
management local). Zweryfikuj wynik swojej pracy przy pomocy perspektyw
dba_tablespaces i dba_data_files.
create tablespace moja
datafile
'$HOME/oradata/moja01.dbf'
size 5M online;
select TABLESPACE_NAME,
EXTENT_MANAGEMENT from
dba_tablespaces;
select FILE_NAME,
TABLESPACE_NAME, BYTES, STATUS
from dba_data_files;
54.
W celu powiększenia rozmiaru przestrzeni tabel Moja, dodaj do niej drugi plik danych
o nazwie Moja02.dbf i rozmiarze 5M. Zweryfikuj wynik swojej pracy przy pomocy
perspektywy dba_data_files.
alter tablespace moja add
datafile
'$HOME/oradata/moja02.dbf'
size 5M;
select FILE_NAME,
TABLESPACE_NAME, BYTES, STATUS
from dba_data_files;
55.
Usuń z bazy danych przestrzeń tabel Moja. Pamiętaj o skasowaniu jej plików z dysku.
drop tablespace moja including
contents
[and datafiles]
[cascade constraints];
select TABLESPACE_NAME from
dba_tablespaces;
56.
Utwórz nową przestrzeń tabel wycofania.
create undo tablespace undo2
datafile
’$HOME/oradata/UNDO2.dbf’ size
5M;
57.
Ustaw nową przestrzeń tabel wycofania jako domyślną.
alter system set
undo_tablespace=undo2;
58.
Jako administrator bazy danych (Sesja A), wyświetl nazwy, status i nazwy przestrzeni
tabel wszystkich segmentów wycofania.
select SEGMENT_NAME, OWNER,
STATUS, TABLESPACE_NAME from
dba_rollback_segs;
59.
Utwórz nową tymczasową przestrzeń tabel.
create temporary tablespace
temp2 tempfile
’$HOME/oradata/TEMP2.dbf’ size
5M uniform size 2M;
60.
Ustaw nową tymczasową przestrzeń tabel jako domyślną.
alter database default
temporary tablespace temp2;
61.
W jednej sesji wykonaj zapytanie wykonujące operacje sortowania dyskowego np.:
select * from v$parameter a,
v$parameter b, v$parameter c,
v$parameter d
order by a.name;
62.
W drugiej sesji sprawdz wykorzystanie tymczasowej przestrzeni tabel (kilka razy w
trakcie trwania poprzedniego zapytania)
select * from v$sort_usage;
SELECT name,value FROM
v$sysstat WHERE name LIKE
'sort%';
Logiczne struktury danych
63.
Jako użytkownik „scott” utwórz w bazie danych tabelę Faktury(numer number(8),
kwota number (10,2), odbiorca varchar2(50)) o następujących parametrach
składowania:
a.
przestrzeń tabel: Users
b.
rozmiar pierwszego ekstentu: 40K
c.
rozmiar drugiego ekstentu: 64K
d.
procentowy wzrost rozmiaru następnych ekstentów: 100%
create table faktury
(numer number (8),
kwota number(10,2),
odbiorca varchar2 (50))
tablespace USERS
storage(
initial 40K
next 64K
pctincrease 100);
64.
Jako administrator (Sesja A), przy pomocy perspektywy dba_extents odczytaj
informacje o ekstentach zaalokowanych dla tabeli Faktury. Ile ekstentów posiada ta
tabela?
select * from dba_extents
where segment_name = 'FAKTURY'
and owner = 'SCOTT';
65.
Jako „scott” (Sesja B) wstaw jeden przykładowy rekord do tabeli Faktury.
insert into faktury values
(1,2,'test');
66.
Jako „scott” (Sesja B), wielokrotnie korzystając z poleceń „insert select”, powiel
zawartość tabeli Faktury tak, aby uzyskać około 64000 rekordów.
insert into faktury (select *
from faktury);
67.
Jako administrator (Sesja A), przy pomocy perspektywy dba_extents ponownie
odczytaj informacje o ekstentach zaalokowanych dla tabeli Faktury. Ile teraz
ekstentów posiada ta tabela?
select * from dba_extents
where segment_name = 'FAKTURY'
and owner = 'SCOTT';
68.
Jako „scott” (Sesja B) usuń wszystkie rekordy tabeli Faktury przy pomocy polecenia
delete. (dlaczego usuwanie trwa tak długo?)
delete from faktury;
69.
Jako administrator (Sesja A), przy pomocy perspektywy dba_extents ponownie
odczytaj informacje o ekstentach zaalokowanych dla tabeli Faktury. Ile teraz
ekstentów posiada ta tabela i dlaczego?
select * from dba_extents
where segment_name = 'FAKTURY'
and owner = 'SCOTT';
70.
Jako „scott” (Sesja B), wymuś zwrot niewykorzystywanych ekstentów tabeli Faktury
przy pomocy polecenia truncate table.
truncate table faktury;
71.
Jako administrator (Sesja A), przy pomocy perspektywy dba_extents ponownie
odczytaj informacje o ekstentach zaalokowanych dla tabeli Faktury. Ile teraz
ekstentów posiada ta tabela?
select * from dba_extents
where segment_name = 'FAKTURY'
and owner = 'SCOTT';
72.
Jako „scott” (Sesja B), usuń tabelę Faktury z bazy danych.
drop table faktury;