Як отримати максимум від CLR

Три способи отримання прибутку від нових функцій SQL Server 2005


У SQL Server 2005 привнесено багато нового, але для прикладного розробника інтеграція с. NET – найбільш цінна можливість. SQL Server 2005 може задіяти визначені користувачем функції (UDF), агрегування (Далі UDA) і типи (далі UDT), збережені процедури і тригери, написані на мовах CLR, таких як Visual Basic. NET та C #. Про видатні досягнення в області програмування баз даних можна написати книгу, а багато хто з функцій, що реалізуються в CLR, недоступні сьогодні в T-SQL. У цій статті я розповім про те, як CLR працює в SQL Server 2005 і як краще підійти до написання та використання коду CLR в SQL Server 2005. Ми розглянемо три приклади, в яких показано, як за допомогою CLR замінити розширені процедури, представлена робота з тригерами CLR і використання CLR UDA. Ці прості приклади допоможуть розібратися в тому, як користуватися перевагами нових розробок в SQL Server 2005.


Інтеграція з CLR: погляд в упор


Найбільша перевага від інтеграції з CLR полягає в тому, що мови CLR, такі як Visual Basic і C #, можна використовувати для роботи з рядками і з API, такими, наприклад, як. NET Framework Base Class Libraries (BCL), застосовувати API для криптографії, працювати з регулярними виразами і викликати зовнішні ресурси, такі як файлова система Windows, Web-служби і Windows Event Viewer.


Інша перевага полягає в тому, що база даних SQL Server включає в себе CLR, і, таким чином, завантаження і вивантаження збірок відбувається в домені додатків Appdomain, який підтримується SQL Server. Домени додатків в основному утворюють межі безпеки, що забезпечують ізоляцію, завантаження і вивантаження керованого коду (тобто коду, який виконується в середовищі виконання). Правильніше використовувати Appdomains, а не розширені процедури sp_OA *. Наприклад, тому, що процедури sp_OA * можуть обробляти COM-об'єкти і будь-який компонент може звернутися до внутрішньої структури пам'яті сервера і зупинити службу SQL Server. Введення Appdomains усуває подібні ризики, оскільки керований код ізольований кордоном Appdomains, що не дає йому можливості звертатися до внутрішньої структури пам'яті сервера. З скомпільовані кодом CLR можна звертатися до системних ресурсів за межами SQL Server і виконувати складні математичні розрахунки, які не можна зробити в T-SQL. А завдяки підтримці мов T-SQL і CLR в SQL Server 2005 можна тепер відповісти на будь-яку вимогу бізнесу.


У перший раз, виконуючи виклик керованого коду в SQL Server 2005, запит наказує SQL Server завантажити CLR. Після цього будь-який виклик керованого коду виконується в CLR. Призначення керованого середовища полягає у вирішенні таких завдань, як розподіл пам'яті, обробка виключень і виконання приписів політики захисту SQL Server і CLR. Як вже згадувалося, через CLR керований код може звертатися до BCL, забезпечуючи повний доступ для маніпуляцій з рядками, регулярними виразами, інфраструктурою Web-служб, введенням / виводом файлів і API для криптографії. BCL привносить високу продуктивність, масштабованість і систему захисту в додатки бази даних, створених в середовищі. NET Framework.








 
Екран 4. Рядки з роздільниками-комами  

На екрані 4 показаний результат роботи даного запиту. Порівнюючи код з лістингу 7 і лістингу 8, можна подумати, що для створення UDA цього мало. Однак UDA являє собою код багаторазового використання, який може застосовуватися в базі даних для багаторазових запитів. Крім того, код UDA більш витончений і передбачає менше число маніпуляцій з рядками, які призводять до перевантаження процесора сервера і не виконуються так само добре, як клас побудови рядків в. NET. Використання класу побудови рядків дозволяє задіяти потенціал існуючої середовища. NET Framework в оптимізації роботи з рядками.


Розгортання об'єктів CLR


Об'єкти CLR можна розгортати в ручному або автоматичному режимі. У Visual Studio 2005 слід просто натиснути правою кнопкою миші на проекті та вибрати Deploy з контекстного меню. Операція розгортання в Visual Studio 2005 використовує звичні атрибути SqlProcedure, SqlFunction, SqlTrigger і SqlUserDefinedAggregate і застосовується для автоматичного виконання рутинної роботи в базі даних. Щоб побачити список зборок для конкретної бази даних, слід зайти в Object Explorer в Visual Studio і вибрати базу даних, потім вибрати Programmability, Assemblies. У ручному режимі можна задіяти вираз DDL, як в лістингу 8. Короткий опис системи безпеки. NET, використовуваної для зборок, наведено в урізанні «Установки безпеки для зборок CLR в SQL Server». Можна також додатково завантажити вихідний текст збірок в SQL Server, щоб скористатися налагодженням об'єктів CLR.


Можна також отримувати дані про детальні збірках CLR із системних таблиць SQL Server. Таблиця sys.assemblies зберігає інформацію про збірки. Таблиця sys.assembly_references містить посилання залежностей до інших каталогізованих зборках, а таблиця sys.assembly_files містить тексти збірок CLR (якщо, звичайно, текст вже завантажений).


Звичайний спосіб використання системних таблиць полягає в отриманні інформації про атрибути збірок. Наприклад, пропозиція з лістингу 9 повертає деякі дані, пов'язані зі складанням, такі як версія і набір дозволів, під якими ця збірка розгорнуто. Відомості про параметри налаштування захисту, які можна використовувати для зборок. NET, викладені в урізанні «Установки безпеки для зборок CLR в SQL Server ». Клацнувши правою кнопкою миші по збірці і вибираючи View Dependencies в SQL Server Management Studio, можна переглянути список об'єктів CLR, які були розгорнуті з кодом лістингу 8.


T-SQL живий!


Хоча інтеграція з CLR цікавить розробників SQL Server, додавання мов. NET в SQL Server не має на увазі, що клієнтові доведеться замінити весь свій код T-SQL. CLR може підвищувати продуктивність в деяких випадках, що було неможливо в колишніх редакціях SQL Server, тому реалізація переваг CLR варто витрат. Але SQL Server 2005 також включає істотні покращення мови T-SQL, які роблять його більш продуктивним: загальні табличні вирази (common table expression, CTE), які підтримують рекурсивні запити; PIVOT і UnPivot з підтримкою транспозиції рядків у стовпці і навпаки; можливості сортування; включення типу даних XML та XQuery. Ці можливості піднімають рішення з використанням наборів на новий якісний рівень.


Щоб визначитися з тим, коли використовувати мову T-SQL, а коли – мова CLR, потрібно пам'ятати, що розширення CLR більш доречні, коли необхідний високий рівень обчислень або маніпуляцій з текстом. Для задач, мають справу з великою кількістю даних, рішення на T-SQL краще, ніж рішення на CLR, тому що T-SQL більш тісно працює з даними і не потребує складних транзакцій (численних переходів) між CLR і SQL OS. У таких процедурах, як шифрування, робота з текстом, операції введення / виводу і виклик Web-служб, CLR пропонує задіяти потужні API з можливостями, яких немає в SQL Server 2000 і більш ранніх версіях. І неодмінно слід перевіряти кожен шматок тексту коду з точки зору безпеки, надійності і продуктивності. Використання. NET BCL дозволяє будь-яке завдання реалізувати по-різному.


Установки безпеки для зборок CLR в SQL Server


Для підтримки керованого коду в базі даних SQL Server розробники Microsoft створили спеціальні настройки безпеки для захисту важливих об'єктів CLR, таких як складання. Складання являють собою в основному керовані бібліотеки Dynamic Link Libraris (DLL), які містять метадані та інформацію про залежності і використовуються як одиниця розгортання. Оскільки складання зберігаються в базі даних, вони резервуються і відновлюються разом з нею.


Кожна збірка прив'язана до одного з трьох наборів дозволів, які необхідно вказати в пропозиції CREATE ASSEMBLY DDL.



Установки SAFE і EXTERNAL_ACCESS підходять для вимог цієї статті. Але можливі специфічні ситуації, в яких може знадобитися виклик некерованого коду з збирання CLR. У цьому випадку доведеться задіювати набір UNSAFE. При використанні EXTERNAL_ACCESS, можливо, будуть потрібні особливі облікові дані для доступу до зовнішніх ресурсів, до яких з вашим обліковим записом в SQL Server доступ неможливий. У SQL Server 2000 і раніше доводилося в такому випадку використовувати обліковий запис служби SQL Server, але в SQL Server 2005 можна застосувати команду CREATE CREDENTIALS і вказати обліковий запис Windows, а потім задіяти ALTER LOGIN для вказівки облікового запису SQL Server з тими даними, які були створені. У SQL Server 2005 Books Online (BOL) міститься додаткова інформація з використання набору UNSAFE.


Висновок


У цій статті ми лише поверхнево торкнулися того, що можна робити за допомогою об'єктів. NET 2.0 CLR в SQL Server 2005. Рекомендую використовувати приклади, які наочно демонструють, що можна зробити на рівні додатків для бази даних. Наприклад, тепер звертатися до Web-служб можна всередині логіки бази даних. І користуйтеся об'єктами бази даних, які можна створювати, застосовуючи багаті можливості. NET 2.0 Framework і мов програмування.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*