14 Ocak 2008 Pazartesi

SQL Server 2005 ve Net CLR

SQL Server 2005 ve Net CLR

Microsoft Visual Basic, Visual C++, Visual FoxPro, Jscript ve üçüncü parti dillerin(SmallTalk,Perl ve Java) tümü çalışma zamanı derleyicileri ile derlenir. .Net Framework’ün geliştirilmesi ile beraber çalışmanı zamanı derleyicileri geliştirilmiştir. Net Framework ile beraber CLR(Common Language Runtime) geliştirilmiştir.

CLR(Common Language Runtime), çalışma zamanındaki ortak dil olarak tanımlayabiliriz. CLR diğer çalışma zamanı derleyicilerine göre bir çok avantaj sağlar. CLR, kodun güvenliğini sağlar ve dinamik kütüphane dosyalarında ki (DLL = Dynamic Link Library) versiyon problemlerini çözer.

CLR uygulamanın thread’ini yönetir ve uygulamanın hafızadaki yerini belirler. .Net uygulamalarında uzun süre kullanılmayan objeler CLR tarafından temizlenebilir.
Her .Net uyumlu dilin kendine özgü bir derleyicisi vardır. Bu derleyiciler, kodu MSIL(Microsoft Intermediate Language)’e göre derler. Kod MSIL’e göre derlendikten sonra, CLR derleyicisinden geçirilerek makine koduna çevrilir ve çalıştırılır.

SQL Server 2005’e CLR entegre edilmiştir. Bu entegrasyon veritabanı uygulamaları geliştirirken önemli esneklik sağlar. Özellikle CLR, extended stored procedure yazarken güçlü ve esnek bir yapı sağlar.

SQL Server 2005’e .NET Assembly’lerini ekleyebilir ve host edebiiriz.
Visual Studio .NET ortamında geliştirilen uygulamalar derlendiğinde, .exe veya .dll uzantılı dosyalar oluşur. .NET’in otomatik olarak oluşturduğu bu dosyalara assembly denir. Assembly içerisinde dosyaya ait başlık, açıklama ve telif hakkı gibi kritik bilgiler tutulur.

CLR entegrasyonu, herhangi bir .Net dili ile stored procedure, trigger, user-defined function, user-defined type ve aggregates gibi yönetimsel nesneler oluşturmanızı sağlar.

SQL Server 2005 de veritabanı nesneleri T-SQL veya managed code(yönetimsel kod) ile oluşturulur. Table, view gibi nesneler T-SQL deyimleri ile oluşturulur. Stored procedure, trigger, user-defined function, user-defined type ve aggregates gibi nesneler ise managed code ile oluşturulabilir. Bu nesnelerin managed code ile geliştirilmeleri aşağıdaki avantajları sağlar.
Managed code, Net dillerinin güçlü yapısını kullanır. Örneğin exception handling(hata kontrolleri), object orientation (nesne yönelimi) ve ileri düzey koşul kontrolleri gibi.
Managed code, .Net Framework’ün temel sınıf kütüphanelerini (base class library) kullanır.
Managed code, CPU’nun daha etkin kullanılmasını sağlar.

SQL Server 2005’in gerek duyduğu kurallar ile tasarlanmış bir assembly’nin SQL Server üzerinde çalışabilmesi için, öncelikle SQL Server’a tanıtılması gerekir. Bu tanıtımı ASSEMBLY sayesinde yapabiliriz.

ASSEMBLY oluşturmak için CREATE ASSEMBLY ifadesini kullanırız. CREATE ASSEMBLY ifadesinin syntax yapısı aşağıdaki gibidir.

CREATE ASSEMBLY
FROM


Aşağıdaki örnekte ‘C:\mcTest.dll’ adresindeki assembly dosyası SQL Server 2005’e Test ismi ile kaydedilmiştir.

CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’


“mcTest.dll’ isimli assembly dosyanın adresinin değişmesi, SQL Server üzerindeki assembly etkilemez. Çünkü “mcTest.dll” isimli dosyanın kopyası veritabanı içerisinde saklanır.
Eğer “mcTest.dll” isimli dosya içerisinde, referans yapılmış başka assembly dosyaları var ise SQL Server veritabanında saklanır. Yalnız “mcTest.dll” assembly dosyası ile içerisinde referans edilmiş assembly dosyalar aynı klasör altında olmalıdır.

SQL Server üzerinde kaydedilmiş tüm assembly dosyaları, aşağıdaki sorgu ile görebilirsiniz.

SELECT * FROM sys.assemblies

SQL Server 2005 assembly dosyaları için üç güvenlik modu vardır. Bunlar SAFE, EXTERNAL ACCESS, UNSAFE dir.

SAFE : Veriye erişim yetkisi vardır. Dosya sistemi, ağ bağlantısı gibi dış kaynaklara erişim yetkisi yoktur. Varsayılan güvenlik modelidir.
EXTERNAL ACCESS : SAFE ile yapılan tüm işlemlerin yapılabileceği gibi dosya sistemi, ağ baglantısı, event loglar gibi dış kaynaklara erişim de sağlanabilir.
UNSAFE : Bu güvenlik modelinde hiç bir kısıtlama yoktur.

CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’
WITH PERMISSION_SET=SAFE
CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’
WITH PERMISSION_SET= EXTERNAL_ACCESS
CREATE ASSEMBLY Test
FROM ‘C:\mcTest.dll’
WITH PERMISSION_SET=UNSAFE


Kaydedilen bir assembly dosyayı SQL Server veritabanından silmek için DROP ASSEMBLY ifadesi kullanılır.

DROP ASSEMBLY

Aşağıdaki örnekte DROP ASSEMBLY ifadesinin kullanımı gösterilmektedir.

DROP ASSEMBLY Test

Eğer assembly ile ilgili veritabanı nesneleri varsa, assembly’i silmeden önce bu nesneleri silmeliyiz.

Bu konu ile ilgili "Managed Code Kullanmak” başlıklı makalemi de okuyabilirsiniz.

Başka bir makalede görüşmek üzere...
Tamer ŞAHİNER
Tamer.sahiner@bilgeadam.com

Hiç yorum yok: