Microsoft SQL Server




Sistemul de gestiune a bazelor de date, Microsoft SQL Server, ajuns la versiunea a 8 a (SQL Server 2000), este un sistem din clasa Enterprise, oferind din punct de vedere tehnologic caracteristici şi performanţe care permit dezvoltarea unor aplicaţii la scară mare, extensibile şi performante.
Dezvoltarea aplicaţiilor de baze de date necesită limbaje de programare cât mai flexibile care să permită utilizatorului implementarea unui set cât mai mare de funcţii şi de algoritmi de programare. În acest sens, limbajul SQL este un mediu performant prin intermediul căruia pot fi manipulate obiectele si înregistrarile din baza de date. Totuşi SQL prezintă un oarecare dezavantaj care constă în esenţa neprocedurală a acestuia. SQL nu include instrucţiuni condiţionale (IF) sau instrucţiuni prin intermediul cărora pot fi repetate anumite secţiuni de cod (While).
SQL Server reprezintă un fragment dintr-un miez al unei familii de produse integrate care include dezvoltarea de unelte de management al sistemelor, componente distribuite de sistem şi dezvoltarea deschisă de interfeţe.





Fig. 1 Uneltele şi structura SQL Server




SQL (Structured Query Language - limbaj de interogare structurat) este utilizat în comunicarea cu baza de date. Potrivit ANSI (American National Standards Institute) SQL este limbajul standard pentru sistemele de management al bazelor de date relaţionale. Propoziţiile SQL sunt utilizate pentru a efectua actualizări ale datelor sau retrageri de date dintr-o bază de date. Câteva dintre sistemele de management al bazelor de date relaţionale pe care SQL le utilizează sunt: Oracle, Sybase, Microsoft SQL Server, Access, Ingres, etc. Deşi, aproape toate sistemele de baze de date folosesc SQL, unele dintre ele au proprile extensii adiţionale care se folosesc de obicei doar in sistemul lor. Cu toate acestea, comenzile SQL standard ca: \"Select\", \"Insert\", \"Update\", \"Delete\", \"Create\" şi \"Drop\" sunt suficiente pentru a lucra cu baza de date.
Un sistem de bază de date relaţionale conţine unul sau mai multe obiecte (componente logice) numite tabele, care stochează datele sau informaţile bazei de date. Tabelele sunt identificate unic prin numele lor şi conţin linii şi coloane. Coloanele conţin numele coloanelor, tipul de date şi oricare alte atribute pentru coloane. Liniile conţin înregistrările sau datele pentru coloane.
Implementarea fizică a fişierelor este transparentă. În mod normal, doar administratorul bazei de date lucrează cu implementarea fizică.


Fiecare instanţă a SQL Server deţine patru baze de date sistem:
♦ Master
♦ Model
♦ Tempdb
♦ Msdb
şi una sau mai multe baze de date utilizator. Unele organizaţii au doar o bază de date utilizator care conţine toate datele; altele au baze de date diferite pentru fiecare grup din organizaţie, iar uneori o bază de date este utilizată doar de o singură aplicaţie.
Nu este necesară rularea mai multor copii a motorului bazei de date pentru a permite mai multor utilizatori să acceseze baza de date pe un server. O instanţă a versiunii SQL Server Standard sau Enterprise Edition poate face faţă miilor de utilizatori care lucrează în baze de date multiple simultan. Fiecare instanţă a SQL Server face disponibile toate bazele de date din instanţă tuturor utilizatorilor care se conectează la instanţă, în conformitate cu permisiunile de securitate definite.
La conectarea la o instanţă SQL Server, conexiunea este asociată unei anumite baze de date de pe server. Această bază de date se numeşte bază de date curentă. De obicei, conexiunea se face la baza de date definită ca implicită de către administratorul de sistem; dar se poate specifica o altă bază de date la opţiunile conexiunii. Trecerea de la o bază de date la alta se poate face prin statement-ul Transact-SQL USE database_name, sau printr-o funcţie API care modifică contextul curent al bazei de date.
SQL Server 2000 permite detaşarea bazelor de date de la o instanţă SQL Server, şi reataşarea lor la altă instanţă, sau chiar la aceeaşi instanţă. Dacă avem un fişier de baze de date SQL Server putem specifica la conectare, să se ataşeze acel fişier la un anumit nume de bază de date.
3.1.2.1. Arhitectura administrativă
Fiecare nouă versiune Microsoft SQL Server incearcă să automatizeze sau să elimine repetiţia în lucrul cu bazele de date. Datorită faptului că, administratorii bazelor de date sunt unii dintre cei mai bine antrenaţi în problemele de baze de date, aceste îmbunătăţiri permit un timp de lucru mai mare acordat proiectării bazei de date şi problemelor de accesare a aplicaţiilor de date.

Caracteristici:
♦ SQL Server 2000 reduce munca administrativă în multe domenii prin achiziţionarea şi eliberarea dinamică a resurselor. Serverul achiziţionează dinamic resursele cum ar fi: memoria şi spaţiul de pe disc ori de câte ori este nevoie, şi eliberează resursele când nu mai sunt necesare. Deşi marile sisteme OLTP cu performanţe critice sunt încă monitorizate de administratori competenţi, SQL Server 2000 poate fi utilizat şi la implementarea bazelor de date desktop sau workgroup mici care nu necesită atenţie permanentă din partea administratorului.
♦ SQL Server 2000 oferă un set de unelte grafice care permit administratorilor sa efectueze sarcini administrative simplu şi eficient.
♦ SQL Server 2000 oferă un set de servicii care permit administratorilor să programeze execuţia automată a sarcinilor repetitive.
♦ Administratorii SQL Server 2000 pot programa serverul astfel încât acesta să trateze condiţiile de excepţie, sau ce puţin să trimită e-mail sau pagini administratorului de serviciu.
♦ SQL Server 2000 publică aceeaşi interfaţă API (Application Programming Interfaces) utilizată de SQL Server. Aceste interfeţe suportă toate sarcinile administrative ale SQL Server.
3.1.2.2. Suport pentru dezvoltarea data tier ului
Pentru nivelul de date, avem nevoie de metode de interogare şi modificare a datelor într un regim tranzacţional care să ofere protecţie la erori şi verificarea permanentă a integrităţii datelor.
În general, accesul la datele dintr o bază de date se face prin limbajul de manipulare a datelor (LMD). În cadrul SQL Server se foloseşte limbajul SQL.
Nivelul de acces la date va accesa baza de date printr o interfaţă oferită de un set de proceduri stocate. Accesul prin proceduri stocate şi nu prin cod SQL generat de nivelul de acces la date oferă siguranţă şi control asupra structurii de date. Având în vedere că sarcina de a scrie procedurile stocate revine administratorului bazei de date, controlul asupra operaţiilor permise, a modului de realizare a lor şi îndeplinirea condiţiilor de integritate se păstrează în mediul dezvoltatorilor bazei de date, adică cei ce construiesc, modifică şi întreţin acea structură. Deşi distribuţia e o paradigmă modernă şi la modă, în acest caz, luarea deciziei de a menţine controlul centralizat asupra mijloacelor de acces la baza de date oferă o siguranţă sporită a bazei de date în sine şi a datelor conţinute de ea.
Baza de date suport a sistemului informatic universitar este o baza de date integrată, cu o structură puternic normalizată şi care trebuie să permită acces permanent şi rapid tutror departamentelor şi structurilor universitare. Datele conţinute trebuie bine structurate pentru a modela întregul proces şi flux de informaţii şi date ale universitaţii şi trebuie bine protejate, având o valoare incontestabilă. Din aceste motive, accesul la baza de date se va face numai prin intermediul procedurilor stocate, proiectate, scrise şi verificate de către administratorul bazei de date. Pentru a realiza acestea, sistemul Microsoft SQL Server oferă posibilitatea de a crea şi rula proceduri stocate, bucăţi de cod SQL, care pot conţine interogări sau operaţii de modificare şi ştergere, ele fiind parametrizabile şi putând întoarce rezultate programului apelant. O caracteristică foarte importantă a sistemului este oferirea unui mediu tranzacţional sigur, acesta fiind indispensabil pentru îndeplinirea cu succes a unor operaţii complexe asupra datelor.
3.1.2.3. Setul de comenzi SQL
Operaţia fundamentală în SQL este maparea reprezentată din punct de vedere sintactic printr-o construcţie SELECT-FROM-WHERE. Această construcţie corespunde unei succesiuni de operatori algebrici de forma selecţie-proiecţie-cuplare, foarte frecventă în algebra relaţională.
Clauza SELECT realizează operaţie de proiecţie şi este urmată de lista atributelor care se reţin în relaţia rezultat. Proiecţia SQL diferă de operatorul de proiecţie din algebra relaţională prin faptul că nu elimină tuplele duplicat. Eliminarea tuplelor duplicat se face de către utilizator, atunci când se doreşte, prin folosirea operatorului DISTINCT.
Operaţia de cuplare poate fi realizată prin clauza FROM, atunci când este urmată de o listă formată din cel puţin două nume de relaţie, împreună cu condiţia de cuplare formulată în cazul predicatului din clauza WHERE.



3.1.2.3.1. Selecţia
Selecţia este realizată prin clauza WHERE, care, de obicei, este urmată de un predicat referitor la atributele relaţiilor folosite în clauza FROM. Expresia care urmează această clauză poate conţine comparaţii de atribute şi/sau expresii aritmetice, operatori logici (AND,OR,NOT), operatori pe mulţimi (UNION,INTERSECT,MINUS) şi operatori de apartenenţă la mulţimi cu negările acestora (X IN S, X NOT IN S,S CONTAINS X, S DOES NOT CONTAIN X, unde S este o relaţie, iar X este o tuplă sau o relaţie caz în care este vorba de incluziune între mulţimi). Expresia care urmează clauzei WHERE poate să conţină operanzi care sunt relaţii rezultate din alte construcţii SELECT asigurându-se astfel posibilitatea imbricării acestora în interogări complexe.
Sintaxa completă a instrucţiunii SELECT:
SELECT [DISTINCT] nume_atribut1.
FROM nume_relaţie[variabila_de_tuplă].
[WHERE condiţie_de_căutare]
[GROUP BY expresie_de_grupare]
[HAVING conditie_de_selecţie_grup]
[ORDER BY expresie_de_ordonare[ASC|DESC]]
În SQL Server se poate folosi operatorul UNION pentru a reuni rezultatele mai multor fraze SELECT într-o singură relaţie rezultat.
Sintaxa:
{}
UNION[ALL]

UNION[ALL]

[.n]]

3.1.2.3.2. Operaţii de ştergere, inserare şi actualizare
Operatorii de ştergere , inserare şi actualizare acţionează la un moment dat doar asupra unei singure relaţii.
Operatorul SQL pentru efectuarea operaţiilor de ştergere este DELETE FROM a cărui sintaxă completă este:
DELETE
[FROM]
{ nume_tabelă |nume_vedere}
[WHERE{condiţie_căutare>
|{[CURRENTOF
{{[GLOBAL]nume_cursor} |nume_variabilă_cursor}
]}
}
]
Există două forme de operaţii de ştergere:
♦ Ştergere cu căutare - se specifică o condiţie de căutare pentru tuplele de şters
♦ Ştergere poziţionată - se foloseşte clauza CURRENT OF pentru a specifica un cursor, iar ştergerea se referă la tupla aflată la poziţia curentă a cursorului. Acest mod de ştergere permite eliminarea dintr-o tabelă doar a uneia dintre mai multe tuple identice.
Operatorul SQL pentru inserare este INSERT INTO şi prezintă două variante:
♦ Inserare simplă pentru inserarea unei tuple individuale
♦ Inserare multiplă pentru inserarea mai multor tuple
Comanda pentru inserare simplă are sintaxa:
INSERT INTO nume_relaţie(nume_atribut...)
VALUES(valoare)
Între valori şi numele de atribute trebuie să existe o corespondenţă unu la unu.
Comanda pentru inserare multiplă are sintaxa:
INSERT INTO nume_relaţie(nume_atribut...)
Construcţie_SELECT
Operatorul SQL pentru actualizarea tuplelor este UPDATE şi are sintaxa:
UPDATE {nume_tabelă|nume_vedere}
SET
{nume_coloană={expresie|DEFAULT|NULL}
|@variabilă=expresie
|@variabilă=coloană=expresie}[,...n]
[FROM{}[,.n]]
[WHERE{
|{[CURRENT OF
{{[GLOBAL]nume_cursor}|nume_variabilă_cursor}
]}
}
]
Operatorul de actualizare îndeplineşte două funcţii:
♦ Selectează prin condiţia de căutare din clauza WHERE tuplele care urmează a fi actualizate (în lipsa clauzei, se actualizează implicit toate tuplele relaţiei specificate).
♦ În tuplele selectate modifică valorile atributelor specificate. Expresiile de actualizare pot conţine: constante, nume de atribute, valoarea NULL sau expresii aritmetice construite cu acestea. În SQL este permisă chiar şi actualizarea atributelor care fac parte dintr-o cheie primară.

3.1.2.3.3. Begin transaction, rollback transaction şi commit transaction
Aceste comenzi permit gruparea unei serii de comenzi SQL într-un bloc de tipul "totul sau nimic". Sistemul SQL Server implementează complet conceptul ACID (Atomicitate, Consistenţă, Izolare şi Durabilitate)
Tranzacţiile asigură menţinerea într o stare consistentă a unei baze de date accesate în regim concurent şi cu posibilităţi de apariţie a erorilor. Blocul de operaţii SQL de scriere şi citire se va executa ca o singură comandă, apariţia unei erori pe parcursul execuţiei uneia dintre ele ducând la anularea efectelor comenzilor deja executate şi anularea tranzacţiei. Îndeplinirea cu succes a tuturor sarcinilor din blocul de comenzi permite încheierea tranzacţiei cu succes şi scrierea pe suport permanent a modificărilor efectuate asupra bazei de date.
Toate procedurile stocate în care apare mai mult de o comandă SQL care modifică date se vor scrie folosind o tranzacţie, prin aceasta asigurându se consistenţa bazei de date chiar şi în cazul apariţiei unor erori.
În plus, izolarea automată a tranzacţiilor permite efectuarea operaţiilor doar dacă starea actuala a bazei de date o permite.
În regim concurenţial, s ar putea ca între momentul de timp în care un utilizator lansează o cerere şi momentul în care aceasta se execută efectiv, baza de date să se fi modificat şi să nu mai existe condiţiile logice de a duce la bun sfârşit cererea, chiar dacă în momentul lansării cererii, aceasta era perfect legitimă.
3.1.2.4. Crearea vederilor
Vederea este o tabelă virtuală a cărui conţinut este definit printr-o interogare. La fel ca o tabelă reală, vederea conţine un set de coloane şi linii de date cu nume. Cu toate acestea, vederea nu există ca un set stocat de valori de date. Liniile şi coloanele de date ale vederii provin din tabelele referenţiate în interogarea din vedere şi se obţin dinamic atunci când se referenţiază vederea.
Vederea acţionează ca un filtru asupra tabelelor pe care le implică. Interogarea care defineşte vederea poate proveni din unul sau mai multe tabele sau din alte vederi ale bazei de date. Se pot utiliza şi interogări distribuite pentru a defini vederi care utilizează date din mai multe surse heterogene. Acest lucru este util dacă se doreşte combinarea structurilor de date similare din diferite servere dintre care fiecare stocheazădate pentru diferite zone ale organizării. Nu există restricţii în ceea ce priveşte interogările în vederi şi puţine restricţii în ceea ce priveşte modificarea datelor din ele.
Comanda pentru definirea unei vederi este CREATE VIEW şi are sintaxa:
CREATE VIEW nume_vedere(nume_atribut...)
[WITH ENCRYPTION]
AS construcţie_SELECT
[WITH CHECK OPTION]
Comanda CREATE VIEW creează în catalogul sistem o intrare corespunzătoare denumirii nume_vedere, căreia îi asociază definiţia specificată prin comanda: lista de atribute şi construcţia SELECT. Construcţia SELECT dintr-o vedere poate avea orice formă exceptând clauza ORDER BY. Această restricţie este impusă de necesitatea de a conferi vederilor un statut cât mai apropiat de cel al relaţiilor de bază în care, prin definiţie, ordinea tuplelor este arbitrară. Dacă se omite lista nume_atribut din definiţia vederii, atunci atributele acesteia vor avea aceeaşi denumire cu cele specificate în construcţia SELECT asociată. Acest lucru este posibil doar dacă atributele din construcţia SELECT nu sunt rezultatul unor funcţii de agregare sau al unor expresii aritmetice, caz în care este necesară specificarea întregii liste de atribute ale vederii.
3.1.2.5. Proceduri stocate
În SQL se poate vorbi despre două opţiuni de bază pentru stocarea şi executarea programelor. Programele pot fi memorate local la nivelul aplicaţiilor care trimit comenzi către SQL Server şi prelucrează rezultatele returnate de acesta. A doua opţiune presupune dezvoltarea şi înregistrarea programelor ca proceduri stocate în SQL Server şi crearea de aplicaţii care apelează aceste proceduri şi prelucrează rezultatele returnate de acestea. Procedurile stocate din SQL Server sunt similare procedurilor din alte limbaje de programare în sensul că:
♦ acceptă parametrii de intrare şi returnează valori prin parametri de ieşire către un program apelant;
♦ conţin instrucţiuni de programare care efectuează operaţii în baza de date şi pot apela, la rândul lor, alte proceduri stocate;
♦ returnează către apelant o valoare care indică succesul sau eşecul execuiei procedurii, eventual cauza eşecului.
Avantajele utilizării procedurilor stocate:
♦ permit programarea modulară - procedura se creează o dată, se stochează în baza de date şi se apelează de câte ori vrem în program.
♦ permit execuţie rapidă - dacă operaţia necesită un număr mare de linii de cod Transact-SQL sau se aplică repetat, procedurile stocate pot fi mai rapide. Ele sunt parcurse şi optimizate la creare, iar o versiune in-memorz a procedurii poate fi folosită după ce prima execuţie a procedurii. Declaraţiile Transact-SQL trimise repetat de la client la fiecare rulare sunt compilate şi optimizate la fiecare execuţie.
♦ pot reduce traficul de reţea - o operaţie care necesită sute de linii de cod Transact-SQL poate fi efectuată printr-o singură declaraţie care execută codul unei proceduri, decât să se trimită sute se linii de cod prin reţea.
♦ pot fi folosite ca mecanism de securitate - utilizatorii pot primi permisiunea de a executa o procedură stocată chiar dacă nu au permisiunea de a executa direct o declaraţie a procedurii.
Procedura stocată poate fi creată prin comanda CREATE PROCEDURE care are sintaxa:
CREATE PROC[EDURE] nume_procedură[;număr]
[
{@parametru tip_de_dată}[VARYING][=valoare_implicită]
[OUTPUT]
][,n]
[WITH
{RECOMPILE
|ENCRYPTION
|RECOMPILE,ENCRYPTION}
}
[FOR REPLICATION]
AS
instrucţiuni_sql[...n]
La primul apel de execuţie a procedurii stocate are loc compilarea acesteia şi construirea unui plan de execuţie optimizat. Lansarea în execuţie a unei proceduri stocate se realizează cu comanda EXECUTE care are sintaxa:
[[EXEC[UTE]]
{
[@valoare_retur=]{nume_procedura[;numar]|@nume_procedură
}
[[@parametru=]{valoare|@variabila[OUTPUT]|[DEFAULT]][,n]
[WITH RECOMPILE]

3.1.2.4. Securitate şi autentificare
Se poate restricţiona accesul la datele gestionate de Microsoft SQL Server 2000. Se pot impune limitări administratorilor care au acces la datele Analysis Services prin intermediul Analysis Manager şi să efectueze funcţii administrative. Se pot impune restricţii şi utilizatorilor care accesează date pe serverul de analiză cu ajutorul aplicaţiilor client. Se pot specifica utilizatorii care să aibă acces la date şi tipurile de operaţii pe care le pot efectua. În plus, se pot controla permisiunile de acces ale utilizatorilor la diferite nivele de date Analysis Services, incluzând cubul, dimensiunea şi celula cub.
Securitatea administrativă este controlată utilizând grupul Microsoft Windows NT 4.0 sau Windows 2000 numit Administratori OLAP.
Securitatea utilizatorului final este controlată utilizând:
♦ Autentificarea pe durata conectării la serverul de analiză
♦ Rolurile bazei de date, cubului şi modelului mining definite în Analysis manager
Fiecare rol defineşte un set de utilizatori şi accesul partajat. Un rol este definit la nivelul bazei de date Analysis Services şi apoi asignate cuburilor la care utilizatorul din rol are acces. După asignare sunt permise anumite schimbări rolului de la nivelul cubului. Aceste schimbări nu afectează rolul de la nivelul bazei de date. De aceea, un rol poate avea o definiţie diferită pentru fiecare cub căruia îi este asignat. Servicile de analiză permit sistemul Windows de securitate integrat.
Pentru aplicaţia noastră nu am limitat accesul la baza de date, în ideea că, baza de date va fi integrată în aplicaţia mamă: SINU şi pentru ca acest lucru să fie posibil trebuia ca proiectul să fie accesibil persoanelor care îl vor prelua. Totuşi, am limitat accesul la interfaţa utilizator implementată în Visual FoxPro; numai persoanele autorizate au dreptul de a efectua operaţiile (operaţii stbilite şi implementate de noi) de doctorat asupra bazei de date.
3.1.2.5. Cerinţe minime pentru sistem
۩ Procesor - Intel Pentium sau 166MHz compatibil
۩ Sistem de operare - Windows Server 2003 (Standard Edition, Enterprise
Edition, datacenter Edition
- Windows 200 Server
- Windows 2000 Advanced Server
- Windows 2000 Datacenter Server
۩Memorie - Enterprise Edition: 64MB RAM (128MB recomandat)
- Standard Edition : 64MB
- Workgroup Edition : 64MB
۩ Hard Disk - 95-270MB pentru server şi 250MB pentru o instalare obişnuită
۩ Drive - CD-ROM
۩ Display - VGA sau un monitor de rezoluţie mai mare
۩ Altele - Microsoft Internet Explorer 5.0 sau mai recentă
- Windows 95, Windows 98, Windows Me, Windows NT 4.0, Windows
2000 sau Windows XP care să conţină software de reţea
- UNIX, Apple Macintosh şi OS/2 care necesită Open Database
Connectivity (ODBC)
3.1.2.6. SQL server 2005
Următoarea versiune SQL Server este un software de management de date şi analiză care se caracterizează prin scalabilitate crescută, disponibilitate şi securitate a datelor riscante şi a aplicaţiilor analitice simplificând crearea, dezvoltarea şi tratarea lor.
Având la bază puterea SQL Server 2000, noua versiune oferă o soluţie de tratare integrală a informaţilor care va ajuta diferitele tipuri de organizări la:
♦ construirea şi dezvoltarea aplicaţilor enterprise care sunt mai scalabile, mai de încredere şi sigure.
♦ maximizarea productivităţii IT reducând complexitatea de creare, dezvoltare şi tratare a aplicaţilor de baze de date.
♦ oferă utilizatorilor posibilitatea de a folosi un mediu de dezvoltare bogat, flexibil şi modern pentru a crea aplicaţii de baze de date mai sigure.
♦ partajarea datelor pe parcursul mai multor platforme, aplicaţii ţi dispozitive pentru a simplifica interconectarea sistemelor interne şi externe.
♦ oferirea de soluţii inteligente şi robuste care ajută la luarea unor decizii de gestiune bine informate şi creşte productivitatea întregii organizări.
♦ controlul costurilor fără sacrificarea performanţei, disponibilităţii sau scalabilităţii.