Sunteți pe pagina 1din 58

CAP2.

Arhitectura unei baze de


date
• Structurile interne de organizare a datelor
– Structurile de memorie internă (Instanţa
ORACLE)
– Organizarea spaţiului de stocare (într-o BD
Oracle)
• Crearea unei baze de date
Preambul: Moduri de reprezentare a
structurilor de date
• Viziunea conceptuală vs. viziunea internă
(de implementare)
• Schema conceptuală vs. schema internă
• Tipuri de înregistrări conceptuale vs. tipuri
de înregistrări interne
• DDL conceptual (standardizat) vs. DDL
intern (adaptat)
CREATE TABLE Clienti (
Codcl NUMBER(4) PRIMARY KEY,
Dencl VARCHAR (30) UNIQUE,
Codfiscal CHAR(10)
);
vs.:
CREATE TABLE Clienti (
Codcl NUMBER(4)
CONSTRAINT pk PRIMARY KEY
USING INDEX TABLESPACE users PCTFREE 10
Dencl VARCHAR (30)
STORAGE (INITIAL 10 NEXT 10) REVERSE,
CONSTRAINT uk UNIQUE
DEFERRABLE INITIALLY IMMEDIATE,
Codfiscal CHAR(10)
) TABLESPACE users
PCTFREE 20
PCTUSED 30
STORAGE (INITIAL 100K NEXT 50K MINEXTENTS 1
MAXEXTENTS 10 PCTINCREASE 0)
Structuri de organizare a
spaţiului specifice ORACLE

 Instanţa ORACLE
 Organizarea spaţiului de stocare într-o BD
Oracle
(a) Structuri de memorie internă:
Instanţa Oracle
Procesare SQL DML
Segmentul ROLLBACK

Tabela

Vechea Noua
imagine imagine

Comanda DML
Segmentul ROLLBACK
Etapele pornirii unei instante

Instanţa este Este deschis Sunt deschise toate


pornită fişierul de fişierele descrise de
control fişierul de control

SHUTDOWN NOMOUNT MOUNT OPEN

STARTUP

Faza NOMOUNT citire opţiuni de configurare din


• fişier parametri text PFILE
• fişier paramtri binar SPFILE
Parametri se împart după criteriile:
• statici vs. dinamici
• la nivel de sistem vs. la nivel de sesiune
ALTER SYSTEM SET p=v SCOPE ... DEFERRED
Optiunile de SHUTDOWN

SHUTDOWN [NORMAL | TRANSACTIONAL | IMMEDIATE | ABORD]

Modul de oprire A I T N
Permite noi conexiuni X X X X

Aşteaptă până la încheierea sesiunilor curente X X X 

Aşteaptă până la încheierea tranzacţiilor curente X X  

Forţează un ckeckpoint şi închide fişierele X   

X – Nu,  - DA
A – Abord, I Immediate, T - Transactional, N - Normal
Sistemul de view-uri dinamice cu
informaţii despre starea BD
Citite din memorie, după Citite după etapa
etapa NOMOUNT: MOUNT:
• V$PARAMETER • V$THREAD
• V$SGA • V$CONTROLFILE
• V$SESSION • V$DATABASE
• V$INSTANCE • V$DATAFILE
• V$BUFFER_POOL • V$LOGFILE
(b) Nivelele de organizare a
spaţiului în Oracle

• Nivelul logic de organizare


– Tablespace-uri
– Segmente
– Extent-uri şi blocuri de date
• Nivelul fizic de organizare
– Fişiere de date
– Fişiere de jurnalizare
– Fişiere de control
Tablespace-uri într-o bază de date Oracle
Relaţiile dintre structurile logice şi fizice de stocare

Baza de date

Tablespace Fişier de date

Segment

Extent

Bloc Oracle Bloc al SO


Tipuri de segmente

• Tabele
• Partiţii de tabele
• Clustere
• Indecşi
• Rollback
• Temporare
Structuri externe BD

• Fişierul de parametri
• Fişierul de parole
• Arhivele fişirelor de jurnalizare (redo log)
3. Crearea bazei de date
(manual)
1. Planificarea bazei de date
2. Crearea instanţei bazei de date
3. Pornirea instanţei bazei de date
4. Comanda CREATE DATABASE – crearea
structurilor fizice
5. Crearea dicţionarului bazei de date şi a mediului
PL/SQL (scripturile catalog.sql şi catproc.sql)
6. Crearea segmentelor rollback necesare
7. Creare celorlalte structuri fizice necesare
Crearea unei baze de date ORACLE
CREATE DATABASE [[database]
[CONTROLFILE REUSE]]
LOGFILE [GROUP group_integer] filespec
[, [GROUP group_integer] filespec] ...
[MAXLOGFILES number]
[MAXLOGMEMBERS number]
[MAXLOGHISTORY number]
[MAXDATAFILES number]
[MAXINSTANCES number]
[ARCHIVELOG or NOARCHIVELOG]
[EXCLUSIVE]
[CHARACTER SET charset]
[NATIONAL CHARACTER SET charset]
DATAFILE filespec [autoextend_clause]
[, filespec [autoextend_clause] ... ]
 
filespc :== ‘filename’ [SIZE INTEGER] [K|M] [REUSE]
autoextend_cluase :==
[AUTOEXTEND
{OFF | ON
[NEXT integer [K|M]]
[MAXSIZE {UNLIMITED|integer [K|M]}]
}]
Oracle Managed Files
• Gestiunea automată a fişierelor de date şi de
jurnalizare
• Parametri implicaţi
– DB_CREATE_FILE_DEST
– DB_CREATE_ONLINE_LOG_DEST_n
Structura view-urilor dicţionarului BD

DBA_xxx
Obiecte din întreaga bază de date

ALL_xxx
Toate obiectele accesebile utilizatorului

USER_xxx
Obiectele deţinute de utilizator
Fişierele de control

• Conţine informaţi despre


– Numele sau identificatorul bazei de date
– Numele şi localizarea fişierelor de date şi
fişierelor redo log
– Numele tablespace-urilor
– Secvenţele curente LSN şi CHECKPOINT
– Informaţii despre operaţiuni de backup
CAP3. Administrarea spaţiului de
stocare şi a structurilor interne
• Administrarea tablespace-urilor
• Structurilor logice de stocare – segmente,
extent-uri şi blocuri de date
• Administrarea structurilor consumatoare de
spaţiu din schema internă
– Tabele
– Indecşi
– Clustere şi IOT
(1) Tablespace-uri
• Rolul tablespace-urilor
• OMF
– DB_CREATE_FILE_DEST
– DB_CREATE_ONLINE_LOG_DEST_n
• Arhitectura OFA
• Creare tablespace-urilor
• Gestiunea spaţiului: mărirea spaţiului de stocare şi
reorganizarea fişierelor
• Obţinerea informaţiilor despre starea tablespace-
urilor
Arhitectura OFA SYSTEM

DATA
structuri de directoare destul de flexibilă

separarea obiectelor având comportament diferit INDEXES

separarea componentelor BD pe mai multe discuri TOOLS

RBS

TEMP
CREATE TABLESPACE

CREATE TABLESPACE
DATAFILE file_specification
[, file_specification
[AUTOEXTEND OFF]
or [AUTOEXTEND ON [NEXT number K or M]
[MAXSIZE UNLIMITED or MAXSIZE number K or M]]
[MINIMUM EXTENT number K or M]
[EXTENT MANAGEMENT LOCAL | [DICTIONARY
[DEFAULT STORAGE ( [INTIAL integer K|M] [NEXT integer K|M]
[MINEXTENTS integer] [MAXEXTENTS integer|UNLIMITED] [PCTINCREASE
integer] )] ]
[ONLINE or OFFLINE]
[PERMANENT or TEMPORARY]

CREATE TABLESPACE DATA01


DATAFILE 'd:\oracle\u01data\disk4\data01.dbf' SIZE 2M
'd:\oracle\u01data\disk4\data01.dbf' SIZE 2M
MINIMUM EXTENT 500K
DEFAULT STORAGE (INITIAL 500K NEXT 500K MAXEXTENTS 500 PCTINCREASE 0)
EXTENT MANAGEMENT LOCAL
• CREATE DATABASE …
EXTENT MANAGEMENT LOCAL … ;

• CREATE TABLESPACE userdata DATAFILE


'%ORACLE_BASE%\oradata\u01\data03.DBF'
SIZE 5M
EXTENT MANAGEMENT LOCAL
UNIFORM SIZE 250k;
OMF
• DB_CREATE_FILE_DEST
• CREATE TABLESPACE userdata
DATAFILE
SIZE 2M AUTOEXTEND ON NEXT
500K MAXSIZE 5M;
• ALTER TABLESPACE userdata ADD
DATAFILE SIZE 5M;
Starea OFFLINE
• ALTER TABLESPACE … OFFLINE
– NORMAL
– TEMPORARY
– IMMEDIATE
– FOR RECOVER
(2) Structuri logice de stocare

• Alocarea spaţiului în baza de date:


segmente şi extent-uri
• Structura şi parametrii blocurilor de date
Ierarhia structurilor logice de stocare

Baza de date

Tablespace Fişier de date

Segment

Extent

Bloc Oracle Bloc al SO


Blocul de date Oracle

Parametrii de
utilizare:
Header

INITRANS
Spaţiu disponibil
MAXTRANS

PCTFREE
DATE

PCTUSED
Utilizare spatiului in blocurile Oracle

PCTFREE = 20 PCUSED = 40

1) Sunt 2) Nu mai este


inserate noi permisă
înregistrări inserarea unor
80 %
până la pragul noi înregistrări
de 80 %

3) Volumul de 4) Dacă
spaţiu liber volumul de
poate creşte spaţiu liber
80 %
prin ştergerea cade sub 40%
unor va fi permisă
înregistrări 40 % din nou
inserarea de
înregistrări
Gestiunea spaţiului liber din
segmente – nivelul
CREATE TABLESPACE

• gestiunea automată - SEGMENT SPACE


MANAGEMENT cu opţiunea AUTO
• gestiunea manuală - SEGMENT SPACE
MANAGEMENT cu opţiunea MANUAL
(3) Gestiunea tabelelor

• Tipuri de date speciale


• Stocarea înregistrărilor
• Determinarea parametrilor de stocare
• Informaţii despre tabele
(a) Tabele - Tipuri de date

Tipuri de date

Definite de utilizator Predefinite

Scalare Colectori Referinţe


- CHAR - VARRAY - REF
- VARCHAR2
- TABLE
- NUMBER
- DATE
- RAW
- BLOB, CLOB,
BFILE, NCLOB
- LONG, LONG
RAW
- ROWID
(b) Structura unei linii

Antetul liniei

Lungimea coloanei

Valoarea coloanei
Crearea unei tabele – comanda CREATE TABLE

CREATE TABLE table


(column datatype [,column datatype ] …)
[TABLESPACE tablespace]
[PCTFREE integer]
[PCTUSED integer]
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage-clause]
[LOGGING | NOLOGGING]
[CACHE | NOCACHE]
(c) Necesarul de spatiu pentru tabele

Spatiul disponibil pentru inreg/bloc =


(DB_BLOCK_SIZE – Header) *(1- PCTFREEE/100)
SELECT avg(nvl(vsize(column1), 0))
+avg(nvl(vsize(column1), 0))
+avg(nvl(vsize(column1), 0)) AvgRowLength
FROM tablename
Spaţiul utilizat pentru o linie =
Lungimea_medie_per_linie+ 3 (Antetul liniei) + Numărul de
coloane + 2*Numărul de coloane mai lungi de 256 bytes
Determinarea parametrilor blocului de date

PCTFREE
(Dim. Medie a înregistrărilor – Dim. iniţială a înregistrărilor) * 100

Dimesiunea medie înregistrărilor

PCTUSED
Dim. medie a înregistra rilor  100
100  PCTFREE 
Spatiul liber disponibil
Inlanţuirea si migrarea inregistarilor

Înainte de După UPDATE


UPDATE
HIGH WATER MARK

După inserarea înregistrărilor

1 2 3 4 5

După ştergerea unor înregistrărilor HIGH WATER MARK

Spaţiu ocupat Spaţiu eliberat ca urmare a Spaţiu neutilizat


ştergerilor
(d) View-urile cu informatii despre
tabele
DBA_TABLES DBA_OBJECTS

OWNER OWNER
TABLE_NAME OBJECT_NAME
PCT_FREE OBJECT_ID
PCT_USED DATA_OBJECT_ID
INITIAL_EXTENT CREATED
NEXT_EXTENT
MIN_EXTENTS DBA_EXTENTS
MAX_EXTENTS
DBA_SEGMENTS
PCT_INCREASE
CACHE OWNER
BLOCKS OWNER SEGMENT_NAME
EMPTY_BLOCKS SEGMENT_NAME EXTENT_ID
TABLESPACE_NAME FILE_ID
CHAIN_CNT
HEADER_FILE BLOCK_ID
HEADER_BLOCK BLOCKS
(3) Gestiunea indecşilor

• Tipuri indecşi
• Dimensionarea indecşilor
• Gestiunea spaţiului pentru segmente de tip
index
• Informaţii despre indecşi
(a) Tipuri de INDECŞI
• Dpdv al structurii logice:
– După nr. de coloane:
• Indecşi formaţi după o singură coloană
• Indecşi formaţi după mai multe coloane
– După unicitate:
• Indecşi unici
• Indecşi neunici
• Dpdv fizic sau al implementării
– Indecşi partiţionaţi nepartiţionaţi
– Indecşi B-Tree şi bitmap
Structura indexului B-tree

Bl. rădăcina
100

30 130
Bl. ramuri
70 170

Bl. Frunze

1 30 70 101 130 170


2 31 71 102 131 172
3 32 72 103 132 172
… … … … … …

Antetul intrării în index Valoarea coloanei din cheie


Lungimea coloanei din cheie ROWID-ul liniei din tabelă
Structura indexului BITMAP

A V R G
CHEIA Primul Ultimul Bitmap-ul
ROWID ROWID
Albastru 12.0.5 14.8.5 01000010100000010000010000
Verde 12.0.5 14.8.5 10011000000010100001000001
Roşu 12.0.5 14.8.5 00000001010100001000000100
Galben 12.0.5 14.8.5 00100100001001000110101010
(b) Necesarul de spatiu pentru
indecsi
Spatiul disponibil pentru inreg/bloc =
(DB_BLOCK_SIZE – Header) (1- PCTFREEE/100)

Spaţiul utilizat pentru o linie = Avg_Row_Length


+ Numărul de coloane
+ Numărul de coloane mai mari de 127 caract.
+ 8 bytes pentu antetul intrării
+ 6 bytes pentru ROWID

PCTFREE
(Nr. maxim de înregistra ri - Nr. initial de înregistra ri)
 100
Nr. maxim de înregistrã ri
(d) Gestiunea indecşilor
Comanda CREATE INDEX

CREATE [UNIQUE] INDEX index ON table


( column [ column ] …)
[TABLESPACE tablespace]
[PCTFREE integer]
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage-clause]
[LOGGING | NOLOGGING]
[NOSORT]
Refacerea indecsilor

ALTER INDEX index REBUILD


TABLESPACE tablespacename
[PCTFREE integer]
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage-clause]
[LOGGING | NOLOGGING]
[NOSORT]
[ONLINE];
(d) View-urile cu informatii despre
indecsi

DBA_INDEXES DBA_IND_COLUMNS

OWNER INDEX_OWNER
INDEX_NAME INDEX_NAME
INDEX_TYPE TABLE_OWNER
TABBLE_OWNER TABLE_NAME
TABLE_NAME COLUMN_NAME
UNIQUENESS COLUMN_POSITION
TABLESPACE_NAME COLUMN_LENGHT
LOGGING
STATUS
Caracteristicile CLUSTERelor
• posedă o cheie utilizată pentru a identifica liniile
care trebuie stocate împreună
• cheia cluster-ului poate consta dintr-una sau mai
multe coloane
• în structura tabelelor din cluster se găsesc
coloanele care formează cheia cluster-ului
• mecanismul prin care tabelele sunt stocate
împreună în acelaşi cluster nu influenţează în nici
un fel logica aplicaţiilor
• actualizarea coloanelor din cheia cluster-ului poate
a avea ca efect relocalizarea înregistrărilor
respective
Tipuri de clustere
• cluster-e de tip index – utilizează un index
pentru a organiza şi localiza datele
• Cluster-e de tip hash – care folosesc un
algoritm (o funcţie) de calcul al locaţiei
înregistrărilor, algoritm care care se bazează
pe cheia cluster-ului
Crearea unui cluster de tip index
CREATE CLUSTER cluster
( column datatype [ column datatype ] …)
[PCTFREE integer]
[PCTUSED integer]
[INITRANS integer]
[MAXTRANS integer]
[SIZE integer [ K|M ]
[STORAGE storage-clause]
[LOGGING | NOLOGGING]
[NOSORT]
[TABLESPACE tablespace]
[INDEX]
Crearea unui cluster de tip index
1. CREATE CLUSTER com_clu
(nrcom NUMBER(4))
SIZE 200 TABLESPACE DATA01
STORAGE (INITIAL 5M NEXT 5M PCTINCREASE 0);

2. CREATE INDEX com_clu_idx


ON CLUSTER com_clu
TABLESPACE INDX01
( STORAGE INITIAL 1M NEXT 1M PCTINCREASE 0);

3. CREATE TABLE comenzi


(nrcom NUMBER(4) CONSTRAINT pk_com PRIMARY KEY,
datacom DATE, codcl CHAR(4))
CLUSTER com_clu(nrcom);
CREATE TABLE prodcom
(nrcom NUMBER(4) CONSTRAINT prodcom_comenzi_fk
REFERENCES comenzi,
codprod NUMBER(4), cantitate NUMBER(3),
CONSTRAINT pk_prodcom PRIMARY KEY (nrcom, codprod))
CLUSTER com_clu(nrcom);
Crearea unui cluster de tip hash

CREATE CLUSTER cluster


( column datatype [ column datatype ] …)
HASHKEYS integer
[HASH IS expression]
[PCTFREE integer]
[PCTUSED integer]
[INITRANS integer]
[MAXTRANS integer]
[SIZE integer [ K|M ]
[STORAGE storage-clause]
[LOGGING | NOLOGGING]
[NOSORT]
[TABLESPACE tablespace]
Determinarea clauzei SIZE

SIZE =
(Nr. de linii per cheia clusterului din Table1 *
Lungimea medie a liniilor în Table1)
+ (Nr. de linii per cheia clusterului din Table2 *
Lungimea medie a liniilor în Table2)
+ spaţiul rezervat antetului cheii cluster-ului
+ lungimea coloanelor cheii cluster-ului
+ 2 * (Nr. de linii per cheia clusterului din Table1 +
Nr. de linii per cheia clusterului din Table2)
Determinarea clauzei HASHKEYS

 HASHKEYS 
CEIL  
 TRUNC ( S patiu disponibil in bloc/SIZE) 

S patiu disponibil in bloc 


 PCTFREE 
(DB_BLOCK_ SIZE - HEADER)   1  
 100 
View-urile cu informatii despre cluster-e

DBA_CLUSTERS DBA_TAB_COLUMNS

OWNER OWNER
CLUSTER_NAME TABLE_NAME
TABLESPACE_NAME COLUMN_NAME
KEY_SIZE DATA_TYPE
CLUSTER_TYPE DATA_LENGTH
FUNCTION DATA_PRECISION
HASHKEYS DATA_SCALE

DBA_CLU_COLUMNS
DBA_CLUSTER_
HASH_EXPRESSIONS
OWNER
CLUSTER_NAME
CLU_COLUMN_NAME OWNER
TABLE_NAME CLUSTER_NAME
TAB_COLUMN_NAME HASH_EXPRESSION
Crearea tabelelor organizate ca indecsi (IOT)

CREATE TABLE table


(column datatype [,column datatype ] …)
ORGANIZATION INDEX
[TABLESPACE tablespace]
[PCTFREE integer]
[INITRANS integer]
[MAXTRANS integer]
[STORAGE storage-clause]
[PCTTHRESHOLD integer
[INCLUDING column]]
[OVERFLOW segment_attributes_clause ]
View-urile cu informatii despre tabele IOT

DBA_TABLES DBA_INDEXES

OWNER OWNER
TABLE_NAME TABLE_NAME
TABLESPACE_NAME INDEX_NAME
IOT_TYPE INDEX_TYPE
IOT_NAME PCT_THRESHOLD
INCLUDE_COLUMN

S-ar putea să vă placă și