You are on page 1of 32

VER TABANI OLUTURMA VE YAPILANDIRMA

Daha nce grafiksel olarak yaptmz veri taban oluturma ve zelliklerini ayarlama ile
ilgili ilemleri, tm parametreleri ile beraber bu blmde yeniden inceleyeceiz.
VER TABANININ TANIMLANMASI (CREATE DATABASE):
SOL Server Management Studio iinden veya CREATE DATABASE ile veri taban oluturabiliriz.
Bu ilemlerin sonunda bir veri taban yansra, bu veri tabanna ait bir Transaction Log dosyasnn
olutuunu daha nceleri belirtmitim.
Yeni bir veri taban tanmlanrken yannda kullanlacak tm yap, aadadr:
CREATE DATABASE veritaban_ad
[ ON
[ <Filespec> [ ,...n ] ]
[ , <filegroup> [ ,...n ] ]
]
[
[ LOG ON { <filespec> [ ,...n ]} ]
[ COLLATE collation_ad ]
[ WITH <external_ama_seenekleri> ]
]
CREATE DATABASE database_name
on <filespec>[,...n]
for ,attach*with<servive_broker_seenei>+
| ATTACH_REBUILD_LOG]}

<filespec> ::=
{
[ PRIMARY ]
(
* NAME = mantksal_dosya_ad ,+
FILENAME = 'fiziksel_dosya_ad_ve_yol'
[, SIZE = boyut [ KB | MB | GB | TB ] ]
[, MAXSIZE = { enfazla_byme [ KB | MB | GB | TB ] | UNLIMITED } ]
*, FILEGROWTH = byme_miktar * KB | MB | % + +
)*,n+
}
<filegroup> ::=
{
FILEGROUP filegroup_ad [ DEFAULT ]
<filespec> [ ,...n ]
}
<external_ama_seenei> ::=
DB_CHAINING { ON | OFF} | TRUSTVVORTHY { ON | OFF}
}
<service_broker_seenei> ::=
ENABLE_BROKER | NEW_BROKER
| ERROR_BROKER_CONVERSATIONS }
CREATE DATABASE veritaban_snapshot_ad ON
(
NAME = mantksal_dosya_ad,
FILENAME = 'fiziksel_dosya_ad_ve_yol'
)[,...n]
AS SNAPSHOT OF kaynak_veritaban_ad
Uzun isteden da anlalaca gibi olduka uzun bir liste var. Biz burada sadece koyu renkli olan
ifadeleri inceleceiz. Dier ifadeler SQL Server 2005 ile gelen yenilikler olup, ilerleyen konularda
karmza kacaktr. (VER TABANI BAKIMI, SERVCE BROKER gibi)
imdi temel yapda geen ifadeleri ksaca aklayalm;
veritaban_ad: Yeni veri tabannn ad, Server ierisinde benzersiz bir isim olacaktr. En fazla
128 karakter uzunluunda olmas gerekir.
ON: Veri taban dosyalarn oluturur. Bulunaca yer ve dosyalara ait bilgiler ile, eer
konulacak ise dosya grup bilgisi ierir.
LOG ON: Veri taban iin log dosyalarn oluturur. Bu parametre verilmez ise otomatik olarak
sistem, veri tabann rnek olarak kullanp bir dosya oluturur. Boyutu ise veri taban dosyasnn %25
kadardr. Kullanm ON yapsna ok benzer, ancak bir grup iinde olamaz.
COLLATE: Veri taban iin kullanlacak dil seeneini belirler. Veri taban iin varsaylan dil
seimi yaplr.
PRIMARY: Birincil dosya tanmlamas yaplr. Birincil dosya gruplar, btn veri tabannn sistem
tablolarn ierir. Veri tabannn ve sistem tablolarnn mantksal balangcn ieren dosyadr. Veri
taban sadece bir tane birincil dosyaya sahip olabilir. ayet birincil dosya belirlenmemise, CREATE
DATABASE komut dizimindeki listelenen ilk dosya birincil dosya olur.
NAME: Mantksal bir zel isimdir. Mantksal ad, veri taban oluturulduktan sonra herhangi bir
Transact - SQL komutundan referans gsterilecek olan isimdir. Veri taban iinde bu isimin benzersiz
olmas gerekir.
FILENAME: letim sistemindeki dosyann addr. Dosya oluturulduu zaman iletim sistemi
tarafndan kullanlan dosya ad ve yeri. Burada belirtilen yerin, iletim sistemi tarafndan sktrlm
bir alan olmamas gerekir.
SIZE: Tanmlanan dosyann boyutudur. Birincil dosya iin SZE parametresi verilmemi ise SQL
Server Model, veri tabanndaki birincil dosyann boyutunu kullanr. kincil dosya veya log dosyas iin
SZE parametresi verilmemi ise SQL Server dosyann boyutunu 1 MB olarak oluturur.
KB, MB, GB veya TB ekleri kullanlabilir. Varsaylan MB' tr. Tam say kullanlr, ondalkl bir say
kullanlamaz. Minimum deer 512 KB verilebilir. Eer verilmedi ise 1 MB olarak atanr. Birincil
dosyann boyutu en az, model veri tabannn birincil dosyas kadar olmaldr.
MAXSIZE: Dosyann maksimum byyebilecei boyuttur. KB, MB, GB veya TB ekleri
kullanlabilir. Varsaylan MB'tr. Tam say kullanlr, ondalkl bir say kullanlamaz. Eer belirtilmedi ise
disk doluncaya kadar anlamna gelir.
UNLIMITED: Dosyann bykl disk doluncaya kadar anlamna gelir.
FILEGROWTH: Dosyann art bykldr. Maksimum deerin altnda bir say olmas gerekir.
Dosyann gerek duyduu her zaman, ierisinde oluturulacak yeni bo alan miktardr. Tam say
olabilir, ondalkl say olamaz. Deer "0" girilirse art yok anlamna gelir. Bu alana KB, MB, GB, TB
veya yzde (%) girilebilir. Say belirtilip son ek verilmez ise varsaylan deer, MB'tr. FILEGROVVTH
parametresi kullanlmazsa, varsaylan olarak %10 ve minimum deer 64KB' tr.
UYGULAMA
1) Bu rneimizde adet veri taban dosyas (1 adet primary data file -.mdf-, 2 adet
secondary data file-.ndf-) dosyas ile 2 adet Transaction log dosyas (.Idf dosyas) oluturacaz.
USE master
GO
CREATE DATABASE Prestige4
ON
Primary(NAME=Pec4,FILENAME='C:\Prestige4.mdf',
SIZE = 6MB,MAXSIZE=200 ,FILEGROWTH=20),

(NAME=Pec4_2,FILENAME='C:\Prestige4_2.ndf',
SIZE =2MB,MAXSIZE=20,FILEGROWTH= 20),
(NAME=Pec4_3,FILENAME='C:\Prestige4_3..ndf',
SIZE =1MB,MAXSIZE=10,FILEGROWTH= 5)
LOG ON
(NAME = Peclogl, FILENAME = 'C:\Peclog1.ldf',
SIZE=2MB,MAXSIZE =20,FILEGROWTH = 20),
(NAME =Peclog2,FILENAME='C:\Peclog2.ldf',
SIZE=1MB,MAXSIZE =5, FILEGROWTH =2)
GO


DOSYA GRUPLARI (FILEGROUPS) OLUTURMA:
Her veri taban bir primary filegroup ierir. Bu filegroup, bir primary data ve bir veya daha
fazla secondary data file ierir ve bunlar baka bir filegroup yesi olamazlar.
Eer birden fazla fiziksel disk varsa performans ykseltmek amac ile oluturulan ikincil veri
dosyalar (secondary data file) iin dosya gruplar oluturulabilir.
Direkt olarak veri tabann olutururken; varsaylan bir filegroup oluturabileceimiz gibi,
sonradan da oluturulabilir.
UYGULAMA:
Aadaki yazlm prestige isimli veri tabannn olup- olmadn kontrol ediyor ve varsa siliyor.
Daha sonra PRIMARY grup iinde bir adet Primary, bir adet secondary data file oluturuyor. lk grup
ismi olan Prestigegrupl iinde iki adet secondary file ve ikinci grup ismi olan Prestigegrup2 iinde iki
adet secondary file, son olarak da bir adet Transaction log dosyas oluturuyor.

USE master
if exists
(select name='prestige' from sysdatabases where name= 'prestige
')
drop database prestige
GO
CREATE DATABASE prestige ON PRIMARY
(NAME = prestige_data, FILENAME= 'c:\prestige.mdf,',
SIZE = 6,MAXSIZE = 50, FILEGROWTH =15% ),
(NAME= prestige2, FILENAME ='c:\prestige2.ndf',
SiZE= 6,MAXSIZE =50, FILEGROWTH = 15% ),
FiLEGROUP PrestigeGrupl
(NAME= prestige3,FILENAME ='c:\prestige3.ndf',SiZE = 6,MAXSIZE
= 50,FILEGROWTH=5),
(NAME= prestige4,FILENAME ='c:\prestige4.ndf',SiZE = 10,MAXSIZE
= 50,FILEGROWTH=5),
FiLEGROUP PrestigeGrup2
(NAME = prestige5, FILENAME ='c:\prestige5.ndf',SiZE =8,MAXSIZE
= 50, FILEGROWTH = 5 ),
(NAME = prestige6,FILENAME = 'c:\prestige6.ndf',SiZE =
10,MAXSIZE = 50, FILEGROWTH = 5 )
LOG ON
(NAME= 'Prestige_log' , FILENAME= 'c:\Peclog.ldf',
SiZE = 5MB,MAXSIZE= 25MB, FILEGROWTH= 5MB )
GO

2) altrdmzda, aadaki kty almamz gerekiyor.

3) Oluturduumuz prestige veri tabannn zelliklerinden files sayfasna getiimiz
zaman grnt, aadaki ekilde olur.


VER VE LOG DOSYALARINDA DELKLER
ALTER DATABASE ile daha nce oluturulmu veri tabannn iinde deiiklik
yapabiliriz. ALTER ifadesi kullanlrken veri taban ad ve iinde bulunan mantksal adlardan
yararlanlr.
Basit kullanm eklini ifade edecek olursak:
ALTER DATABASE veritaban_ad {
<add_or_modify_files>
| <add_or_modify_filegroups>
| MODIFY NAME = new_database_name
I COLLATE collationname }
<add_or_modify_f iles>: := {
ADD FLE <filespec> * ,...n +
[ TO FILEGROUP {filegroup_ad | DEFAULT} ]
| ADD LOG FLE <filespec> * ,...n +
| REMOVE FLE mantksal_dosya_ad
| MODIFY FLE <filespec> }
<filespec>::=
(
NAME = mantksal_dosya_ad
[, NEWNAME = yeni_ mantksal_dosya_ad+
[, FILENAME = 'os_file_name' ]
*, SZE = size * KB | MB | GB | TB + +
[, MAXSIZE = { enfazla_boyut [ KB | MB | GB | TB ] | UNLIMITED } ]
[ FILEGROVVTH = growth_increment [ KB | MB | % ] ]
[, OFFLINE ]
)
<add_or_modify_filegroups>::=
{
| ADD FILEGROUP filegroup_ad | REMOVE FILEGROUP filegroup_ad |
MODIFY FILEGROUP filegroup_ad { { { READONLY | READVVRITE } | {
{{{READONLY|READWRITE}
|{READ_ONLY|READ_WRITE}
}
|DEFAULT
UYGULAMA
1) Aadaki yazlm, prestige4 veri tabannn peclogl mantksal adna sahip dosyasnn
boyutunu 23 MB' a kartmakta ve yine ayn veri taban iine prestigeist3 isimli yeni bir Secondary
Data File eklemektedir.

alter database prestige4
modify file(name='peclogl',size=23 mb)
go
alter database prestige4
add file (name='prestigeist3',filename='c:\prestige10.ndf',
size=15 mb,maxsize=20 mb)
go
2) altrdktan sonra C:\ Srcsn atnz zaman, ekildeki gibi prestige10.ndf fiziksel ismi
ile dosyann olutuunu gzlemleyebiliriz.



3) Prestige4 veri tabannn zelliklerinden Files sayfasna getiimizde, grnt ekildeki gibi
olacaktr.

4) Eer kodumuzda bir snr belirtmez isek; kltebilecei kadar kltr.

use Prestige4
DBCC SHRINKFILE (prestigeist3)
5) Eer EMPTYFILE parametresini kullanrsak, iindeki tm dosyalar ayn dosya grubu iinde
bulunan dier dosyalara tar. Bu, bir fiziksel kltme yapmaz.

use Prestige4
DBCC SHRINKFILE (prestigeist3,EMPTYFILE)
6) TRUNCATEONLY parametresini kullanlrsak; dosyalar tamadan, kullanlmayan alanlar
siler. Eer bir snr verilerek kullanlm ise, bu deeri dikkate alr.

use Prestige4
DBCC SHRINKFILE (prestigeist3,TRUNCATEONLY)
7) Veri tabannda bulunan bo alanlar serbest brakmaz. Siz istediiniz kadar bir snr verin,
bunu gze almaz. Aadaki rnekte, 14 MB deerinin hibir anlam ifade etmeyeceini belirtmek
isterim.

use Prestige4
DBCC SHRINKFILE (prestigeist3,14,NOTRUNCATE)
8) Aadaki kod ile veri tabannn btnnde belirttiimiz deer kadar klme olacaktr. Bu
deer, yzdesel bir ifadeyi temsil eder. rnein: Veri tabanmzn toplam boyutu 50 MB olsun, eer
20 yazarsak bu %20 orannda klme yapacak anlamndadr ve deer 40MB'a iner. Tabii bu snr,
veri tabann oluturu snrnn ve iinde var olan verilerin boyutunun altna inemez. Burada
kullanlabilecek dier parametreler; NOTRUNCATE ve TRUNCATEONLY.
Bu komutu altrmadan nce, veri tabannn boyutunu kontrol ediniz. altrdktan sonra da
tekrar kontrol ediniz.
dbcc shrinkdatabase (prestige4,20)

VER TABANI VE DOSYA SLME
Veri taban iinde daha nce oluturulan bir Secondary dosyasn veya Grubu silmek iin ALTER
DATABASE komutu, veri taban tamamen silinecekse o zaman, DROP DATABASE komutu kullanlr.
UYGULAMA
1) Aadaki yazlm ile prestige4 veri taban iinde oluturduumuz prestigeist3 isimli
Secondary Data File'i tamamen sileceiz.

use Prestige4
go
alter database prestige4
remove file prestigeist3--database oluturulurken verilen
mantksal isim
go
2) altrdktan sonra veri tabann ap, Files sayfasna getiiniz zaman, bu dosyann, listede
olmadn greceksiniz.

3) Aadaki yazlm ile prestige4 veri tabann tamamen sileceiz.

use master
drop database prestige4
4) Master veri tabann kullanmamzn sebebi, tm veri taban bilgileri burada tutulduu iindir.
Ayrca silme ilemi tamamlandktan sonra, Master veri tabannn yedeini almay unutmayalm.
5) Kodu altrdktan sonra, SQL Server iindeki Databases klasr altnda artk, prestige4 veri
tabannn olmadn greceksiniz. Eer hala gryorsanz, zerinde sa tua basarak Refresh
seeneine tklaynz.

SEMA(SCHEMAS) OLUTURMA
ema ile bir veri taban iinde bulunan kullanclarn birbirleri ile karmasn nleyecek
benzersiz bir namespace yapsna sahip oluruz. ema iin, SOL Server 2012 iindeki nesneler
asndan bir kabuk grevi grdn syleyebiliriz.
Table, View, Procedure gibi nesneleri ierebilir. Ayn zamanda veri taban ve server bilgilerini
de barndrabilir.
Bir veri taban iinde ema oluturulabilir ve zerinde istenilen deiiklik yaplabilir.
Varsaylan olarak dbo isimli bir ema vardr ve sa isimli kullancya baldr. Varsaylan ema,
CREATE USER veya ALTER USER'n DEFAULT_SCHEMA seenei ile atanabilir veya deitirilebilir. Eer
DEFAULT_SCHEMA veri taban oluumunda tanmlanmazsa varsaylan olarak dbo emasna sahip
olur.
UYGULAMA:
1) Security klasr altndaki Logins zerinde sa tua basarak New Login seeneine tklayalm.

2) Login name ksmna sule yazarak SOL Server Authentication seeneini iaretleyip OK
butonuna basalm.

3) sule veri taban altndaki Security zerinde sa tua basarak New/ User seeneine
tklayalm.

4)User name ve Login name ksmna pelin yazalm.

5) Query Editr iine aadaki ifadeyi yazarak] yeni oluturulan tabloya pelin kullancsn fb
emas olarak balayalm.
Use sule
Create SCHEMA fb authorization pelin
Create table kadikoy(sno int, mac int, gol int)
grant select to pelin

6) Aadaki ifade ile bir emann ierdii nesneleri grebiliriz.

SELECT *
FROM INFORMATION_SCHEMA.SCHEMATA
WHERE SCHEMA_NAME='fb';
LER DATA DEFINITION LANGUAGE(DDL) ZELLKLER:
Bu blmde SOL Server 2005 ile birlikte gelen ve SOL Server 2012 iinde de kullanlan DDL
yapsnda bulunan gelimeleri inceleyeceiz. Bu gelimeler; ilave veri tipleri, blmlenmi tablolar,
index ynetimi ve performansnn gelitirilmesidir.
Bu ileri zellikleri kullanarak, eski versiyona gre verimlilii arttrr.
Bu ifadelerin banda CREATE DATABASE.ALTER DATABASE ve
DROP DATABASE ifadeleri gelmektedir. Bu deiikliklerle, database view, database mirroring,
snapshot isolation gibi zelliklerle alabiliriz.

Yine CREATE TABLE ve ALTER TABLE ifadelerinde meydana gelen deiikliklerle; gelimi veri
tipleri, computed columns ve satr bazl gvenlik zelliklerini kullanabiliriz.
VER TPLER
Var olan veri tiplerine ilaveten birka yeni veya gelitirilmi veri tipi SOL Server 2012 iinde
bulunur.
Geni Boyutlu Veri Tipleri:
Daha nce kullandmz varchar, nvarchar ve varbinary veri tipleri max ifadesi ile beraber
kullanlarak limitleri yaklak 2GB'a kartlmtr. Eski versiyonda st deerin sadece 8000 byte
olduunu dnrsek, geliimin boyutunu daha iyi anlayabiliriz.
Eski versiyonla ayn zelliklere sahip olan bu veri tipleri, varchar(max), nvarchar(max)
varbinary(max) eklinde kullanlr. nceki versiyonlarda kullanlan text, ntext ve image veri tiplerine
tercih edilebilir.
Bu zellikleri kullanarak bir tablo oluturmay basit bir rnek ile ifade edecek olursak;

CREATE TABLE ozgecmis
(
sno int,
personelad varchar,
aiklama varchar(max)
)
VXML Veri Tipi:
SOL Server 2008 den itibaren xml isimli yeni bir veri tipi vardr. CREATE XML SCHEMA
COLLECTION ifadesi ile var olan bir ema ile link oluturabilir.
Not: Bu veri tipine ait detayl bilgiyi, ayr olarak inceleyeceimiz XML konusunda bulabilirsiniz.

Tarih ve Zaman Veri Tipleri
Tarih ve zaman ile ilgili veri tipleri olduka zenginlemitir. Bunlar en ince hassasiyetten, genel
grme kadar kullanlacak seeneklerdir.
Aadaki yazlm; tm tarih ve zaman veri tiplerini zetlemektedir.

SELECT
CAST('2010-10-10 06:30:07.1234567 +02:00' AS time(5))as 'time',
CAST('2010-10-10 06:30:07.1234567 +02:00' AS date)as 'date',
CAST('2010-10-10 06:30:07.123 ' AS datetime)as 'datetime',
CAST('2010-10-10 06:30:07.1234567 +02:00' AS datetime2(2))as
'datetime2',
CAST('2010-10-10 06:30:07.1234567 +02:00' AS datetimeoffset(7))
as 'datatimeoffset';

Burada datetimeoffset ksmnda bulunan +02:00 lkenin saat konumunu belirler. Eer kayt
girerken bu belirlenmez ise Control Panel iindeki Blgesel Ayarlardaki lke zaman ayarlarn kabul eder.
Geography Veri Tipi:
Dnyamzn koordinat bilgilerini depolamak istediimiz zaman kullanacamz veri tipidir.
Bunu da bir rnek ile aklayalm;

if OBJECT_iD('dbo.konum','U' ) IS NOT NULL
DROP TABLE dbo.konum;
GO
CREATE TABLE konum
( id int IDENTITY (1,1),
cografyal geography,
cografya2 AS cografyal.STAsText()) ;
GO

insert into konum(cografyal)
VALUES (geography::STGeomFromText('LINESTRING(-122.360 47.655, -
122.343
47.656}', 4326));
INSERT INTO konum (cografyal)
VALUES (geography::STGeomFromText('POLYGON((-122.353 47.653, -
122.348
47.649, -122.343 47.658, -122.358 47.658, -122.35S 47.653))',
4326));
go
Geometry Veri Tipi:
Open Geospatial Consortium (OGC) tarafndan belirlenmi geometri standartlar iin kullanlan veri
tipidir. Olduka geni kullanm seenekleri bulunmaktadr. htiyacnz olduu zaman SOL Server 2008'in Help
ksmndan yararlanabilirsiniz.
ki kullanmn grmeye alalm.

DECLARE @g geometry;
DECLARE @x Xml;
SET @x = '<LineString xmlns="http://www.opengis.net/gml">
<posList>100 100
20 180 180 180</posList> </LineString>';
SET @g = geometry::GeomFromGml(@x,0) ;
SELECT @g.ToString() ;



DECLARE @g geometry;
SET @g=geometry::Point(1, 10 ,0);
SELECT @g.ToString();


PARTIONED TABLE
Eski versiyonda geni tablolardan oluturduumuz ayr view yaplar oluturarak performans
arttrabiliyorduk. Yeni versiyonda ise bu ilemi direkt tablo zerine uygulayabiliyoruz.
Bir tabloyu yatay olarak blmlere ayrabiliriz. Satrlar farkl dosya gruplarna datlabilir.
Buradaki ama:
* oklu ilemci bulunan sistemde performans arttrmak.
* Geni tablolarn ynetimini basitletirmek.
INSERT INTO SELECT FROM ifadesi kullanlarak ok hzl bir ekilde veriler; blmlenmi tablolar
arasnda tanabilir. Burada veri fiziksel olarak tanmaz, sadece metadata bilgileri deiir.
renein; eski yla ait bilgileri blerek ayr bir blmde tutmak bu yap iin kullanlabilecek bir
zelliktir.
$partition fonksiyonu ile blmlenmi bir tablo hakknda bilgi sahibi olabiliriz.
Blmlenmi bir tablo oluturmak iin aadaki kademeler uygulanmaldr;
*** Blmlenme ile ilgili fonksiyon oluturma (CREATE PARTITION FUNCTION)
*** Blmlenme ile ilgili ema oluturma. (CREATE PARTITION SCHEME)
*** Blmlenmi tablo oluturma. (CREATE TABLE)
Fonksiyon Oluturma
Tablo blnmesi iin ilk olarak fonksiyon oluturmak gerekir. Bunun kullanm ekli aadaki gibidir.
CREATE PARTITION FUNCTION
partition function_ad (blmlemede kullanlacak
stun_veri_tipi)
AS RANGE [ LEFT | RIGHT ]
FOR VALUES ([ snr_deereleri [ ,.. n]])
Burada kullanlacak fonksiyon ad veri taban iinde benzersiz olmaldr. Verilen deer aralklar RANGE
ifadesi ile belirlenir. LEFT ile balang ve araln ilk deerine eitlik, RIGHT ile de son deere ve araln ikinci
eitlik kazandrlr. Varsaylan LEFT'dir.
rnein;
create partition function alan (int)
as range left for values(1,50);
Yukarda dosya grubuna datm yaplacaktr. Stun datm yaplrken u aralklar gz nne
alnacaktr;
1.Grup: <=1
2.Grup: >1 ve <=50
3.Grup: >50
Ayn ifade aadaki gibi RIGHT kullanlarak yazldnda;
create partition function alan2 (int)
as range right for values(1,50);
1.Grup:<1
2.Grup: >=1 ve <50
3.Grup: >=50
Karakter ifadeler iin kullanm yledir;
create partition function isimler (nvarchar(20))
as range right for values('D','H');
Aralklar; 1.Grup: Bo ve D harfine kadar olan kaytlar. 2.Grup D harfi ile H harfine kadar olan harfler.
Son grup ise H harfi ve sonras harfler.
ema Oluturma:
Tablo blmlenmesinde ikinci adm, oluturduumuz fonksiyonu kullanarak bir ema tanmlamas
yapmaktr.
Kullanm sekli;
CREATE PARTITION SCHEME partition_scheme_ad
AS PARTITION partition_function_ad
[ALL] TO ({dosya_grubu_ad | [ PRIMARY ]} [ ,...n ])
Burada daha nce oluturduumuz fonksiyonlar yine daha nce oluturduumuz gruplara
datyoruz. Oluturulan bu gruplarn dosyalarla ilikilendirilmesi gerekir.
Aadaki yazlm alan isimli fonksiyonda belirlediimiz aralklar daha nce oluturduumuz t1, t2 ve
t3 isimli dosya gruplarna datmaktadr.

CREATE PARTITION SCHEME alan_sema
AS PARTITION alan To (t1, t2, t3);
Yukardaki komutu uygulayabilmek iin veri tabanmz iinde t1, t2, t3 dosya gruplarnn oluturulmas
gerekir.

Eer fonksiyon ve ema yaps hazrsa; son kademe olarak olarak bunlar kullanp bir bimlenmi
tablo oluturarak performans arttrabilirsiniz.
Burada ON ifadesi ile oluturulan ema kullanlarak tablo oluturulur ve blmlenir. Ayrca ema
bilgisinden sonra parantez iinde blmlemede temel kullanlacak stun ad belirtilmelidir.
CREATE TABLE dbo.maa
(
maas int,
parsonelad varchar(10)
)
ON alan_sema(maas)
Evet, tm bu yap biraz kark grnse de, byk tablolarda mutlaka kullanlmadr.

UYGULAMA:
1) Veri tabanmznn zerinde sa tua basarak Properties seeneine girelim uygulama ile
esasnda ok basit olan bu yapy kullanalm.

2) Sol ksmdan Filegroups sayfasn seerek sa tarafta Add butonunu kullanp, g1, g2 ve g3
isimli adet dosya grubu ekleyelim.

3) Yine sol taraftan Files sayfasna geerek, Add butonu ile g11, g12 ve g13 isimli dosya
ekleyerek; bunlar sras ile bir nceki admda oluturduumuz g1, g2 ve g3 isimli dosya gruplarmzla
ilikilendirelim.


4)Query Editr ap; ilk olarak fonksiyonun tanmlamasn aadaki gibi yapalm.

CREATE PARTITION FUNCTION isimkes (int)
AS RANGE LEFT FOR VALUES (1000, 2000)
5) Ardndan oluturduumuz isimkes fonksiyonunu kullanarak, oluturduumuz dosya
gruplarna datm aadaki gibi yapalm.
CREATE PARTITION SCHEME isimli
AS PARTITION isimkes TO (gl, g2,g3)
6) Artk herey hazr. CREATE TABLE ifadesinde kullanacamz ON cmleciinden sonra ema
ad ve blmleme kullanacamz stun adn belirterek, tablomuzun tanmlamasn yapalm.
CREATE TABLE dbo.ozeleman
(
sno int,
parsonelad varchar(10)
)
ON isimli(sno)
Bunun sonucunda tablo oluacaktr. Grnm olarak normal tablodan bir fark yoktur


Ancak sno deeri 1000'den kk olan kaytlar g1, 1000 ile 2000'e kadar olan kaytlar g2, 2000
ve sonras kaytlar g3 dosya gruplar iindeki dosyalarda tutulacaktr. Bu dosya gruplarnn da ayr
fiziksel diskler zerinde olduunu dnrsek; herhangi bir sorgulama da performansn artacan,
sanrm dnmeye balamsnzdr.
INDEX
Performans iin en gerekli zelliklerinden biri de index yapsdr. Index ynetim ve kullanmn
da yaplan deiiklilerle performans arttrlmtr. Burada sadece deiiklikleri inceleyeceiz detay iin
INDEX konusuna baknz.
SQL Server 2005'den itibaren index ynetiminde kullanlan ALTER INDEX ifadesi ile gelen
yenilikleri inceleyecek olursak;
*** DISABLE: Bu ifade ile kullanclarn geici olarak clustered index yapsndaki index
mekanizmasn amasn engeller. Tekrar aktif hale getirmek iin REBULID ifadesi kullanlr.
Aadaki yazlm personel isimli tabloda bulunan PK_musteri isimli index yapsn devre d
brakmaktadr.
alter index pk_musteri on dbo.musteri
disable
*** REBUILD: Tek bir index veya bulunan tm index'leri yeniden aktivite etmek iin kullanlr.
DBCC DBREINDEX ifadesinin yaptn yapar.
Aada personel tablosundaki index_sno aktif hale getirilmektedir.
alter index PK_musteri on dbo.musteri
rebuild
Eer birden fazla index aktif hale getirilecek ise aadaki ifade kullanlmaldr;
alter index all on dbo.musteri
rebuild
*** REORGANIZE: lndex yapsnda bulunan leaf blmn yeniden dzenleyerek performans
arttrr. Eski srmdeki DBCC INOEXDEFRAG ifadesinin yaptn yapar. Bir nevi ekleme ve silmelerden
dolay oluan index paralanmalarn dzenleyerek, daha performansl almasn salar.
alter index pk_musteri on dbo.musteri
reorganize
*** INDEX SEENEKLER: lndex seeneklerinden yararlanarak CREATE INDEX ile
kazandrdmz zellikleri deitirebiliriz. Bu seenekler nceki versiyonda bulunan PAD_INDEX,
F1LLFACTOR, SORT_IN_ TEMPDB gibi zellikleri iermek ile beraber SQL Server 2008 ile gelen yeni
seenekleri de iermektedir. Bunlar bir liste eklinde verecek olursak;
ONLINE={ON/OF}: Sorgulama veya gncelleme ilemlerinde tablonun kilitli olup-olmamasn
belirler.
ALLOW_ROW_LOCK={ON/OFF}: Satr bazl kilitleme olup-olamamasn belirler.
ALLOW_PAGE_LOCK={ON/OFF}: Sayfa bazl kilitleme olup-olamamasn belirler.
MAXDROP=ilemci says: Kontroln ka ilemci tarafndan yaplacan belirler. Bu seenei
server dzeyinde devreye sokmak iin ise sys.sp_configure kullanlr.
PERFORMANS: Performans arttran dier bir etken de noncluster index ile beraber kullanlan
key deeri bulunmayan stunlarn yapya dahil edilmesidir. Bunun maksimum limiti 16 stundur.
create nonclustered index index_adres
on person.address (postakodu)
include (sehir,ice,mahalle)
INDEX BLMLEME: Bir nceki blmde anlattmz ve admda oluan tablo blmleme
ilemi aynen index yaps iin de geerlidir. Byk index bilgileri ayr dosya gruplarnda tutularak
performans arttrlabilir.
Tek fark: son admda tablo oluturma ifadesi yerine, index oluturma ifadesi kullanlr.
LER DATA MANIPULATIONLAN.(DML) ZELLKLER:
SQL Server 2005'den itibaren kullandmz dier bir ileri zellik de, DML ifadeleridir. Bylelikle
daha az kod ile daha ok i yapma olana salanmaktadr.
OUTPUT:
SQL Server iinde bir trigger oluturduumuz zaman inserted ve deleted zel tablolarnda
bulunan bilgiler ile ilemler gerekletirme; eski versiyonda olduu gibi, yeni versiyonda da devam
etmektedir.
Ancak SQL Server 2005'den itibaren, bnyesinde bu yap ile birlikte OUTPUT ifadesi
bulunmaktadr. Bu sayede INSERT, UPDATE ve DELETE ifadeleri basit bir ekilde kullanlmaktadr.
Bunun sonucunda dnen deer bir table_ deerli fonksiyon yapsnda olur.
Aadaki hallerin dnda herhangi bir DML ifadesi iinde OUTPUT kullanlabilir.
*** Hedef view yapsnda INSERT ifadesi.
*** Uzaktaki tablo ve view iin kullanlacak DML ifadeleri.
*** Lokal veya datlm blnm view yaplarnda
UYGULAMA
1) ekildeki gibi bir tablo tasarlayarak manav ad ile kaydedelim ve iine hibir kayt
girmeyelim.

2)Aadaki kodu Query ksmna yazalm.
DECLARE @Detayekle TABLE
(detayno int,urunad nchar(10), ekleyen sysname)
INSERT INTO manav
OUTPUT INSERTED.sno,INSERTED.ad, SUSER_NAME()
INTO @Detayekle VALUES(1,'Elma', 1.50)

INSERT INTO manav
OUTPUT INSERTED.sno,INSERTED.AD,SUSER_NAME()
INTO @Detayekle VALUES (2,'Armut', 3.25)
SELECT * FROM @detayekle
Bu kod ile deeri frlatacak @Detayekle isimli bir tablo fonksiyonu tanmlyoruz. Ardndan iki
kayt giriyoruz. Ancak OUTPUT ifadesi kullanarak ekleme ilemi sonunda inserted tablosunda bulunan
sno ve ad deerleri ile o an aktif kullanc adn alan suser_name() fonksiyonu deerlerin @Detayekle
fonksiyonuna aktarlmasn salyor.
Son satrda bu tablo fonksiyonunu listelediimizde, grnt ekildeki gibi olacaktr


Orijinal tablom ise aadaki gibi grnecektir.

3)imdi de OUTPUT ifadesini kayt deiikliinde kullananlm.
DECLARE @fiyatdegistir TABLE(urunno int,eskifiyat money,
yenifiyat money,deitiren sysname)
UPDATE manav
SET fiyat= fiyat*1.20
OUTPUT inserted.sno,deleted.fiyat,inserted.fiyat,
suser_name() INTO @fiyatdegistir
SELECT * FROM @fiyatdegistir
Burada @fiyatdegistir fonksiyonunu tanmlyoruz. Manav tablosunda tm fiyatlar %20
zamiandryoruz. OUTPUT ifadesi ile inserted tablosundan yenifiyat ve sra numarasn, deleted
tablosundan ise eski fiyat alarak aktif kullanc ile beraber @fiyatdegistir fonksiyonuna yklyoruz.
Listelediimiz zaman grnt aadaki gibi olacaktr.

4) Silme yapmak ve silinen bilgilerin grntlenmesi iin ise aadaki kodu kullanmamz
gerekir.
DECLARE @Detaysil
TABLE (sno int,silen sysname)
DELETE manav
OUTPUT DELETED.sno,SUSER_NAME()
INTO @Detaysil
WHERE sno=1
SELECT * FROM @Detaysil


COMMON TABLE EXPRESSION(CTES):
CTEs; SQL_99 standartlarnda tanmland iin klasik Transact-SQL ifadelerine gre daha
okunakl ve kolay sorgular oluturur.
Temel yaps SELECT sorgusu iermektedir. SELECT, INSERT, UPDATE ve DELETE ifade
sonular yakalanabilir.
Kullanm ifadeleri:
WITH <common_table_expression> [,...n]]
<common_table_expression>::=
expression_ad
[{stun ad[,...n])]
AS
(<CTE_sorgu_tanmlamas>)
Expression_ad: CTE addr. Herhangi bir isimi olabilecei gibi, veri tabannda bulunan bir tablo
ad bile olabilir.
Stun_ad: CTE iin kullanlacak stun ad veya adlardr. Seilen stun says ile sorgu sonucu
oluan stun says birbiriyle ayn olmaldr.
CTE_sorgu_tanmlamas: Sonu yaps iin kullanlacak zel SELECT ifadesidir.
Aadaki yaplar CTE_sorgu tanmlamasnda kullanlmaz.
*** COMPUTE or COMPUTE BY
*** ORDER BY (TOP ifadesi varsa hari)
*** INTO
*** OPTON (sorgu yapsnda)
*** FOR XML
*** FOR BROWSE
Kullanlmas:
1) CTE stun listesi seilir.
2) CTE SELECT sorgusu oluturulur.
3) Sorgu iinde CTE kullanlr.

Eski yapda tretilmi tablolar ayr ayr oluturulurken, bu yapyla birlikte ayn kod iinde
bulunmas; okunabilirlii ve basitlii arttrr. Ayrca kod hiyerari karmaklndan kurtuluruz.
Bu kadar reklmdan sonra bir uygulama zerinde bu yapy inceleyelim.
UYGULAMA
1) Aadaki tabloyu tasarlayarak ciro ad ile kaydedip, rnek verileri girelim.




.NET assemblies kullanlarak; stored procedure, triggers, functions ve types oluturulabilir.

Ayr tablolar ve indexler oluturarak performans arttrmak dier yeni DDL zelliklerindendir.

CREATE LOGIN, CREATE USER ve CREATE ROLE ifadeleri ile gvenlik yapsndaki yeni zellikleri
uygulayabiliriz. Tabiki bu ifadelerin ALTER ve DROP cmlecikleri de bu yapya dahildir.

Event Notification otomatik olarak DDL ve DML ifadeleri ile altrlabilir.
PIVOT UNPIVOT
Geni veri tabanlar iin gl apraz sorgular oluturmakta yararlanacamz yeni bir zelliktir.
PIVOT ile apraz sorgular oluturularak; sum, average, count gibi fonksiyonlar ve gruplamalar
yaplabilir. Microsoft Access programnn Transform ifadesine benzer.
Kullanm ekli:

SELECT * FROM tablo_kayna
PIVOT (kme_fonksiyon ( stun_deer)
FOR pivot_stun
IN (<stun_liste>)
) tablo_takmaad
UNPIVOT ise stunu deere dntrr. PIVOT yapsnn zttdr.UNPIVOT kullanm ekli, PIVOT
yapsna benzer. Ancak PIVOT yerine zel UNPIVOT ilemleri kullanlr.
APPLY
Birbirleri ile JOIN ifadesi ile ilikilendirilmi tablonun her bir satrn tablo fonksiyonu olarak
dndrmek iin kullanlr.

ki eidi vardr;
*** CROSS APPLY: Yalnzca satrlar bir tablo fonksiyonu dndrr.
*** OUTER APPLY: Tm satrlar tablo fonksiyonu dndrr. Satr yoksa veya null deeri
tayorsa bile dndrme ilemini gerekletirir.
Kullanm ekli:
FROM sol_tablo_kayna
{OUTER | CROSS} APPLY satablo_kayna
DZ(RANK) FONKSYONLAR
SQL Server drt eit dizi fonksiyonuna destek vermektedir. Bunlar; RANK, DENSE_RANK,
NTITLE ve ROW_NUMBER. Hepsinin de OVER cmlecii ile beraber kullanlmas gerekmektedir.
OVER ifadesi blmlenmeyi ve satr sralanmasn salar. Kullanm ekli aadaki gibidir;
over ([ PARTITION BY < ifade_deeri > , ... [ n ] ]
ORDER BY <stun> [ ASC | DESC ] [, ...[ n ] ])

PARTITION BY cmlecii ile dizi iin satrlarn nasl gruplanaca belirlenir. Her bir blmn
satr sralanmasnn nasl olaca ise ORDER BY cmlecii ile ayarlanr.
RANK:
Sonu yaps iinde ayrlm zel bir blmle birlikte her bir satrn dizi olarak dnmesi iin
kullanlan fonksiyondur. Eer Order By ile belirtilen deeri birden fazla hcre iinde varsa ayn dizi
numarasn alrlar.
DENSE RANK
Bu yapnn zellii; eer blmlenmeye tabii olmu stunun eleman ayn deerden dolay bir
dizi srasnda kullanlyorsa, sonraki kyaslamada bir sonrakinin dizi srasna girmesidir.
Bu fonksiyonun performans da bir nceki RANK fonksiyonunun performans ile ayndr. Ancak
dizi sralar arasnda boluk yoktur. Art arda gelen numaralara, sradaki rn doldurulur. Kontrol biraz
daha kolay olabilir.
ROW_NUMBER:
Ayn deer olsa bile, satr numaralarn direkt dizi olarak dndrmek iin kullanlr.
NTILE
Dizi miktarn belirleyerek kullanlr. Bu, parantez iinde belirlenir. Aadaki yazlmla dizi iine
yerleik elemanlarn numarasn iki ile snrlyoruz.
select
personelad,urunad,fiyat,NTILE(2)
over(partition by urunad order by fiyat desc)
as paradizi from ciro
HATA KONTROL
TRY... CATCH:
TRY...CATCH blou Exception yapsnda kullanlr. TRY blou esas almas gereken kodu
ierirken, CATCH blou ise hata durumunda devreye girecek ifadeleri ierir.
Kullanm ekli:

BEGIN TRY
{ sql ifadesi /sql ifadelen}
END TRY
BEGIN CATCH
{sql ifadesi/ sql ifadeleri}
END CATCH

Bu sayede eski versiyonda hata kontrol iin kullanlan @@error deikenine ihtiya
kalmamtr.
Bu yapnn geerli olmas iin mutlaka otomatik roolback yapsnn aktif hale getirilmesi gerekir.
Bunun iin SET XACT_ABORT ON ifadesi kullanlmal.


Bir transaction yapsnda sorun karsa, transaction ak kalmaya devam eder ve commit
olmaz. . Bu duruma doomed ad verilir. Bunu kurtarmak iin mutlaka CATCH blou iinde ROOLBACK
TRANSACTON ifadesini kullanmak gerekir.
@@error ifadesini kullanmak gerekirse bunu CATCH blounda ilk ifade olarak kullanmak
gerekir.
Eer kendi exception yapmz TRY blou iinde kullanmak ihtiyac duyarsak;
RAISERROR...WITH TRAN_ABORT ifadesi ile beraber kullanmamz gerekir.
TRANSCAT-SQL UYGULAMALARI:
Konumuzun sonunda Transact-SQL ifadelerine daha iyi hakim olmanz iin eitli senaryolar
reterek bunlarla ilgili uygulamalar gelitireceiz.
UYGULAMA
1) SENARYO: Veri taban iinde bulunan "mteri" isimli tabloda mteri bilgileri tutulmaktadr.
Bu tablo iinde bulunan ehir stununda mterilerin oturduu yerler tutuluyor. Bu tablonun tasarm ve
iindeki rnek kaytlar ekildeki gibidir.


kinci bir tabloyu ehirler ad ile aadaki gibi tasarlyorsunuz. Burada sno stununa Primary-Key
koyarak; aadaki zelliklerinden Is Identitiy seeneini Yes yapyorsunuz.




yle bir Transact-SQL ifadesi yazalm ki en ksa ekilde mteri tablosundaki ehir stun adlar;
ehirler tablosundaki ehir stununa kopyalansn. Ancak birden fazla olan ehir adlar tek olarak
gitsin.

2) ZM: Bunun iin aadaki kodu yazp, altrmak yeterli olacaktr. Burada kullanlan
DISTINCT ifadesi; ayn olan kaytlardan sadece bir tanesini alr.

INSERT INTO sehirler(sehir)SELECT DISTINCT sehir FROM musteri

3) sehirler tablosunu atmzda grnt, ekildeki gibi olacaktr.

UYGULAMA
1) SENARYO: rn adlar ve sat miktarlar olan meyve isimli tablonun tasarm ve iindeki
kaytlar ekildeki gibidir.

Grmek istediimiz: Toplam miktar 20 birimden fazla rn adlar ve toplam miktarlar.
2) Aadaki ifade bu isteimizi karlayacaktr. Burada kullanlan GROUP BY ifadesi ile ortak
olan bir stuna gre gruplama yapyoruz. GROUP BY ile bir koul cmlecii kullanacak isek bunu
HAVING ifadesi ile yapmamz gerekir.
SELECT urunad,sum(miktar) as Toplam
FROM meyve GROUP BY urunad HAVING SUM (miktar)>20
altrdmzda kts aadaki gibi olur.

You might also like