SQL PÜF NOKTALARI
* Verileri tablolara bölerek saklayan ve tablolar arasında
ilişkiler tanımlamaya olanak sağlayan veritabanı sistemine İlişkisel Veritabanı denir.
* İlişkisel Veritabanlarında sorgu amaçlı kullanılan genel
dile SQL denir.
* İlişkisel Veritabanında Birincil anahtar ve Yabancı anahtar kavramı
ne demektir?
Birinci Anahtar: Bir tablodaki varlıkları
ayırt edici olarak bulunan ve tekrar etmeyen satıra verilen addır.
Yabancı Anahtar: Bir varlığa ait ek
bilgilerin bulunduğu başka tablo(lar)da, varlığı temsil etmek üzere bulunan
birincil anahtar değerlerini içeren sütuna yabancı anahtar denir.
* Management Studio nesne temelli ve T-SQL temelli veritabanı
yönetim işlevleri için kullanılan SQL Server 2005 istemci yazılımıdır.
* SQL
Server Configuration Manager, SQL Server servislerinin
başlatılıp durdurulmasını sağlar. İşletim sisteminde çalışan diğer servisler de
dahil servislerle ilgili daha detaylı bilgi Denetim Masası, Yönetimsel Araçlar,
Hizmetler kısmından alınabilir.
* SQL Server içerisinde C# ile yazılmış bir kod yer alabilir. Bu
kodun çalışmasından CLR birimi
sorumludur.
* Veritabanı
nesneleri: Tablo, view, stored procedure, trigger,
constraint, indeks, sütun, role, kullanıcı, login, veritabanı, kuruk, kontrat…
* SQL Server 2 farklı sunucu seviyeli kullanıcı erişim modu
destekler: Windows Only ve Mixed Mode.
* Bir ilişkisel veritabanı sorgulama Seçme, İz düşürme ve
birleştirme işlemleri desteklenmelidir.
* Management Studio ve SqlCmd ortamlarında T-SQL yazılıp
çalıştırılabilir.
* SQL 3 alt dil grubundan oluşur:
DDL(Data Definition Language): CREATE,
ALTER, DROP
DML(Data Manipulation Language): SELECT, INSERT, UPDATE, DELETE
DCL(Data Control Language): GRANT, DENY, REVOKE
DML(Data Manipulation Language): SELECT, INSERT, UPDATE, DELETE
DCL(Data Control Language): GRANT, DENY, REVOKE
* Bir uygulamanın veritabanı katmanını tasarlamak 3 aşamada ele
alınmalıdır:
KAVRAMSAL: programın kullanılacağı
ortam ile ilgili model
MANTIKSAL: veritabanının teoriler ekseninde ve programcılara göre şekillenmiş hali
FİZİKSEL: veritabanının gerçek olarak çalıştırılabilir ve stabil halini gösteren model
MANTIKSAL: veritabanının teoriler ekseninde ve programcılara göre şekillenmiş hali
FİZİKSEL: veritabanının gerçek olarak çalıştırılabilir ve stabil halini gösteren model
* Bir veritabanında performans kaygılarından ötürü
denormalizasyonlara başvurulacaksa, bu fiziksel model seviyesinde ele
alınmalıdır.
* Bir veritabanının boyunu ve artım miktarını ilk haldeki veri
miktarı ve zaman içerisinde eklenecek veri eğilimi ile kestirebiliriz.
* Tempdb veritabanının
boyutu ve bulunduğu disk erişimleri hızlandırmak için önemlidir.
* Bir proje bittikten sonra sürekli olarak Türkçe karakter
problemleri ile karşılaşıldığında, veritabanı ve sunucu seviyeli Collation ayarlarının
düzgün olarak yapılandırılması gerekiyor demektir.
* Bir uygulamada veritabanı seviyesinde, veri eklemek ve
değiştirme gibi işlemlerde tarih formatında problem çekildiğinde, veritabanına
erişen kullanıcının default dilinin Türkçe olması işleri kolaylaştıracaktır.
* SQL
Server, tanımsal veri bütünlüğü tekniklerinden Constraint, Rule ve Default nesnelerine
destek verir.
* DEFAULT nesnesi
ile işdeş olan Constraint Default
Constraint’dir. Rule nesnesi Check Constraint’in
işlevini yerine getirir. Check constraint aynı işlevi daha az efor ile yerine
getirebilir.
* Birim
Bütünlüğü ile Domain
Bütünlüğü arasındaki en temel fark, birim bütünlüğü bir
satıra ait verilerin kendi içerisinde tutarlı olmasını hedeflerken, domain
bütünlüğü bir sütuna ait verilerin kendi içinde uyumlu olmasını hedefler.
* Bir tabloda en fazla bir tane Primary Key Constraint yeralabilir.
* Unique
Constraint Primary Key Constraint’e rağmen bir tabloda, PK
dışında tekil olması gereken sütunlar olduğunda kullanılır. UC null olabilir,
PK olamaz. Bir tabloda birden fazla fazla UC olabilir ama sadece bir tane PK
olabilir.
* Bir tabloya Unique
Constraint eklenmek istediğinde, tabloda önceden varolan
kayıtların en fazla bir tanesinin NULL olması
ve bütün değerlerin birbirinden farklı olması gerekir.
* İlişkili iki tablodan birindeki veriler silindiğinde veya
güncellendiğinde, ilişkili bulunduğu tabloya değişikliğin yansıtılabilmesi için
basamaklı veri bütünlüğü tanımının yapılmış olması gerekir. Aksi halde veri
değişimi hiç yapılmaz.
* Veri eklemekle ilgili bir işlem için Constraint’ler
zorluk çıkarıyorsa gerçekleştirilebilecek en pratik çözüm bir süre
constraint’leri susturmak, verileri ekleyip tutarlı hale getirdikten sonra geri
açmaktır.
* Rule ve Default nesnelerinin
yapabileceği şeyleri Constraint’ler
yapabildiği halde, SQL
Server bu nesnelere geriye doğru uyumluluk için destek
vermeye devam etmektedir.
* Sorgu, belli kriterleri sağlayan verileri veritabanından seçmek
demektir. Genel olarak bir sorgu SELECT, FROM ve WHERE yan
cümleciklerinden oluştur.
* Tekrarlayan satırları indirgemek için DISTINCT deyimi
kullanılır.
* Metin ve tarihsel sabitler tek tırnak içerisine alınarak
kullanılır. Sayısal sabitler doğrudan kullanılır.
* Joker karakterler(_, % ve [XYZ] ile [^XYZ]) sadece LIKE operatörü
ile kullanılabilirler, ’=’ ile
kullanılamaz.
* Tarihi istenilen formatta göstermek için CONVERT fonksiyonu
kullanılır.
* Altsorgu,
bir SELECT ifadesi
içerisinde başka bir SELECT ifadesi
daha yer almasıdır. Altsorgu ile ilgili [NOT] IN, [NOT] EXISTS gibi
kelimeler ayrılmış kelimeler kullanılabilir.
* Normalizasyon amacıyla
farklı tablolara dağılmış verileri birleştirip bir tek tabloymuş gibi
sorgulamak gerektiğinde JOIN kullanırız.
* Inner
Join ile Outer Join arasındaki temel fark; birleştirmeye
katılan her iki tabloda sadece eşleşen kayıtlar gelmesi gerektiğinde INNER JOIN,
tablolardan eşleşmeyenlerin de sonuçta yer alması gerektiğinde de OUTER JOIN ifadeleri
kullanılmasıdır.
* Full
Outer Join’e birleştirmeye katılan her iki tablonun da fazladan
olan satırlarını görmek gerektiğinde ihtiyaç duyulur.
* WHERE
ile HAVING arasındaki fark, HAVING’in gruplanmış
veriler üstünde filtreleme yapmasına rağmen, WHERE’in gruplamaya
girmeden önce filtreleme yapmasıdır.
* CUBE, GROUP BY’dan sonra
yer alan her sütun için içten dışa doğru bütün farklı kombinasyonlardaki
gruplamalı fonksiyon sonuçlarını bulur. ROLLUP ise, sadece içten dışa
doğru sonuçları korele eder.
* GROUP
BY verileri gruplara ayırarak sorgulamak amacıyla
kullanılır. ORDER
BY ise verileri seçme işlemi bittikten sonra sıraya koymak
için kullanılır.
* COMPUTE’in
kullanıldığı her yerde, COMPUTE
BY ifadesi kullanılamaz. COMPUTE BY ifadesi
kullanabilmek için sorguda, ORDER
BY deyimi ile birlikte, ilgili sütunun yeralması
gerekir. COMPUTE için
böyle bir kısıtlama yoktur.
* Bir tabloda yer alan bütün kayıtları, loglamadan boşaltmak
için TRUNCATE
TABLE deyimi kullanılır.
* Bir tablodaki veriler, başka bir tablodaki veriler de
kullanılarak güncellenmek durumunda iken oluşturulan bir sorguda alt sorgu
kullanılmazsa, hem MS
Access hem de MS
SQL Server tarafından
kullanılamaz. Çünkü veri güncelleme esnasında yapılan JOIN işlemi bu
iki VTYS için
farklıdır.
* Common Table Expressions(CTE)
ve Türetilmiş
tablo birbirine işlev olarak çok benzer. Ancak CTE rekürsif sorgulara olanak
tanıması ve bazı birkaç işleme izin vermebilmesi nedeniyle türetilmiş tabloya
nazaran daha işlevsel olabilmektedir.
* PIVOT ve UNPIVOT satır
içerisindeki değerlerden sütun oluştururken veya sütunları birer satır
değeriymiş gibi göstermek için kullanılırlar.
* Bir tablodaki satırlarda yer alan verilerden her birine
bakılarak ayrı ayrı işlemler yapmak gerekiyorsa, Cursor tür bir
değişken ile verilere erişmemiz gerekir.
* Transact-SQL
Sunucu Cursor’ler ve API Sunucu Cursor’ler olmak üzere iki
farklı Cursor türü
için SQL Server 2005 ve sonrasında destek sağlar. Cursorler’den kilitlenme ve
performans kayıpları nedeniyle kaçınmak gerekir.
* View’ler
karmaşık veritabanı şemalarını basitleştirmek için,
i. güvenlik ve yetkilendirme maksatlı,
ii. birim dönüşümleri gibi farklı görünmesi gerekli veri ihtiyacını karşılamak maksatlı,
iii. indekslenerek performans maksatlı kullanılabilirler.
i. güvenlik ve yetkilendirme maksatlı,
ii. birim dönüşümleri gibi farklı görünmesi gerekli veri ihtiyacını karşılamak maksatlı,
iii. indekslenerek performans maksatlı kullanılabilirler.
* WITH
CHECK OPTIONS, bazı satırlara erişimi olmayan bir view üstünden
kapsamı dışındaki verilere müdahale edilmesini engellemek amaçlı kullanılır.
* Unique olmayan Clustered Indeks tanımlanabilir. Hatta bu
genellikle doğru kullanıldığında performans artırıcı bir unsur olabilir.
* Bir sütuna girilen verinin tekilliğini sağlamak için Constraint tanımlamadan
çözüm üretilebilir. Constraint yerine
tekil indekslerle de kayıtlar tekil olmaya zorlanabilir.
* Bir indeks için fillfactor değeri
verilmezse, Global
Fillfactor değerleri(Sunucu veya veritabanı seviyeli
default ayarlar) esas alınarak indeks oluşturulur.
* Oluşturulmuş bir indeks’in fillfactor değerini ALTER INDEX REBUILD ile
değiştirmek mümkündür.
* Primary
Key Constraint ve Unique Key Constraint’lerin izdüşümü
olarak otomatik Unique
Indeksler tanımlanır. Bu indeksler DROP INDEX ile
silinemezler. Constraint silindiği
zaman otomatik olarak silinirler.
* Clustred
Indeks’ler ve daha önce indekslenmiş sütunlar, covering indeks
için, tekrardan indekslenmezler. Bu nedenle, geriye kalan iki sütunun
indekslenmesi yeterlidir.
CREATE INDEX idx_Covering ON tblUrun(urunKod,
urunAd)
* CREATE
UNIQUE CLUSTRED INDEX
cx_marka ON tblMarka (MarkaKod, Marka)
ile tanımlanan indeks,
SELECT markaKod, marka
FROM tblMarka WHERE marka=’vestel’
cx_marka ON tblMarka (MarkaKod, Marka)
ile tanımlanan indeks,
SELECT markaKod, marka
FROM tblMarka WHERE marka=’vestel’
Sorgusu için, idealdir. Çünkü, covering indeks’tir
ve daha da iyi bir durum, clustred bir indekstir.
* Bir indeks için sıralama verilmezse, anahtarları artan sırada(ASC) olarak
varsayılır. Bu nedenle de artan değerler şeklinde sıralanır.
* Bir tablo sadece bir tek nonclustred indeks içeriyorsa, bir heap
tanımlanır. Verilere, bu heap üstünden erişilir.
* Database
Tuning Advisor, bir Sql Profiler trace dosyasını veya bizim
belirlediğimiz bir sorguyu ele alarak bu sorgu ile ilgili iyileştirmeler
önerir. SQL
Profiler, SQL Server’a gelen ve çalıştırılan ifadeleri takip
etmek maksatlı kullanılır.
* Bir stored procedure’ün tanımında hangi tablolara atıfta
bulunulduğunu sp_depends ile
öğrenebiliriz.
* Bir stored procedure’ün kaynak kodunu WITH ENCRYPTION seçeneği
ile tanımlanarak, bir bir stored procedure’ün kaynak kodunu korumalı hale
getirebiliriz. Encrypted Stored Procedure’ler SQL Profiler tarafından
da görüntülenmezler ve Replike edilemezler.
* Girdi
parametreler, stored procedure’e değer aktarmak için standart
bir giriş tanımlar. Çıktı parametreler, özellikle stored procedure’ün birden
fazla değer döndürmesi veya INTEGER türü
dışında değer döndürmesi gerektiğinde kullanılır. RETURN deyimi,
stored procedure sadece bir tek değer döndürecekse ve bu değer de INTEGER ise
kullanılabilir. Genellikle hata kodu, sorgudan etkilenen kayıt gibi değerleri
döndürmek için kullanılır.
* Çalıştırma planı, Procedure
Cash denilen bölgede tutulduğu için, karmaşık stored
procedure’ler genel olarak ikinci çalıştırmada, ilk çalıştırmaya göre daha
hızlı çalışırlar.
* Yerel
Stored Procedure’ler oturuma özgüdür. Aynı anda oturum açan
faklı kullanıcılar birbirlerinin geçici stored procedure’lerini göremezler.
* Bir stored procedure ilk çalışmasında hızlı sonuç getirmesine
rağmen takip eden çalışmalarında yavaş sonuç getiriyorsa, stored procedure’ün
her çalıştırılmada, yeniden derlenmesi gerekiyor demektir. Bunun için, stored
procedure’ün WITH
RECOMPILE seçeneği ile tanımlanması performans artırıcı
etkide bulunabilir.
* Stored
Procedure, derlenmiştir. Yani çalıştırma planı procedure cash denilen
hafıza bölgesinde tutulmaktadır. İlk çalıştırmadan sonraki çalıştırmalarda daha
hızlı netice verir. Script ise,
hiç bir derlemeye tabi tutulmaz. Her çalıştırılmasında bütün işlemler baştan
ele alınır.
* Kullanıcı
tanımlı fonksiyonlar hesaplanmış sütun oluşturmada
kullanılabilir. Sütun olarak kullanılmış bir kullanıcı tanımlı fonksiyon
deterministik ise indekslenebilir.
* Tablo gibi ve sütun gibi olmak üzere işlevsel olarak iki
farklı Kullanıcı
Tanımlı Fonksiyon vardır.
* Bir view parametre
alamaz. Parametre alacak view gereksinimi için Tablo gibi davranan Kullanıcı Tanımlı Fonksiyonlar kullanılabilir.
* Fonksiyonlar,
yan etkide bulunamadıkları için sistemdeki verileri değiştiremezler.
Veritabanına veri ekleme ve silme gibi işlemler için veritabanı uç noktası
olarak fonksiyonlar değil, stored procedure’ler kullanılır.
* T-SQL dışında CLR dillerinde
de Kullanıcı
Tanımlı Fonksiyon programlanabilir. Özellikle CPU’yu yoğun
kullanacak işlemler için tercih etmek.
* Bir tablo ile bir fonksiyonu, şayet tablonun bir sütununu
fonksiyon parametre olarak alıyorsa, APPLY operatörü yardımı ile
birleştirebiliriz. Ama fonksiyon tablodan bağımsız tablo tipi sonuç
döndürüyorsa, APPLY operatörü
olmadan, JOIN ifadesi
ile birleştirme yapılabilir.
* EXEC() ve sp_executesql arasındaki
fark, sp_executesql’in
çalıştırma planı optimize edilebilir ifadeler çalıştırmak için uygun olmasıdır.
Bir veritabanındaki bütün indeksleri yeniden derleyecek bir program yazmanız
gerekse plan derleme gereksinimi olmadığından EXEC() fonksiyonu
ama dinamik olarak oluşturulması gereken ve çok sayıda verilerin olduğu bir
tabloyu sorgulayan bir ifadeyi parametrik çalıştırmak gerekiyorsa sp_executesql stored
procedure’ünü tercih etmek mantıklı olacaktır.
* Bir SP içerisinde TRY-CATCH yapısı
kullanılmayan noktada hata meydana gelirse hata ele alınamaz ve program
kullanıcısına programın çalışmasının kırılması olarak yansır.
* RAISERROR fonksiyonu
ile bir hata ortama fırlatıldığında bağlantı kopuyorsa, hatanın seviyesi 21
veya daha yukarıdaki bir değer ile fırlatıldığını gösterir.
* XML veriyi XQuery ile
sorgularız.
* XML bir veri tipinin 5 farklı metodu vardır.
.query: XQuery
soguları için kullanılır.
.value: Değerleri skaler bir veritabanı tipine döndürür.
.exist: Bir XQuery sorgu sonunun olup olmadığına bakar.
.nodes: Bir XML düğümü döndürmek için kullanılır.
.modify: XML-DML ifadeleri çalıştırmak için kullanılır.
.value: Değerleri skaler bir veritabanı tipine döndürür.
.exist: Bir XQuery sorgu sonunun olup olmadığına bakar.
.nodes: Bir XML düğümü döndürmek için kullanılır.
.modify: XML-DML ifadeleri çalıştırmak için kullanılır.
* XML veri
tipini herhangi bir metin tür(meslea NVARCHAR(MAX) )veri tipinden
ayıran en önemli fark binary olarak parse edilmiş olması ve bu nedenle de çeşitli
geçerlilik denetlemelerine ve sorgulamalara tabi tutulabiliyor olmasıdır.
* XML sütun
üstünde indeks tanımlaması, ait olduğu tablonun birincil anahtarı olmasını ve
sütun üstünde bir birincil XML
indeks tanımlanmış olmasını gerektirir.
* XML bir
veriyi sadece veritabanında tutmak için ilişkisele çevirmek, gereksiz işlem
maliyeti getirdiği için tercih edilmez.
* FOR
XML tabular sorgu sonuçlarını XML’e dönüştürür.
* OPEN
XML, XML verileri
ilişkisel domaine dönüştürmede kullanılır ve yardımcı sistem stored
procedure’leri sp_xml_preparedocument ve sp_xml_removedocument’dir.
* Daha küçük parçalara ayrılamayan bir dize işlemin bir bütün
olarak ele alınmasını sağlayan yapıya transaction denir.
* SQL Server 3 çeşit transaction’a destek verir:
Otomatik
Sabitleme: Normal olarak SQL Server’in çalıştığı
Transaction modudur. SQL Server’e gelen her bir batch tek bir transaction
olarak ele alınır ve transaction, batch’in çalıştırılması biter bitmez SQL
Server tarafından bitirilir.
Harici
Transaction: Programcı tarafından BEGIN TRAN ile
başlatılan ve programcı veya sistem tarafından bitirilebilen, genel manada
kastedilen transaction modudur.
Dahili
Transaction: SQL Server’in belli ifadelerden önce otomatik
transaction başlatması şeklindeki mod olup, bu moda geçirme işini kullanıcının
veya programcının yapması gerekir. Bu modda, her bir transaction açıldığında,
sonlandırma işi kullanıcıya bırakılmıştır.
* Ortak zamanlı çalışmada ortaya çıkan sorunlar:
Kayıp
Güncelleme(Lost Update)
Tekrarlamasız Okuma(non-repeatable Read)
Hayalet Okuma(fantom-read)
Kirli Okuma(dirty read)
Tekrarlamasız Okuma(non-repeatable Read)
Hayalet Okuma(fantom-read)
Kirli Okuma(dirty read)
* SQL Server şu izolasyon seviyelerine destek sağlar:
Read
Uncommited
Read Commited
Repeatable Read
Serialisible
Read Commited
Repeatable Read
Serialisible
* İki proses veya kullanıcıdan her biri faklı işlemler yaparken
aslında karşılıklı olarak diğerinin bir sonraki adımını tıkayan ve bu nedenle
de her ikisi de ilerleyemeyen proseslerin içinde bulundukları duruma dead lock
denir.
* sp_lock ve sp_who sistem
stored procedure’leri kullanılarak, kaynaklardan hangilerini kimler tarafından
kilitlendiği görüntülenir. Ardından kilitleme yapan transaction kısmı gözden
geçirilir.
* Trigger’ları Stored Procedure’lerden ayıran özellikler:
* Dışarıdan parametre almazlar.
* İstediğimiz zaman devreye sokamayız. Sadece belli veri değişimlerinde(Ekleme-Silme veya Güncelleme anında) devreye girerler.
* AFTER trigger’lar transaction’dan sonra devreye girerler.
* Tablolar üstünde tanımlanabilirler.
* Başka bir yerden çağrılamazlar ve sonuç döndürülemezler.
* İstediğimiz zaman devreye sokamayız. Sadece belli veri değişimlerinde(Ekleme-Silme veya Güncelleme anında) devreye girerler.
* AFTER trigger’lar transaction’dan sonra devreye girerler.
* Tablolar üstünde tanımlanabilirler.
* Başka bir yerden çağrılamazlar ve sonuç döndürülemezler.
* UPDATE ve DELETE işlemlerinin
her ikisi için de devreye girecek bir AFTER trigger’ı yazılabilir. Aynı
şekilde bir INSTEAD
OF trigger’ı da yazılabilir. Ancak bu durumda, UPDATE ve DELETE işlemlerinden
herhangi biri için ikinci bir INSTEAD
OFtrigger’ı tanımlanamaz.
* Trigger’lar
da Constraint’ler
gibi belli bir süre için devre dışı bırakılabilirler. Constraint’lerden farklı
olarak, trigger pasif iken gerçekleştirilen işlemleri, trigger aktif
edildiğinde denetleyemez. Bunun için,
ALTER TABLE tablo_ismi
DISABLE TRIGGER trigger_ismi | ALL
DISABLE TRIGGER trigger_ismi | ALL
yapısı kullanılır.
* Bir tablo üstünde INSTEAD
OF trigger varsa, ilk olarak bu tepkimeye girer.
Arkasından Constraint tepki verebilir. Constraint’ten sonra, tanımlı bulunan
trigger’lardan biri devreye girer. Ancak hangisinin önce gireceği belirlenemez.
Bu nedenle, en son tepkimeye girecek nesne iki INSERT tirgger’ından
biridir ancak hangisi olacağı garanti edilemez. Garanti etmek için, bir
tek AFTER INSERT trigger’ı
içerisinde bu iki trigger’ın uygun sırada çağrılması gerekir.
* AFTER
UPDATE trigger’ı devreye girdiğinde, hem Inserted hem
de Deleted sözde
tablolarını oluşturur.
* Assembly, CLR temelli
kodların dağıtım ve versiyonlama birimine verilen addır. SQL Server için
assembly sadece dll uzantılı CLR kütüphanelerine
verilen addır.
* Bir
veritabanının yedeği alındığında CLR bileşenleri
ve assembly’ler
de yedeklenir.
* Bir assembly içerisinde
yer alan metotları ve tipleri görmek mümkündür.
SELECT * FROM sys.assembly_modules
Sorgusu bu türden bir bilgi almak için kullanılabilir.
* CLR ortamında Stored Procedure, Trigger, Kullanıcı Tanımlı Fonksiyon, Kullanıcı Tanımlı Tip ve Kullanıcı Tanımlı Grupsallar programlamak
mümkündür.
* Trigger, Stored Procedure ve skaler tip
kullanıcı tanımlı fonksiyonları sadece metodları eşleştirmekle
tanımlayabiliriz.
* Teorik
olarak, CLR bileşenlerini T-SQL’e rağmen
kullanmayı CPU’yu
yoğun olarak kullanan işlemler, .NET kütüphanesine
gereksinim duyan programlar, düşük seviye veri işlemi yapan ve veritabanı
seviyeli veri erişimleri dışındaki işlemlerde kullanılır.
* Genelde Cursor yapılarından
kaçınmak için ve sistemde hali hazırda bulunmayan grupsal fonksiyonlar için
grupsallar kullanmak gerekir. SUM fonksiyonunu
biz yazdığınızda daha hızlı çalışmaz. Çünkü gerçek SUM fonksiyonu
alt seviyeli olarak gerçeklenmiştir.
* Uzaktaki
bir SQL
Server’daki verileri hızlı bir bağlantı üstünden, yereldeki SQL
Server’in içerdiği verilerle birlikte sorgulamanız gerekiyorsa bağlı sunucu
tanımlayarak bu tanımlama üstünden sorgulamak yeterli olacaktır.
* Metin
dosyalarını, Excel ve Access dosyalarını SQL Server’da birer
tablo gibi sorgulayabiliriz. Bunun için OLE-DB Driver’larını dinamik olarak
yükleyecek cümlecikleri yazarız veya bir bağlı sunucu tanımlayıp bu sunucu
üstünden bu kaynakları sorgulayabiliriz.
* Programlanabilir öğelerden Stored Procedure’ler ve Skaler sonuç
döndüren kullanıcı tanımlı fonksiyonlar bir XML Web Servisi metodu
olarak dışarıya açılabilir.
* Bir endpoint XML
Web Servisi olarak yapılandırıldı ise, platform bağımsız olarak, XML Web Servisi tüketebilen
her türlü uygulama bağlanabilir.
* Service
Broker mimarisini gerçeklemek için Tip, Contract, Mesaj, Kuyruk, Servis
Programı, Servis, Route gibi bileşenler kullanılır.
* Service
Broker, SOA temelli
mimariyi veritabanı seviyesinde gerçeklemek gerektiğinde kullanılır.
* ADO.NET
2 çeşit veri erişimine olanak sağlar: Bağlı Mod ve Kopuk mod.
* Aynı anda iki tane DataReader bir
tek connection üstünden veritabanına ADO.NET 2.0’dan itibaren MARS desteği
sayesinde ayrı iki Command nesnesi
ile erişebilir.
* Bağlı modda bir veritabanı erişimi kodlamak için 1. Connection nesnesinin Open()
metodu, 2. Command nesnesinin dönecek değer türüne uygun bir metodu (Tabular
sonuç için ExecuteReader())
ve son olarak SqlDataReaderüstünden
herhangi bir satıra erişebilmek için Read() metodu kullanılır.
* DataSet,
veritabanının minyatür olanıdır. DataTable ve constraint gibi
nesneler içerir. DataSet için
minyatür veritabanı tabiri kullanılmasının nedeni temel veritabanı
bileşenlerini içermesinden kaynaklanmaktadır.
* Veri
bağlama, veritabanından gelen verileri kullanıcı arayüzlerine
ilintilendirme sistematiği demektir.
* ASP.NET,
Hızlı Uygulama Geliştirme yaklaşımına SqlDataSource bileşeni ile destek
verir.
SQL Server 2008 yeni
özelliklerinden biri olan Backup
Compression özelliğini kullanmak için,
Management Studio’da Server name üzerinde
sağ tıklayıp, Properties/Database
Settings içerisinde "Compress backup" ı işaretleyin.
SQL Server’ın sıkıştırılmış yedekleme özelliği olan bu
işlemi, T-SQL kodlarını
kullanarak yapmak isterseniz, aşağıdaki şekilde "Backup Compression Default"
değerini değiştirebilirsiniz:
USE master;
GO
EXEC sp_configure ‘backup compression default’, ’1’;
RECONFIGURE WITH OVERRIDE;
GO
EXEC sp_configure ‘backup compression default’, ’1’;
RECONFIGURE WITH OVERRIDE;
Yedekleme işlevini t-sql kodları ile yapıyorsanız; backup database
kodunuzda NO_COMPRESSION ifadesini
kullanmanız yeterli olacaktır veya No ifadesini kaldırarak, direk sıkıştırma
işlemi yapılabilir. Aşağıda AdventureWorks veritabanı için yaptığımız örnekten
yararlanabilirsiniz.
BACKUP DATABASE AdventureWorks TO DISK=’D:\\SQLDATA\\CompressedBackup.bak’ WITH FORMAT, NO_COMPRESSION
SQL Server 2005 ve 2008’ de, bir kullanıcıyı "sysadmin"
yapmadan, bu kullanıcıya iş (Job) oluşturma ve bunu yönetme hakkı
verebileceğinizi biliyor muydunuz?
Bunun için, bahsi geçen kullanıcıyı MSDB veritabanındaki üç rolden
birine atamanız yeterli.
Rolleri, yetkileri en kısıtlı olandan itibaren:
1) SQLAgentUserRole,
2) SQLAgent ReaderRole,
3) SQLAgentOperatorRole.
1) SQLAgentUserRole,
2) SQLAgent ReaderRole,
3) SQLAgentOperatorRole.
SQLCMD aracı vasıtasıyla çalıştırdığınız Script’lerde veya komut
satırlarında değişkenler kullanabileceğinizi biliyor muydunuz?
Örneğin, "yedek_al.sql" isimli Script’inizin içinde
şöyle bir yedek alma komutu olsun:
"BACKUP
DATABASE $(Veritabanim) TO DISK=N’D:\\\\SQLYedekler\\\\$(Veritabanim).bak’"
Gördüğünüz gibi, buradaki değişken adı "Veritabanim". Bu
değişkene atanacak değer ise, SQLCMD komutuyla "yedek_al.sql" Script
dosyası çağırılırken "-v" parametresi ile atanıyor.
Örnek: SQLCMD -E -i
yedek_al.sql -v Veritabanim="Muhasebe".
ISQL ve OSQL, SQL Server
2005’ten önce SQL Server Instance’larında Komut İstemcisinden işlem yapmak için
kullanılan Komut İstemcisi araçlarıydı. SQL Server 2005 ile birlikte, tamamen
yeniden yazılan SQL Command (SQLCMD)
Komut İstemci aracı geliştirildi ve OSQL da
tedavülden kalkma sürecine girdi ("Deprecated"
oldu).
SQLCMD’ den önceki araçlar SQL Server Instance’larına ODBC ile
bağlanıyorlar ve bu yüzden bir seferde bir Instance’a bağlanabiliyorlardı.
Fakat SQLCMD aracı bağlantı için OLE DB kullanıyor ve bu sayede değişik SQL
Server Instance’larına bir Script’te birden fazla bağlantı kurabiliyor.
Örnek vermek gerekirse, ODBC ile bağlandığınızda bir Script
içerisinde iki farklı SQL Server Instance’ından iki farklı veritabanının
yedeğini alamazsınız. Fakat aynı işlem için SQLCMD kullanarak ve Script’inizde
de
":CONNECT SQLServerInstanceAdı
-E"
komutunu da kullanarak farklı Instance’larda işlem yapabilirsiniz.
Sa(System Adminisitrator)’un şifresini
unutabiliyoruz. Şimdi çok basit bir Stored Proc. ile nasıl değiştirebilceğimizi
gösterelim.
1)İlk olarak Command Prompt(cmd)’muzu açalım.
2)Sonra "osql -L" komutunu yazarak mevcut serever larımızın bir listesini çıkarsın.
3)"osql -S ServerAdı -E" server adı olan yere değiştireceğimiz server adını yazalım for example(USAME-PC).
Devam Edelim
4)Komut sayesinde MSSQL bağlanmamaızı sağladı şimdi "sp_password NULL,’yeni şifre’,’sa’ " komutu ile artık şifremizi değiştirelim lakin çalışması için bir sonraki satır go yazıp enter’a basın.
umarım faydalı şeyler yazmışızdır istifa etmişsinizdir.
1)İlk olarak Command Prompt(cmd)’muzu açalım.
2)Sonra "osql -L" komutunu yazarak mevcut serever larımızın bir listesini çıkarsın.
3)"osql -S ServerAdı -E" server adı olan yere değiştireceğimiz server adını yazalım for example(USAME-PC).
Devam Edelim
4)Komut sayesinde MSSQL bağlanmamaızı sağladı şimdi "sp_password NULL,’yeni şifre’,’sa’ " komutu ile artık şifremizi değiştirelim lakin çalışması için bir sonraki satır go yazıp enter’a basın.
umarım faydalı şeyler yazmışızdır istifa etmişsinizdir.
Hiç yorum yok