CLR tümleştirmeye genel bakış
Şunlar için geçerlidir:SQL ServerAzure SQL Yönetilen Örneği
Ortak dil çalışma zamanı (CLR), .NET Framework'ün kalbidir ve tüm .NET Framework kodu için yürütme ortamı sağlar. CLR içinde çalışan kod,yönetilen
Not
Yeni .NET'i SQL Server Dil Uzantıları ile kullanma hakkında daha fazla bilgi için bkz. SQL Server Dil Uzantıları'nda .NET çalışma zamanını çağırma.
SQL Server'da barındırılan CLR ile (CLR tümleştirmesi olarak adlandırılır), yönetilen kodda saklı yordamlar, tetikleyiciler, kullanıcı tanımlı işlevler, kullanıcı tanımlı türler ve kullanıcı tanımlı toplamalar yazabilirsiniz. Yönetilen kod yürütmeden önce yerel koda derlendiğinden, bazı senaryolarda önemli performans artışları elde edebilirsiniz.
Kod erişimi güvenliği
SQL Server 2016 (13.x) ve önceki sürümlerinde Kod Erişim Güvenliği (CAS) derlemelerin belirli işlemleri gerçekleştirmesini engelledi.
CLR, artık güvenlik sınırı olarak desteklenmeyen .NET Framework'te Kod Erişim Güvenliği'ni (CAS) kullanır.
PERMISSION_SET = SAFE
ile oluşturulan bir CLR derlemesi dış sistem kaynaklarına erişebilir, yönetilmeyen kodu çağırabilir ve sysadmin ayrıcalıkları alabilir. SQL Server 2017 (14.x) ve sonraki sürümlerinde clr katı güvenlikclr strict security
varsayılan olarak etkinleştirilir ve SAFE
ve EXTERNAL_ACCESS
derlemeleri UNSAFE
olarak işaretlenmiş gibi değerlendirir. geriye dönük uyumluluk için clr strict security
seçeneği devre dışı bırakılabilir, ancak önerilmez.
master
veritabanında UNSAFE ASSEMBLY
izin verilmiş ilgili oturum açma bilgileriyle tüm derlemeleri bir sertifika veya asimetrik anahtarla imzalamanızı öneririz. SQL Server yöneticileri, Veritabanı Altyapısı'nın güvenmesi gereken derleme listesine derlemeler de ekleyebilir. Daha fazla bilgi için bkz. sys.sp_add_trusted_assembly.
CLR tümleştirmesinin avantajları
Transact-SQL, veritabanında doğrudan veri erişimi ve işleme için tasarlanmıştır. Transact-SQL veri erişimi ve yönetimi konusunda başarılı olsa da, tam teşekküllü bir programlama dili değildir. Örneğin, Transact-SQL dizileri, koleksiyonları, her döngü için, bit kaydırmayı veya sınıfları desteklemez. Bu yapılardan bazıları Transact-SQL'de benzetilebilir olsa da, yönetilen kod bu yapılar için tümleşik desteğe sahiptir. Senaryoya bağlı olarak, bu özellikler yönetilen kodda belirli veritabanı işlevlerini uygulamak için cazip bir neden sağlayabilir.
Visual Basic ve C# kapsülleme, devralma ve polimorfizm gibi nesne odaklı özellikler sunar. İlgili kod artık sınıflar ve ad alanları olarak kolayca düzenlenebilir. Büyük miktarda sunucu koduyla çalışırken, bu özellikler kodunuzu daha kolay düzenlemenize ve korumanıza olanak sağlar.
Yönetilen kod, hesaplamalar ve karmaşık yürütme mantığı için Transact-SQL daha uygundur ve dize işleme ve normal ifadeler de dahil olmak üzere birçok karmaşık görev için kapsamlı destek sunar. .NET Framework'te bulunan işlevlerle, önceden oluşturulmuş binlerce sınıfa ve yordama erişebilirsiniz. Bu sınıflara herhangi bir saklı yordam, tetikleyici veya kullanıcı tanımlı işlevden kolayca erişilebilir. Temel sınıf kitaplığı (BCL), dize işleme, gelişmiş matematik işlemleri, dosya erişimi, şifreleme ve daha fazlası için işlevsellik sağlayan sınıflar içerir.
Not
Bu sınıfların çoğu SQL Server'da CLR kodu içinden kullanılabilir olsa da, sunucu tarafı kullanımı için uygun olmayanlar (örneğin, pencereleme sınıfları) kullanılamaz. Daha fazla bilgi için bkz. Desteklenen .NET Framework kitaplıkları.
Yönetilen kodun avantajlarından biri tür güvenliği veya kodun türlere yalnızca iyi tanımlanmış, izin verilen yollarla eriştiği güvencesidir. Yönetilen kod yürütülmeden önce CLR kodun güvenli olduğunu doğrular. Örneğin kod, daha önce yazılmayan hiçbir belleğin okunmadığından emin olmak için denetlenir. CLR, kodun yönetilmeyen belleği işlemediğinden de emin olabilir.
CLR tümleştirmesi gelişmiş performans potansiyeli sunar. Bilgi için bkz. CLR tümleştirme mimarisinin performansı.
Transact-SQL ve yönetilen kod arasında seçim yapma
Saklı yordamlar, tetikleyiciler ve kullanıcı tanımlı işlevler yazarken, geleneksel Transact-SQL mi yoksa Visual Basic veya C# gibi bir .NET Framework dili mi kullanacağınıza karar vermeniz gerekir. Kod çoğunlukla çok az yordam mantığıyla veya hiç işlem mantığıyla veri erişimi gerçekleştirdiğinde Transact-SQL kullanın. Karmaşık mantık içeren yoğun CPU kullanan işlevler ve yordamlar için veya .NET Framework'ün BCL'sini kullanmak istediğinizde yönetilen kodu kullanın.
Sunucuda yürütme ile istemcide yürütme arasında seçim yapma
Transact-SQL veya yönetilen kodun kullanılıp kullanılmayacağı konusundaki kararınızın bir diğer faktörü de kodunuzun, sunucu bilgisayarının veya istemci bilgisayarın bulunduğu yerdir. Hem Transact-SQL hem de yönetilen kod sunucuda çalıştırılabilir. Bu, kod ve verileri birbirine yaklaştırır ve sunucunun işlem gücünden yararlanmanızı sağlar. Öte yandan, yoğun işlemcili görevleri veritabanı sunucunuza yerleştirmekten kaçınmak isteyebilirsiniz. Günümüzde çoğu istemci bilgisayar güçlüdür ve istemciye mümkün olduğunca çok kod yerleştirerek bu işlem gücünden yararlanmak isteyebilirsiniz. Yönetilen kod istemci bilgisayarda çalıştırılabilirken Transact-SQL çalıştırılamaz.
Genişletilmiş saklı yordamlar ile yönetilen kod arasında seçim yapma
Genişletilmiş saklı yordamlar, Transact-SQL saklı yordamlarla mümkün olmayan işlevleri gerçekleştirmek için oluşturulabilir. Öte yandan genişletilmiş saklı yordamlar SQL Server işleminin bütünlüğünü tehlikeye atabilir, ancak tür açısından güvenli olduğu doğrulanan yönetilen kod kullanılamaz. Ayrıca, bellek yönetimi, iş parçacıklarının ve fiberlerin zamanlanması ve eşitleme hizmetleri CLR ile SQL Server'ın yönetilen kodu arasında daha derin bir şekilde tümleştirilir. CLR tümleştirmesiyle, Transact-SQL'de mümkün olmayan görevleri gerçekleştirmek için ihtiyacınız olan saklı yordamları yazmak için genişletilmiş saklı yordamlardan daha güvenli bir yolunuz vardır. CLR tümleştirmesi ve genişletilmiş saklı yordamlar hakkında daha fazla bilgi için bkz. CLR tümleştirme mimarisinin performansı.
İlgili içerik
- .NET Framework yükleme kılavuzu
- CLR tümleştirme mimarisi - CLR barındırılan ortam
- CLR veritabanı nesnelerinden veri erişimini
- CLR tümleştirme kullanmaya başlama
- SQL Server Dil Uzantıları'nda .NET çalışma zamanını çağırma