|
|
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
|
|