30 Ocak 2013 Çarşamba

SQL SERVERDE DEFAULT CONSTRAINT ISTIFADESI

Default funksiyasi varsayilan deyer demekdir.Yeni cedveldeki sutunu bos qoysaq yazilmasini istediyimiz sahedir.Meselen,cedvelimizde 1 mail sahemiz olsun.Eger istifadeci varsayilan deyer girmese yeni bos saxlasa varsayilan deyer olaraq bizim istediyimiz 1 deyerin girilmesini mueyyen ede bilerik.Meselen:

CREATE TABLE Student
(
P_Id int NOT NULL,
LastName varchar(255) NOT NULL,
FirstName varchar(255),mail varchar(50) DEFAULT('adsiz@box.az')
)

Varsayilan deyeri deyismek istesek o zaman asagidaki kimi yaza bilerik:

ALTER TABLE Student
ALTER COLUMN mail SET DEFAULT 'hale@box.az'

Oracle ucun:

ALTER TABLE Student
MODIFY mail DEFAULT 'hale@box.az'

Constrainti silmek istesek:

ALTER TABLE Student
ALTER COLUMN mail DROP DEFAULT

SQL SERVERDE INDEXLEME

Index ne ucun yaradilir?
Database-ler melumatlarimizi saxlayir ve 1 database icinde olan melumatlar coxaldiqca artiq performansda zeiflik yaranir.Bize ise sorgularimizi cox tez 1 sekilde calisdirmaq ve melumatlari elde etmek lazimdir.Meselen:
Select ad form Hale where ad like a%
Bele 1 sorgu yazdigimiz zaman sql server cedvelimiz icinde olan butun melumatlari tek tek axtarmaga baslayir ve adi a herfi ile baslayanlari siyahilayir.Bu zaman axtaris cedvelin en basindan baslanir ve buda performansi asagi salir.Indexleme yaratsaq bu zaman sql server sorgu calisdirilanda ilk once 1 index olub olmadigini yoxlayir.
Tutaqki PhoneBook adinda 1 cedvelimiz var ve icerisinde 6 milyona qeder melumatlarimiz var.


Texminen 1 GB-a qeder yer tutan bu cedvelimizde axtaris etmemin ne qeder vaxt alacagini ve ne qeder yaddas istifade edeceyini gormek ucun asagdiaki kimi 1 test edek.:

Altindan xett cekilen hissede gorduyumuz kimi texminen 160.000-e qeder logical read edildi.Bu zamanda 547ms kimi 1 CPU zamani istifade olundu.Sade 1 sorguda bu qeder 1 netice oldugunu gorduysek minlerle istifadecinin sorgularini elde etmek ucun ne qeder vaxt lazim olacagini yeqinki dusune bilersiniz.

Umumiyyetle,cedvellerimiz sql serverde page-ler ile saxlanilir.melumatalrimiz ise her page icinde sutunlar icinde saxlanilir.Her page page number,page icinde olan bos sahe ve page tipini tutan 96 byte-liq 1 header saxlayir.
Indexleme sql serverde 2 yere ayrilir:
-Clustered Index
-Non-Clustered Index

Cedveller uzerinde index yaratmaq ucun CREATE INDEX ifadesinden istifade olunur.Indexler melumatlari daha suretli tapmaq ucun yaradilirlar.Bu zaman cedvelde olan butun melumatlar oxunmur.Istifadeciler indexleri gore bilmirler sadece olaraq sorgulari suretlendirmek ucun istifade edirler.Index qoyulmus cedvellerin update-i index qoyulmayan cedvellerin update-inden cox vaxt aparir.Cunku indexlerin ozleride update olunmaga ehtiyac duyurlar.
SYNTAX-i:
CREATE INDEX index_adi
ON table_adi (sutun_adi)


Ilk olaraq cedvelimizde Clustered Index yaradaq.





Index yaratdiqdan sonra evvel yazdigimiz sorgunu yeniden calisdirsaq:











Yuxaridaki neticede aciq askar gormek olurki 4 logical read sayesinde neticeni elde etdik.Bu nece oldu?
Cedvelimizdeki melumatlar Clustered Index ile beraber yeniden gozden kecirilerek tree seklinde saxlanildi.Indexleme emeliyyatindan sonra emeliyyatlarimiz index olaraq mueyyen etdiyimiz sutuna gore tree uzerinde axtarilir.Clustered Index bize performans olaraq daha yaxsi 1 netice qazandirdi.Ancaq cox vaxt yalnizca Clustered Index istifade etmek yeterli olmur.Meselen,cedvelimizde id ile axtaris qeder tez tez istifade etmesekde "job" sutununa gorede axtaris etdiyimizi dusunek.Sadece 1 defe istifade ede bileceyimiz Clustered Index haqqimizi id sutunu ucun istifade etdik.Bu zaman komeyimize Non-Clustered Index gelecek.
StringField1 ucun Non-Clustered Index yaradaq:





Sorgumuzu calisdiraq:










Netice goz qabagindadir.Clustered Index ile Non-Clustered Index arasidnaki ferq nedir?
SQL SERVERDE olan cedvel ucun Clustered Index yalniz 1 dene yaradila biler.Bunun sebebi,Clustered Index yaratmagimizla beraber melumatlarimizin key olaraq siralanaraq yadda saxlanilir.
Non-Clustered Index ise cedvel basina 999 dene yaradila biler.(sql server 2005de 249 denedi).Non-Clustered Index  yaradildiginda melumatlar siralanmir ve oldugu yer ile elaqeli basqa deyisiklik olmur.Bu indexleme novunde key-imize gore 1 tree yaradilir ancaq cedvelimizin melumatlari bu tree icerisinde yerlesmir.Yeni,Non-Clustered Index ile axtaris etdiyimiz zaman ilk olaraq axtardigimiz sutunun Clustered Index ucun istifade olunan keyine access edirik.Bu key ile Clustered Index uzerinde axtaris ederek butun melumatlarimiza catiriq.

29 Ocak 2013 Salı

SQL DATATYPE

CHAR-Sabit uzunluqda deyerler saxlayir.Meselen,char(5).Bu o demekdirki,yalniz 5 character tutur.5den az character tuta bilmez.255-e qeder character saxlaya bilir.
VARCHAR-Mueyyen uzunluqda deyerler tutur.255-e qeder character saxlaya bilir.Eger 255-den boyuk deyerler qoyulsa o zaman o TEXT tipine cevrilecek.
TEXT-65,535 character uzunlugunda Stringler saxlaya biler.
CLOB(Character Large Object)-böyük həcmdə mətn tipli məlumatları saxlayir.
BLOB(Binary Large Object) -isə mətn tipli olmayan istənilən məlumatı(video, musiqi, şəkil, MS Office faylları, zip faylları və s.) bazada saxlamaq üçün istifadə olunur.

uniqueidentifier 

Eger web uzerinde applicationlar yaziriqsa cedvellere aid id sutunlarini int ve identity 1 sutun olaraq mueyyen etmisikse,bu zaman adress barda querystring olaraq verdiyimizde id-li melumat-i deyissek bu zaman basqa istifadecinin melumatina daxil olmus olariq.Meselen,?id=20 nomreli id-ni 21 ile deyisdikde bu zaman basqa istifadecinin melumatlarina daxil olmus olariq.Bunun qarsisini almaq ucun uniqueidentifier datatype-den istifade olunur. Default value hissede newid() yazsaq bu veziyetinq qarsisini almis olariq.yeni unique deyerler elde etmis olariq.
Meselen,1-ci setirin id-si=DA1B7C69-B087-4C33-9908-01869AF14E52, 2-ci setirin id-si ise =004BEE20-3189-4148-AB24-02823B51201C .Yeni 1-1den ferqlenen 2 id almis olariq.Belelikle,istifadeciler 1 sonraki deyeri mueyyen ede bilmezler.

SQL SERVER-DE VIEW YARATMAQ

View-lar virtual cedvellerdir.Real cedveller kimi setirlerden ve sutunlardan ibaretdir.View-da olan field-ler database-de real olan 1 veya coxlu cedvellerden goturulmus field-lerdir.View yaradarken meslehet goruremki view adlarini vw_ ile baslayasinizki onu cedvellerden ayird etmek daha asan olsun.
Edeceyimiz sql sorgularinda 1-den cox cedveli ve onlarin ayri -ayri sutunlarini istifade etmek ,bunlarin hamisini birlesdirmek ve lazim olan cedvelden sorgu gondermek isteyirikse bu zaman bunlari etmek evezine view yaradib lazimli sutunlari lazimli cedvellerden alib tek 1 cedvel uzerinden sorgu gondermek isimizi dahada asanlasdirar.yeni qarisiq olan sorgular daha asan 1 hala salinmis olar.
Syntax:

CREATE VIEW vw_Hale AS
SELECT Sutun1,Sutun2..
FROM Hale
WHERE condition

Gizli view-da yarada bilerik.Bu zaman heckim bizim yaratdigimiz view-nun hansi cedveller ile elaqeli oldugunu gore bilmez.Bu zaman view-nun uzerinde kilit sekili emele gelecek ve modify secimi aktiv olmayacaq.


CREATE VIEW vw_Hale
with encryption---modify secimi deaktiv olacaq
AS
SELECT Sutun1,Sutun2..
FROM Hale
WHERE condition


View hemise var olan melumati gosterir.View yaratmanin diger bir ustun cehetide security terefdendir.Eger cedvelimizde olan sutunlarin hamisinin gorunmesini istemirikse view yaradib cedvellerimizin hamisinin gorunmesinin qarsisini ala bilerik.
View-nu update etmekde mumkundur.Eger view-a yeni sutun daxil etmek istesek o zaman gerekki onu update edek.
Syntax-i asagidaki kimidir:

CREATE OR REPLACE VIEW vw_Hale AS
SELECT Sutun1,Sutun2..
FROM Hale
WHERE condition

Yaratdigimiz view-nu silmek ucun DROP VIEW ifadesinden istifade edirik:

DROP VIEW vw_Hale 


Ancaq view-lar ile bezi emeliyyatlar edile bilmez.Onlar asagidakilardir:
-Order by istifade oluna bilmez;
-Adsiz sutun istifade oluna bilmez.Meselen,SUM funksiyasini istifade etmek isteyirikse o zaman mutleq as ile ad vermeliyik;
-1den cox sorgu yazmaq olmaz.Yeni,sadece bir select ile baslayan sorgu yaza bilerik;
-Insert,Update veya Delete istifade ede bilmerik;
-Her hansi bir parametr gondere bilmerik.


SQL SERVER-DE IDENTITY SEED RESET ETMEK

DBCC CHECKIDENT (‘DATABASE_ADI.TABLE_ADI‘, RESEED,1)

yazdigimiz zaman bu T-SQL sorgusu mueyyen olunan database icindeki cedvele aid olan identity seed deyerini 1-e set edir.Yeni bu zaman eger auto increment olan sutunu  2 -2 artmasi ucun teyin etmisikse bu zaman cedvele elave olunan ilk deyerin id-si (identity seed ozelligi verilen sutun) 1-den baslayacaq.Sonra ise 2-2 artacaq.yeni 1,3,5 seklinde.

Bunu basqa cur asagidaki kimide yazmaq olar:

create table Hale
(
id int not null identity(10,5)
primary key(id)
)
Bu zaman Hale cedveline daxil edilen deyerin id-si 10-dan baslayacaq ve 5-5 artacaq.yeni,10,15 ve s.
Oracle-da ise bunun ucun sequence yaratmaliyiq.
CREATE SEQUENCE seq_id
MINVALUE 1
START WITH 1
INCREMENT BY 1
CACHE 10


Burada cache daha suretli access etmek ucun yaddasda ne qeder sequence deyerler yaradila bilineceyini mueyyen edir,Eger Hale cedveline melumat daxil etmek istesek o zaman nextval funksiyasindan istifade etmeliyik,
INSERT INTO Hale(id)
VALUES (seq_id.nextval)


8 Ocak 2013 Salı

SQL SERVER MANAGEMENT STUDIO-NUN GEC ACILMASI

Eger SSMS gec acilirsa bunu asagidaki yollarla hell ede bilerik:

1.SSMS-ni aciriq.
Tools->Options->Environment->Help->Online menyusunda " When loading help content " hisseden Eger SQL SERVERIN internetle hec bir elaqesi yoxdursa " Try local only,not online " secib OK duymesine vururuq.Bu zaman SQL SERVER help hissenin icini yuklerken sadece local diske baxacaq,internete baglanmaya calismayacaq.

Eger SQL SERVERIN internete baglantisi varsa (esasen bele olur) Bu zaman help hisseden " Try local first,then online" secimini sece bilerik.Bu zaman server ilk once local diske baxacaq,sonra internete baglanacaq.

2.Acilmani yavasladan sebeblerden biride asagidakidir:
Internet explore-i aciriq.
Tools->Internet options->Advanced->" Check for publisher's certificifate revocation " secimin isaresiz oldugundan emin olun.Eger secilidise secimi goturub OK vururuq.
Niye bele edirik? Cunku SQL SERVER MANAGEMENT STUDIO-da " Managed Code " istifade olunub.Yeni program yuklenende " Microsoftun " saytina baglanib bu kodlari tesdiq edir.Eger SQL SERVER-de internet baglantisi varsa o zaman bu emeliyyat daha tez heyata kecirilir.Eger internet baglantisi yoxdusa o zaman uzun bir muddet SSMS-nin acilmasini gozleyirik.

3.SSMS-nin normaldan 1-2 saniye daha tez acilmasini ise " Splash Screen " qaldiraraq temin ede bilerik.Splash Screen - 1 programin tam olaraq yuklenmeden evvel bir promotion (tanitim) ekrani gostermesidir.Bunu asagidaki kimi ede bilerik.

C:\Program Files\Microsoft SQL Server\100\Tools\Binn\VSShell\Common7\IDE\Ssms.exe -nosplash

Yeni Server harda yerlesirse onun URL-sinin sonuna gelib -nosplash yaziriq.

2. Secimi etsek yeni,Security-ni ignore edib SSMS-nin tez acilmasini istesek veya ignore etmeyib security-ni on plana kecirmek sizden asilidir.Bilirsiniz ,her seyin bir bedeli var :)

UGURLAR

SQL SERVERDE USERLERIN IP SIYAHISI

Bir SQL Server instance-na bagli olan istifadecilerin IP adreslerini asagidaki sorgunu yazmaqla gore bilerik:


Select client_net_address from sys.dm_exec_connections