Drepturi pe useri

 In cazul in care avem nevoie sa stim, pentru un anumit user, ce tipuri de drepturi are in baza de date si pe ce obiecte,     am facut  o procedura care, rulata pe o baza, intoarce userii, obiectele pe care userii au drepturi, tipul de obiect (tabela, procedura, view, etc)  tipul de drept pe obiectul respectiv (select, update, delete, etc)  si starea tipului de drept (adica daca are GRANT sau DENY pe acel tip de drept pe obiectul respectiv).
Procedura are un parametru @user care, daca primeste o valoare, procedura va returna pentru acel user toate drepturile pe toate obiectele pe care acel user are drept.
Daca parametrul @user va fi lasat strig vid ” (sau daca procedura va fi rulata fara parametru), atunci procedura va returna toti userii cu toate drepturile de pe toate obiectele aferente bazei pe care se ruleaza.
[mai mult...]

Userii ce sunt definiti pe un rol

Avem nevoie uneori de un raport care sa ne arate ce useri apartin unui rol in serverul de sql (in sql-ul rolurile sunt similare grupurilor in windows).
Pentru aceasta am creat o procedura care , rulata pe o baza de date, returneaza pentru acea baza rolurilegrupurile definite pe acea baza de date si userii aferenti fiecarui rolgrup de pe acea baza.
Procedura are un parametru @rol, care este folosit in sensul ca, daca primeste o valoare, procedura va returna toti userii aferenti rolului respectiv, iar daca parametrul @rol va avea valuare string vid ” (sau daca procedura se va rula fara parametru), atunci procedura va returna toate rolurile cu toti userii aferenti fiecarui rol de pe acea baza.
[mai mult...]

Validare IBAN

Pentru cazurile in care avem nevoie de validarea unui IBAN, am creat o procedura ce face acest lucru.

Procedura are doi parametri:

  • primul parametru este un varchar ce reprezinta iban-ul de verificat si validat
  • al doilea parametru este un out de tip int, ce returneaza 1 daca IBAN-ul este valid sau 0 daca IBAN-ul este invalid.
[mai mult...]

Validare CNP

Pentru cazurile in care avem nevoie intr-o aplicatie (sau extern unei aplicatii) de validarea unui CNP, am facut o procedura ce face acest lucru. Procedura primeste ca parametru un varchar @CNP si, in cazul in care este valid , procedura returneaza 1, iar in cazul in care este invalid procedura returneaza 0.

[mai mult...]

Folosirea functiei NTILE() in Sql Server

Una dintre functiile nedreptatite din sql server  (in sensul ca este foarte putin cunoscuta si folosita) este NTILE().

Daca primim o cerinta de la departamentele de business in care ni se cere sa impartim salariatii in 3 echipe in fuctie de topul salariilor (fara sa tinem cont de departamente), am putea sa realizam acest lucru folosind tabele temporare sau un cursor.
O varianta mult mai eleganta si mai simpla este insa functia NTILE().
Aceasta functie primeste si ea doi parametrii:
– primul este un intreg si reprezinta numarul de partitionari dorite (ca sa fie mai clar reprezinta in cate echipe sa imparta numarul de angajati din tabela test_angajati)
– al doilea parametru este o coloana (sau mai multe) din tabela si reprezinta coloana (sau coloanele) de care sa tina cont cand face aceasta partitionare.

 

Pentru a fi foarte clar, in scriptul de mai jos am creat o tabela in care am inserat valori:
drop table test_angajati

create table test_angajati
(
id int identity (1,1),
nume varchar(max),
departament varchar(max),
varsta int,
salariu int
)

 

insert into test_angajati
values (‘Georgescu Mihai’, ‘IT’,24, 2400)

insert into test_angajati
values (‘Popescu Ionel’, ‘Contabilitate’,70, 7000)

insert into test_angajati
values (‘Popescu Mihai’, ‘Distributie’,45, 4500)

insert into test_angajati
values (‘Marinescu Elena’, ‘Contabilitate’,56, 6900)

insert into test_angajati
values (‘Calimanescu Geo’, ‘IT’,24, 2400)

insert into test_angajati
values (‘Eminescu Mihai’, ‘IT’,37, 3800)

insert into test_angajati
values (‘Ionescu Bogdan’, ‘Distributie’,38, 3800)

insert into test_angajati
values (‘Ionescu Emil’, ‘Contabilitate’,70, 7000)

insert into test_angajati
values (‘Ionescu Costin’, ‘Contabilitate’,69, 6900)

insert into test_angajati
values (‘Ionescu Gogu’, ‘Contabilitate’,20, 4300)

 

select * from test_angajati

id nume departament varsta salariu
1 Georgescu Mihai IT 24 2400
2 Popescu Ionel Contabilitate 70 7000
3 Popescu Mihai Distributie 45 4500
4 Marinescu Elena Contabilitate 56 6900
5 Calimanescu Georgeta IT 24 2400
6 Eminescu Mihai IT 37 3800
7 Ionescu Bogdan Distributie 38 3800
8 Ionescu Emil Contabilitate 70 7000
9 Ionescu Costin Contabilitate 69 6900
10 Ionescu Gogu Contabilitate 20 4300

[mai mult...]

Folosirea functiei RANK() in SQL Server

Am observat, in timp, ca sunt cateva functii de sql foarte putin cunoscute, dar care, in unele cazuri, ne pot usura foarte mult munca.Din acest motiv am sa prezint si sa explic cateva dintre ele.
Una dintre cele mai putin cunoscute functii este RANK(). Aceasta functie insa ne poate ajuta foarte mult in anumite situatii.

Spre exemplu, daca ni se cere sa scoatem un raport in care sa facem un TOP AL SALARIILOR PE DEPARTAMENTE, daca nu folosim functia RANK() avem o mare problema, pentru ca va trebui sa folosim mai multe tabele temporare, group by, max , identity , etc.
Insa, folosind functia RANK(), problema se rezolva relativ simplu.

Functia RANK() primeste doi parametri:
-primul este coloana dupa care va face splitarea/partitionarea datelor
-al doilea este coloana dupa care va face sortarea datelor

[mai mult...]

Cea mai recenta restaurare pentru o anumita baza

Pentru cazurile destul de dese in care avem nevoie sa stim care este cel mai recent restore pentru o anumita baza de date am facut o procedura ce primeste ca si parametru numele bazei de date si pt acea baza returneaza ULTIMA restaurare care a avut loc pe acea baza.

Ca si informatii suplimentare procedura returneaza:

– userul ce a facut restaurarea
– tipul restaurarii: Full, Differential, Log , etc
– data la care s-a facut restaurarea
– calea din care s-a ales backupul pentru restaurare precum si numele backupului folosit
– calea catre care s-au restaurat fisierele bazei de date

[mai mult...]

Verificare istoric backup pentru o anumita baza

Pentru cazurile in care avem nevoie sa vedem istoricul de backup pentru o anumita baza de date, am facut o procedura care returneaza acest lucru.

Procedura primeste doi parametrii:
@BazaDeDate
@NrZileIstoric

In functie de acesti parametrii procedura returneaza istoricul de backupuri, incepand de astazi si pana cu @NrZileIstoric in urma, pentru baza primita drept parametru @BazaDeDate.

(Zilele sunt calculate ca numar de 24 de ore)

Ca si informatii suplimentare procedura returneaza:
– data la care a inceput fiecare backup
– data la care s-a terminat fiecare backup
– daca backupul e pus sa expire sau nu (in cazul in care expira apare data expirarii)
– tipul backupului facut: Full, Differential, Log
– dimensiunea backupului
– locul in care a fost facut: intr-un backup device sau pe disk (daca a fost facut pe disk este afisata calea de pe disk)

Procedura nu trebuie pusa neaparat pe baza la care se doreste verificat istoricul de backup, ci poate fi pusa pe orice baza de pe serverul pe care se afla baza la care se doreste verificat istoricul de backup.

[mai mult...]

Monitorizare blocaje pe serverul de sql

Se intampla uneori,  aparent fara motiv, ca utilizatorii sa se planga ca le merg greu aplicatiile, sau ca asteapta mult sa se ruleze ceva in aplicatie.
De multe ori acest lucru se intampla din cauza aparitiei blocajelor pe server.
Pentru aceste situatii am facut o procedura care , la rulare, returneaza toate sesiunile ce genereaza blocaje sau care sunt blocate de alte sesiuni (asta in cazul in care exista blocaje pe server).
In cazul in care sunt blocaje procedura returneaza:
data,
baza pe care este blocajul,
userul si numele statiei care ruleaza sesiunea ce blocheaza,
userul si numele statiei ce ruleaza sesiunea ce este blocata,
scriptul rulat de userul blocat,
scriptul rulat de userul ce blocheaza,
precum si numele aplicatiilor implicate in blocaj (asta daca scripturile sunt rulate in cadrul unei aplicatii, si nu direct din sql).
In cazul in care nu exista blocaje la momentul rularii, procedura nu va intoarce, evident,  decat capul de tabel.
[mai mult...]

Orar rulare joburi pe sql server

In cazul in care avem nevoie de o situatie a tuturor joburilor de pe un server de sql, in care sa vedem cum si cand sunt programate sa ruleze, am facut o procedura care intoarce un astfel de raport.

Coloanele din raport sunt:

JobName – reprezinta numele jobului de pe serverul de sql respectiv

ScheduleName – reprezinta numele programarii jobului (o programare de job se poate folosi la mai multe joburi)

IsEnabled – este statusul jobului, daca este activ sau nu

ScheduleType – ne arata daca jobul a fost programat sa ruleze doar o data la o anumita data sau daca este recurent

Ocurence – poate fi zilnica, saptamanala, lunara, anuala sau one time

Recurence – cand anume este programat sa ruleze (spre ex, daca ocurenta e spaptamanala, atunci recurenta imi spune in ce zile ale saptamanii ruleaza)

Frequency – la ce ora sau la ce interval orar ruleaza

ScheduleUsageSartDate – cand a rulat prima oara

ScheduleUsageEndDate – data programarii ultimei rulari a jobului (daca este programat pe termen nelimitat apare 9999-12-31)

ScheduleCreatedOn – cand a fost creata programarea rularii jobului

ScheduleLastModifiedOn – cand a fost modificata ultima oara programarea rularii jobului

[mai mult...]