Hoþgeldiniz           
   
"SQL Server baþvuru kaynaðýnýz"
Skip Navigation Links
=========
Anasayfa
Makaleler
Hatalar \ Çözümler
Duyurular
Diðer
Ýpuçlarý
Yararlý Adresler
Mesaj TahtasýExpand Mesaj Tahtasý
HakkýmdaExpand Hakkýmda
Ýletiþim
Kullanýcý Adý:
Þifre:
 

Ne Mutlu Türküm Diyene!

SQL Server ile ilgili soru sormak için buraya týklayýn!


Yazýlarýmý nasýl buluyorunuz?






En Son SQL Server ile Ýlgili Okuduðum Kitaplar
- Inside Microsoft SQL Server 2005: Query Tuning and Optimization - MS Press (Ýngilizce)
- Accelerated SQL Server 2008 - Apress (Ýngilizce)
- Designing and Optimizing Data Access by Using SQL Server 2005 - MS Press (Ýngilizce)
- Microsoft SQL Server 2005 Database Solutions Design - Wiley Publishing (Ýngilizce)- Optimizing and Maintaining a Database Administration Solution by Using SQL Server 2005 - MS Press (Ýngilizce)- Designing a Database Server Infrastructure Using SQL Server 2005 - MS Press (Ýngilizce)- SQL Server 2005 Implementation and Maintenance - MS Press (Ýngilizce)
- SQL Server 2005 Administrators Companion - MS Press (Ýngilizce)



DMF Policy' mizi Test Edelim!
Peki eðer biz bu DMF Condition ve Policy' leri oluþturmadan önce isim standardýmýza uymayan bir Stored Policy oluþturulmuþsa o zaman ne olacak? Policy' mize uymayan nesneleri en kýsa yolla nasýl buluruz? Tabii ki Policy' mizi test ederek!

Öncelikle Policy' mizin çalýþýp çalýþmadýðýný bir test edelim. Bunun için yeni bir Query açýn ve Query Editor penceresinde aþaðýdaki kodu çalýþtýrýn.

=====================
USE MyDB
GO
CREATE PROCEDURE Test
AS
SELECT
* FROM MyDB
=====================

Bu komutu çalýþtýrdýktan sonra eðer Conditon ve Policy' leriniz sorunsuz çalýþýyorsa Query Editor' deki "Messages" penceresinde aþaðýdaki hatayý almanýz gerekiyor.

=====================
TEST1(TEST1\lab): Policy 'Isim Standardi' has been violated by 'Server/Database[@Name='MyDB']/StoredProcedure[@Name='test' and @Schema='dbo']'. This transaction will be rolled back. Policy description: '' Additional help: '' : ''. TEST1(TEST1\lab): Msg 3609, Level 16, State 1, Procedure sp_syspolicy_dispatch_event, Line 50 The transaction ended in the trigger. The batch has been aborted.
=====================

Eðer bu hatayý aldýysanýz her þey yolunda demektir. Hatayý þöyle tercüme edebiliriz: "test" isimli bir Stored Procedure oluþturmaya çalýþtýðýnýz için "Isim Standardi" isimli Policy' yi ihlal ettiniz. Yapýlan iþlem geri alýnacaktýr.

Eðer bu hatayý almadýysanýz ve "test" isimli SP oluþturulduysa, Policy' nizin etkin olduðundan emin olun. Bunun için Policy' nizi Object Explorer' daki Policies isimli düðümün altýnda bulabilir ve üzerinde sað tuþa týklayabilir ve "Enabled" olduðundan emin olabilirsiniz ya da Policy' nizin özelliklerinden (üzerinde sað tuþ ve açýlan menüden Properties' e týklayarak) "Enabled" seçim kutusunun seçili olduðundan emin olabilirsiniz. Eðer "Enabled" ise ve gene de isimlendirme kuralý iþlemiyorsa, o zaman oluþturduðunuz Condition' larý tekrar gözden geçirmenizi tavsiye ederim.

Ayrýca Policy' nizin etkin veya etkin olmadýðýný simgesinden de anlayabilirsiniz. Eðer Policy' nizin simgesinin sað alt köþesinde aþaðý giden kýrmýzý bir ok resmi varsa o zaman Policy' niz kullanýlmýyor durumundadýr.

Þimdi biz Policy' mizi oluþturmadan önceki Stored Procedure' lerle ilgilenebiliriz! Yalnýz bu bölümü daha anlaþýlabilir yapmak için bir planým var. Umarým "amma uzattýn sen de!" demiyorsunuzdur.

Bunun için sizden Policy' nizi yukarýda anlattýðým yöntemle kullanýlmýyor yapmanýzý yani "Disable" etmenizi isteyeceðim. Haklý nedenlerim var! Çünkü isim standardý politikamýzý çiðneyen bir Stored Procedure oluþturmamýzýn tek yolu bu. Böyle bir SP oluþturalým ki, konuyu daha iyi anlamamýza yardýmcý olsun.

"Isim Standardi" isimli Policy' yi "Disable" ettikten sonra aþaðýdaki kodu kullanarak bir SP oluþturun.

=====================
USE MyDB
GO
CREATE PROCEDURE Test
AS
SELECT
* FROM MyDB
=====================

Evet, böylece kuralý çiðneyen bir SP oluþturabildik en sonunda! Þimdi lütfen þu Policy' yi tekrar "Enable" edin. Biliyorum biliyorum, çok masraflýyým!

Þimdi bir de isim politikamýza uyan bir SP oluþturalým. Lütfen aþaðýdaki kodu çalýþtýrýn.

=====================
USE MyDB
GO
CREATE PROCEDURE eko_Test
AS
SELECT
* FROM MyDB
=====================

Þimdi biri "Test" diðeri de "eko_Test" isimli iki tane SP' miz oldu. Hayýrlý olsun. Biri isimlendirme standardýmýza uyuyor, diðeri ise uymuyor. Þimdi bunu Policy' mize nasýl otomatik olarak bulduracaðýmýzý göreceðiz.

Bunun için SSMS' teki Object Explorer' da bulunan Management\Policies düðümü altýndaki "Isim Standardi" isimli Policy' nizi bulun ve üzerinde farenin sað tuþuna týklayýn. Açýlan menüden "Test Policy..." seçeneðine týklayýn. Aþaðýda bulunan Resim-5' e benzer bir pencerenin açýlmasý gerekiyor.


Resim-5


Eðer "Run Now - Isim Standardi" isimli pencereye bakarsanýz yukarýda oluþturduðumuz iki SP' yi göreceksiniz. Birisi "Isim Standardi" isimli Policy' ye uyuyor, diðeri ise uymuyor. Ayný penceredeki "Target" isimli sütunda sorunun nedeni yazýyor. Eðer "Details" sütununda bulunan "View..." baðlantýsýna týklarsanýz karþýnýza Resim-6' dakine týpatýp benzer bir pencere çýkmasý lâzým.


Resim-6


Bu pencerede hatanýn nedenini çok daha kolay görebilirsiniz. Bu pencere, bir önceki Resim-5' teki pencerede bulunan ve Target sütununda yazan ve karmaþýk görünen hata mesajýnýn biçimlendirilmiþ þeklidir. "Expected Value" sütunu girilmesi umulan deðerdir, "Actual Value" sütunu ise girilen deðerdir. Belirlediðimiz isimlendirme standardý Policy' mizin sonucu olarak, SP' lerin adlarýnýn ilk dört karakterinin "eko_" olmasý gerekiyor, fakat bu SP' nin adý böyle deðil. Ýþte bu nedenle bu SP hata veriyor.

Eðer deðer True\False gibi bir deðer olsaydý Resim-5' teki "Run Now" isimli pencerede bulunan "Configure" etiketli düðmeye týklayarak gerekli ayarlarýn otomatik olarak yapýlmasýný saðlayabilirdik. Fakat bu ayar otomatik olarak yapýlamaz. Bu nedenle gidip elle "Test" isimli SP' nin adýný "eko_Test2" yaparsanýz tekrar Policy' yi test ettiðinizde buir hata ile karþýlaþmadýðýnýzý göreceksiniz.

Bu deðiþikliði yapmadan önce Resim-7' ye de bir gözatmanýzý istiyorum. Size bu yazýmýn önceki bölümlerinden biri olan Policy Yönetimi isimli bölümde þöyle demiþtim: "Bir Policy' de hata oluþtuðunda, SSMS' teki Object Explorer' da hedefin hemen yanýnda ve hedefin daha üstündeki düðümlerde kýrmýzý bir simge þeklinde kritik saðlýk uyarýsý görünür.". Ýþte Resim-7' de bunu görüyorsunuz. SSMS' teki Object Explorer otomatik olarak Refresh yapmýyor, bu nedenle  göremiyor olabilirsiniz, F5' i kullanarak veya Object Explorer' daki Refresh düðmesini kullanarak düðümleri yenileyebilirsiniz. Resim-7' nin sað tarafýndaki "Object Explorer Details" penceresindeki "Policy Health State" e de dikkat edin, "Critical" yazýyor.


Resim-7

Siz de daha deðiþik Facet' leri ve Condition' larý kullanarak deðiþik Policy' ler oluþturabilirsiniz, ki oluþturmanýzý da tavsiye ederim.

Özetle, size bu makalemde SQL Server 2008 ile birlikte gelecek ve yönetim iþlerinde biz Veritabaný Yöneticilerinin çok iþine yarayacaðýný düþündüðüm Declarative Management Framework' ü size anlatmaya çalýþtým. Umarým yararý dokunmuþtur.


Ekrem Önsoy
<- Önceki Sayfa     Anasayfa


 
Bu sitenin tüm haklarý, Ekrem Önsoy' a aittir.