Aracılığıyla paylaş


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 kod olarak adlandırılır. CLR tam zamanında (JIT) derleme, bellek ayırma ve yönetme, tür güvenliğini zorlama, özel durum işleme, iş parçacığı yönetimi ve güvenlik gibi program yürütme için gereken çeşitli işlevler ve hizmetler sağlar. Daha fazla bilgi için bkz. .NET Framework geliştirme kılavuzu.

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üvenlik seçeneği CLR derlemelerinin güvenliğini artırır. clr strict security varsayılan olarak etkinleştirilir ve SAFE ve EXTERNAL_ACCESS derlemeleri UNSAFEolarak 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ı.