Sunteți pe pagina 1din 12

Raport

MySql Vs. Oracle

Acest raport compara doua dintre cele mai puternice sisteme de gestiune a bazelor
de date(SGBD), Oracle si MySql, subliniind diferentele, minore sau majore, dintre
acestea.

VS
Unul dintre motivele pentru care am ales sa realizez aceasta comparatie este acela
ca foarte multi utilizatori ce doresc sa invete sau sa dezvolte o baza de date(aplicatie cu
baza de date) nu stiu ce SGBD sa aleaga sau care li se potriveste mai bine la problema
lor. Prin acest raport incerc doar sa le ofer o perspectiva despre aceste doua SGBD si sa le
ofer sansa de a lua decizia potrivita la momentul potrivit.

Un alt motiv este acela ca lucrarea mea de licenta cuprinde si baze de date si am
studiat aceste doua SGBD pentru a stii si eu la randul meu pe care sa il folosesc.
Mentionez ca am realizat candva un proiect ce cuprindea baze de date folosind SGBD
Oracle iar in prezent lucrez la un altul unde folosesc SGBD MySql deoarece doresc sa le
cunosc si stapanesc pe amandoua.

MySql:
Este un sistem de gestiune a bazelor de date multi-utilizator ce are peste 11
milioane de instalari pe glob. Programul ruleaza ca un server furnizand accesarea unor
baze de date de catre mai multi utilizatori in acelasi timp. MySql a fost detinut si
sponsorizat de o firma suedeza, dar acum apartine firmei SUN Microsystems ce detine
toate drepturile de autor ale codului de baza.

Oracle:
Sistemul de gestiune a bazelor de date relationare oficial numit Oracle Datebase a
cucerit si reprezinta o majoritate in multimea bazelor de date pe calculator. Oracle
Corporation produce si vinde acest software.

Comparatia vizeaza:

-Securitatea bazelor de date

-Scheme

-Tipurile de date

-Conceptele de memorare a datelor

Securitatea bazelor de date:


Aici vom include informatii privind problemele de securitate cu care se confrunta
atat MySql cat si Oracle.

Autentificarea la baza de date:


Atat in Oracle cat si in MySql utilizatorii(users) sunt intretinuti de catre
baza de date. MySql utilizeaza un set de tabele ce tin evidenta utilizatorilor si
a privilegiilor acestora; aceste tabele sunt folosite la autentificare, la cererea
de permisiuni si acces la control de catre utilizatori.

In Oracle, la autentificarea unui utilizator se cer doar username-ul si


password-ul spre deosebire de MySql ce mai cere un parametru, location, ce
reprezinta de obicei host-name-ul(sau o adresa IP); cu acest parametru MySql
poate restrictiona accesul unui utilizator la o baza de date de la un anumit
host in domeniu sau poate permite alocarea unei noi parole sau set de
privilegii atribuite unui utilizator in functie de host-ul la care se face
conexiunea.

Privilegii:
Sistemul de privilegii MySql este un sistem ierarhic ce functioneaza
prin mostenire. Privilegiile acordate la un nivel superior sunt transmise
implicit la toate nivelurile inferioare, unde pot fi (daca este cazul) suprascrise
de aceleasi privilegii setate la un nivel inferior. MySql permite acordarea
privilegiilor la 5 nivele diferite: la nivel global, de host, de baza de date, de
tabel si de coloana. Privilegiile sunt de doua tipuri: administrative sau de
obiect.

Oracle, spre deosebire de MySql, detine conceptul de Rol. Daca dorim


sa oferim mai multor utilizatori anumite privilegii, creem un rol cu acele
privilegii iar apoi acordam acest rol utilizatorilor. Pentru a face acelasi lucru,
in MySql, trebuie sa adaugam privilegiu cu privilegiu, fiecarui utilizator in
parte, ceea ce nu e prea satisfacator.

Scheme:
Schema contine definitiile tabelelor, vederilor, indexilor, utilizatorilor,
constrangerilor, a procedurilor stocate, trigger-lor si a altor obiecte
specifice bazelor de date. Cele mai multe baze de date relationale
lucreaza cu obiecte similare.

Schema Obiect:
Sunt foarte multe asemanari intre Schema Obiect in Oracle si MySql.
Totusi, sunt cateva diferente:

-Oracle ofera solutii before/after trigger, MySql doar trigger.

-Oracle ofera un management sub forma de package, MySql nu; in


Oracle exista de asemenea tablespace-uri iar in MySql nu.

-Oracle ofera functii si procedure PL/SQL.

-Oracle ofera acordarea de privilegii prin roluri.

-MySql detine constrangerea AUTO-INCREMENT pentru o coloana;


pentru acelasi efect, in Oracle se foloseste o secventa.

-Oracle ofera snapshot si synonyms.

La nivel de denumire a obiectelor, Oracle este case insesitive,


obiectele fiind stocate automat ca si uppercase. In MySql case
sensitivity este data de sistemul de operare(in Windows case
insesitive, in Linux case sensitive).

Ambele SGBD permite denumirea obiectelor si cu cuvinte cheie, insa


doar daca sunt precedate de un apostrof. MySql, permite folosirea unor
cuvinte cheie si fara a fi precedate de apostrof(precum Date sau
Timestamp), in Oracle nefiind permis acest lucru. Atunci cand se
importa o baza MySql in Oracle, Oracle adauga automat un _ inaintea
oricarui nume necorespunzator.

MySql si Oracle au unele diferente minore la definirea unui


identificator. In general este de preferat a folosi un nume unic pentru
un obiect si acest nume sa nu fie un cuvant cheie(rezervat).

Consideratii in privinta proiectarii tabelelor:


In legatura cu proiectarea tabelelor vom discuta despre coloanele ce
retin obiecte de tip caractere si despre valorile implicite ce le iau
coloanele.

MySql si Oracle au ceva diferente la tipurile de caractere pe care


le suporta si la modul in care acestea sunt stocate, respectiv la cum
sunt preluate valorile din memorie. MySql suporta tipurile CHAR si
VARCHAR. CHAR poate avea o lungime maxima de 255 bytes si
minima de 0 bytes(se poate declara si de 0 bytes); VARCHAR poate
avea o lungime maxima de 65535 bytes. Oracle are 4 tipuri de
caractere CHAR, NCHAR, NVARCHAR2 si VARCHAR2. Lungimea minima
ce poate fi declarata de aceste tipuri este de 1 byte; maximul pentru
CHAR si NCHAR este de 2000 bytes iar pentru NVARCHAR2 si
VARCHAR2 de 4000 bytes. Atat la MySql cat si la Oracle, in cazul tipului
CHAR se da o anumita lungime iar daca valoarea campului respectiv
are o lungime mai mica, se completeaza restul ramas cu spatii goale;
la returnarea valorii unui astfel de camp, in cazul lui MySql nu se
returneaza si acele spatii, iar la Oracle se returneaza valoarea cu tot cu
acele spatii. Daca lungimea valorii este mai mare decat cea declarata,
MySql truncheaza valoarea data la lungimea potrivita in timp ce Oracla
genereaza o eroare. In cazul tipului VARCHAR/2 se aloca atata
memorie cat ocupa valoarea campului respectiv.

In MySql, lungimea pentru CHAR si VARCHAR se pastreaza in


caractere(incepand cu MySql 4.01) iar in Oracle pentru CHAR si
VARCHAR semantica lungimii este in bytes iar pentru NCHAR si
NVARCHAR este in caractere.

Aceste doua SGBD-uri au diferente si in manipularea valorii


implicite a unei coloane ce este constransa sa nu fie nula. Astfel ca,
MySql determina o valoare implicita pentru fiecare coloana ce nu poate
fi nula, in timp ce Oracle genereaza o eroare daca este omisa
introducerea unei valori intr-o astfel de coloana.

Migrarea schemei MySql in Oracle:


Cand migram o baza de date MySql la Oracle, SQL Developer mapeaza
fiecare baza de date MySql intr-un spatiu de tabele Oracle. Obiectele
bazei de date, de ex tabelele, indexi sau vederi sunt stocate in spatii
de tabele si sunt referite in schema proprie unui utilizator. Privilegiile
au sintaxa asemanatoare, si migrarea lor se face automat.

SQL Developer nu suporta in schimb migrarea tabelelor


temporare. In MySql, tabelele temporare sunt obiecte ale bazei de date
ce sunt vizibile numai in sesiunea curenta a unui utilizator si sunt
sterse automat atunci cand sesiunea ia sfarsit. In Oracle, tabelele
temporare odata create, exista pana cand sunt sterse explicit si sunt
vizibile in toate sesiunile ce au privilegiile corespunzatoare; datele din
aceste tabele sunt visibile numai sesiunii in care acele date se introduc
si persista pe intreg parcursul seiunii sau in unele cazuri pe durata unei
tranzactii.

Tipuri de date:
Acum voi descrie tipurile de date intalnite in MySql si echivalentul
acestora in Oracle. In urmatoarele randuri voi arata si echivalentele
implicite ale tipurilor de date atunci cand se migreaza de la o baza de
date la alta. Oricum, SQL Developer permite modificarea tipului
echivalent implicit cu un altul, atunci cand e posibil.

1. Tipurile numerice:

La migrarea tipurilor numerice din MySql in Oracle se aplica


uramatoarea regula:

-daca nu este definita o precizie a tipului numeric din Oracle, atunci


aceasta este luata din sursa MySql;

-daca este definita o precie a tipului numeric din Oracle, atunci se


compara aceasta cu cea din sursa MySql si se alege cea mai mare
dintre ele.

In urmatoarele randuri voi compara datele numerice din MySql si


Oracle:

MySQL Size Oracle


BIGINT 8 Bytes NUMBER (19,0)

BIG approximately (M+7)/8 Bytes RAW

DECIMAL(M,D) M+2 bytes if D > 0, FLOAT(24),


BINARY_FLOAT

M+1 bytes if D = 0 (D+2, if M < D)

DOUBLE 8 Bytes FLOAT(24),


BINARY_FLOAT,
BINARY_DOUBLE

DOUBLE PRECION 8 Bytes FLOAT(24),


BINARY_DOUBLE

FLOAT(25<=X <=53) 8 Bytes FLOAT(24),


BINARY_FLOAT

FLOAT(X<=24) 4 Bytes FLOAT, BINARY_FLOAT

INT 4 Bytes NUMBER (10,0)

INTEGER 4 Bytes NUMBER (10,0)

MEDIUMINT 3 Bytes NUMBER


(7,0)

NUMERIC M+2 bytes if D > 0, M+1 bytes if D = 0 (D+2, if M < D)


NUMBER

REAL 8 Bytes FLOAT(24),


BINARY_FLOAT

SMALLINT 2 Bytes NUMBER(5,0)

TINYINT 1 Byte
NUMBER(3,0)
2. Tipurile de data si timp

MySQL Size Oracle


DATE 3 Bytes DATE

DATETIME 8 Bytes DATE

TIMESTAMP 4 Bytes DATE

TIME 3 Bytes DATE

YEAR 1 Byte NUMBER

3. Tipuri siruri de cararctere:

Si aici, in cazul migrarii unui tip de la o baza la alta trebuie respectate


niste reguli:

-daca nu este definita nici o lungime in tipul destinatie, lungimea este


luata din tipul sursa;

-daca este definita lungimea in tipul destinatie, atunci se ia lungimea


maxima dintre cele doua tipuri.

In urmatoarele randuri voi compara tipurile siruri de caratere din MySql


si Oracle:

MySQL Size
Oracle
BLOB L + 2 Bytes whereas L<2^16
RAW, BLOB

CHAR(m) M Bytes, 0<=M<=255 CHAR

ENUM (VALUE1, VALUE2, ...) 1 or 2 Bytes depending on the number of


enum. values (65535 values max)

LONGBLOB L + 4 Bytes whereas L < 2 ^ 32 RAW,


BLOB
LONGTEXT L + 4 Bytes whereas L < 2 ^ 32 RAW,
CLOB

MEDIUMBLOB L + 3 Bytes whereas L < 2^ 24 RAW,


BLOB

MEDIUMTEXT L + 3 Bytes whereas L < 2^ 24


RAW, CLOB

SET (VALUE1, VALUE2, ...) 1, 2, 3, 4 or 8 Bytes depending on the


number of set members (64 members
maximum)

TEXT L + 2 Bytes whereas L<2^16


VARCHAR2, CLOB

TINYBLOB L + 1 Bytes whereas L<2 ^8 RAW,


BLOB

TINYTEXT L + 1 Bytes whereas L<2 ^8


VARCHAR2

VARCHAR(m) L+1 Bytes whereas L<=M and0<=M<=255 before


MySQL 5.0.3

(0 <= M <=65535 in MySQL 5.0.3 and later;


VARCHAR2, CLOB

effective maximum length is 65,532 bytes)

Concepte de stocare a datelor:


Felul in care MySql stocheaza datele diferenteaza aceste SGBD de
oricare altul, inclusiv de Oracle. In MySql, bazele de date corespund
anumitor directoare din cadrul directorului principal al serverului.
Tabelele dintr-o anumita baza de date corespund unuia sau mai multor
fisiere din directorul bazei de date, acest lucru depinzand de motorul
de stocare folosit pentru tabele. O baza de date poate contine o
combinatie de tabele ale mai multor motoare de cautare. Un motor de
stocare este responsabil cu stocarea si preluarea datelor dintr-o tabela.
MySql defineste mai multe motoare de stocare pentru a rezolva diferite
cerinte ale utilizatorilor. ex.
MyISAM- motorul implicit, netransactional, ce furnizeaza indexarea
intregului text si care este portabil.

MERGE- motor netransactional ce permite unei colectii de tabele


MyISAM cu coloane si indexi identici sa fie folosita ca o singura tabela.

MEMORY(HEAP)- motor netransactional ce stocheaza date in memorie.

BDB- primul motor transactional si sigur.

InnoDB-un motor transactional si sigur proiectat pentru performanta


maxima atunci cand sunt procesate volume mari de date si
furnizeaza blocari la nivel de rand.

FEDERATED- un motor ce acceseaza mai degraba datele din tabelele


de la distanta decat cele locale.

ARCHIVE- un motor ce poate stoca un volum mare de date (fara indexi)


intr-un spatiu mic de memorie.

CSV- un motor ce stocheaza date intr-un fisier de tip text, separand


valorile prin virgula.

BLACKHOLE- un motor ce se comporta ca o "gaura neagra" ce accepta


date dar pe care nu le stocheaza.

EXAMPLE- un motor ce nu afce nimic si serveste ca exemplu pentru cei


ce vor sa creeze un nou motor de stocare.

ISAM- originalul motor al MySql-ului.

Fiecare dintre aceste motoare au avantaje si dezavantaje. Diferentele


dintre ele o dau transactionalitatea, blocarea, concurenta si
portabilitatea.

O baza de date Oracle este formata din una sau mai multe spatii de
tabele. Spatiile de tabele furnizeaza un spatiu de stocare virtual ce
uneste baza de date cu spatiul fizic de stocare al datelor. Un spatiu de
tabele este creat din unu sua mai multe fisiere. O baza de date Oracle
are cel putin un spatiu de tabele, SYSTEM, unde sunt stocate tabelele
Oracle. De asemenea acestea pot fi create de utilizatori.

Pe langa aceste diferente prezentate, mai sunt si altele, insa


acestea de mai sus sunt cele mai importante. In incheiere voi puncta
cateva avantaje ale unui SGBD asupra celuilat:

--- Avantaje MySql asupra Oracle:


MySql este caracterizat ca fiind rapid, robust si cu un set bun de
capabilitati, dar care nu are toate dotarile lui Oracle, insa pentru a
scrie cod proiectat pentru a fi portabil, acesta e o alegere buna. La
capitolul administrare si securitate sta bine, totul e eficient iar
configurarea acestor caracteristici nu este dificila. Prin urmare, MySql
este o alegere buna pentru cerintele de nivel mediu.

Configurarea si instalarea software-ului Oracle este greoaie, chiar


foarte greoiae si poate pune in mare dificultate utilizatorii
neexperimentati; in schimb cu MySql, oricine se poate descurca.

Utilizatorilor MySql le place acest SGBD deoarece este disponibil


pe aproape toate companiile de hosting. Oracle se limiteaza doar la
marile corporatii din cauza costurilor de acordare a licentei si nu toate
companiile de hosting au Oracle(acestea ar putea fi SQL Server, dar nu
Oracle).

MySql este gratuit, rapid si disponibil tuturor fara licenta. Poate


ca duce lipsa de unele facilitati mai sofisticate, dar are parte de o
echipa tanara si activa, care la fiecare relansare aduce cateva
capabilitati noi. La un moment dat va exista un compromis intre viteza
si capabilitate, insa echipa va incerca sa pastreze un motor rapid si
fiabil.

---Avantaje Oracle asupra MySql:


Oracle este mult mai versatil decat MySql. Oracle poate rula si
gestiona mai multe tranzactii decat MySql. Oracle este de preferat
daca baza de date va avea un grad mare de utilizare.

In Oracle se pot face tranzactii SQL, utiliza proceduri stocate,


DTS, lucruri ce in versiunile anterioare MySql nu se pot face.

Oracle a lansat recent si o editie gratuita, Oracle Free Edition


pentru a atrage utilizatorii MySql.

MySql-ul poate cuprinde miliarde de date, insa la o mare


cantitate de date el va fi lent pe server si in plus backup-ul va dura o
vesnicie comparativ cu instrumentele Oracle care fac ca backup-ul
bazei de date sa fie floare la ureche.

In incheiere, as vrea sa spun ca in lumea bazelor de date


nu exista un SGBD care sa le aiba pe toate. Daca ai nevoie de
capabilitati/caracteristici Oracle, MySql nu va face fata; invers,
daca nu ai nevoie de capabilitati/caracteristici Oracle(ceea ce
se intampla cel mai adesea), MySql este mult mai ieftin(cu tot
cu licenta si suport tehnic) si fiind preluat de SUN, acesta va fi
mult perfectionat.
Acest raport comparativ a fost realizat de Teletin Alin-Iulian,
an 3, subgrupa 6,
Informatica Aplicata.