406 76 4MB
Russian Pages 304 Year 2006
Москва · Санкт-Петербург · Нижний Новгород · Воронеж Ростов-на-Дону · Екатеринбург · Самара · Новосибирск Киев · Харьков · Минск
2006
Александр Владимирович Волоха
Microsoft SQL Server 2005. Новые возможности
Заведующий редакцией Руководитель проекта Литературный редактор Художник Корректор Верстка
А. Кривцов В. Шрага Е. Бочкарева Л. Адуевская Н. Солнцева Р. Гришанов
ББК 32.973.233-018 УДК 004.65 Волоха А. В. В68
Microsoft SQL Server 2005. Новые возможности. — СПб.: Питер, 2006. — 304 с.: ил.
ISBN 5-469-01197-6 Книга «Microsoft SQL Server 2005. Новые возможности» посвящена новой версии известного программного продукта для управления базами данных от компании Microsoft. В ней детально освещаются вопросы выбора редакции программного обеспечения, установки, администрирования, использования сервера баз данных и сервисов, поставляемых в различных редакциях. Описаны сервисы нотификации, отчетов, аналитики, интеграции, а также брокер сервисов — новый компонент SQL Server. В книге уделено значительное внимание средствам разработки и программированию для SQL Server. Детально рассмотрены средства для интеграции со средой разработки Visual Studio 2005. Описание возможностей программного продукта подкреплено значительным количеством примеров и их детальным анализом.
© ЗАО Издательский дом «Питер», 2006 Все права защищены. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. Информация, содержащаяся в данной книге, получена из источников, рассматриваемых издательством как надежные. Тем не менее, имея в виду возможные человеческие или технические ошибки, издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки, связанные с использованием книги.
ISBN 5-469-01197-6
ООО «Питер Принт», 194044, Санкт-Петербург, Б. Сампсониевский пр., 29а. Лицензия ИД № 05784 от 07.09.01. Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 95 3005 — литература учебная. Подписано к печати 20.12.05. Формат 70×100/16. Усл. п. л. 24,51. Тираж 3000. Заказ Отпечатано с готовых диапозитивов в ФГУП «Печатный двор» им. А. М. Горького Федерального агентства по печати и массовым коммуникациям. 197110, Санкт-Петербург, Чкаловский пр., 15.
Êðàòêîå ñîäåðæàíèå
Ââåäåíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Ãëàâà 1. Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005 . . 19 Ãëàâà 2. Àäìèíèñòðèðîâàíèå SQL Server 2005 . . . . . . . . . . . . . . 45 Ãëàâà 3. Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ . . . . . . 67 Ãëàâà 4. Áðîêåð çàïðîñîâ SQL Server . . . . . . . . . . . . . . . . . . 94 Ãëàâà 5. Ñåðâèñû àíàëèòèêè . . . . . . . . . . . . . . . . . . . . . . 110 Ãëàâà 6. Ñåðâèñû èíòåãðàöèè . . . . . . . . . . . . . . . . . . . . . 133 Ãëàâà 7. Ñåðâèñû íîòèôèêàöèè . . . . . . . . . . . . . . . . . . . . 160 Ãëàâà 8. Ñåðâèñû îò÷åòîâ . . . . . . . . . . . . . . . . . . . . . . . 180 Ãëàâà 9. Ñðåäñòâà âîññòàíîâëåíèÿ äàííûõ
. . . . . . . . . . . . . . 203
Ãëàâà 10. Ïðîãðàììèðîâàíèå äëÿ SQL Server . . . . . . . . . . . . . . 220 Ãëàâà 11. ßçûê XML è SQL Server . . . . . . . . . . . . . . . . . . . . 250 Ãëàâà 12. Áåçîïàñíîñòü . . . . . . . . . . . . . . . . . . . . . . . . . 267 Ñëîâàðü òåðìèíîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Ñîäåðæàíèå
Ââåäåíèå . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11 Óëó÷øåííîå ÿäðî áàçû äàííûõ . . . Áðîêåð ñåðâèñîâ . . . . . . . . . . MDAC è SQLClient . . . . . . . . . Ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ . . Ñåðâèñû îò÷åòîâ . . . . . . . . . . Ñåðâèñû íîòèôèêàöèè . . . . . . . Ñåðâèñû àíàëèòèêè . . . . . . . . Íîâûé èíñòðóìåíòàðèé è óòèëèòû . Ðåïëèêàöèÿ äàííûõ . . . . . . . . Íîâûé òèï äàííûõ XML . . . . . . . Ðàñøèðåííàÿ ïîääåðæêà ÿçûêîâ . . Èíòåãðàöèÿ ñ .NET . . . . . . . . . SQL Server äëÿ ìîáèëüíûõ óñòðîéñòâ Çåðêàëèðîâàíèå áàç äàííûõ . . . . Ñíèìîê áàçû äàííûõ . . . . . . . . Âîññòàíîâëåíèå âî âðåìÿ ðàáîòû . . Îò èçäàòåëüñòâà . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . .
11 11 12 12 12 12 13 13 13 14 14 14 15 16 17 17 18
Ãëàâà 1. Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005 . . . 19 1.1. Îáùèå õàðàêòåðèñòèêè SQL Server 2005 . . . . . . . . . 1.1.1. Êîìïîíåíòû SQL Server . . . . . . . . . . . . . 1.1.2. Ñåðâèñû . . . . . . . . . . . . . . . . . . . . . 1.1.3. Ó÷åòíûå çàïèñè . . . . . . . . . . . . . . . . . 1.1.4. IIS è SQL Server 2005 . . . . . . . . . . . . . . 1.1.5. 32- è 64-ðàçðÿäíûå âåðñèè SQL Server 2005 . . . 1.2. Óñòàíîâêà MS SQL Server 2005 . . . . . . . . . . . . . . 1.2.1. Êîìïîíåíòû ÿäðà SQL Server . . . . . . . . . . 1.2.2. Âûïîëíåíèå óñëîâèé ïåðåä óñòàíîâêîé SQL Server 1.2.3. Óäàëåííàÿ óñòàíîâêà . . . . . . . . . . . . . . 1.2.4. Ïîâòîðíàÿ óñòàíîâêà ñåðâåðà . . . . . . . . . . 1.2.5. Èìåíîâàííûé ýêçåìïëÿð è ýêçåìïëÿð ïî óìîë÷àíèþ 1.2.6. Óñòàíîâêà èìåíîâàííîãî ýêçåìïëÿðà . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . 2005 . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
. . . . . . . . . . . . .
20 23 25 26 27 28 29 29 30 30 32 33 34
5
Ñîäåðæàíèå 1.2.7. Îãðàíè÷åíèÿ íà èìÿ ýêçåìïëÿðà . . . . . . . . . . . 1.2.8. Ðàñïîëîæåíèå ôàéëîâ ýêçåìïëÿðîâ . . . . . . . . . 1.2.9. Îáùèå ôàéëû ðàçëè÷íûõ ýêçåìïëÿðîâ . . . . . . . . 1.2.10. Óñòàíîâêà íåñêîëüêèõ ýêçåìïëÿðîâ . . . . . . . . . 1.3. Îáíîâëåíèå MS SQL Server 2005 . . . . . . . . . . . . . . . 1.3.1. Îáíîâëåíèå SQL Server 6.5 . . . . . . . . . . . . . 1.3.2. Îáíîâëåíèå âåðñèé SQL Server 2000 . . . . . . . . . 1.3.3. Ïåðåíîñ áàç äàííûõ ñ SQL Server 7 èëè 2000 íà 2005 1.3.4. Îáíîâëåíèå ðåïëèöèðóåìûõ áàç äàííûõ . . . . . . . 1.3.5. Áåçîïàñíîñòü è ðåïëèêàöèÿ . . . . . . . . . . . . . 1.3.6. Îáíîâëåíèå êëàñòåðà äî âåðñèè SQL Server 2005 . . .
Ãëàâà 2. Àäìèíèñòðèðîâàíèå SQL Server 2005
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
. . . . . . . . . . .
36 37 37 39 39 40 40 40 42 43 44
. . . . . . . . . . . . . . 45
2.1. ßäðî SQL Server 2005 . . . . . . . . . . . . . . . . . . . . 2.1.1. Îãðàíè÷åíèå íà êîëè÷åñòâî ýêçåìïëÿðîâ . . . . . . 2.1.2. Óëó÷øåíèÿ ìåõàíèçìà èíäåêñàöèè . . . . . . . . . . 2.1.3. Íîâûå òèïû äàííûõ . . . . . . . . . . . . . . . . . 2.1.4. Íîâûå êîìàíäû ïîëíîòåêñòîâîãî ïîèñêà . . . . . . . 2.1.5. Ìîìåíòàëüíûé ñíèìîê áàçû äàííûõ è çåðêàëèðîâàíèå 2.1.6. XML-ôàéë è çàãðóçêà äàííûõ . . . . . . . . . . . . 2.1.7. Îáðàáîòêà HTTP-çàïðîñîâ . . . . . . . . . . . . . . 2.1.8. Ñîáûòèÿ ñåðâåðà è òðèããåðû DDL . . . . . . . . . . 2.1.9. Âðåìåííàÿ áàçà äàííûõ . . . . . . . . . . . . . . . 2.1.10. Äåêîìïîçèöèÿ äàííûõ . . . . . . . . . . . . . . . . 2.1.11. Ñèñòåìíûé êàòàëîã è ìåòàäàííûå . . . . . . . . . . 2.1.12. Òåõíîëîãèÿ MARS . . . . . . . . . . . . . . . . . . 2.1.13. Ïðîöåññîð çàïðîñîâ T-SQL . . . . . . . . . . . . . . 2.1.14. Èíòåãðàöèÿ ñ .NET Framework . . . . . . . . . . . . 2.2. SQL Server è íîâîå àïïàðàòíîå îáåñïå÷åíèå . . . . . . . . . 2.2.1. Ëîãè÷åñêèå ïðîöåññîðû . . . . . . . . . . . . . . . 2.2.2. Ïîääåðæêà NUMA . . . . . . . . . . . . . . . . . . 2.2.3. Ïîääåðæêà 64-ðàçðÿäíûõ ïðèëîæåíèé . . . . . . . . 2.3. Áåçîïàñíîñòü . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1. Äîñòóï ê îáúåêòàì SQL Server 2005 . . . . . . . . . 2.3.2. Ïîëèòèêè áåçîïàñíîñòè â îòíîøåíèè ïàðîëåé . . . . 2.3.3. Óðîâåíü äîñòóïà VIEW DEFINITION . . . . . . . . . 2.3.4. Êîíòåêñòíîå âûïîëíåíèå õðàíèìûõ ïðîöåäóð . . . . 2.3.5. Áåçîïàñíîñòü ïîëüçîâàòåëüñêèõ ñõåì . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
46 46 46 47 48 48 49 50 50 51 51 54 54 55 55 55 56 57 58 58 59 60 61 61 63
Ãëàâà 3. Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ . . . . . . . 67 3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè . . . 3.1.1. Óòèëèòà SQL Server Configuration Manager . . . 3.1.2. SQL Server Management Studio (SQL SMS) . . . 3.1.3. Îêíî Solution Explorer SQL SMS . . . . . . . . 3.1.4. Îêíî Properties SQL SMS . . . . . . . . . . . . 3.1.5. Îêíî Registered Servers SQL SMS . . . . . . . . 3.1.6. Îêíî Object Explorer SQL SMS . . . . . . . . . 3.1.7. Óòèëèòà Business Intelligence Development Studio 3.1.8. Íàáîð èíñòðóìåíòîâ BIDS . . . . . . . . . . . 3.1.9. Îêíî Solution Explorer . . . . . . . . . . . . . 3.1.10. Îêíî Properties . . . . . . . . . . . . . . . . 3.1.11. Îêíî Dynamic Help . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . (BIDS) . . . . . . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
67 67 69 72 73 74 75 76 77 77 79 79
6
Ñîäåðæàíèå 3.1.12. Êîíòðîëü íàä âåðñèÿìè ðåøåíèé â BIDS . . . . . . . . . . 3.1.13. Óòèëèòà Query Editor . . . . . . . . . . . . . . . . . . . . 3.1.14. Îêíî Results Window óòèëèòû Query Editor . . . . . . . . . 3.1.15. Îêíî Dynamic Help . . . . . . . . . . . . . . . . . . . . . 3.1.16. Êîíòðîëü íàä âåðñèÿìè ïðîãðàììíîãî êîäà . . . . . . . . 3.1.17. Ïðîñìîòð ýòàïîâ âûïîëíåíèÿ çàïðîñà . . . . . . . . . . . 3.1.18. Ñðàâíåíèå SQL SMS è BIDS . . . . . . . . . . . . . . . . 3.1.19. Óòèëèòà Sqlcmd . . . . . . . . . . . . . . . . . . . . . . 3.1.20. Èñïîëüçîâàíèå ôàéëîâ ñöåíàðèåâ â Sqlcmd . . . . . . . . 3.2. Íîâûå ñðåäñòâà óïðàâëåíèÿ . . . . . . . . . . . . . . . . . . . . 3.2.1. SQL Server Management Objects (SMO) . . . . . . . . . . . 3.2.2. Èñïîëüçîâàíèå Windows Management Instrumentation (WMI) 3.2.3. Ïðîâàéäåð WMI . . . . . . . . . . . . . . . . . . . . . . 3.2.4. Ñîáûòèÿ WMI . . . . . . . . . . . . . . . . . . . . . . . 3.2.5. Íàáîð îáúåêòîâ Analysis Management Objects (AMO) . . . . . 3.2.6. Áèáëèîòåêà Replication Management Objects (RMO) . . . . . 3.3. Ñðåäñòâà óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè . . . . . . . . . . . . . 3.3.1. Óòèëèòà Profiler . . . . . . . . . . . . . . . . . . . . . . 3.3.2. Ïðîôèëè ñåðâèñîâ àíàëèòèêè . . . . . . . . . . . . . . . 3.3.3. Àãðåãèðîâàííûå ïðåäñòàâëåíèÿ . . . . . . . . . . . . . . 3.3.4. Íàáîð ðàçðåøåíèé äëÿ òðàññèðîâêè . . . . . . . . . . . . 3.3.5. Èçâëå÷åíèå äàííûõ ñîãëàñíî èõ òèïó . . . . . . . . . . . 3.3.6. Óòèëèòà Create Trace Wizard . . . . . . . . . . . . . . . . 3.3.7. Ðåäàêòîð çàïðîñîâ SQL SMS . . . . . . . . . . . . . . . . 3.3.8. Óòèëèòà Database Tuning Advisor . . . . . . . . . . . . . . 3.3.9. Óïðàâëåíèå ðàçäåëàìè â Database Tuning Advisor . . . . . 3.3.10. Ïðèîñòàíîâêà ðàáîòû â Database Tuning Advisor . . . . . . 3.3.11. Íàñòðîéêà ïî ðàñïèñàíèþ . . . . . . . . . . . . . . . . . 3.3.12. Ïîääåðæêà ìåòîäèêè WHATIF . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79 80 81 81 81 82 82 83 83 85 86 86 87 87 87 88 88 88 89 89 89 89 90 90 91 92 92 93 93
Ãëàâà 4. Áðîêåð çàïðîñîâ SQL Server . . . . . . . . . . . . . . . . . . . 94 4.1. Îáçîð áðîêåðà çàïðîñîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.1.1. Î÷åðåäè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95 4.1.2. Äèàëîãè . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97 4.1.3. Àêòèâàöèÿ áðîêåðà çàïðîñîâ SQL Server . . . . . . . . . . . . . . . . . 98 4.1.4. Ãðóïïû âçàèìîäåéñòâèÿ . . . . . . . . . . . . . . . . . . . . . . . . . 99 4.1.5. Ïîääåðæèâàåìûå ïðîòîêîëû . . . . . . . . . . . . . . . . . . . . . . 100 4.2. Íàñòðîéêà è àäìèíèñòðèðîâàíèå áðîêåðà çàïðîñîâ . . . . . . . . . . . . . . . 101 4.2.1. Íàñòðîéêà ïàðàìåòðîâ áðîêåðà çàïðîñîâ . . . . . . . . . . . . . . . . 101 4.2.2. Áåçîïàñíîñòü áðîêåðà çàïðîñîâ . . . . . . . . . . . . . . . . . . . . 102 4.2.3. Ñèñòåìíûå ïðåäñòàâëåíèÿ . . . . . . . . . . . . . . . . . . . . . . . 103 4.3. Ðàçðàáîòêà ïðèëîæåíèé è áðîêåð çàïðîñîâ . . . . . . . . . . . . . . . . . . . 103 4.3.1. Èñïîëüçîâàíèå ìåòàäàííûõ . . . . . . . . . . . . . . . . . . . . . . 103 4.3.2. Íîâûé íàáîð êîìàíä T-SQL . . . . . . . . . . . . . . . . . . . . . . . 104 4.3.3. Ïðèìåð ïðèëîæåíèÿ íà îñíîâå áðîêåðà çàïðîñîâ . . . . . . . . . . . . 105
Ãëàâà 5. Ñåðâèñû àíàëèòèêè
. . . . . . . . . . . . . . . . . . . . . . 110
5.1. Îáçîð è ïðåèìóùåñòâà . . . . . . . . . . . . . . . . 5.1.1. Òèïû õðàíèëèù OLAP . . . . . . . . . . . . . 5.1.2. Ïðåèìóùåñòâà ñåðâèñîâ àíàëèòèêè . . . . . . 5.1.3. Ïîääåðæêà íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server 5.1.4. Òðèããåðû . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
111 113 114 114 114
Ñîäåðæàíèå 5.1.5. Òðàññèðîâêà . . . . . . . . . . . . . . . 5.1.6. Óíèôèöèðîâàííàÿ ìîäåëü èçìåðåíèé . . . 5.1.7. Êýøèðîâàíèå . . . . . . . . . . . . . . . 5.1.8. Óïðàâëåíèå çàâèñøèìè ñòðîêàìè . . . . . 5.1.9. Ïîääåðæêà êëàñòåðèçàöèè . . . . . . . . 5.1.10. Ñîçäàíèå îáúåêòîâ ñ ïîìîùüþ ñöåíàðèåâ 5.1.11. Èíôîðìàöèîííàÿ ïðîõîäêà . . . . . . . . 5.1.12. Ëîêàëèçàöèÿ . . . . . . . . . . . . . . . 5.1.13. Èíòåãðàöèÿ ñî ñðåäñòâàìè ðàçðàáîòêè .NET 5.2. Óïðàâëåíèå ñåðâèñàìè àíàëèòèêè . . . . . . . . . 5.2.1. SQL Server Management Studio . . . . . . 5.2.2. SQL Server Configuration Manager . . . . . 5.2.3. Ïðèâèëåãèè . . . . . . . . . . . . . . . 5.2.4. Ðåçåðâèðîâàíèå è âîññòàíîâëåíèå äàííûõ 5.2.5. Øèôðîâàíèå . . . . . . . . . . . . . . . 5.2.6. Áåçîïàñíîñòü . . . . . . . . . . . . . . . 5.2.7. Áåçîïàñíîñòü ïî óìîë÷àíèþ . . . . . . . 5.3. Ñðåäñòâà ðàçðàáîòêè . . . . . . . . . . . . . . . 5.3.1. BI Development Studio . . . . . . . . . . 5.3.2. Îíëàéíîâûé è îôëàéíîâûé ðåæèìû . . . 5.3.3. Èñòî÷íèêè äàííûõ ïðåäñòàâëåíèÿ . . . . 5.3.4. Óòèëèòà Cube Wizard . . . . . . . . . . . 5.3.5. Óòèëèòà Cube Editor . . . . . . . . . . . 5.3.6. Óòèëèòà Cube Browser . . . . . . . . . . 5.3.7. Óòèëèòà Profiler . . . . . . . . . . . . . . 5.3.8. Îáúåêòû ñåðâèñîâ àíàëèòèêè (AMO) . . . 5.3.9. XML äëÿ àíàëèòèêè (XMLA) . . . . . . . . 5.3.10. ßçûê ODL . . . . . . . . . . . . . . . . . 5.3.11. ßçûê çàïðîñîâ MDX . . . . . . . . . . . . 5.3.12. Ïðîâàéäåð äàííûõ ADOMD.NET . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Framework . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7 114 115 115 116 116 117 117 118 118 118 118 119 120 120 121 121 122 122 122 123 123 125 126 128 128 129 129 130 131 132
Ãëàâà 6. Ñåðâèñû èíòåãðàöèè . . . . . . . . . . . . . . . . . . . . . . 133 6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè 6.1.1. Ìîäóëü DTP . . . . . . . . . . . . . . 6.1.2. Ìîäóëü DTR . . . . . . . . . . . . . . 6.1.3. Êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè . . . 6.1.4. Ïðåèìóùåñòâà ñåðâèñîâ èíòåãðàöèè . . 6.1.5. Íàñòðîéêà ñâîéñòâ ïàêåòîâ . . . . . . . 6.1.6. Ïðîòîêîëèðîâàíèå . . . . . . . . . . . 6.1.7. Êîíòðîëüíûå òî÷êè . . . . . . . . . . . 6.1.8. Ïåðåìåííûå . . . . . . . . . . . . . . 6.1.9. Çàäà÷è . . . . . . . . . . . . . . . . . 6.1.10. Óïðàâëåíèå ïðîöåññàìè . . . . . . . . 6.1.11. Ðåæèìû ðàáîòû . . . . . . . . . . . . 6.1.12. Öèôðîâàÿ ïîäïèñü . . . . . . . . . . . 6.1.13. Êîíòåéíåðû . . . . . . . . . . . . . . 6.1.14. Àäàïòåðû äàííûõ . . . . . . . . . . . 6.1.15. Ïðîâàéäåðû ïðîòîêîëèðîâàíèÿ . . . . . 6.1.16. Ïðåîáðàçîâàíèå äàííûõ . . . . . . . . 6.1.17. Îáðàáîò÷èêè ñîáûòèé . . . . . . . . . 6.2. Èíñòðóìåíòû ñåðâèñîâ èíòåãðàöèè . . . . . . . 6.2.1. Óòèëèòà Import/Export Wizard . . . . . . 6.2.2. Äèçàéíåð ñåðâèñîâ èíòåãðàöèè . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . .
134 135 136 138 138 139 139 139 140 142 142 143 144 144 145 146 146 147 148 149 151
8
Ñîäåðæàíèå 6.3. Èíñòðóìåíòû ðàáîòû ñ ïàêåòàìè . . . . . . . . . . . . . . 6.3.1. Ïåðåíîñ ïàêåòîâ . . . . . . . . . . . . . . . . . . 6.3.2. Óòèëèòà óïðàâëåíèÿ ïàêåòàìè ñåðâèñîâ èíòåãðàöèè 6.3.3. Óòèëèòà èñïîëíåíèÿ ïàêåòîâ ñåðâèñîâ èíòåãðàöèè .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
. . . .
157 158 158 158
Ãëàâà 7. Ñåðâèñû íîòèôèêàöèè . . . . . . . . . . . . . . . . . . . . . 160 7.1. Îáçîð è àðõèòåêòóðà ñåðâèñîâ íîòèôèêàöèè . . . . . . . . . . 7.1.1. ßäðî ñåðâèñà íîòèôèêàöèè . . . . . . . . . . . . . . 7.1.2. Ñîáûòèÿ . . . . . . . . . . . . . . . . . . . . . . . 7.1.3. Ïîäïèñêà . . . . . . . . . . . . . . . . . . . . . . . 7.1.4. Íîòèôèêàöèÿ . . . . . . . . . . . . . . . . . . . . . 7.1.5. Àðõèòåêòóðà ñåðâèñîâ íîòèôèêàöèè . . . . . . . . . 7.2. Ðàçðàáîòêà ñåðâèñîâ íîòèôèêàöèè . . . . . . . . . . . . . . 7.2.1. Ýòàïû ðàçðàáîòêè ñåðâèñîâ íîòèôèêàöèè . . . . . . 7.2.2. Ñõåìû è ïðàâèëà . . . . . . . . . . . . . . . . . . . 7.2.3. Êîìïèëèðîâàíèå ïðèëîæåíèÿ . . . . . . . . . . . . 7.2.4. Íàñòðîéêà ïðèëîæåíèÿ . . . . . . . . . . . . . . . . 7.2.5. Ïîëüçîâàòåëüñêèå êîìïîíåíòû . . . . . . . . . . . . 7.2.6. Ïðèìåðû ñåðâèñîâ íîòèôèêàöèè . . . . . . . . . . . 7.2.7. Ñîçäàíèå è èñïîëüçîâàíèå êîíôèãóðàöèîííûõ ôàéëîâ 7.2.8. Îïðåäåëåíèå ïðîâàéäåðà ADF . . . . . . . . . . . . 7.2.9. Íàñòðîéêà ñõåìû ïîäïèñêè . . . . . . . . . . . . . . 7.2.10. Ñõåìà íîòèôèêàöèè ADF-ôàéëà . . . . . . . . . . . . 7.2.11. Ôîðìàò âûâîäà íîòèôèêàöèé . . . . . . . . . . . . . 7.2.12. Ñîçäàíèå ïðèëîæåíèÿ ñåðâèñà íîòèôèêàöèè . . . . . 7.2.13. Äîáàâëåíèå ïîäïèñ÷èêîâ . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
160 161 162 162 162 162 165 165 165 165 166 166 166 167 170 171 173 175 176 178
Ãëàâà 8. Ñåðâèñû îò÷åòîâ . . . . . . . . . . . . . . . . . . . . . . . . 180 8.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ îò÷åòîâ . . . . . . . . . 8.1.1. Àðõèòåêòóðà ñåðâèñîâ îò÷åòîâ . . . . . . . . . . . . 8.1.2. Ñåðâåð îò÷åòîâ . . . . . . . . . . . . . . . . . . . . 8.1.3. Äèçàéíåð îò÷åòîâ . . . . . . . . . . . . . . . . . . 8.1.4. Ïàíåëü èíñòðóìåíòîâ . . . . . . . . . . . . . . . . . 8.1.5. Îáëàñòü ìîäåëèðîâàíèÿ . . . . . . . . . . . . . . . 8.1.6. Îêíî Fields . . . . . . . . . . . . . . . . . . . . . . 8.1.7. Îêíî Solution Explorer . . . . . . . . . . . . . . . . 8.1.8. Îêíî Properties . . . . . . . . . . . . . . . . . . . . 8.1.9. Îêíî Output . . . . . . . . . . . . . . . . . . . . . 8.1.10. Äèçàéíåð OLAP-îò÷åòîâ . . . . . . . . . . . . . . . 8.1.11. Ïàíåëü Dimensions Pane . . . . . . . . . . . . . . . 8.1.12. Ïàíåëü Measures Pane . . . . . . . . . . . . . . . . 8.1.13. Îêíî Metadata . . . . . . . . . . . . . . . . . . . . 8.1.14. Óòèëèòà Report Builder . . . . . . . . . . . . . . . . 8.1.15. Ìåíåäæåð îò÷åòîâ (Report Manager) . . . . . . . . . 8.1.16. Äîñòàâêà îò÷åòà . . . . . . . . . . . . . . . . . . . 8.2. Àâòîðèçàöèÿ îò÷åòîâ . . . . . . . . . . . . . . . . . . . . . 8.2.1. Ýòàïû ðàçðàáîòêè . . . . . . . . . . . . . . . . . . 8.2.2. Ñîçäàíèå ïðèëîæåíèÿ ñåðâèñîâ îò÷åòîâ . . . . . . . 8.2.3. Óñòàíîâêà è âíåäðåíèå ïðèëîæåíèÿ ñåðâèñîâ îò÷åòîâ 8.2.4. Ïðîñìîòð îò÷åòà ïîëüçîâàòåëåì . . . . . . . . . . . 8.2.5. Ñîçäàíèå ïðèëîæåíèÿ ñåðâèñîâ îò÷åòîâ . . . . . . . 8.2.6. Ðàçâåðòûâàíèå è âíåäðåíèå ñåðâèñà îò÷åòîâ . . . . . 8.2.7. Çàïóñê ñåðâèñà îò÷åòîâ . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
181 182 184 186 186 187 188 188 188 189 189 189 189 190 190 190 191 192 192 192 192 193 193 200 201
Ñîäåðæàíèå
Ãëàâà 9. Ñðåäñòâà âîññòàíîâëåíèÿ äàííûõ
. . . . . . . . . . . . . . . 203
9.1. Ñïîñîáû ñîõðàíåíèÿ äàííûõ . . . . . . . . . . . . . . . 9.1.1. Çåðêàëèðîâàíèå . . . . . . . . . . . . . . . . . 9.1.2. Çåðêàëèðîâàíèå ìåäèàäàííûõ . . . . . . . . . . 9.1.3. Êëàñòåðèçàöèÿ . . . . . . . . . . . . . . . . . . 9.1.4. Îòëè÷èå ñõåì çåðêàëèðîâàíèÿ è êëàñòåðèçàöèè . 9.1.5. Ïðîçðà÷íàÿ ïåðåàäðåñàöèÿ ïîëüçîâàòåëåé . . . . 9.1.6. Ñíèìîê áàçû äàííûõ . . . . . . . . . . . . . . . 9.2. Ñðåäñòâà ïîääåðæêè áàç äàííûõ . . . . . . . . . . . . . 9.2.1. Âîññòàíîâëåíèå äàííûõ . . . . . . . . . . . . . 9.2.2. Âîññòàíîâëåíèå äàííûõ â ðåàëüíîì âðåìåíè . . . 9.2.3. Òðàíçàêöèè SQL Server . . . . . . . . . . . . . . 9.3. Ïðåâåíòèâíûå äåéñòâèÿ . . . . . . . . . . . . . . . . . 9.3.1. Èíäåêñèðîâàíèå â ðåàëüíîì âðåìåíè . . . . . . . 9.3.2. Îòñëåæèâàíèå ïîâðåæäåííûõ ñòðàíèö . . . . . . 9.3.3. Âûäåëåííûé äîñòóï àäìèíèñòðàòîðà . . . . . . . 9.3.4. Ãîðÿ÷åå ïîäêëþ÷åíèå ïàìÿòè . . . . . . . . . . 9.3.5. Äèíàìè÷åñêîå êîíôèãóðèðîâàíèå . . . . . . . . 9.4. Ðåçåðâíîå êîïèðîâàíèå è âîññòàíîâëåíèå äàííûõ . . . . . 9.4.1. ×àñòè÷íîå âîññòàíîâëåíèå . . . . . . . . . . . . 9.4.2. Íàäåæíîñòü õðàíåíèÿ äàííûõ . . . . . . . . . . 9.4.3. Ïðîâåðêà öåëîñòíîñòè äàííûõ . . . . . . . . . . 9.4.4. Èãíîðèðîâàíèå îøèáîê . . . . . . . . . . . . . . 9.4.5. Êîíêóðåíòíîå ñîçäàíèå ðåçåðâíîé êîïèè . . . . . 9.4.6. Ðåçåðâíàÿ êîïèÿ êàòàëîãà ïîëíîòåêñòîâîãî ïîèñêà 9.4.7. Êîíòðîëüíûå ñóììû ñòðàíèö . . . . . . . . . . .
Ãëàâà 10. Ïðîãðàììèðîâàíèå äëÿ SQL Server
9
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
204 204 207 207 209 210 210 212 212 214 214 215 215 216 216 216 217 217 217 218 218 218 218 219 219
. . . . . . . . . . . . . . 220
10.1. Èíòåãðàöèÿ CLR . . . . . . . . . . . . . . . . . . . . 10.1.1. Ñáîðêà . . . . . . . . . . . . . . . . . . . . 10.1.2. .NET-ïðîâàéäåðû äàííûõ . . . . . . . . . . . 10.1.3. Õðàíèìûå ïðîöåäóðû .NET . . . . . . . . . . 10.1.4. Ïîëüçîâàòåëüñêèå ôóíêöèè .NET . . . . . . . 10.1.5. Òðèããåðû .NET . . . . . . . . . . . . . . . . 10.1.6. Ïîëüçîâàòåëüñêèå òèïû CLR . . . . . . . . . . 10.1.7. Ïîëüçîâàòåëüñêèå ìíîæåñòâà . . . . . . . . . 10.1.8. Áåçîïàñíîñòü íà óðîâíå îáúåêòîâ áàçû äàííûõ 10.2. Íîâîââåäåíèÿ . . . . . . . . . . . . . . . . . . . . . 10.2.1. Ñ÷èòûâàíèå ñòðîê . . . . . . . . . . . . . . . 10.2.2. Òàáëè÷íûå ðàñøèðåíèÿ . . . . . . . . . . . . 10.2.3. PIVOT è UNPIVOT . . . . . . . . . . . . . . . 10.2.4. Òðèããåðû DDL . . . . . . . . . . . . . . . . . 10.2.5. Ïåðåíàïðàâëåíèå âûâîäà . . . . . . . . . . . 10.2.6. Êîìàíäà WAITFOR . . . . . . . . . . . . . . 10.2.7. Íîâûé òèï äàííûõ varchar . . . . . . . . . . . 10.2.8. Ïðåðûâàíèå òðàíçàêöèé . . . . . . . . . . . . 10.3. Èíòåãðàöèÿ ñ ADO.NET . . . . . . . . . . . . . . . . . 10.3.1. Èñïîëüçîâàíèå êóðñîðà . . . . . . . . . . . . 10.3.2. Ïîääåðæêà àñèíõðîííîñòè . . . . . . . . . . 10.3.3. Ïîääåðæêà MARS . . . . . . . . . . . . . . . 10.3.4. Ðàçáèâêà íà ñòðàíèöû . . . . . . . . . . . . . 10.3.5. Îáìåí îáúåêòàìè . . . . . . . . . . . . . . . 10.3.6. Îáùàÿ ìîäåëü ñîåäèíåíèÿ . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . .
220 221 222 224 226 227 229 233 236 237 237 237 238 240 240 241 241 242 242 242 244 245 247 248 249
10
Ñîäåðæàíèå
Ãëàâà 11. ßçûê XML è SQL Server . . . . . . . . . . . . . . . . . . . . 250 11.1. Òèï äàííûõ XML . . . . . . . . . . . . 11.1.1. Ñòàíäàðòíûé XML . . . . . . . 11.1.2. Ìåòîäû XML . . . . . . . . . . 11.2. Èíäåêñû XML . . . . . . . . . . . . . 11.2.1. Ïåðâè÷íûå èíäåêñû XML . . . 11.2.2. Âòîðè÷íûå èíäåêñû XML . . . 11.3. Íîâûå âîçìîæíîñòè XML . . . . . . . . 11.3.1. Êîìàíäà FOR XML . . . . . . . 11.3.2. Òèïèçèðîâàííûå äèðåêòèâû . . 11.3.3. XSD-ñõåìû è êîìàíäà FOR XML 11.3.4. Âëîæåííûå çàïðîñû FOR XML . 11.3.5. Çàãðóçêà XML . . . . . . . . . 11.3.6. Ïîääåðæêà XQuery . . . . . . 11.3.7. Êîìàíäà OPENXML . . . . . . 11.3.8. XML for Analysis Services . . . . 11.3.9. Äîñòóï XML SOAP . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . .
251 252 255 257 257 258 258 259 259 260 261 262 263 263 265 265
Ãëàâà 12. Áåçîïàñíîñòü . . . . . . . . . . . . . . . . . . . . . . . . . 267 12.1. Èçìåíåíèÿ è ïðåèìóùåñòâà SQL Server 2005 . . . . . . . . 12.1.1. Ïðåèìóùåñòâà . . . . . . . . . . . . . . . . . . 12.1.2. Äîñòóï ê ìåòàäàííûì . . . . . . . . . . . . . . . 12.2. Îáçîð ñðåäñòâ áåçîïàñíîñòè SQL Server 2005 . . . . . . . . 12.2.1. Àóòåíòèôèêàöèÿ è àâòîðèçàöèÿ . . . . . . . . . . 12.2.2. Èñïîëíåíèå â çàâèñèìîñòè îò îêðóæåíèÿ è öåïî÷êè 12.3. Õðàíåíèå ïàðîëåé . . . . . . . . . . . . . . . . . . . . . 12.3.1. Ìàíäàò . . . . . . . . . . . . . . . . . . . . . . 12.3.2. Ðàçäåëåíèå ïîëüçîâàòåëåé è ñõåì . . . . . . . . . 12.3.3. Ñèíîíèìû èìåí . . . . . . . . . . . . . . . . . . 12.4. Íàáîðû ïðàâ äîñòóïà è íîâûå îáúåêòû . . . . . . . . . . . 12.4.1. Ñáîðêè . . . . . . . . . . . . . . . . . . . . . . 12.4.2. Íàáîðû ïðàâ äîñòóïà è ñáîðêè . . . . . . . . . . 12.4.3. Îáùèå ñáîðêè è áåçîïàñíîñòü . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . âëàäåëüöåâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
. . . . . . . . . . . . . .
267 269 270 271 271 276 279 281 281 283 284 285 286 287
Ñëîâàðü òåðìèíîâ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 289
Ââåäåíèå
Microsoft SQL Server 2005 ÿâëÿåòñÿ ïðîäîëæåíèåì ëèíåéêè ïðîäóêòîâ ñåðâåðîâ ðåëÿöèîííûõ áàç äàííûõ, çàðåêîìåíäîâàâøåé ñåáÿ ñ íàèëó÷øåé ñòîðîíû â îòíîøåíèè íàäåæíîñòè, ðàñøèðÿåìîñòè, ìàñøòàáèðóåìîñòè è ñîîòíîøåíèè öåíû è ïðîèçâîäèòåëüíîñòè. Ýòîò ïðîãðàììíûé ïðîäóêò èìååò ðÿä ïðåèìóùåñòâ, êîòîðûå âûãîäíî îòëè÷àþò åãî îò äðóãèõ ïðîãðàììíûõ ïðîäóêòîâ äëÿ óïðàâëåíèÿ áàçàìè äàííûõ. Âî ìíîãîì ýòè ïðåèìóùåñòâà ïîçâîëÿþò ïðîäâèíóòüñÿ íà ðûíîê ðåøåíèé, ðàíåå ìîíîïîëüíî çàíèìàåìûé Oracle. Àðõèòåêòóðà ïðîãðàììíîãî ðåøåíèÿ îò Microsoft çíà÷èòåëüíî óëó÷øåíà. Ýòî ïîçâîëèëî åìó óêðåïèòüñÿ íà ðûíêå ðåøåíèé äëÿ îáðàáîòêè îíëàéí-òðàíçàêöèé (OLTP), íàäåæíîãî õðàíåíèÿ äàííûõ, ñîçäàíèÿ è èñïîëüçîâàíèÿ âñåâîçìîæíûõ ñåðâèñîâ, ìîùíûõ ñðåäñòâ äëÿ OLAP-àíàëèçà, à òàêæå ïðèëîæåíèé ýëåêòðîííîé êîììåðöèè.
Óëó÷øåííîå ÿäðî áàçû äàííûõ Îñíîâíûì óëó÷øåíèåì áàçû äàííûõ íîâîé âåðñèè ïðîãðàììíîãî ïðîäóêòà ÿâëÿåòñÿ èíòåãðàöèÿ ñ Microsoft .NET Framework. Òàêæå ñòîèò âûäåëèòü ïîÿâëåíèå íîâûõ òèïîâ äàííûõ, óëó÷øåíèå ðàáîòû ñ XML, à òàêæå âîçìîæíîñòü èñïîëüçîâàíèÿ íåêîòîðûõ ðàñøèðåíèé Transact-SQL. Ñäåëàí çíà÷èòåëüíûé ðûâîê íà ðûíîê áèçíåñ-ïðèëîæåíèé çà ñ÷åò ðàñøèðåííûõ ìåõàíèçìîâ ðåïëèêàöèè, à òàêæå ìàñøòàáèðóåìîñòè ñèñòåì íà îñíîâå Microsoft SQL Server 2005. Íà ïîðÿäîê óâåëè÷åíà áåçîïàñíîñòü è ðàçãðàíè÷åíèå ïðàâ äîñòóïà íà óðîâíå áàçû äàííûõ.
Áðîêåð ñåðâèñîâ Áðîêåð ñåðâèñîâ — ýòî íîâûé óðîâåíü â ïðèëîæåíèÿõ íà îñíîâå SQL Server, êîòîðûé ïîçâîëÿåò èçáàâèòüñÿ îò çàâèñèìîñòè ìåæäó ïîëüçîâàòåëüñêèìè ïðèëîæåíèÿìè è áàçàìè äàííûõ. Áëàãîäàðÿ ýòîìó ðàçðàáîò÷èêè ìîãóò ñîçäàâàòü
12
Ââåäåíèå
ïðèëîæåíèÿ íà îñíîâå ñåðâèñîâ, êîòîðûå îáìåíèâàþòñÿ ñîîáùåíèÿìè ñ áàçîé äàííûõ ÷åðåç î÷åðåäü ñîîáùåíèé. Äàííîé î÷åðåäüþ óïðàâëÿåò áðîêåð ñåðâèñîâ. Ïîäîáíûå áðîêåðû çàïðîñîâ äàâíî èñïîëüçóþòñÿ ìíîãèìè ïðîèçâîäèòåëÿìè ñåðâåðíûõ ïðîãðàììíûõ ðåøåíèé, â êîòîðûõ ÷àñòî îáðàáàòûâàþòñÿ áàçû äàííûõ íà îñíîâå ïðîãðàììíûõ ïðîäóêòîâ ðàçëè÷íûõ ïîñòàâùèêîâ. Ïðèìåðîì òîìó ìîæåò ñëóæèòü Documentum Content Server — ïðèëîæåíèå, èñïîëüçóþùåå áðîêåð çàïðîñîâ äëÿ ðåàëèçàöèè ñòðàòåãèè íåçàâèñèìîñòè îò òèïîâ áàç äàííûõ. Òåïåðü Microsoft ïåðåíåñëà äàííóþ ôóíêöèîíàëüíîñòü ìíîãèõ ñåðâåðíûõ ïðîãðàììíûõ ïðîäóêòîâ íà ñåðâåð áàç äàííûõ.
MDAC è SQLClient  íîâîé âåðñèè SQL Server çíà÷èòåëüíî óëó÷øåíû ñðåäñòâà äîñòóïà ê äàííûì. Äëÿ ýòîãî ïåðåðàáîòàíà è óëó÷øåíà ðàáîòà àäàïòåðîâ .NET Frameworks SQLClient è MDAC (Microsoft Data Access). Òàêîå óñîâåðøåíñòâîâàíèå ïîçâîëÿåò ðàçðàáîò÷èêàì áîëåå ãèáêî êîíòðîëèðîâàòü äîñòóï ê äàííûì, íå ïðåíåáðåãàÿ ïðè ýòîì áåçîïàñíîñòüþ è öåëîñòíîñòüþ ñèñòåìû.
Ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ Çíà÷èòåëüíî óëó÷øåíà àðõèòåêòóðà íîâûõ ñåðâèñîâ ïðåîáðàçîâàíèÿ äàííûõ. Òàêæå èçìåíåíèÿì ïîäâåðãñÿ DTS Designer. Òåïåðü îí èìååò ñðåäñòâà äëÿ ðàçäåëåíèÿ çàäà÷ è äàííûõ, à òàêæå èõ îòäåëüíîãî âûïîëíåíèÿ. Ýòî ïîçâîëÿåò çíà÷èòåëüíî óñêîðèòü ðàáîòó äàííîãî ñåðâèñà è ðåàëèçîâàòü öåëûé íàáîð ìåõàíèçìîâ äëÿ óïðàâëåíèÿ ïîòîêàìè äàííûõ è çàäà÷. Ïîìèìî ýòîãî DTS Designer èìååò ñðåäñòâà äëÿ óïðàâëåíèÿ ïàêåòàìè äàííûõ è ïàêåòàìè çàäà÷, ÷òî òàêæå ïîëîæèòåëüíî ñêàçûâàåòñÿ íà ïðîèçâîäèòåëüíîñòè ñèñòåìû.
Ñåðâèñû îò÷åòîâ Ñåðâèñû îò÷åòîâ ïîçâîëÿþò ðåàëèçîâàòü ôóíêöèîíàëüíîñòü ñîçäàíèÿ îò÷åòîâ, óïðàâëåíèÿ, ðàññûëêè è äîñòóïà ê íèì êîíå÷íûõ ïîëüçîâàòåëåé. Íà èõ îñíîâå ìîæíî âûïîëíÿòü âñåñòîðîííèé àíàëèç äàííûõ, ðàñïîëàãàþùèõñÿ â áàçå, îñóùåñòâëÿòü èõ ðàçðåçû â íåîáõîäèìûõ ïëîñêîñòÿõ è âûâîäèòü ðåçóëüòàòû ñòàòèñòè÷åñêîãî àíàëèçà ñîîòâåòñòâóþùèì ïîëüçîâàòåëÿì â íóæíîì ôîðìàòå.
Ñåðâèñû íîòèôèêàöèè Ñåðâèñû íîòèôèêàöèè ïîçâîëÿþò ñîçäàâàòü ãèáêèå ïðèëîæåíèÿ äëÿ îòïðàâêè, ïîëó÷åíèÿ è îáðàáîòêè ñîîáùåíèé. Ñ èõ ïîìîùüþ ìîæíî âûïîëíÿòü îòïðàâêó ñîîáùåíèé ïî ðàñïèñàíèþ, ïåðñîíàëüíî äîñòàâëÿòü äàííûå íà îòäåëüíî âçÿòûé êîìïüþòåð ïîëüçîâàòåëÿ, à òàêæå îòîáðàæàòü èõ â íåîáõîäèìîì ôîðìàòå. Âñå ýòî
Ðåïëèêàöèÿ äàííûõ
13
ñòàíîâèòñÿ äîñòóïíûì òûñÿ÷àì ïîäïèñ÷èêîâ, äëÿ êîòîðûõ íàñòðîåíà íîòèôèêàöèÿ, ðàññûëêà ñîîáùåíèé, çàäàíèé èëè óâåäîìëåíèé ñ ïîìîùüþ ñåðâèñîâ íîòèôèêàöèè Microsoft SQL Server 2005. Áîëåå òîãî, ðàçðàáîò÷èêè ìîãóò ãèáêî âñòðàèâàòü ôóíêöèè íîòèôèêàöèè â ñâîè ïðèëîæåíèÿ. Ýòî äàåò äîïîëíèòåëüíûé óðîâåíü ñâîáîäû ïðè âçàèìîäåéñòâèè ïîëüçîâàòåëÿ ñ ñèñòåìîé.
Ñåðâèñû àíàëèòèêè  íîâîé âåðñèè SQL Server ñåðâèñû àíàëèòèêè èñïîëüçóþòñÿ äëÿ àíàëèçà ñòàòèñòè÷åñêîé èíôîðìàöèè, ñîñòàâëåíèÿ ðàçëè÷íûõ àíàëèòè÷åñêèõ îò÷åòîâ, ðàçðåçîâ äàííûõ ñ öåëüþ èõ äàëüíåéøåãî ïðèìåíåíèÿ â ðàçëè÷íûõ ïðèëîæåíèÿõ. Äëÿ ðàçðàáîòêè ïðèëîæåíèé, èñïîëüçóþùèõ ñåðâèñû àíàëèòèêè, ðåàëèçîâàíà âîçìîæíîñòü èíòåãðàöèè ñ .NET Framework. Äëÿ óïðîùåíèÿ ïðîöåññà ñîçäàíèÿ ïîäîáíûõ ïðèëîæåíèé ðåàëèçîâàí íàáîð âñåâîçìîæíûõ ïîìîùíèêîâ è óòèëèò, êîòîðûå ïðèçâàíû óïðîñòèòü ðàçðàáîòêó ïðèëîæåíèé íà îñíîâå ñåðâèñîâ àíàëèòèêè SQL Server.
Íîâûé èíñòðóìåíòàðèé è óòèëèòû Â SQL Server 2005 ïîÿâèëñÿ îãðîìíûé íàáîð íîâûõ óòèëèò, ñðåäñòâ ðàçðàáîòêè, àäìèíèñòðèðîâàíèÿ è óïðàâëåíèÿ áàçîé äàííûõ. Ê òàêèì ñðåäñòâàì îòíîñÿòñÿ: · óëó÷øåííûé DTS Import/Export Wizard; · óëó÷øåííûé SQL Profiler; · íîâûå êîìïîíåíòû Analysis Services Wizards; · íîâûé Report Manager; · íîâàÿ óòèëèòà Database Tuning Advisor; · íîâàÿ óòèëèòà SQL Server Configuration Manager; · íîâàÿ ñðåäà ðàçðàáîòêè Business Intelligence Development Studio; · íîâàÿ ñðåäà ðàçðàáîòêè SQL Server Management Studio.
Ðåïëèêàöèÿ äàííûõ  Microsoft SQL Server 2005 çíà÷èòåëüíî ðàñøèðåíû âîçìîæíîñòè ìåõàíèçìà ðåïëèêàöèè äàííûõ. Ðàñøèðåíèÿ êîñíóëèñü, â ïåðâóþ î÷åðåäü, áåçîïàñíîñòè äàííûõ, óïðîùåíèÿ óïðàâëÿåìîñòè ñèñòåì, â êîòîðûõ èñïîëüçóåòñÿ ðåïëèêàöèÿ äàííûõ, à òàêæå ïîääåðæêè ãåòåðîãåííûõ ñðåä ñ èñïîëüçîâàíèåì áàç äàííûõ íà îñíîâå ðåøåíèé îò äðóãèõ ïîñòàâùèêîâ ïðîãðàììíîãî îáåñïå÷åíèÿ. Òàêæå óëó÷øåíà ïðîãðàììíàÿ ìîäåëü äëÿ ñîçäàíèÿ ïðèëîæåíèé ñ ðåïëèêàöèåé äàííûõ.  ïåðâóþ î÷åðåäü ýòî îòíîñèòñÿ ê Replication Management Objects (RMO), à òàêæå ïîääåðæêå ïðîòîêîëà HTTPS, ÷åðåç êîòîðûé òåïåðü âîçìîæíà ðåïëèêàöèÿ äàííûõ.
14
Ââåäåíèå
Íîâûé òèï äàííûõ XML  íàñòîÿùèé ìîìåíò ôîðìàò XML èñïîëüçóåòñÿ âî ìíîãèõ ïðîãðàììíûõ ñèñòåìàõ. Îí çàðåêîìåíäîâàë ñåáÿ êàê ïëàòôîðìåííî-íåçàâèñèìûé ôîðìàò ïðåäñòàâëåíèÿ íåñòðóêòóðèðîâàííûõ è ñòðóêòóðèðîâàííûõ äàííûõ.  ïðåäûäóùåé âåðñèè Microsoft SQL Server áûëè ðåàëèçîâàíû äâà ìåõàíèçìà äëÿ ðàáîòû ñ XML: õðàíåíèå ôàéëîâ â òåêñòîâûõ ïîëÿõ è êîíâåðòàöèÿ ñîäåðæèìîãî XML-äîêóìåíòà â ðåëÿöèîííûå òàáëèöû.  ñëó÷àå èñïîëüçîâàíèÿ ïåðâîãî ìåõàíèçìà îñòàâàëîñü òîëüêî ðåàëèçîâàòü ñèíòàêñè÷åñêèé àíàëèç êîäà íà êëèåíòñêîé ñòîðîíå ïðèëîæåíèÿ. Âòîðîé ìåõàíèçì ïðèìåíèì òîëüêî äëÿ ñòðóêòóðèðîâàííûõ äàííûõ â ôîðìàòå XML. Íåêîòîðûå ïðîáëåìû íå óäàâàëîñü ðåøèòü ñ èñïîëüçîâàíèåì ïðåäëîæåííûõ ìåõàíèçìîâ. Äëÿ ðåøåíèÿ ïîäîáíûõ ïðîáëåì â Microsoft SQL Server 2005 ñîçäàí íîâûé òèï äàííûõ. Íîâûé òèï äàííûõ, íàçûâàåìûé XML, îòíîñèòñÿ ê òèïàì ïåðâîãî óðîâíÿ. Ýòî îçíà÷àåò, ÷òî îí ìîæåò èñïîëüçîâàòüñÿ òî÷íî òàê æå, êàê è äðóãèå òèïû SQL Server ïåðâîãî óðîâíÿ. Ýòî ïîäðàçóìåâàåò èñïîëüçîâàíèå òèïà â êà÷åñòâå êîëîíîê òàáëèö, ïåðåìåííûõ T-SQL, à òàêæå ïàðàìåòðîâ ïðîöåäóð.
Ðàñøèðåííàÿ ïîääåðæêà ÿçûêîâ Èñïîëüçóÿ îáùèé ÿçûê âûïîëíåíèÿ ïðîãðàìì (CLR), ðàçðàáîò÷èêè ìîãóò âûáèðàòü îäèí èç íåñêîëüêèõ ÿçûêîâ ïðîãðàììèðîâàíèÿ, êîòîðûé áîëüøå âñåõ ïîäõîäèò äëÿ ðåøåíèÿ âîçíèêàþùèõ ïðîáëåì. Ðàçðàáîò÷èêè ìîãóò âûáèðàòü îäèí èç ñëåäóþùèõ ÿçûêîâ ïðîãðàììèðîâàíèÿ, íà êîòîðîì áóäóò ñîçäàâàòüñÿ ïðèëîæåíèÿ ñåðâåðà SQL: Transact-SQL, Microsoft Visual Basic .NET èëè Microsoft Visual C# .NET. Ïîìèìî ýòîãî CLR ïîçâîëÿåò ñîçäàâàòü ãèáêèå ïðèëîæåíèÿ, ñîñòîÿùèå èç ïðîãðàììíîãî êîäà íà íåñêîëüêèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ, à òàêæå èñïîëüçîâàòü âñòàâêè êîäà, íàïèñàííîãî â ïðîãðàììíûõ ñðåäàõ îò òðåòüèõ ïîñòàâùèêîâ.
Èíòåãðàöèÿ ñ .NET Ïîæàëóé, íàèáîëüøèå èçìåíåíèÿ, êîòîðûå êîñíóëèñü SQL Server, — ýòî èíòåãðàöèÿ äàííîãî ïðîãðàììíîãî ïðîäóêòà ñ .NET Framework. Âåðñèÿ SQL Server 2000 òàêæå èìåëà ýëåìåíòû èíòåãðàöèè ñ äàííîé ñðåäîé ðàçðàáîòêè, çà îäíèì î÷åíü âàæíûì èñêëþ÷åíèåì: ÿäðî ñåðâåðà íå èíòåãðèðîâàëîñü ñ .NET Framework. Âñëåäñòâèå ýòîãî âî âðåìÿ ñîçäàíèÿ ìíîãîçâåííûõ ðåøåíèé ïðèõîäèëîñü ïðèáåãàòü ê òàêèì òåõíîëîãèÿì, êàê ADO.NET. Òåïåðü æå ìîæíî îòêàçàòüñÿ îò èñïîëüçîâàíèÿ ïðîìåæóòî÷íûõ ñðåä ðàçðàáîòêè è ïåðåéòè íà åäèíóþ òåõíîëîãèþ ñîçäàíèÿ ïðèëîæåíèé ñ ïîìîùüþ òåõíîëîãèè .NET. Êîä, íàïèñàííûé íà C#, J#, VB.NET è äðóãèõ ÿçûêàõ ïðîãðàììèðîâàíèÿ ñðåäû .NET Framework, ìîæåò áûòü âûïîëíåí íåïîñðåäñòâåííî òðàíñëÿòîðîì ÿäðà SQL Server.
SQL Server äëÿ ìîáèëüíûõ óñòðîéñòâ
15
Òàêèå ÿçûêè ïðîãðàììèðîâàíèÿ, êàê C#, J# è VB.NET, ïîçâîëÿþò ðåàëèçîâàòü áîëåå ñëîæíóþ ëîãèêó, èçáàâèòüñÿ îò èñïîëüçîâàíèÿ ñòîðîííèõ òåõíîëîãèé, à òàêæå ñýêîíîìèòü ñðåäñòâà ìíîãèì ïðåäïðèÿòèÿì íà ðàçðàáîòêå ïðîãðàììíûõ ïðîäóêòîâ. Áîëåå òîãî, ïðîãðàììèñòàì, âûïîëíÿþùèì ðàçðàáîòêè ïðîãðàììíîãî êîäà äëÿ SQL Server, íåò íåîáõîäèìîñòè èçó÷àòü ïðåèìóùåñòâà äàííîãî ïðîãðàììíîãî ïðîäóêòà. Òåïåðü ïðîãðàììèñòû ìîãóò ëåãêî ñîçäàâàòü õðàíèìûå ïðîöåäóðû, òðèããåðû, ïîëüçîâàòåëüñêèå ôóíêöèè è äðóãèå âñòàâêè ïðîãðàììíîãî êîäà ñ èñïîëüçîâàíèåì âñåé ìîùè ïðîãðàììíîé ñðåäû .NET Framework. Íå ñòîèò òàêæå çàáûâàòü î ôëàãìàíå ñðåäû .NET Framework — ïðîãðàììíîì ïðîäóêòå Visual Studio .NET. Íîâàÿ âåðñèÿ ýòîãî ïðîäóêòà áîëåå ïîëíî èíòåãðèðóåòñÿ ñ Microsoft SQL Server 2005.  ïåðâóþ î÷åðåäü ýòî äîñòèãàåòñÿ çà ñ÷åò ïðîãðàììíûõ ìîäóëåé è óòèëèò. Ýòî ïîçâîëÿåò äîáèòüñÿ áîëåå ïîëíîé ïîääåðæêè XML, à òàêæå OLAP. Ñðåäè òàêèõ ïðîãðàììíûõ ìîäóëåé ñòîèò âûäåëèòü XML for Analysis (XMLA — ñïåöèàëüíûé OLAP-èíòåðôåéñ äëÿ ðåøåíèÿ ðàçíîãî ðîäà áèçíåñ-çàäà÷), à òàêæå MultiDimensional Expression (MDX) — ñèíòàêñèñ ìíîãîìåðíûõ çàïðîñîâ â Microsoft SQL Server 2005. Áîëåå òîãî, íîâàÿ âåðñèÿ Visual Studio .NET 2005 ïîääåðæèâàåò äîïîëíèòåëüíûé íàáîð îáúåêòîâ äëÿ ñîçäàíèÿ àíàëèòè÷åñêèõ ïðèëîæåíèé ñ èñïîëüçîâàíèåì äàííûõ Microsoft SQL Server 2005.
SQL Server äëÿ ìîáèëüíûõ óñòðîéñòâ Âìåñòå ñ âûõîäîì SQL Server 2005 òàêæå áûëà âûïóùåíà ïðîáíàÿ âåðñèÿ äàííîãî ïðèëîæåíèÿ äëÿ èñïîëüçîâàíèÿ â ìîáèëüíûõ óñòðîéñòâàõ, êîòîðàÿ ðàíåå íîñèëà íàçâàíèå SQL Server 2005 Windows CE Edition. Ñåé÷àñ äàííîå ïðèëîæåíèå íàçûâàåòñÿ Microsoft SQL Server Mobile Edition. Äëÿ åãî íàñòðîéêè è óïðàâëåíèÿ, òàê æå êàê è äëÿ îáû÷íîé âåðñèè SQL Server, èñïîëüçóåòñÿ SQL Server Management Studio. Òåïåðü ðàçðàáîò÷èêè ìîãóò, èñïîëüçóÿ äàííóþ óòèëèòó, ñîçäàâàòü áàçû äàííûõ, ìàíèïóëèðîâàòü ñõåìàìè è îáúåêòàìè áàçû äàííûõ SQL Server Mobile Edition. Âñå ýòî ìîæíî äåëàòü âíå çàâèñèìîñòè îò òîãî, íà êàêîì óñòðîéñòâå ðàñïîëîæåíà ìîáèëüíàÿ áàçà äàííûõ: íà âûäåëåííîì ñåðâåðå èëè ìîáèëüíîì óñòðîéñòâå (ñ ïðåäóñòàíîâëåííîé îïåðàöèîííîé ñèñòåìîé Windows Mobile). Ñ ïîìîùüþ Management Studio ìîæíî íàñòðàèâàòü ðåïëèêàöèþ è ïóáëèêàöèþ äàííûõ ìåæäó áàçîé äàííûõ íà îñíîâå îáû÷íîãî SQL Server è ìîáèëüíîé âåðñèè. Ñ ïîìîùüþ Management Studio òàêæå ìîæíî âûïîëíÿòü çàïðîñû ê áàçå äàííûõ íà îñíîâå SQL Server Mobile Edition. Íåîáõîäèìî îñîáî îòìåòèòü ñëåäóþùóþ îñîáåííîñòü SQL Server Mobile Edition: ýòà âåðñèÿ ïðîãðàììíîãî ïðîäóêòà èíòåãðèðîâàíà ñ ñåðâèñàìè òðàíñôîðìàöèè äàííûõ (DTS). Èñïîëüçóÿ äàííîå ïðåèìóùåñòâî, ðàçðàáîò÷èêè ìîãóò íàïðÿìóþ îáðàùàòüñÿ ê áàçå äàííûõ è îòîáðàæàòü äàííûå â íåîáõîäèìîì äëÿ íèõ ôîðìàòå. Èñïîëüçîâàíèå DTS-îáúåêòîâ ïîçâîëèò ðàñøèðèòü ãðàíèöû ïðèìåíèìîñòè äàííîé òåõíîëîãèè â ïðèëîæåíèÿõ Visual Studio 2005.  ìîáèëüíîé âåðñèè ïðîãðàììíîãî ïðîäóêòà äîñòàòî÷íî ìíîãî íîâîââåäåíèé è ïðåèìóùåñòâ, ñòàâøèõ îáû÷íûì ÿâëåíèåì äëÿ áàçû äàííûõ Enterprise, îäíàêî
16
Ââåäåíèå
íå ðàñïðîñòðàíåííûì äëÿ ìîáèëüíûõ áàç äàííûõ. Ñðåäè òàêèõ ïðåèìóùåñòâ ñòîèò âûäåëèòü ñëåäóþùèå: · âîçìîæíîñòü êëàñòåðèçàöèè; · ñîçäàíèå ðåçåðâíûõ êîïèé è âîññòàíîâëåíèå äàííûõ; · ðåãèñòðàöèÿ òðàíçàêöèé; · èñïîëüçîâàíèå Management Studio äëÿ àäìèíèñòðèðîâàíèÿ ñèñòåìû.
Çåðêàëèðîâàíèå áàç äàííûõ  íîâîé âåðñèè SQL Server çíà÷èòåëüíî óëó÷øåíû âîçìîæíîñòè ïåðåñûëêè ïðîòîêîëîâ áàç äàííûõ ñ ïîìîùüþ ìåõàíèçìà èõ çåðêàëèðîâàíèÿ. Çåðêàëèðîâàíèå áàç äàííûõ ïîçâîëÿåò ïîòîêîâîå âûïîëíåíèå òðàíçàêöèé ìåæäó îòäåëüíûìè ñåðâåðàìè â ðàñïðåäåëåííîé ñèñòåìå.  ñëó÷àå âîçíèêíîâåíèÿ îøèáêè íà ïåðâè÷íîì ñåðâåðå (íà êîòîðîì âûïîëíÿëàñü òðàíçàêöèÿ) ïðèëîæåíèå ìîæåò âîññòàíîâèòü ñîåäèíåíèå ñ îäíèì èç âòîðè÷íûõ ñåðâåðîâ. Íà ïîäîáíóþ ïðîöåäóðó âîññòàíîâëåíèÿ ñâÿçè ïðàêòè÷åñêè íå òðàòèòñÿ âðåìåíè, ÷òî ïîçâîëÿåò èçáåæàòü îãðîìíîãî ÷èñëà ïðîáëåì, ñâÿçàííûõ ñ îøèáêàìè â ñåòè èëè íåñòàáèëüíîé ðàáîòîé ñåðâåðîâ.  îòëè÷èå îò êëàñòåðèçàöèè ñåðâåðîâ, çåðêàëèðîâàíèå â ïîëíîé ìåðå èñïîëüçóåò êýøèðîâàíèå äàííûõ, à ïîòîìó ïîçâîëÿåò áûñòðî âîññòàíàâëèâàòü òðàíçàêöèþ ñ ìåñòà ðàçðûâà çà ñ÷åò ñèíõðîíèçàöèè ïåðâè÷íûõ è âòîðè÷íûõ ñåðâåðîâ. Ñõåìà çåðêàëèðîâàíèÿ ïîäðàçóìåâàåò, ÷òî â íåé èñïîëüçóþòñÿ êàê ìèíèìóì òðè ñåðâåðà ñ çàïóùåííûìè SQL Server 2005. Êàæäûé èç òðåõ ñåðâåðîâ âûïîëíÿåò îïðåäåëåííûå îïåðàöèè, õàðàêòåðíûå òîëüêî äëÿ íåãî: · ãëàâíûé ñåðâåð — ñåðâåð, íà êîòîðîì ðàñïîëàãàåòñÿ ïðèëîæåíèå, âûïîëíÿþùåå òðàíçàêöèþ; · çåðêàëüíûé ñåðâåð — ñåðâåð, íà êîòîðîì âûïîëíÿåòñÿ âòîðè÷íîå ïðîòîêîëèðîâàíèå òðàíçàêöèè. Ïðîòîêîëèðîâàíèå íà ýòîì ñåðâåðå ìîæåò âûïîëíÿòüñÿ êàê â ñèíõðîííîì, òàê è â àñèíõðîííîì ðåæèìå. Çåðêàëüíûé ñåðâåð íàõîäèòñÿ â ñîñòîÿíèè, â êîòîðîì çàïðåùåí ïðÿìîé äîñòóï ê äàííûì. Íà ãëàâíîì ñåðâåðå âûïîëíÿåòñÿ ïðîòîêîëèðîâàíèå òðàíçàêöèè, îäíîâðåìåííî ñ ýòèì àíàëîãè÷íûå îïåðàöèè âûïîëíÿþòñÿ íà çåðêàëüíîì ñåðâåðå. Áëàãîäàðÿ ýòîìó ïðîòîêîëû áàç äàííûõ îáîèõ ñåðâåðîâ ñîâïàäàþò, à ñåðâåðû íàõîäÿòñÿ â îäèíàêîâûõ ñîñòîÿíèÿõ âûïîëíåíèÿ òðàíçàêöèè. Òàêèì îáðàçîì, ìîæíî äîáèòüñÿ äóáëèðîâàíèÿ äàííûõ íà îáîèõ ñåðâåðàõ è âîçìîæíîñòè ìîìåíòàëüíîãî âîññòàíîâëåíèÿ òðàíçàêöèè ïðè ðàçðûâå ñîåäèíåíèÿ ñ ãëàâíûì ñåðâåðîì; · cåðâåð-óäîñòîâåðèòåëü — ýòî ñåðâåð, èñïîëüçóþùèéñÿ äëÿ ðàçðåøåíèÿ êîíôëèêòîâ ìåæäó ãëàâíûì è çåðêàëüíûì ñåðâåðàìè. Åãî «ãîëîñ» ó÷èòûâàåòñÿ âî âðåìÿ îïðåäåëåíèÿ, êàêîé èç äâóõ ñåðâåðîâ ÿâëÿåòñÿ ãëàâíûì, à êàêîé çåðêàëüíûì â òîé èëè èíîé ñèòóàöèè. Ãëàâíûé è çåðêàëüíûé ñåð-
Âîññòàíîâëåíèå âî âðåìÿ ðàáîòû
17
âåðû âñåãäà «ïðèñëóøèâàþòñÿ» ê ìíåíèþ äàííîãî ñåðâåðà, ÷òî ïîçâîëÿåò èñêëþ÷èòü êîíôëèêòíûå ñèòóàöèè. Äëÿ êëèåíòñêîãî êîìïüþòåðà ïåðåêëþ÷åíèå ìåæäó ãëàâíûì è çåðêàëüíûì íåçàìåòíî, ïðè ýòîì ñåðâåð-óäîñòîâåðèòåëü èñïîëüçóåòñÿ äëÿ áîëåå áûñòðîãî ðàçðåøåíèÿ êîíôëèêòîâ. Ñðåäè îñíîâíûõ ïðåèìóùåñòâ çåðêàëèðîâàíèÿ áàç äàííûõ ñëåäóåò âûäåëèòü âîçìîæíîñòü èñïîëüçîâàíèÿ äàííîãî ìåõàíèçìà â ñèñòåìàõ ñ íèçêîé ïðîïóñêíîé ñïîñîáíîñòüþ ñåòåé, à òàêæå âîçìîæíîñòü âûïîëíåíèÿ ñèíõðîíèçàöèè äàííûõ â îáîèõ íàïðàâëåíèÿõ. Ýòî îçíà÷àåò, ÷òî â íåêîòîðûõ ñèòóàöèÿõ ãëàâíûé è çåðêàëüíûé ñåðâåðû ìîãóò ìåíÿòüñÿ ìåñòàìè.  òîì ñëó÷àå, åñëè ïî êàêèì-ëèáî ïðè÷èíàì ãëàâíûé ñåðâåð ñòàíîâèòñÿ íåäîñòóïíûì, âûïîëíåíèå òðàíçàêöèè ïðîäîëæàåòñÿ íà çåðêàëüíîì ñåðâåðå. Ïîñëå ýòîãî çåðêàëüíûé ñåðâåð ñòàíîâèòñÿ ãëàâíûì. Ïîñëå òîãî êàê áûâøèé ïåðåä ýòèì ãëàâíûì ñåðâåð ñòàíåò äîñòóïíûì, îí ïðèíèìàåò íà ñåáÿ îáÿçàííîñòè çåðêàëüíîãî ñåðâåðà. Êàê òîëüêî áóäåò çàêîí÷åíà ñèíõðîíèçàöèÿ äàííûõ, îí áóäåò ãîòîâ ïîäìåíèòü ãëàâíûé ñåðâåð â ñëó÷àå âîçíèêíîâåíèÿ êàêèõ-ëèáî ïðîáëåì. Îòìåòèì åùå îäíî ïðåèìóùåñòâî çåðêàëèðîâàíèÿ áàç äàííûõ: äëÿ äàííîãî ìåõàíèçìà íå òðåáóåòñÿ äîïîëíèòåëüíîãî ïðîãðàììíîãî èëè àïïàðàòíîãî îáåñïå÷åíèÿ, ÷òî â êîíå÷íîì èòîãå óäåøåâëÿåò ðåøåíèå.
Ñíèìîê áàçû äàííûõ  Microsoft SQL Server 2005 äëÿ àäìèíèñòðàòîðîâ ïîÿâèëàñü âîçìîæíîñòü ñîçäàâàòü è èñïîëüçîâàòü ïðåäñòàâëåíèÿ áàç äàííûõ â ðåæèìå òîëüêî äëÿ ÷òåíèÿ. Ïîäîáíûå ïðåäñòàâëåíèÿ íîñÿò íàçâàíèå ñíèìêà áàçû äàííûõ. Ñíèìêè ìîæíî èñïîëüçîâàòü áåç ñîçäàíèÿ ñëóæåáíîé êîïèè áàçû äàííûõ. Èñïîëüçîâàíèå ñíèìêà èíòåðåñíî â òîì îòíîøåíèè, ÷òî âî âðåìÿ âíåñåíèÿ êàêèõ-ëèáî èçìåíåíèé â áàçó äàííûõ ñîçäàåòñÿ îòäåëüíàÿ êîïèÿ òàáëèö, êîòîðûå ïîäâåðãàëèñü ìîäèôèêàöèè.  òîì ñëó÷àå, åñëè èçìåíåíèÿ áûëè âíåñåíû ñëó÷àéíî èëè ïðîèçîøåë ñáîé â ðàáîòå áàçû äàííûõ, áëàãîäàðÿ ñíèìêó ìîæíî âåðíóòü áàçó äàííûõ â ñîñòîÿíèå, ïðåäøåñòâóþùåå âíåñåíèþ â íåå èçìåíåíèé. Äëÿ ýòîãî íåîáõîäèìî ïðîñòî âûïîëíèòü êîïèðîâàíèå äàííûõ, ïîäâåðãàâøèõñÿ èçìåíåíèþ, èç ñíèìêà â ðàáî÷óþ áàçó äàííûõ.
Âîññòàíîâëåíèå âî âðåìÿ ðàáîòû  íîâîé âåðñèè SQL Server ïîÿâèëàñü âîçìîæíîñòü âûïîëíèòü âîññòàíîâëåíèå äàííûõ (ïîñëå ñáîÿ èëè âíåñåíèÿ íåïðàâèëüíûõ äàííûõ) îòäåëüíî âçÿòîãî ýêçåìïëÿðà áàçû äàííûõ áåç åãî îñòàíîâêè. Âî âðåìÿ âîññòàíîâëåíèÿ îïðåäåëåííîãî íàáîðà äàííûõ ýêçåìïëÿð áàçû äàííûõ áóäåò íåäîñòóïåí. Îäíàêî ïî îêîí÷àíèè ïðîöåññà âîññòàíîâëåíèÿ äàííûå áóäóò äîñòóïíû òàê æå, êàê è äðóãèå íàáîðû äàííûõ.  SQL Server 2000 è áîëåå ðàííèõ âåðñèÿõ áàç äàííûõ òðåáîâàëîñü ñíà÷àëà îñòàíîâèòü ýêçåìïëÿð áàçû äàííûõ äëÿ âîññòàíîâëåíèÿ, âûïîëíèòü êîïèðîâàíèå äàííûõ èç ðåçåðâíîé êîïèè, à çàòåì ïåðåçàïóñòèòü ýêçåìïëÿð.
18
Ââåäåíèå
 íîâîé âåðñèè íåò íåîáõîäèìîñòè îñòàíàâëèâàòü ýêçåìïëÿð äëÿ âîññòàíîâëåíèÿ äàííûõ. Äëÿ âîññòàíîâëåíèÿ äàííûõ âî âðåìÿ ðàáîòû ýêçåìïëÿðà äîñòóïíû äâà ñïîñîáà: · âîññòàíîâëåíèå öåëîãî ôàéëà áàçû äàííûõ; · âîññòàíîâëåíèå ãðóïïû ôàéëîâ, ïðåäñòàâëÿþùåé ñîáîé íå ÷òî èíîå, êàê íàáîð îòäåëüíî âçÿòûõ ôàéëîâ.
Îò èçäàòåëüñòâà Âàøè çàìå÷àíèÿ, ïðåäëîæåíèÿ, âîïðîñû îòïðàâëÿéòå ïî àäðåñó ýëåêòðîííîé ïî÷òû [email protected] (èçäàòåëüñòâî «Ïèòåð», êîìïüþòåðíàÿ ðåäàêöèÿ). Ìû áóäåì ðàäû óçíàòü âàøå ìíåíèå! Ïîäðîáíóþ èíôîðìàöèþ î íàøèõ êíèãàõ âû íàéäåòå íà âåá-ñàéòå èçäàòåëüñòâà http://www.piter.com.
1
Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
Óñòàíîâêà SQL Server 2005 íà÷èíàåòñÿ ñ ïðîâåðêè êîíôèãóðàöèè êîìïüþòåðà. Âî âðåìÿ äàííîãî îáñëåäîâàíèÿ êîìïüþòåðà ïðîâåðÿåòñÿ àïïàðàòíîå è ïðîãðàììíîå îáåñïå÷åíèå íà ïðåäìåò óäîâëåòâîðåíèÿ óñëîâèé óñòàíîâêè.  òîì ñëó÷àå, åñëè êîìïüþòåð èëè ïðîãðàììíîå îáåñïå÷åíèå íå óäîâëåòâîðÿþò óñëîâèÿì óñòàíîâêè, âûâîäèòñÿ ñîîòâåòñòâóþùåå ñîîáùåíèå è óñòàíîâêà ïðåêðàùàåòñÿ. Äëÿ îòñëåæèâàíèÿ ïîäîáíûõ ñèòóàöèé, à òàêæå äðóãèõ îøèáîê ïðè óñòàíîâêå SQL Server âåäåòñÿ çàïèñü ñèñòåìíîãî æóðíàëà. Òàêæå ñòîèò îòìåòèòü òî, ÷òî òåïåðü óñòàíàâëèâàòü SQL Server ìîæíî è ñ ïîìîùüþ êîìàíäû Add or Remove Programs (Óñòàíîâêà è óäàëåíèå ïðîãðàìì) îïåðàöèîííîé ñèñòåìû Windows. Ïðîñòîòà óñòàíîâêè SQL Server 2005 äîñòèãàåòñÿ áëàãîäàðÿ èñïîëüçîâàíèþ ìàñòåðà óñòàíîâêè. Ìàñòåð óñòàíîâêè ïîñòðîåí íà îñíîâå ïðîãðàììíîãî ïðîäóêòà Windows Installer 3.0 è ïîçâîëÿåò ðåàëèçîâàòü âñå åãî ïðåèìóùåñòâà â îòíîøåíèè âñåõ ýòàïîâ óñòàíîâêè Microsoft SQL Server. Ñ åãî ïîìîùüþ óñòàíàâëèâàþòñÿ ïðàêòè÷åñêè âñå êîìïîíåíòû SQL Server: ÿäðî ñåðâåðà, ñåðâèñû îò÷åòîâ, íîòèôèêàöèè, ïðåîáðàçîâàíèÿ äàííûõ è àíàëèòèêè, à òàêæå èíñòðóìåíòû äëÿ ðàçðàáîòêè, óïðàâëåíèÿ è ðåïëèêàöèè. Microsoft SQL Server 2005 ïîääåðæèâàåò âñþ ëèíåéêó 32-ðàçðÿäíûõ âåðñèé îïåðàöèîííûõ ñèñòåì Microsoft Windows. Îäíàêî äàííàÿ âåðñèÿ îòëè÷àåòñÿ îò ïðåäûäóùèõ òåì, ÷òî â íåå âñòðîåíà ïîääåðæêà 64-ðàçðÿäíûõ ïëàòôîðì, òî åñòü SQL Server òàêæå âûïóñêàåòñÿ â âåðñèè äëÿ 64-ðàçðÿäíîãî àïïàðàòíîãî îáåñïå÷åíèÿ. Ýòî âíîñèò ñâîè îñîáåííîñòè â ðàáîòó ñèñòåìû, îäíàêî ïðàêòè÷åñêè íå òðåáóåò îò àäìèíèñòðàòîðà èëè ðàçðàáîò÷èêà êàêèõ-ëèáî äîïîëíèòåëüíûõ äåéñòâèé âî âðåìÿ óñòàíîâêè äàííîãî ïðîãðàììíîãî ïðîäóêòà.  äàííîé ãëàâå ìû ðàññìîòðèì îáùèå õàðàêòåðèñòèêè SQL Server 2005, ðàçáåðåìñÿ â òîì, êàêèå ðåäàêöèè äàííîãî ïðîãðàììíîãî ïðîäóêòà âûøëè, è ïîñòàðàåìñÿ î÷åðòèòü íàáîð êîìïîíåíòîâ è ñåðâèñîâ, êîòîðûå ñîäåðæàòñÿ â SQL Server 2005. Äàëåå ìû ðàññìîòðèì âîïðîñû, êàñàþùèåñÿ ñîâìåñòíîãî èñïîëüçîâàíèÿ SQL Server 2005 è Internet Information Services (IIS), à òàêæå îãðàíè÷åíèÿ, íàëàãàåìûå
20
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
íà ñèñòåìó ïðè èñïîëüçîâàíèè 32- è 64-ðàçðÿäíûõ ðåäàêöèé SQL Server.  ðàçäåëå 1.2 «Óñòàíîâêà MS SQL Server 2005» ìû ðàññìîòðèì âîïðîñû, êàñàþùèåñÿ ïðîöåññà óñòàíîâêè íîâîé âåðñèè SQL Server. Ïðè ýòîì áóäóò çàòðîíóòû ïðîáëåìû ëîêàëüíîé è óäàëåííîé óñòàíîâêè ýòîãî ïðîãðàììíîãî ïðîäóêòà, óñòàíîâêè íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server è îãðàíè÷åíèÿ, íàëàãàåìûå íà ñèñòåìó ïðè óñòàíîâêå íåñêîëüêèõ ýêçåìïëÿðîâ.  çàâåðøàþùåì ðàçäåëå 1.3 «Îáíîâëåíèå MS SQL Server 2005» ìû îñòàíîâèìñÿ íà îáíîâëåíèè ðàçëè÷íûõ ñèñòåì äî íîâîé âåðñèè SQL Server. Áóäóò ðàññìîòðåíû âîïðîñû îáíîâëåíèÿ SQL Server âåðñèé 6.5, 7.0 è 2000.  êîíöå ðàçäåëà 1.3 áóäóò ðàññìîòðåíû âîïðîñû îáíîâëåíèÿ ðåïëèöèðóåìûõ áàç äàííûõ è êëàñòåðîâ íà îñíîâå ïðåäûäóùèõ ñèñòåì.
1.1. Îáùèå õàðàêòåðèñòèêè SQL Server 2005 Êàê áûëî ñêàçàíî ðàíåå, Microsoft SQL Server 2005 èìååò ðÿä ðåäàêöèé, êîòîðûå âêëþ÷àþò 32- è 64-ðàçðÿäíûå âåðñèè äàííîãî ïðîãðàììíîãî ïðîäóêòà. Îñòàíîâèìñÿ è ðàññìîòðèì áîëåå äåòàëüíî 32-ðàçðÿäíûå âåðñèè ñåðâåðà SQL: · SQL Server 2005 Express Edition — ïîæàëóé, ñàìàÿ ïðîñòàÿ âåðñèÿ èçâåñòíîãî ïðîãðàììíîãî ïðîäóêòà, êîòîðàÿ èìååò ðÿä îãðàíè÷åíèé ïî ñðàâíåíèþ ñ äðóãèìè ðåäàêöèÿìè SQL Server (â ÷àñòíîñòè, â êîëè÷åñòâå îäíîâðåìåííûõ ïîäêëþ÷åíèé). Express Edition ïîçâîëÿåò áûñòðî ðàçâîðà÷èâàòü ïðèëîæåíèÿ íà ïðåäïðèÿòèÿõ ñ ìàëûì êîëè÷åñòâîì êîìïüþòåðîâ, èñïîëüçóÿ ïðè ýòîì îñíîâíûå ôóíêöèè SQL Server è íå çàáîòÿñü î ðàçâåðòûâàíèè äîïîëíèòåëüíûõ ìîäóëåé è ñåðâèñîâ. Express Edition òàêæå ïðåäñòàâëÿåò ñîáîé èäåàëüíîå ðåøåíèå äëÿ îòäåëüíûõ ïîëüçîâàòåëåé, ïîñêîëüêó îíî ðàñïðîñòðàíÿåòñÿ áåñïëàòíî, è êàæäûé æåëàþùèé ìîæåò çàãðóçèòü åãî ñ ñàéòà êîìïàíèè Microsoft. Ýòî èäåàëüíàÿ çàìåíà äëÿ MSDE. · SQL Server 2005 Workgroup Edition ÿâëÿåòñÿ íîâîé ðåäàêöèåé SQL Server è ïðåäñòàâëÿåò ñîáîé âûñîêîïðîèçâîäèòåëüíîå è ïðîñòîå â èñïîëüçîâàíèè ðåøåíèå äëÿ óïðàâëåíèÿ áàçàìè äàííûõ. Ýòà ðåäàêöèÿ íàèëó÷øèì îáðàçîì ïîäõîäèò äëÿ íåáîëüøèõ è ñðåäíèõ ïðåäïðèÿòèé, êîòîðûì íå õâàòàåò ôóíêöèîíàëüíîñòè SQL Server 2005 Express Edition è òðåáóåòñÿ íåäîðîãàÿ è äîñòàòî÷íî ìîùíàÿ ñèñòåìà óïðàâëåíèÿ áàçàìè äàííûõ. Ïî ñðàâíåíèþ ñ Express Edition äàííàÿ ðåäàêöèÿ èìååò áîëüøèé íàáîð ôóíêöèîíàëüíîñòè: ñðåäñòâà èìïîðòà-ýêñïîðòà, âîçìîæíîñòü ðåïëèöèðîâàíèÿ è ñîñòàâëåíèÿ ðåçåðâíûõ êîïèé ñèñòåìíîãî æóðíàëà, à òàêæå ìîùíîå ñðåäñòâî äëÿ óïðàâëåíèÿ è ðàçðàáîòêè ïðèëîæåíèé áàç äàííûõ Management Studio. · SQL Server 2005 Standard Edition — ýòî ìîùíàÿ ïëàòôîðìà äëÿ óïðàâëåíèÿ äàííûìè è èõ àíàëèçà. Ýòà ðåäàêöèÿ ïðåäíàçíà÷åíà äëÿ ïðåäïðèÿòèé ñðåäíåãî ðàçìåðà è êðóïíûõ îòäåëîâ, êîòîðûì òðåáóåòñÿ áîëåå øèðîêèé íàáîð ôóíêöèé ïî ñðàâíåíèþ ñ SQL Server 2005 Workgroup Edition (íàïðèìåð, ñðåäñòâà àíàëèçà áèçíåñ-ïðîöåññîâ). Äàííàÿ ðåäàêöèÿ îáëàäàåò ñëåäóþùèìè ïðåèìóùåñòâàìè: ïîääåðæêà 64-ðàçðÿäíûõ ïðîöåññîðîâ, ñîçäàíèå êîïèé áàç äàííûõ, ïåðåíîñ áàç äàííûõ, ðàñøèðåííûå âîçìîæíîñòè ñëóæá àíàëèçà, èíòåãðàöèè è ñîñòàâëåíèÿ îò÷åòîâ, àíàëèç äàííûõ, ïîëíàÿ ðåïëèêàöèÿ è ïóáëèêàöèÿ SSB.
1.1. Îáùèå õàðàêòåðèñòèêè SQL Server 2005
21
· SQL Server 2005 Enterprise Edition — ýòî ìîùíàÿ ïëàòôîðìà ìàñøòàáà ïðåäïðèÿòèÿ äëÿ óïðàâëåíèÿ äàííûìè è èõ àíàëèçà, ïðåäíàçíà÷åííàÿ äëÿ êðèòè÷åñêè âàæíûõ êîðïîðàòèâíûõ ïðèëîæåíèé. Äàííàÿ ðåäàêöèÿ ïðèëîæåíèÿ ëó÷øå âñåãî ïîäõîäèò äëÿ êîìïàíèé ñî ñëîæíîé ñòðóêòóðîé îáðàáîòêè äàííûõ, èìåþùèõ ïîòðåáíîñòü â ñëîæíîì àíàëèçå è âûñîêîé íàäåæíîñòè ðàçâåðòûâàåìûõ ñèñòåì. Ôóíêöèîíàëüíîñòü ðåäàêöèè Enterprise Edition îòëè÷àåòñÿ îò äðóãèõ íåîãðàíè÷åííûì ìàñøòàáèðîâàíèåì, óëó÷øåííûìè ñðåäñòâàìè çåðêàëèðîâàíèÿ, ñîçäàíèÿ ðàçäåëîâ, ïàðàëëåëèçìîì, ñîçäàíèåì ñíèìêîâ áàç äàííûõ, ìîùíûìè ñðåäñòâàìè àíàëèçà (÷òî âêëþ÷àåò äîáû÷ó äàííûõ è OLAP), óñîâåðøåíñòâîâàííûå ñëóæáû èíòåãðàöèè, à òàêæå íàñòðàèâàåìûå ñëóæáû ñîçäàíèÿ îò÷åòîâ. · SQL Server 2005 Developer Edition ïîçâîëÿåò ñîçäàâàòü ðàçðàáîò÷èêàì ìîùíûå ðåøåíèÿ íà îñíîâå äàííîãî ïðîãðàììíîãî ïðîäóêòà. Ýòà ðåäàêöèÿ SQL Server âêëþ÷àåò âñå ïðåèìóùåñòâà ðåäàêöèè Enterprise Edition, îäíàêî îòëè÷àåòñÿ îò ïîñëåäíåé ñïîñîáîì ëèöåíçèðîâàíèÿ. Developer Edition ïîçèöèîíèðóåòñÿ íà ðûíîê êàê ñðåäà äëÿ ðàçðàáîòêè ñî âñåìè âûòåêàþùèìè èç ýòîãî öåíîâûìè ïîñëåäñòâèÿìè. Äàííàÿ âåðñèÿ ïðîãðàììíîãî ïðîäóêòà, òàê æå êàê è Standard Edition, äîñòóïíà â ðåäàêöèè äëÿ 64-ðàçðÿäíûõ âåðñèé àïïàðàòíîãî îáåñïå÷åíèÿ. · SQL Server 2005 Mobile Edition — ýòî íîâûé ïðîäóêò â ëèíåéêå ðåäàêöèé ñåðâåðà SQL. Âûïóñêîì äàííîé ðåäàêöèè êîìïàíèÿ Microsoft îòäàëà äàíü áóðíîìó ðàçâèòèþ ðûíêà ìîáèëüíûõ óñòðîéñòâ, êîòîðûé â äàííûé ìîìåíò òîëüêî íàáèðàåò îáîðîòû. Ñîçäàâàëàñü ðåäàêöèÿ Mobile Edition ãëàâíûì îáðàçîì ñ ïðèöåëîì íà âîçìîæíîñòè ðåïëèêàöèè äàííûõ èç ïåðâè÷íîãî êîìïüþòåðà ñ SQL Server 2005, ðàñïîëîæåííîãî íà îáû÷íîì ñåðâåðå (èëè êîìïüþòåðå), íà ìîáèëüíîå óñòðîéñòâî, îñíàùåííîå SQL Server 2005 Mobile Edition. Òàêèì îáðàçîì, íà ìîáèëüíîì óñòðîéñòâå âñåãäà ìîãóò áûòü äîñòóïíû êîðïîðàòèâíûå äàííûå. Ïîìèìî ýòîãî Mobile Edition îòëè÷àåòñÿ âîçìîæíîñòüþ ðåïëèêàöèè äàííûõ ìåæäó Microsoft SQL Server 2000 è Microsoft SQL Server 2005. 64-ðàçðÿäíûå ðåäàêöèè Microsoft SQL Server 2005 ïîääåðæèâàþòñÿ äëÿ ñëåäóþùèõ âåðñèé ñåðâåðà: · SQL Server 2005 Standard Edition; · SQL Server 2005 Enterprise Edition. Èñïîëüçîâàíèå 64-ðàçðÿäíîé àðõèòåêòóðû ïîçâîëÿåò äîñòè÷ü ðÿäà ïðåèìóùåñòâ â ðàáîòå ïðîãðàììíîãî îáåñïå÷åíèÿ. Èç ïðåèìóùåñòâ îáùåãî õàðàêòåðà ñòîèò âûäåëèòü ñëåäóþùèå: · óëó÷øåíèå ïðîöåññà êýøèðîâàíèÿ äàííûõ è êîìàíä â êýøå ïåðâîãî è âòîðîãî óðîâíÿ ïðîöåññîðà; · óâåëè÷åíèå ïðîèçâîäèòåëüíîñòè çà ñ÷åò ïàðàëëåëüíîãî âûïîëíåíèÿ êîìàíä (àêòèâíîå èñïîëüçîâàíèå òåõíîëîãèè HypherThreading); · óâåëè÷åíèå ïðîèçâîäèòåëüíîñòè çà ñ÷åò ìåæïðîöåññîðíîãî âçàèìîäåéñòâèÿ è èñïîëüçîâàíèÿ â ñèñòåìå íåñêîëüêèõ ïðîöåññîðîâ;
22
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
· óâåëè÷åíèå ñêîðîñòè ââîäà-âûâîäà çà ñ÷åò óâåëè÷åíèÿ øèðèíû ñèñòåìíîé øèíû; · óâåëè÷åíèå îáúåìà ïàìÿòè êîìïüþòåðà, äëÿ êîòîðîé äîïóñêàåòñÿ ïðÿìàÿ àäðåñàöèÿ. Âñå ïåðå÷èñëåííûå óëó÷øåíèÿ â ðàáîòå ñåðâåðà áóäóò îäèíàêîâî õîðîøî âëèÿòü íà âñå êîìïîíåíòû SQL Server 2005. Îäíàêî ñóùåñòâóåò, ïî êðàéíåé ìåðå, îäèí êîìïîíåíò, äëÿ êîòîðîãî ïåðåõîä íà 64-ðàçðÿäíóþ àðõèòåêòóðó ïðèâåäåò ê çíà÷èòåëüíîìó óâåëè÷åíèþ ïðîèçâîäèòåëüíîñòè è âîçìîæíîñòåé ðàáîòû. Ýòî ñåðâèñû àíàëèòèêè SQL Server 2005. ×òî êàñàåòñÿ ñåðâèñîâ àíàëèòèêè, òî óâåëè÷åíèå ïðîèçâîäèòåëüíîñòè â ýòîì ñëó÷àå áóäåò äîñòèãíóòî çà ñ÷åò ñëåäóþùèõ ôàêòîðîâ: · âîçìîæíîñòü çàãðóæàòü â ïàìÿòü êîìïüþòåðà áîëüøèå îáúåìû èíôîðìàöèè (OLAP-êóáû áîëüøåãî ðàçìåðà); · îáåñïå÷åíèå áîëüøåé ñêîðîñòè ïðîõîäà ïî îäíîìó èçìåðåíèþ êóáà; · ðåàëèçàöèÿ êýøèðîâàííûõ çàïðîñîâ, êîëè÷åñòâî è îáúåì êîòîðûõ çíà÷èòåëüíî óâåëè÷åíû â 64-ðàçðÿäíîé âåðñèè SQL Server; · êýøèðîâàíèå áîëüøèõ îáúåìîâ äàííûõ. Îïòèìèçèðîâàííûé äëÿ ðàáîòû íà 64-ðàçðÿäíûõ ïðîöåññîðàõ SQL Server ïîçâîëÿåò íå òîëüêî îáðàùàòüñÿ ê áîëüøèì îáúåìàì ïàìÿòè (â 32-ðàçðÿäíûõ ñèñòåìàõ ìàêñèìàëüíûé îáúåì ïàìÿòè îãðàíè÷åí çíà÷åíèåì 4 Ãáàéò), íî è ðåàëèçîâàòü òàêèå ñðåäñòâà, êàê ïóë è êýø, óâåëè÷èâ îáúåìû âíîñèìîé â íèõ èíôîðìàöèè è îäíîâðåìåííî óìåíüøèâ êîëè÷åñòâî êîìàíä äëÿ ðàáîòû ñ ïóëîì è êýøåì. Áëàãîäàðÿ ýòîìó ìîæíî íå òîëüêî óñêîðèòü ïðîöåññ îáðàáîòêè äàííûõ, íî è óâåëè÷èòü îáúåì äàííûõ, êîòîðûìè ìîãóò îïåðèðîâàòü ïðèëîæåíèÿ. Óñëîæíÿåò ïîëîæåíèå íà ðûíêå 64-ðàçðÿäíûõ ïðîãðàììíûõ ïðèëîæåíèé òî, ÷òî îíè îáÿçàíû óìåòü îïåðèðîâàòü íå òîëüêî 64-ðàçðÿäíûìè äàííûìè è êîìàíäàìè, íî è èìåòü âîçìîæíîñòü îáðàáàòûâàòü 32-ðàçðÿäíûå èíñòðóêöèè è õðàíèòü äàííûå òàêîé æå äëèíû. ×òî êàñàåòñÿ òàêèõ êëèåíò-ñåðâåðíûõ ïðîäóêòîâ, êàê Microsoft SQL Server, òî â äàííîì ñëó÷àå ñèòóàöèÿ óñëîæíÿåòñÿ òåì, ÷òî îáðàùåíèå ê 64-ðàçðÿäíîìó ñåðâåðó ìîæåò ïðîèñõîäèòü îò êëèåíòîâ, êîòîðûå óñòàíîâëåíû íà 32-ðàçðÿäíûõ êîìïüþòåðàõ. Ïðåäûäóùàÿ âåðñèÿ SQL Server ïîçâîëÿëà ðàáîòàòü â ñìåøàííîé ñðåäå (â êîòîðóþ âõîäÿò 32- è 64-ðàçðÿäíûå ñèñòåìû). Äàííàÿ âîçìîæíîñòü ðàñøèðåíà çà ñ÷åò ðåàëèçàöèè íåêîòîðûõ óòèëèò, êîòîðûå òåïåðü ìîæíî çàïóñêàòü íà 64-ðàçðÿäíûõ ñèñòåìàõ. Ñóùåñòâóþò ñëåäóþùèå êîìïîíåíòû è óòèëèòû äëÿ ðàáîòû â 64-ðàçðÿäíîé ñðåäå: · ÿäðî SQL Server 2005; · ñåðâèñû íîòèôèêàöèè, àíàëèòèêè (ñåðâåð è äèçàéíåð) è îò÷åòîâ; · êîìïîíåíòû äëÿ ðàáîòû ñ âåá-äàííûìè è ðåïëèêàöèè; · XPSTAR; · SDAC; · óòèëèòû äëÿ óïðàâëåíèÿ SQL Server 2005 (Management Studio).
1.1. Îáùèå õàðàêòåðèñòèêè SQL Server 2005
23
Òàêæå íåîáõîäèìî çàìåòèòü, ÷òî ðåäàêöèÿ SQL Server 2005 Express Edition òàêæå äîñòóïíà äëÿ çàïóñêà íà 64-ðàçðÿäíûõ ñèñòåìàõ. Ýòèì Microsoft äåìîíñòðèðóåò ïîâûøåííîå âíèìàíèå ê 64-ðàçðÿäíûì ñèñòåìàì â ñâîèõ ïðîãðàììíûõ ïðîäóêòàõ. ×òî êàñàåòñÿ âûõîäà íîâûõ ïðîäóêòîâ äëÿ ïðîãðàììèðîâàíèÿ â 64-ðàçðÿäíîé ñðåäå, òî íîâàÿ âåðñèÿ .NET Framework 64-bit Edition äîëæíà ðåøèòü ïîäîáíûå ïðîáëåìû. Òåïåðü ïðîöåäóðû, íàïèñàííûå â ýòîé ñðåäå, ìîãóò áûòü çàïóùåíû â ëþáîé ñèñòåìå (â òîì ÷èñëå è 64-ðàçðÿäíîé).
1.1.1. Êîìïîíåíòû SQL Server Âî âðåìÿ óñòàíîâêè SQL Server ìîæíî âûáðàòü, êàêèå êîìïîíåíòû ïðîãðàììíîãî ïðîäóêòà áóäóò óñòàíîâëåíû íà êîìïüþòåð. Äëÿ ýòîãî èñïîëüçóåòñÿ ýòàï óñòàíîâêè Feature Selection ìàñòåðà óñòàíîâêè Microsoft SQL Server. Ïî óìîë÷àíèþ íå óñòàíàâëèâàåòñÿ íè îäèí èç ñóùåñòâóþùèõ äîïîëíèòåëüíûõ êîìïîíåíòîâ. Ðàññìîòðèì áîëåå äåòàëüíî êàæäûé èç ñóùåñòâóþùèõ êîìïîíåíòîâ, äîñòóïíûõ äëÿ óñòàíîâêè (òàáë. 1.1). Òàáëèöà 1.1. Ïåðå÷åíü êîìïîíåíòîâ SQL Server è èõ îïèñàíèå Êîìïîíåíò
Îïèñàíèå
ßäðî áàçû äàííûõ
ßäðî áàçû äàííûõ ïðåäîñòàâëÿåò áàçîâóþ ôóíêöèîíàëüíîñòü äëÿ õðàíåíèÿ, ðåäàêòèðîâàíèÿ, îáðàáîòêè è áåçîïàñíîñòè äàííûõ, êîòîðûå ðàñïîëàãàþòñÿ â áàçå äàííûõ. Äàííûé êîìïîíåíò ïðåäîñòàâëÿåò ñëåäóþùóþ ôóíêöèîíàëüíîñòü: ðåïëèêàöèÿ äàííûõ, ïîëíîòåêñòîâûé ïîèñê, õðàíåíèå è ðàáîòà ñ ðàçëè÷íûìè òèïàìè äàííûõ SQL Server, îáåñïå÷åíèå äîñòàòî÷íîãî óðîâíÿ áåçîïàñíîñòè äëÿ õðàíåíèÿ äàííûõ, à òàêæå äðóãèå îñíîâíûå âîçìîæíîñòè SQL Server
Ñåðâèñû àíàëèçà
Ñåðâèñû àíàëèçà ñîäåðæàò íàáîð èíñòðóìåíòîâ äëÿ ñîçäàíèÿ è óïðàâëåíèÿ àíàëèòè÷åñêîé èíôîðìàöèåé, êîòîðàÿ èçâëå÷åíà èç äàííûõ SQL Server. Ñ èõ ïîìîùüþ ìîæíî ñîçäàâàòü àíàëèòè÷åñêèå ïðèëîæåíèÿ, ïîçâîëÿþùèå îïðåäåëÿòü ñêðûòûå çàêîíîìåðíîñòè â äàííûõ, à òàêæå ìîìåíòàëüíî ãåíåðèðîâàòü ñîîòâåòñòâóþùèå îò÷åòû, ñîäåðæàùèå îïèñàíèå ñêðûòûõ è ÿâíûõ òåíäåíöèé. Âìåñòå ñ ñåðâèñàìè àíàëèçà íà êîìïüþòåð óñòàíàâëèâàþòñÿ ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ. Ýòîò êîìïîíåíò ïîçâîëÿåò âûïîëíÿòü ïðåîáðàçîâàíèå äàííûõ ìåæäó ôîðìàòàìè äëÿ èõ áîëåå óäîáíîãî ïðåäñòàâëåíèÿ êîíå÷íîìó ïîëüçîâàòåëþ, ïîñêîëüêó çà ñ÷åò èíòåãðàöèè ñåðâèñîâ àíàëèçà â ðàçëè÷íûå ïðîãðàììíûå ïàêåòû äàííûå ìîãóò îòîáðàæàòüñÿ â ðàçëè÷íûõ ïðîãðàììíûõ ñðåäàõ êëàññà CRM è ERP
Ñåðâèñû îò÷åòîâ
Ñåðâèñû îò÷åòîâ âêëþ÷àþò êàê ñåðâåðíûå, òàê è êëèåíòñêèå êîìïîíåíòû äëÿ ñîçäàíèÿ, óïðàâëåíèÿ è ðàçâåðòûâàíèÿ ãðàôè÷åñêèõ è òàáëè÷íûõ îò÷åòîâ, à òàêæå îò÷åòîâ, ôîðìàò êîòîðûõ çàäàí ïîëüçîâàòåëåì. Áîëåå òîãî, ñåðâèñû îò÷åòîâ èìåþò ìåõàíèçìû äëÿ ñîçäàíèÿ è ðàçâåðòûâàíèÿ ïðèëîæåíèé, êîòîðûå èñïîëüçóþò ñåðâèñû îò÷åòîâ. Ïîäîáíûå ïðèëîæåíèÿ íàõîäÿò ñâîå ïðèìåíåíèå íà êîìïüþòåðàõ ñðåäíåãî è âûñøåãî ìåíåäæìåíòà äëÿ ïîääåðæêè ïðèíÿòèÿ ðåøåíèé. Äëÿ óñòàíîâêè äàííûõ ñåðâèñîâ òðåáóåòñÿ íàëè÷èå íà êîìïüþòåðå ðàíåå óñòàíîâëåííîãî IIS âåðñèè 5.0 èëè âûøå. Äëÿ ðàáîòû ñ äèçàéíåðîì îò÷åòîâ òðåáóåòñÿ Internet Explorer 6.0 SP1 èëè áîëåå íîâîé âåðñèè ïðîäîëæåíèå
È
24
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
Òàáëèöà 1.1 (ïðîäîëæåíèå) Êîìïîíåíò
Îïèñàíèå
Ñåðâèñû íîòèôèêàöèè
Ïëàòôîðìà äëÿ ñîçäàíèÿ, óïðàâëåíèÿ è ðàçâåðòûâàíèÿ ïðèëîæåíèé, êîòîðûå èñïîëüçóþòñÿ äëÿ îòïðàâêè ïåðñîíàëèçèðîâàííûõ ñîîáùåíèé, ñîäåðæàùèõ ðàçíîðîäíóþ èíôîðìàöèþ èëè äàííûå. Èíôîðìàöèÿ èëè äàííûå ìîãóò áûòü ðàçîñëàíû â ëþáîì âèäå, à ïîäïèñ÷èêè (ïîòðåáèòåëè èíôîðìàöèè è äàííûõ) ìîãóò ïîëó÷àòü ñîîáùåíèÿ, èñïîëüçóÿ óñòðîéñòâà ïðàêòè÷åñêè ëþáîãî òèïà
Ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ
Íàáîð ãðàôè÷åñêèõ êîìïîíåíòîâ è ïðîãðàììíûõ îáúåêòîâ äëÿ êîïèðîâàíèÿ, ïåðåìåùåíèÿ è ïðåîáðàçîâàíèÿ äàííûõ èç îäíîãî ôîðìàòà â äðóãîé
Êîìïîíåíòû âçàèìîäåéñòâèÿ
Âìåñòå ñ SQL Server íà êîìïüþòåð óñòàíàâëèâàþòñÿ êîìïîíåíòû äëÿ ïîäêëþ÷åíèÿ ê áàçå äàííûõ. Ê äàííûì êîìïîíåíòàì îòíîñÿòñÿ ODBC, OLE DB, MDAC, à òàêæå íàáîð äðóãèõ áèáëèîòåê è ïðîâàéäåðîâ äàííûõ
SQL Server Management Studio
Äàííûé èíñòðóìåíò õîðîøî çíàêîì àäìèíèñòðàòîðàì è ðàçðàáîò÷èêàì ñèñòåì íà îñíîâå SQL Server. Îí ïîçâîëÿåò ñîçäàâàòü çàïðîñû, âûïîëíÿòü èõ â íåîáõîäèìîé ïîñëåäîâàòåëüíîñòè, à òàêæå îòëàæèâàòü ñ èñïîëüçîâàíèåì ñðåäñòâ SQL Server Management Studio
Business Intelligence Development Studio
Äàííûé èíñòðóìåíò èíòåãðèðîâàí ñ òàêèìè êîìïîíåíòàìè SQL Server, êàê ñåðâèñû àíàëèòèêè è ïðåîáðàçîâàíèÿ äàííûõ. Îí ïîçâîëÿåò ñîçäàâàòü, âíåäðÿòü è îòëàæèâàòü ïðèëîæåíèÿ àíàëèçà äàííûõ
Database Tuning Advisor
Ïðèëîæåíèå, ñîçäàííîå èñêëþ÷èòåëüíî äëÿ íàñòðîéêè ïðîèçâîäèòåëüíîñòè SQL Server. Îíî ïîçâîëÿåò áûñòðî è áåç îñîáûõ óñèëèé íàñòðàèâàòü èíäåêñû áàçû äàííûõ, ñîñòàâëÿòü îïòèìèçèðîâàííûå çàïðîñû, à ïðè íåîáõîäèìîñòè è ïðåäñòàâëåíèÿ äàííûõ äëÿ áûñòðîãî ïîèñêà íåîáõîäèìûõ äàííûõ
SQL Profiler
Ñðåäñòâî äëÿ ïðîñìîòðà ïðîèçâîäèòåëüíîñòè è ìîíèòîðèíãà çàãðóçêè òàêèõ êîìïîíåíòîâ SQL Server, êàê ÿäðà ñèñòåìû è ñåðâèñîâ àíàëèòèêè. Èíòåðôåéñ SQL Profiler èìååò íàáîð ñðåäñòâ äëÿ ãðàôè÷åñêîãî îòîáðàæåíèÿ èíôîðìàöèè î ðàáîòå äàííûõ êîìïîíåíòîâ SQL Server
Íàáîð ññûëîê íà ìàòåðèàëû äëÿ ðàçðàáîò÷èêîâ
Ñîäåðæèò èíôîðìàöèþ ñî ññûëêàìè íà ìàòåðèàëû äëÿ ðàçðàáîò÷èêîâ SQL Server
Ïðèìåðû
Âìåñòå ñ SQL Server ìîãóò áûòü óñòàíîâëåíû ïðèìåðû äëÿ ðàçðàáîò÷èêîâ, êîòîðûå âêëþ÷àþò âñòàâêè êîäà äëÿ ïðèëîæåíèé àíàëèòèêè, îò÷åòîâ, ïðåîáðàçîâàíèÿ äàííûõ è äðóãèõ êîìïîíåíòîâ ñèñòåìû
Êîíòåêñòíàÿ ñïðàâêà
Âìåñòå ñ SQL Server óñòàíàâëèâàåòñÿ íîâàÿ ñïðàâî÷íàÿ ñèñòåìà, ñîäåðæàùàÿ íàáîð ññûëîê è àâòîìàòè÷åñêè çàãðóæàåìûõ ìàòåðèàëîâ ñ ñàéòà Microsoft. Äàííûé ìàòåðèàë ïðèçâàí ïîìî÷ü ðàçðàáîò÷èêàì áûñòðåå îâëàäåòü íàâûêàìè ïðîãðàììèðîâàíèÿ ïîä SQL Server
Òàêæå íóæíî îáðàòèòü âíèìàíèå íà òî, ÷òî íåêîòîðûå ïðåèìóùåñòâà è ôóíêöèè SQL Server ïîñëå óñòàíîâêè îòêëþ÷åíû ïî óìîë÷àíèþ. ×àùå âñåãî ýòî ñäåëàíî â öåëÿõ ïîääåðæêè áåçîïàñíîñòè ñèñòåìû. Ïî óìîë÷àíèþ îòêëþ÷åíû ñëåäóþùèå êîìïîíåíòû: · SQLiMail; · SQLMail; · Xp_Web; · àãåíò SQL Server;
1.1. Îáùèå õàðàêòåðèñòèêè SQL Server 2005
25
· áðàóçåð SQL; · áðîêåð ñåðâèñîâ; · ìåõàíèçì çåðêàëèðîâàíèÿ áàç äàííûõ; · îòëàäêà ïðèëîæåíèé; · ïîëíîòåêñòîâûé ïîèñê; · ðåïëèêàöèÿ; · ñåðâèñû àíàëèòèêè; · ñåðâèñû íîòèôèêàöèè; · ñåðâèñû îò÷åòîâ; · ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ; · ñòàòèñòèêà èíäåêñèðîâàíèÿ. Íà ðèñ. 1.1 ïîêàçàíî îêíî ìàñòåðà óñòàíîâêè SQL Server 2005, â êîòîðîì ïðåäëàãàåòñÿ âûáîð êîìïîíåíòîâ äëÿ óñòàíîâêè.
Ðèñ. 1.1. Âûáîð êîìïîíåíòîâ äëÿ óñòàíîâêè SQL Server 2005
1.1.2. Ñåðâèñû Íà âñåõ áåç èñêëþ÷åíèÿ îïåðàöèîííûõ ñèñòåìàõ, â êîòîðûõ ïîääåðæèâàåòñÿ SQL Server 2005, ïîñëå óñòàíîâêè çàïóñêàþòñÿ ñåðâèñû (äëÿ Microsoft SQL Server è àãåíòà SQL Server).  òàáë. 1.2 îïèñàí íàáîð ñåðâèñîâ, êîòîðûå âõîäÿò â ñîñòàâ SQL Server.
26
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
Òàáëèöà 1.2. Ñåðâèñû Microsoft SQL Server 2005 è èõ îïèñàíèå Èìÿ
Èìÿ ñåðâèñà (ýêçåìïëÿð ïî óìîë÷àíèþ)
Èìÿ ñåðâèñà (èìåíîâàííûé ýêçåìïëÿð)
Îïèñàíèå
SQL Server (MSSQLSERVER)
MSSQLSERVER
MSSQL$ InstanceName
ßäðî Microsoft SQL Server 2005
SQL Server Agent (MSSQLSERVER)
SQLSERVERAGENT
SQLAgent$ InstanceName
Àãåíò, êîòîðûé îòñëåæèâàåò ðàáîòó SQL Server. Èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ ðàáîò ïî ðàñïèñàíèþ, ìîíèòîðèíãà ðàáîòû ñåðâåðà è àâòîìàòèçàöèè äðóãèõ çàäà÷ àäìèíèñòðèðîâàíèÿ
Analysis Services (MSSQLSERVER)
MSSQLServerOLAPService
MSOLAP$ InstanceName
Ñåðâèñû àíàëèòèêè Microsoft SQL Server 2005
ReportServer$ InstanceName
Ñåðâèñû îò÷åòîâ Microsoft SQL Server 2005
MSFTESQL$ instanceName
ßäðî ñèñòåìû ïîëíîòåêñòîâîãî ïîèñêà Microsoft SQL Server 2005
Microsoft Reporting ReportServer Services Microsoft FullText Engine for SQL (MSFTESQL)
MSFTESQL
1.1.3. Ó÷åòíûå çàïèñè Microsoft SQL Server èìååò ðÿä òðåáîâàíèé ê ñèñòåìíûì ó÷åíûì çàïèñÿì. Äëÿ çàïóñêà ñåðâèñîâ SQL Server è âûïîëíåíèÿ àäìèíèñòðàòèâíûõ ðàáîò íåîáõîäèìî, ÷òîáû â îòíîøåíèè ó÷åòíûõ çàïèñåé âûïîëíÿëèñü ñëåäóþùèå óñëîâèÿ: · ïîëüçîâàòåëü ìîã âõîäèòü â ñèñòåìó â êà÷åñòâå ñåðâèñà; · ïîëüçîâàòåëü èìåë äîñòóï äëÿ ðåäàêòèðîâàíèÿ ôàéëîâ ñ ðàñøèðåíèÿìè .ldf, .mdf è .ndf; · ïîëüçîâàòåëü èìåë äîñòóï äëÿ ðåäàêòèðîâàíèÿ äîìàøíåé äèðåêòîðèè SQL Server (C:\Program Files\Microsoft SQL Server\MSSQL); · ïîëüçîâàòåëü èìåë äîñòóï äëÿ ðåäàêòèðîâàíèÿ ñëåäóþùèõ êëþ÷åé ðååñòðà: · HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ Perflib; · HKEY_LOCAL_MACHINE\Software\Microsoft\MSSQLServer (äëÿ ýêçåìïëÿðà ïî óìîë÷àíèþ); · HKEY_LOCAL_MACHINE\System\CurrentControlset\Services\MSSQLServer (äëÿ ýêçåìïëÿðà ïî óìîë÷àíèþ); · HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server (äëÿ èìåíîâàííîãî ýêçåìïëÿðà); · HKEY_LOCAL_MACHINE\System\CurrentControlset\Services\MSSQL$Instancename (äëÿ èìåíîâàííîãî ýêçåìïëÿðà); · ïîëüçîâàòåëü èìåë ïðàâà íà ðåäàêòèðîâàíèå êëþ÷åé ðååñòðà äëÿ ñëåäóþùèõ ñåðâèñîâ: · SQLAgent$InstanceName;
1.1. Îáùèå õàðàêòåðèñòèêè SQL Server 2005
27
· MSSearch; · MSDTC; · äëÿ óñòàíîâêè ñåðâèñîâ ïîëüçîâàòåëü äîëæåí èìåòü ïðèâèëåãèè èëè âõîäèòü â ñîñòàâ ãðóïï ïîëüçîâàòåëåé, êàê ïîêàçàíî â òàáë. 1.3. Òàáëèöà 1.3. Íåîáõîäèìûå äåéñòâèÿ è ïðàâà äîñòóïà äëÿ ïîëüçîâàòåëåé, ðàáîòàþùèõ ñ ñåðâèñàìè Ñåðâèñ
Ôóíêöèîíàëüíîñòü
Ïðàâà äîñòóïà
SQL Server (MSSQLSERVER)
Âûïîëíÿòü çàïèñü â îáëàñòü ïàìÿòè ñ ïîìîùüþ ôóíêöèè xp_sendmail
Ðàçðåøåíèå íà çàïèñü
SQL Server (MSSQLSERVER)
Âûïîëíÿòü çàïóñê xp_cmdshell äëÿ ó÷åòíûõ çàïèñåé, êîòîðûå îòëè÷íû îò àäìèíèñòðàòîðà SQL Server
Äåéñòâîâàòü â êà÷åñòâå ÷àñòè îïåðàöèîííîé ñèñòåìû, à òàêæå çàïóñêàòü ïðîöåññû íà ñèñòåìíîì óðîâíå
SQL Server (MSSQLSERVER)
Äîáàâëÿòü è óäàëÿòü îáúåêòû SQL Server â Active Directory Windows 2000
Äîëæåí âõîäèòü â ñîñòàâ îäíîé èç ëîêàëüíûõ ãðóïï ïîëüçîâàòåëåé: Power Users èëè Administrators
SQL Server Agent (MSSQLSERVER)
Ñîçäàâàòü çàäàíèÿ, âûïîëíÿåìûå ïî ðàñ- Äîëæåí âõîäèòü â ñîñòàâ ëîêàëüïèñàíèþ, CmdExec èëè ActiveScript îò èìå- íîé ãðóïïû Administrators íè ïîëüçîâàòåëÿ, â îáùåì ñëó÷àå îòëè÷íîãî îò èìåíè ñèñòåìíîãî àäìèíèñòðàòîðà. Èìåòü âîçìîæíîñòü àâòîìàòè÷åñêîãî ïåðåçàïóñêà ñåðâåðà
1.1.4. IIS è SQL Server 2005  íåêîòîðûõ îðãàíèçàöèÿõ âîçíèêàåò íåîáõîäèìîñòü óñòàíîâêè Microsoft SQL Server íà êîìïüþòåðû ñ ïðåäóñòàíîâëåííûì èíòåðíåò-ñåðâåðîì.  òîì ñëó÷àå, åñëè êëèåíò ñåðâåðà Microsoft SQL (èëè îòäåëüíûå êîìïîíåíòû äëÿ óïðàâëåíèÿ èëè ðàáîòû ñ ñåðâåðîì) óñòàíàâëèâàåòñÿ íà êîìïüþòåð ñ çàðàíåå ïðåäóñòàíîâëåííûì Internet Information Services (IIS), îò àäìèíèñòðàòîðà ïîòðåáóåòñÿ çíàíèå íåêîòîðûõ íþàíñîâ óñòàíîâêè. Êëèåíò ñåðâåðà ìîæåò âêëþ÷àòü êîìïîíåíòû ïîäêëþ÷åíèÿ ê SQL Server, êîòîðûå èñïîëüçóþòñÿ ïîëüçîâàòåëüñêèìè ïðèëîæåíèÿìè äëÿ ðàáîòû ñ áàçîé äàííûõ, óòèëèòû äëÿ êîíôèãóðèðîâàíèÿ âèðòóàëüíûõ äèðåêòîðèé äëÿ äîñòóïà ê SQL ÷åðåç ññûëêè, à òàêæå äðóãèå êîìïîíåíòû. Ïîñëå óñòàíîâêè êëèåíòñêîãî ïðèëîæåíèÿ SQL Server íà êîìïüþòåð ñ IIS àäìèíèñòðàòîð äîëæåí íàñòðîèòü âèðòóàëüíóþ äèðåêòîðèþ äëÿ äîñòóïà ê ñåðâåðó ñ èñïîëüçîâàíèåì åãî URL (Universal Resource Locator). Äëÿ íàñòðîéêè âèðòóàëüíîé äèðåêòîðèè èñïîëüçóåòñÿ ñïåöèàëüíûé èíñòðóìåíò IIS Virtual Directory Management. Ñ ïîìîùüþ äàííîãî èíñòðóìåíòà íàñòðîèòü ïàðàìåòðû âèðòóàëüíîé äèðåêòîðèè ìîæíî äâóìÿ ñïîñîáàìè: · ïðîãðàììíî, èñïîëüçóÿ îáúåêòíóþ ìîäåëü è IIS Virtual Directory Management; · ãðàôè÷åñêè (òàêæå ñ èñïîëüçîâàíèåì óòèëèòû IIS Virtual Directory Management).
28
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
Íàñòðîèâ âèðòóàëüíóþ äèðåêòîðèþ IIS, ìîæíî áóäåò ïîëó÷èòü äîñòóï ê äàííûì ñåðâåðà SQL ÷åðåç URL. Ïðè ýòîì ññûëêè ìîãóò áûòü íàñòðîåíû äëÿ âûïîëíåíèÿ íåñêîëüêèõ äåéñòâèé â ñèñòåìå: · ïðÿìîé äîñòóï ê îáúåêòàì áàçû äàííûõ (òàêèì, êàê òàáëèöû).  ýòîì ñëó÷àå URL âêëþ÷àåò âèðòóàëüíîå èìÿ òèïà dbobject; · âûïîëíåíèå çàïðîñîâ òèïà XPath. Âûïîëíåíèå äàííûõ çàïðîñîâ ïðîèñõîäèò äëÿ ñõåìû, èìÿ êîòîðîé çàäàåòñÿ âìåñòå ñ ââîäîì URL (èíûìè ñëîâàìè, èìÿ ñõåìû ÿâëÿåòñÿ ÷àñòüþ URL); · ïðÿìîãî äîñòóïà ê WDSL-ôàéëó (Web Services Description Language). Äàííûé ôàéë ñîäåðæèò îïèñàíèå èñïîëüçóåìîãî ñåðâèñà è ïàðàìåòðû åãî âûçîâà.  òàêîì ñëó÷àå URL ñîäåðæèò âèðòóàëüíîå èìÿ òèïà SOAP.  òàêîì ñëó÷àå, èñïîëüçóÿ URL, ïîëüçîâàòåëüñêîå ïðèëîæåíèå ìîæåò ñíà÷àëà âûïîëíèòü ÷òåíèå WDSL-ôàéëà, à çàòåì îòïðàâèòü SOAP-çàïðîñ ê Microsoft SQLXML 3.0; · âûïîëíåíèå øàáëîíîâ. Øàáëîí ïðåäñòàâëÿåò ñîáîé XML-äîêóìåíò, êîòîðûé ñîäåðæèò îäèí èëè íåñêîëüêî SQL-çàïðîñîâ. Ïîñëå òîãî êàê ïîëüçîâàòåëü óêàæåò URL ïîäîáíîãî øàáëîíà, çàïðîñ, ñîäåðæàùèéñÿ â íåì, ìîìåíòàëüíî âûïîëíÿåòñÿ. Ñàì çàïðîñ ìîæåò áûòü âêëþ÷åí â URL, îäíàêî ýòî íå ðåêîìåíäóåòñÿ äåëàòü â öåëÿõ áåçîïàñíîñòè.
1.1.5. 32- è 64-ðàçðÿäíûå âåðñèè SQL Server 2005  32-ðàçðÿäíûõ ñèñòåìàõ ñóùåñòâóåò ôèçè÷åñêîå îãðàíè÷åíèå íà àäðåñàöèþ ïàìÿòè. Âñåãî îïåðàöèîííàÿ ñèñòåìà ìîæåò àäðåñîâàòü îêîëî 4 Ãáàéò (232 áàéò) îïåðàòèâíîé ïàìÿòè. Ïîìèìî ôèçè÷åñêîãî îãðàíè÷åíèÿ ñóùåñòâóåò îãðàíè÷åíèå íà óðîâíå îïåðàöèîííîé ñèñòåìû. Ýòî îçíà÷àåò, ÷òî ìàêñèìàëüíîå êîëè÷åñòâî îïåðàòèâíîé ïàìÿòè áóäåò ðàçäåëåíî ìåæäó îïåðàöèîííîé ñèñòåìîé è ïðèëîæåíèÿìè, êîòîðûå â íåé çàïóùåíû. Äëÿ íóæä Windows çàðåçåðâèðîâàíî îêîëî 2 Ãáàéò, îñòàëüíàÿ ÷àñòü ìîæåò èñïîëüçîâàòüñÿ äëÿ íóæä çàïóùåííûõ ïðèëîæåíèé. Åñëè íà ïîäîáíîì ñåðâåðå çàïóùåí îäèí ýêçåìïëÿð SQL Server, òî âåñü âûäåëåííûé äëÿ ïðèëîæåíèé îáúåì ïàìÿòè áóäåò îòâåäåí äëÿ åãî íóæä.  ñëó÷àå çàïóñêà íà êîìïüþòåðå íåñêîëüêèõ ýêçåìïëÿðîâ îíè áóäóò êîíêóðåíòíî èñïîëüçîâàòü äàííûé ðåñóðñ. Îäíàêî ñ èñïîëüçîâàíèåì Advanced Windows Extensions (AWE) îáúåì äîñòóïíîé äëÿ SQL Server 2005 îïåðàòèâíîé ïàìÿòè ìîæåò áûòü óâåëè÷åí äî 32 Ãáàéò.  64-ðàçðÿäíûõ ñèñòåìàõ ïîäîáíûå îãðàíè÷åíèÿ âûíåñåíû äàëåêî çà ðàìêè âîçìîæíîñòåé ñîâðåìåííûõ òåõíîëîãèé. 64-ðàçðÿäíûå ñèñòåìû ìîãóò àäðåñîâàòü áîëåå 32 Òáàéò îïåðàòèâíîé ïàìÿòè. ×òî êàñàåòñÿ SQL Server 2005, òî ñïåöèàëèñòû Microsoft âûïîëíèëè òåñòèðîâàíèå 64-ðàçðÿäíîé ðåäàêöèè ñåðâåðà, è îêàçàëîñü, ÷òî îí ïðåêðàñíî ðàáîòàåò íà ñèñòåìå, â êîòîðîé èìåëîñü 512 Ãáàéò îïåðàòèâíîé ïàìÿòè (0,5 Òáàéò!).  êà÷åñòâå îïåðàöèîííîé ñèñòåìû èñïîëüçîâàëñÿ Windows Server 2003. Ñ âûõîäîì îáíîâëåíèé äëÿ Windows Server 2003 ïëàíèðóåòñÿ âûïîëíèòü òåñòèðîâàíèå ðàáîòû SQL Server 2005 íà ñèñòåìå ñ îáúåìàìè îïåðàòèâíîé ïàìÿòè áîëåå 1 Òáàéò.
1.2. Óñòàíîâêà MS SQL Server 2005
29
1.2. Óñòàíîâêà MS SQL Server 2005 ßäðî SQL Server — ýòî îñíîâíîé ñåðâèñ Microsoft SQL Server, êîòîðûé ïîçâîëÿåò âûïîëíÿòü îáðàáîòêó, õðàíåíèå è îáåñïå÷åíèå áåçîïàñíîñòè äàííûõ. ßäðî SQL Server êîíòðîëèðóåò äîñòóï ê áàçå äàííûõ, îáðàáîòêó òðàíçàêöèé, âûïîëíåíèå õðàíèìûõ è ïîëüçîâàòåëüñêèõ ïðîöåäóð, óïðàâëåíèå òèïàìè äàííûõ è îòñëåæèâàíèå çàïóùåííûõ ñåðâèñîâ. ßäðî SQL Server ïîçâîëÿåò ïîääåðæèâàòü íåñêîëüêî ýêçåìïëÿðîâ áàçû äàííûõ íà îòäåëüíîì ñåðâåðå. Óñòàíîâêà îòäåëüíî âçÿòîãî ýêçåìïëÿðà SQL Server âûïîëíÿåòñÿ ïî îïðåäåëåííîìó ñöåíàðèþ. Äëÿ òîãî ÷òîáû íà÷àòü óñòàíîâêó ýêçåìïëÿðà áàçû äàííûõ, çàïóñòèòå ôàéë splash.hta, ðàñïîëîæåííûé íà óñòàíîâî÷íîì äèñêå.  ðåçóëüòàòå ýòîãî âûïîëíèòñÿ çàïóñê ìàñòåðà óñòàíîâêè. Äëÿ óñòàíîâêè SQL Server äîñòóïåí òàêæå îáû÷íûé ñïîñîá — çàïóñê ôàéëà setup.exe èç êîìàíäíîé ñòðîêè. Äëÿ îïðåäåëåíèÿ äîïîëíèòåëüíûõ ïàðàìåòðîâ SQL Server âî âðåìÿ ïîäîáíîé óñòàíîâêè ìîæíî îòðåäàêòèðîâàòü ïàðàìåòðû ini-ôàéëà. Øàáëîí ýòîãî ini-ôàéëà (Template.ini) òàêæå ñîäåðæèòñÿ íà èíñòàëëÿöèîííîì äèñêå SQL Server 2005. Äàííûé ïóòü óñòàíîâêè (÷åðåç çàïóñê setup.exe èç êîìàíäíîé ñòðîêè) áîëåå èíòåðåñåí äëÿ àäìèíèñòðàòîðîâ, ïîñêîëüêó ïîçâîëÿåò ñîõðàíèòü ïàðàìåòðû óñòàíîâêè îò îäíîé èíñòàëëÿöèè ê äðóãîé. Ýòî îáû÷íî óñêîðÿåò ïðîöåññ óñòàíîâêè SQL Server. Èíñòàëëÿöèÿ SQL Server 2005 ìîæåò âûïîëíÿòüñÿ êàê ëîêàëüíî, òàê è óäàëåííî. Äëÿ òîãî ÷òîáû âûïîëíÿòü óñòàíîâêó ÿäðà SQL Server ëîêàëüíî, íåîáõîäèìî âõîäèòü â ñîñòàâ ãðóïïû àäìèíèñòðàòîðîâ èëè èìåòü ïðèâèëåãèè àäìèíèñòðàòîðà. Äëÿ óäàëåííîé óñòàíîâêè SQL Server, ïîìèìî ïðèâèëåãèé àäìèíèñòðàòîðà íà óäàëåííîì êîìïüþòåðå, ó÷åòíàÿ çàïèñü äîëæíà èìåòü ïðèâèëåãèè ëîêàëüíîãî àäìèíèñòðàòîðà (â ýòîì ñëó÷àå ëó÷øå âñåãî âîñïîëüçîâàòüñÿ äîìåííîé ó÷åòíîé çàïèñüþ, êîòîðàÿ èìååò äîñòóï íà çàïèñü è âûïîëíåíèå ïðîöåäóð â îïðåäåëåííîé ñåòåâîé ïàïêå). Åñëè òåêóùàÿ ó÷åòíàÿ çàïèñü íå èìååò ïðèâèëåãèé àäìèíèñòðàòîðà íà óäàëåííîì êîìïüþòåðå, òî âû ìîæåòå âîñïîëüçîâàòüñÿ ïàðàìåòðîì runas äëÿ çàïóñêà ôàéëà setup.exe îò èìåíè äðóãîãî ïîëüçîâàòåëÿ. Íàïðèìåð, äëÿ çàïóñêà ôàéëà e:\setup.exe îò èìåíè ïîëüçîâàòåëÿ Petrenko, âõîäÿùåãî â ñîñòàâ äîìåíà MyCompany, âîñïîëüçóéòåñü ñëåäóþùåé êîìàíäîé: Runas /user:MyCompany\Petrenko "e:\setup.exe"
Ïîñëå âûïîëíåíèÿ äàííîé êîìàíäû â îòêðûâøåìñÿ îêíå ââåäèòå ïàðîëü ïîëüçîâàòåëÿ Petrenko äëÿ âûïîëíåíèÿ àóòåíòèôèêàöèè.
1.2.1. Êîìïîíåíòû ÿäðà SQL Server SQL Server 2005 ïîääåðæèâàåò äî 50 ýêçåìïëÿðîâ íà îòäåëüíî âçÿòîì ñåðâåðå. Äàííûå ýêçåìïëÿðû ìîãóò âêëþ÷àòü â ñâîé ñîñòàâ òå èëè èíûå êîìïîíåíòû ÿäðà SQL Server. Äëÿ óñòàíîâêè êîìïîíåíòîâ â ìàñòåðå óñòàíîâêè SQL Server ñóùåñòâóåò îòäåëüíàÿ ñòðàíèöà Components, íà êîòîðîé ïîëüçîâàòåëü ìîæåò âûáðàòü äîïîëíèòåëüíûå êîìïîíåíòû èç ñïèñêà. Êîìïîíåíòû, êîòîðûå óñòàíàâëèâàþòñÿ ïî óìîë÷àíèþ: · ÿäðî SQL Server; · ìåõàíèçì ðåïëèêàöèè; · ìåõàíèçì ïîëíîòåêñòîâîãî ïîèñêà.
30
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
Äîïîëíèòåëüíûå êîìïîíåíòû, êîòîðûå ìîãóò áûòü óñòàíîâëåíû ïî òðåáîâàíèþ ïîëüçîâàòåëÿ: · êîìïîíåíòû äëÿ âçàèìîäåéñòâèÿ; · ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ; · SQL Server Management Studio; · ñðåäñòâà óïðàâëåíèÿ; · ñðåäñòâà ïðîãðàììèðîâàíèÿ; · äîêóìåíòàöèÿ.
1.2.2. Âûïîëíåíèå óñëîâèé ïåðåä óñòàíîâêîé SQL Server 2005 Ïåðåä íà÷àëîì óñòàíîâêè SQL Server 2005 íåîáõîäèìî âûïîëíèòü ñëåäóþùèå óñëîâèÿ: · óáåäèòüñÿ â òîì, ÷òî êîìïüþòåð ñîîòâåòñòâóåò ñèñòåìíûì òðåáîâàíèÿì â îòíîøåíèè àïïàðàòíîãî îáåñïå÷åíèÿ; · âûïîëíèòü ðåçåðâíîå êîïèðîâàíèå äëÿ ýêçåìïëÿðîâ áàç äàííûõ, êîòîðûå çàïóùåíû íà êîìïüþòåðå, ïðåäíàçíà÷åííîì äëÿ óñòàíîâêè Microsoft SQL Server 2005; · îòêëþ÷èòü ñðåäñòâà âèðóñíîé çàùèòû; · ñîçäàòü ïîëüçîâàòåëÿ, âõîäÿùåãî â ñîñòàâ ãðóïïû Administrators. Âîéòè â ñèñòåìó ïîä èìåíåì ýòîãî ïîëüçîâàòåëÿ; · ñîçäàòü îäíó èëè áîëåå äîìåííûõ ó÷åòíûõ çàïèñåé â òîì ñëó÷àå, åñëè óñòàíîâêà SQL Server 2005 âûïîëíÿåòñÿ íà êîìïüþòåð ñ îïåðàöèîííîé ñèñòåìîé Windows 2000 èëè Windows XP (äëÿ íàñòðîéêè âçàèìîäåéñòâèÿ SQL Server ñ äðóãèìè êîìïüþòåðàìè); · îòêëþ÷èòü âñå ñåðâèñû, êîòîðûå çàâèñÿò îò SQL Server (òàêèå, êàê IIS è ODBC); · îòêëþ÷èòü ïðîñìîòð ñîáûòèé (eventvwr â êîíñîëè óïðàâëåíèÿ) è ïðîñìîòð ðååñòðà (regedit32.exe è regedit32.exe); · äåàêòèâèðîâàòü NetBIOS íà âñåõ ñåòåâûõ êàðòàõ ïåðåä óñòàíîâêîé SQL Server â êëàñòåðíîé êîíôèãóðàöèè.
1.2.3. Óäàëåííàÿ óñòàíîâêà Äëÿ òîãî ÷òîáû ïðèñòóïèòü ê óäàëåííîìó çàïóñêó ïðîãðàììû óñòàíîâêè SQL Server 2005, íåîáõîäèìî îïðåäåëèòü ðÿä ïàðàìåòðîâ äëÿ óäàëåííîé óñòàíîâêè: · TARGETCOMPUTER — èìÿ óäàëåííîãî êîìïüþòåðà; · ADMINACCOUNT — ó÷åòíàÿ çàïèñü àäìèíèñòðàòîðà íà óäàëåííîì êîìïüþòåðå; · ADMINPASSWORD — ïàðîëü ó÷åòíîé çàïèñè àäìèíèñòðàòîðà íà óäàëåííîì êîìïüþòåðå.
1.2. Óñòàíîâêà MS SQL Server 2005
31
Äëÿ óñòàíîâêè âñåõ êîìïîíåíòîâ SQL Server ìîæíî âîñïîëüçîâàòüñÿ êëþ÷îì ADDLOCAL=ALL. Äëÿ ýòîãî åãî ìîæíî âíåñòè â ini-ôàéë (template.ini).
Ïðèìåðîì çàïóñêà SQL Server èç êîìàíäíîé ñòðîêè ìîæåò ñëóæèòü ñëåäóþùèé: Runas /user:MyCompany\Petrenko "e:\setup.exe /settings e:\template.ini /qb"
 ñëó÷àå âûïîëíåíèÿ äàííîé êîìàíäû óñòàíîâêà âûïîëíÿåòñÿ îò èìåíè ó÷åòíîé çàïèñè Petrenko, êîòîðàÿ èìååò ïðèâèëåãèè àäìèíèñòðàòîðà íà óäàëåííîì êîìïüþòåðå. Ó÷åòíàÿ çàïèñü âõîäèò â ñîñòàâ äîìåíà MyCompany. Êëþ÷ /settings çàäàåò ñ÷èòûâàíèå ïàðàìåòðîâ óñòàíîâêè èç ini-ôàéëà, êîòîðûé ðàñïîëîæåí ïî àäðåñó e:\template.ini. Êëþ÷ /qb çàäàåò îòîáðàæåíèå äèàëîãîâûõ îêîí, êîòîðûå ïîêàçûâàþò õîä ïðîöåññà óñòàíîâêè SQL Server 2005.  òîì ñëó÷àå, åñëè òðåáóåòñÿ ñêðûòü îòîáðàæåíèå äèàëîãîâûõ îêîí, îòîáðàæàþùèõ õîä óñòàíîâêè ÿäðà SQL Server, âìåñòî êëþ÷à /qb ìîæíî âîñïîëüçîâàòüñÿ êëþ÷îì /qn. Îí çàäàåò óñòàíîâêó ÿäðà SQL Server áåç ñîïðîâîæäåíèÿ. Òàêèì îáðàçîì, âñå ñîáûòèÿ, ïðîèñõîäÿùèå âî âðåìÿ ðàáîòû ìàñòåðà óñòàíîâêè (â òîì ÷èñëå è îøèáêè) áóäóò çàïèñûâàòüñÿ â log-ôàéë, äîñòóïíûé äëÿ àíàëèçà àäìèíèñòðàòîðîì. Log-ôàéë ñ îïèñàíèåì õîäà óñòàíîâêè ÿäðà SQL Server 2005 õðàíèòñÿ ïî àäðåñó: Ñ:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\log\summary.txt Ïîìèìî îáùåãî log-ôàéëà ñîñòàâëÿåòñÿ log-ôàéë, îòíîñÿùèéñÿ ê îòäåëüíîìó êîìïîíåíòó SQL Server. Äàííûå ôàéëû ñîäåðæàò áîëåå äåòàëüíóþ èíôîðìàöèþ î õîäå óñòàíîâêè òîãî èëè èíîãî êîìïîíåíòà. Ñïèñîê ïðèìåðîâ èìåí log-ôàéëîâ ïðèâåäåí â òàáë. 1.4. Òàáëèöà 1.4. Ïðèìåðû íàèìåíîâàíèé log-ôàéëîâ Log-ôàéë
Îïèñàíèå
SQLSetup0001_ComputerName_ .NET Framework 2.0.log
Log-ôàéë äëÿ Microsoft .NET Framework 2.0
SQLSetup0001_ComputerName_AS.log
Log-ôàéë äëÿ ñåðâèñîâ àíàëèòèêè
SQLSetup0001_ComputerName_Core.log
Log-ôàéë äëÿ ÿäðà SQL Server. Ñîäåðæèò èíôîðìàöèþ î ïðàâèëüíîì âûïîëíåíèè âñåõ msi-ôàéëîâ
SQLSetup0001_ComputerName_ Datastore.xml
Ñïèñîê âñåõ ñâîéñòâ, êîòîðûå êýøèðóþòñÿ âî âðåìÿ óñòàíîâêè SQL Server
SQLSetup0001_ComputerName_DTS.log
Log-ôàéë äëÿ ñåðâèñîâ ïðåîáðàçîâàíèÿ äàííûõ
SQLSetup0001_ComputerName_Logs.cab
Log-ôàéë ñî ñïèñêîì âñåõ óçëîâ êëàñòåðà (ñîçäàåòñÿ âî âðåìÿ êëàñòåðíîé óñòàíîâêè SQL Server 2005)
SQLSetup0001_ComputerName_MSXML.log
Log-ôàéë ñ îïèñàíèåì õîäà óñòàíîâêè Microsoft MSXML6
SQLSetup0001_ComputerName_NS.log
Log-ôàéë äëÿ ñåðâèñîâ íîòèôèêàöèè
SQLSetup0001_ComputerName_RS.log
Log-ôàéë äëÿ ñåðâèñîâ îò÷åòîâ
SQLSetup0001_ComputerName_SNAC.log
Log-ôàéë ñ îïèñàíèåì õîäà óñòàíîâêè Microsoft SQL Native Client
SQLSetup0001_ComputerName_SQL.log
Log-ôàéë ñ îïèñàíèåì óñòàíîâêè ÿäðà SQL Server
SQLSetup0001_ComputerName_SQLXML.log
Log-ôàéë ñ îïèñàíèåì õîäà óñòàíîâêè Microsoft SQLXML4 ïðîäîëæåíèå
È
32
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
Òàáëèöà 1.4 (ïðîäîëæåíèå) Log-ôàéë
Îïèñàíèå
SQLSetup0001_ComputerName_Tools.log
Log-ôàéë ñ îïèñàíèåì õîäà óñòàíîâêè êëèåíòñêèõ êîìïîíåíòîâ è äðóãèõ èíñòðóìåíòîâ
SQLSetup0001_ComputerName_WI.log
Log-ôàéë ñ îïèñàíèåì õîäà óñòàíîâêè êîìïîíåíòîâ ïîëüçîâàòåëüñêîãî èíòåðôåéñà
Âñå ïåðå÷èñëåííûå ôàéëû ðàñïîëàãàþòñÿ â ñëåäóþùåé ïàïêå: C:\Program Files\Microsoft SQL Server\90\Setup Bootstrap\LOG\Files, à òàêæå èìåíóþòñÿ ñîîòâåòñòâóþùèì îáðàçîì. Èìåíîâàíèå log-ôàéëîâ âûïîëíÿåòñÿ ïî ñëåäóþùåìó ïðèíöèïó: SQLSetup[XXXX][s]_[COMPUTERNAME]_[COMPONENTNAME]_[Y].log
ãäå SQLSetup — çàðåçåðâèðîâàííîå íà÷àëî èìåíè log-ôàéëà; [XXXX] — ïîðÿäêîâûé íîìåð èíñòàëëÿöèè; [COMPUTERNAME] — èìÿ êîìïüþòåðà, íà êîòîðîì âûïîëíÿåòñÿ óñòàíîâêà SQL Server 2005; [COMPONENTNAME] — ñîêðàùåííîå èìÿ êîìïîíåíòà SQL Server 2005 (ñì. òàáë. 1.4); [Y] — åñëè msi-ôàéë äëÿ óñòàíîâêè âûáðàííîãî êîìïîíåíòà çàïóñêàåòñÿ áîëåå îä-
íîãî ðàçà, òî äàííûé êëþ÷ îòîáðàæàåò êîëè÷åñòâî çàïóñêîâ msi-ôàéëà. Ðàññìîòðèì áîëåå äåòàëüíî ëèñòèíã ini-ôàéëà (ëèñòèíã 1.1). Ëèñòèíã 1.1. Ïðèìåð ini-ôàéëà [Options] USERNAME=Name COMPANYNAME=Company INSTALLSQLDIR= "C:\Program Files\Microsoft SQL Server\" INSTALLSQLDATADIR="C:\Program Files\Microsoft SQL Server\" ADDLOCAL=ALL INSTANCENAME=Instance1 SQLACCOUNT=Account1 SQLPASSWORD=AccountPassword1 AGTACCOUNT= AGTAccount1 AGTPASSWORD= AGTAccountPassword1 ASACCOUNT= ASAccount1 ASPASSWORD= ASAccountPassword1 RSACCOUNT= RSAccount1 RSPASSWORD= RSAccountPassword1 SQLAUTOSTART=1 AGTAUTOSTART=0 ASAUTOSTART=1 RSAUTOSTART=0
1.2.4. Ïîâòîðíàÿ óñòàíîâêà ñåðâåðà Èíîãäà óñòàíîâêà ñåðâåðà ïðåðûâàåòñÿ. Ýòî ìîæåò ïðîèçîéòè ïî ïðè÷èíå ðàçðûâà ñâÿçè (â ñëó÷àå óäàëåííîé óñòàíîâêè), ñèñòåìíîãî ñáîÿ (â ñëó÷àå ëîêàëüíîé óñòàíîâêè) èëè íåâûïîëíåíèÿ îäíîãî èç óñëîâèé, êîòîðûå îïèñàíû â ðàç-
1.2. Óñòàíîâêà MS SQL Server 2005
33
äåëå 1.2.2 «Âûïîëíåíèå óñëîâèé ïåðåä óñòàíîâêîé SQL Server 2005».  òàêèõ ñëó÷àÿõ âîçíèêàåò íåîáõîäèìîñòü ïðîäîëæèòü óñòàíîâêó ñåðâåðà ñ òîãî ìåñòà, â êîòîðîì ìàñòåð óñòàíîâêè âûäàë îøèáêó èëè ïðåðâàë ñâîþ ðàáîòó ïî êàêîé-ëèáî ïðè÷èíå. Äëÿ òîãî ÷òîáû ïðîäîëæèòü ïðîöåññ óñòàíîâêè SQL Server 2005 ñ ðàíåå ïðåðâàííîãî ýòàïà, âîñïîëüçóéòåñü êëþ÷îì: REINSTALLMODE=omus
Òàêæå â ñëó÷àå ïðåðûâàíèÿ ïðîöåññà óñòàíîâêè ìîæíî ïîëíîñòüþ ïåðåóñòàíîâèòü ðàíåå óñòàíîâëåííûå êîìïîíåíòû (òå, êîòîðûå áûëè óñòàíîâëåíû äî ïðåðûâàíèÿ). Äëÿ òîãî ÷òîáû ïðîäîëæèòü ïðîöåññ óñòàíîâêè, âîñïîëüçóéòåñü ñëåäóþùèì êëþ÷îì: REINSTALL=ALL
 ýòîì ñëó÷àå âñå ðàíåå óñòàíîâëåííûå êîìïîíåíòû SQL Server 2005 áóäóò ïåðåóñòàíîâëåíû.
1.2.5. Èìåíîâàííûé ýêçåìïëÿð è ýêçåìïëÿð ïî óìîë÷àíèþ Êàê óæå óïîìèíàëîñü ðàíåå, íà îòäåëüíîì ñåðâåðå ìîæåò áûòü óñòàíîâëåíî íåñêîëüêî ýêçåìïëÿðîâ SQL Server 2005. Îòäåëüíîå êëèåíòñêîå ïðèëîæåíèå ïîçâîëÿåò âûïîëíÿòü ðàáîòó ñ îòäåëüíî âçÿòûì ýêçåìïëÿðîì. Ýòî äàåò âîçìîæíîñòü íå òîëüêî óñêîðèòü ðàáîòó áàçû äàííûõ â öåëîì, íî è ðàçãðàíè÷èòü îáëàñòè äëÿ ðàçðàáîòêè ïðèëîæåíèé è èõ ðàçâåðòûâàíèÿ. Íàïðèìåð, â ñëó÷àå ñóùåñòâîâàíèÿ íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server 2005 íà îòäåëüíîì ñåðâåðå ðàçðàáîòêà ïðèëîæåíèé ìîæåò âåñòèñü íà îäíîì èç íèõ, à ðàçâåðòûâàíèå ãîòîâîãî è ïðîòåñòèðîâàííîãî ïðèëîæåíèÿ — íà äðóãîì. Ïðè ýòîì ïîëüçîâàòåëè ñìîãóò ðàáîòàòü, íå ïîäîçðåâàÿ î òîì, ÷òî ñåðâåð âûïîëíÿåò «äâîÿêóþ» ðîëü. Ïîìèìî òàêèõ èñêëþ÷èòåëüíî ïîëüçîâàòåëüñêèõ ïîäõîäîâ, óñòàíîâêà íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server ïîçâîëÿåò êîìïàíèè çíà÷èòåëüíî ñýêîíîìèòü íà ëèöåíçèÿõ (â òîì ñëó÷àå, åñëè ïðèîáðåòåí SQL Server 2005 â ðàñ÷åòå íà êîëè÷åñòâî ïðîöåññîðîâ ñåðâåðà). Êàæäûé ýêçåìïëÿð SQL Server ìîæåò èìåòü ñâîè ñîáñòâåííûå íàñòðîéêè, â îáùåì ñëó÷àå ïîëíîñòüþ îòëè÷àþùèåñÿ îò íàñòðîåê äðóãîãî ýêçåìïëÿðà, óñòàíîâëåííîãî íà äàííîì ñåðâåðå. Íàñòðîéêè ìîãóò ïîäðàçóìåâàòü íå òîëüêî ïàðàìåòðû áåçîïàñíîñòè, ïîäñîåäèíåíèÿ ïîëüçîâàòåëåé è íàáîð èíñòðóìåíòîâ, íî è îòäåëüíûé íàáîð ñåðâèñîâ, ñòðóêòóðó ïàïîê õðàíåíèÿ è äàæå ñâîþ ñîáñòâåííóþ ñòðóêòóðó ðååñòðà.  ïîäîáíûõ ñëó÷àÿõ îòäåëüíûå ýêçåìïëÿðû ïðîùå ðàññìàòðèâàòü â êà÷åñòâå îòäåëüíûõ «ëîãè÷åñêèõ» ñåðâåðîâ, íà êàæäûé èç êîòîðûõ âîçëîæåíû ñâîè ñîáñòâåííûå ôóíêöèè. Ýêçåìïëÿðû SQL Server 2005 ìîãóò áûòü äâóõ òèïîâ: ýêçåìïëÿð ïî óìîë÷àíèþ èëè èìåíîâàííûé ýêçåìïëÿð (ðèñ. 1.2). Íà ñåðâåðå ìîæåò ñóùåñòâîâàòü òîëüêî îäèí ýêçåìïëÿð ïî óìîë÷àíèþ è ïðàêòè÷åñêè íåîãðàíè÷åííîå ÷èñëî (íå áîëåå 50) èìåíîâàííûõ ýêçåìïëÿðîâ SQL Server 2005. Èìÿ ýêçåìïëÿðà ïî óìîë÷àíèþ çàäàåòñÿ àâòîìàòè÷åñêè è ñîñòîèò èç ñåòåâîãî èìåíè êîìïüþòåðà, íà êîòîðîì óñòàíîâëåí ýêçåìïëÿð (íàïðèìåð, Srv2005). Ïîëüçîâàòåëü íå ìîæåò èçìåíèòü èìåíè ýêçåìïëÿðà ïî óìîë÷àíèþ. Îáðàòèòå âíèìàíèå íà òî, ÷òî íè ïîëüçîâàòåëü, íè ìàñòåð óñòàíîâêè â àâòîìàòè÷åñêîì ðåæèìå íå ìîãóò çàäàâàòü èìÿ ýêçåìïëÿðà ïî óìîë÷àíèþ. Ýòî òàêæå íàêëàäûâàåò ñëåäóþùåå îãðàíè÷åíèå:
34
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
íà îòäåëüíûé êîìïüþòåð íå ìîãóò áûòü óñòàíîâëåíû äâà ýêçåìïëÿðà ïî óìîë÷àíèþ äàæå â òîì ñëó÷àå, åñëè îíè îòíîñÿòñÿ ê ðàçíûì âåðñèÿì SQL Server. Íàïðèìåð, ïîäîáíûå ñëó÷àè ìîãóò âîçíèêíóòü âî âðåìÿ îáíîâëåíèÿ SQL Server 2000 äî âåðñèè 2005.
Ðèñ. 1.2. Óñòàíîâêà èìåíîâàííîãî ýêçåìïëÿðà è ýêçåìïëÿðà ïî óìîë÷àíèþ
Ñ èìåíîâàííûì ýêçåìïëÿðîì áàçû äàííûõ äåëà îáñòîÿò àáñîëþòíî ïî-äðóãîìó. Äëÿ èìåíîâàííîãî ýêçåìïëÿðà SQL Server 2005 ïîëüçîâàòåëü ìîæåò çàäàòü èìÿ. Îäíàêî èìÿ, çàäàííîå ïîëüçîâàòåëåì, áóäåò ÿâëÿòüñÿ òîëüêî ÷àñòüþ îáùåãî èìåíè. Ïîìèìî íåãî â íàçâàíèå ýêçåìïëÿðà òàêæå âõîäèò ñåòåâîå èìÿ êîìïüþòåðà (íàïðèìåð, äëÿ èìåíîâàííîãî ýêçåìïëÿðà, óñòàíîâëåííîãî íà òîì æå ñåðâåðå, ÷òî è îïèñàííûé ýêçåìïëÿð ïî óìîë÷àíèþ, èìÿ áóäåò âûãëÿäåòü ñëåäóþùèì îáðàçîì: Srv2005$Instance1).
1.2.6. Óñòàíîâêà èìåíîâàííîãî ýêçåìïëÿðà Ýêçåìïëÿð ïî óìîë÷àíèþ ìîæåò áûòü óñòàíîâëåí âî âðåìÿ ïåðâîãî çàïóñêà ìàñòåðà óñòàíîâêè SQL Server, ïîýòîìó ìû íå áóäåì îñòàíàâëèâàòüñÿ íà îïèñàíèè äàííîãî ïðîöåññà. Ïîñòàðàåìñÿ áîëåå äåòàëüíî ðàññìîòðåòü ïðîöåññ óñòàíîâêè èìåíîâàííîãî ýêçåìïëÿðà SQL Server 2005. Äëÿ òîãî ÷òîáû íà÷àòü ïðîöåññ óñòàíîâêè èìåíîâàííîãî ýêçåìïëÿðà, âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Çàïóñòèòå ìàñòåð óñòàíîâêè SQL Server 2005. 2. Íàæìèòå êíîïêó Install SQL Server.
1.2. Óñòàíîâêà MS SQL Server 2005
35
3. Ïîäòâåðäèòå âûïîëíåíèå óñëîâèé ëèöåíçèè è íàæìèòå íà êíîïêó Next. 4. Íà ñòðàíèöå SQL Server Component Update âûïîëíèòå îáíîâëåíèå êîìïîíåíòîâ ýêçåìïëÿðà (åñëè ýòî íåîáõîäèìî), íàæàâ êíîïêó Install. Ïåðåéäèòå ê ñëåäóþùåìó ýòàïó íàñòðîéêè ýêçåìïëÿðà, íàæàâ êíîïêó Finish. Íàæìèòå êíîïêó Next. 5. Ïîñëå çàãðóçêè ñòðàíèöû System Configuration Check â àâòîìàòè÷åñêîì ðåæèìå áóäåò âûïîëíåíà ïðîâåðêà ïàðàìåòðîâ êîìïüþòåðà. Äëÿ òîãî ÷òîáû ïðîñìîòðåòü îò÷åò î ïàðàìåòðàõ êîìïüþòåðà, êîòîðûå áóäóò ñãðóïïèðîâàíû ïî êàòåãîðèÿì, íàæìèòå êíîïêó Filter. Íàæàòèå êíîïêè Report ïðèâåäåò ê îòêðûòèþ ïîëíîãî îò÷åòà î ïàðàìåòðàõ êîìïüþòåðà. Åñëè âñå íåîáõîäèìûå òðåáîâàíèÿ ïî óñòàíîâêå ýêçåìïëÿðà SQL Server óñïåøíî âûïîëíåíû (î ÷åì ñâèäåòåëüñòâóåò îò÷åò), òî ìîæíî ïðèñòóïàòü ê ñëåäóþùåìó ýòàïó óñòàíîâêè. 6. Íàæìèòå êíîïêó Continue. Ðåçóëüòàòîì áóäåò îòêðûòèå ñòðàíèöû Registration Information. 7. Íà ñòðàíèöå Registration Information ââåäèòå òåêñòîâóþ èíôîðìàöèþ î ïîëüçîâàòåëå è êîìïàíèè, à òàêæå ââåäèòå êëþ÷ äàííîé âåðñèè ïðîãðàììíîãî ïðîäóêòà è íàæìèòå êíîïêó Next. 8. Íà ñòðàíèöå Components to Install âûáåðèòå êîìïîíåíòû äëÿ óñòàíîâêè (íàïðèìåð, ñåðâèñû íîòèôèêàöèè èëè îò÷åòîâ). Äëÿ òîãî ÷òîáû íàñòðîèòü âûáðàííûé êîìïîíåíò, íàæìèòå êíîïêó Advanced. Ïîñëå íàñòðîéêè âûáðàííûõ êîìïîíåíòîâ íàæìèòå êíîïêó Next.  ðåçóëüòàòå ýòîãî îòêðîåòñÿ îêíî Instance Name. 9.  îêíå Instance Name ââåäèòå èìÿ äëÿ ýêçåìïëÿðà SQL Server. Äëÿ óñòàíîâêè íîâîãî èìåíîâàííîãî ýêçåìïëÿðà óñòàíîâèòå ïåðåêëþ÷àòåëü Named Instance. Äëÿ òîãî ÷òîáû èçìåíèòü íàñòðîéêè ñóùåñòâóþùåãî ýêçåìïëÿðà SQL Server, ââåäèòå åãî èìÿ. Ïåðåéäèòå ê ñëåäóþùåìó ýòàïó óñòàíîâêè, íàæàâ êíîïêó Next. 10. Íà ñòðàíèöå Service Account ââåäèòå ïàðàìåòðû ó÷åòíûõ çàïèñåé äëÿ ñåðâèñîâ, êîòîðûå áóäóò óñòàíîâëåíû âìåñòå ñ äàííûì ýêçåìïëÿðîì, à çàòåì íàæìèòå êíîïêó Next. 11. Íà ñòðàíèöå Authentication Mode âûáåðèòå ïàðàìåòðû àóòåíòèôèêàöèè (àóòåíòèôèêàöèÿ Windows, ïîëüçîâàòåëü SQL Server) è íàæìèòå êíîïêó Next. 12. Íà ñòðàíèöå Collation Setting äëÿ êàæäîãî óñòàíàâëèâàåìîãî ñåðâèñà óñòàíîâèòå ïàðàìåòðû ñîðòèðîâêè, à çàòåì íàæìèòå êíîïêó Next. 13. Åñëè â ïðîöåññå óñòàíîâêè âû âûáðàëè óñòàíîâêó ñåðâèñîâ îò÷åòîâ, òî íàñòðîéòå èõ ïàðàìåòðû, èñïîëüçóÿ ñëåäóþùèå ñòðàíèöû ìàñòåðà óñòàíîâêè. 14. Íà ñòðàíèöå Error Reporting íàñòðîéòå ïàðàìåòðû ñîîáùåíèé îá îøèáêàõ â ðàáîòå ñåðâåðà è íàæìèòå êíîïêó Next.
36
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
15. Íà ñòðàíèöå Ready to Install ïðîñìîòðèòå èíôîðìàöèþ î ïàðàìåòðàõ óñòàíîâêè, êîòîðûå âû îïðåäåëèëè íà ñòðàíèöàõ ìàñòåðà óñòàíîâêè ðàíåå, è íàæìèòå êíîïêó Install äëÿ çàïóñêà ïðîöåññà óñòàíîâêè. Ïî îêîí÷àíèè ïðîöåññà óñòàíîâêè íàæìèòå êíîïêó Finish.
1.2.7. Îãðàíè÷åíèÿ íà èìÿ ýêçåìïëÿðà Äëÿ òîãî ÷òîáû ñîçäàòü èìåíîâàííûé ýêçåìïëÿð, âûáåðèòå äàííûé ïàðàìåòð âî âðåìÿ óñòàíîâêè. Îáðàòèòå âíèìàíèå íà òî, ÷òî âî âðåìÿ èìåíîâàíèÿ ïîäîáíûõ ýêçåìïëÿðîâ SQL Server äåéñòâóþò ñëåäóþùèå îãðàíè÷åíèÿ: 1. Ýêçåìïëÿð íå ìîæåò ñîäåðæàòü â ñâîåì íàçâàíèè ñëîâà «SQL», «Server», «SQLServer», «MSSQLServer», «Default» èëè äðóãèå çàðåçåðâèðîâàííûå ñëîâà. Ýòî ñäåëàíî äëÿ òîãî, ÷òîáû âî âðåìÿ ïðîãðàììíîãî îáðàùåíèÿ ê ýêçåìïëÿðó SQL Server íå âîçíèêàëî êàêèõ-ëèáî ïðîáëåì.  òîì ñëó÷àå, åñëè âû ââåäåòå îäíî èç ïåðå÷èñëåííûõ ñëîâ â èìÿ ýêçåìïëÿðà, áóäåò âûâåäåíî ñîîáùåíèå îá îøèáêå. 2. Íàèìåíîâàíèå ýêçåìïëÿðà ìîæåò âêëþ÷àòü áóêâû, öèôðû, à òàêæå çíàêè ïîä÷åðêèâàíèÿ «_» è äîëëàðà «$». Ïåðâûé ñèìâîë íàçâàíèÿ äîëæåí ñîäåðæàòü çíàê ïîä÷åðêèâàíèÿ «_» èëè áóêâó. 3. Ïðîáåëû, òàê æå êàê è äðóãèå ñëóæåáíûå çíàêè, íå äîïóñêàþòñÿ. Íå äîïóñêàåòñÿ èñïîëüçîâàíèå â íàçâàíèè ýêçåìïëÿðà ñëåäóþùèõ ñèìâîëîâ: \ @ # $ % ^ & * ( ) , : ; « ‘. 4. Íàèìåíîâàíèå ýêçåìïëÿðà íå ÷óâñòâèòåëüíî ê ðåãèñòðó (îäèíàêîâî âîñïðèíèìàþòñÿ êàê ïðîïèñíûå, òàê è ñòðî÷íûå ñèìâîëû. 5. Äëèíà íàçâàíèÿ ýêçåìïëÿðà îãðàíè÷åíà øåñòíàäöàòüþ ñèìâîëàìè.  îòíîøåíèè ýêçåìïëÿðà ïî óìîë÷àíèþ òàêæå äåéñòâóþò íåêîòîðûå îãðàíè÷åíèÿ: 1. Åñëè íà êîìïüþòåð óñòàíàâëèâàåòñÿ åäèíñòâåííûé ýêçåìïëÿð SQL Server, òî äàííûé ýêçåìïëÿð áóäåò ÿâëÿòüñÿ èñïîëüçóåìûì ïî óìîë÷àíèþ. 2. Êîëè÷åñòâî ýêçåìïëÿðîâ, èñïîëüçóåìûõ ïî óìîë÷àíèþ, íà îòäåëüíî âçÿòîì êîìïüþòåðå íå ìîæåò áûòü áîëüøå îäíîãî. 3. Åñëè âûïîëíÿåòñÿ ìîäåðíèçàöèÿ SQL Server 7.0 äî âåðñèè 2005, òî äàííûé ýêçåìïëÿð áóäåò ÿâëÿòüñÿ èñïîëüçóåìûì ïî óìîë÷àíèþ. 4. Èñïîëüçîâàíèå ýêçåìïëÿðà ïî óìîë÷àíèþ ïðåäïî÷òèòåëüíåå â òåõ ñëó÷àÿõ, êîãäà èñïîëüçóþòñÿ êëèåíòû âåðñèé ñ 6.0 ïî 7.0. Ýòî îáúÿñíÿåòñÿ ïðîñòîòîé íàñòðîéêè êëèåíòñêîãî ïðèëîæåíèÿ äëÿ ñîåäèíåíèÿ ñ ýêçåìïëÿðîì ïî óìîë÷àíèþ.  ñëó÷àå íàñòðîéêè ñîåäèíåíèÿ ìåæäó êëèåíòàìè âåðñèé 6.0, 7.0 è èìåíîâàííûì ýêçåìïëÿðîì íåîáõîäèìî íàñòðàèâàòü ïàðàìåòðû ôèçè÷åñêîãî ñîåäèíåíèÿ (òàêèå, êàê IP-àäðåñ ñåðâåðà èìåíîâàííîãî ýêçåìïëÿðà, èìÿ ñåðâåðà, ïîðò è äð.). 5.  ñëó÷àå óñòàíîâêè íà êîìïüþòåðå ðåäàêöèè Microsoft SQL Server 2005 Express Edition ïî óìîë÷àíèþ ñíà÷àëà óñòàíàâëèâàåòñÿ èìåíîâàííûé ýêçåìïëÿð. Äëÿ òîãî ÷òîáû óñòàíîâèòü ýêçåìïëÿð SQL Server 2005 ïî óìîë÷àíèþ, â ïðîöåññå óñòàíîâêè âûáåðèòå ïåðåêëþ÷àòåëü Default Instance (èçíà÷àëüíî âûáðàí ïåðåêëþ÷àòåëü Named Instance).
1.2. Óñòàíîâêà MS SQL Server 2005
37
1.2.8. Ðàñïîëîæåíèå ôàéëîâ ýêçåìïëÿðîâ Ðàíåå ìû óïîìèíàëè î òîì, ÷òî ýêçåìïëÿðû SQL Server 2005 ìîãóò áûòü àáñîëþòíî íåçàâèñèìûìè äðóã îò äðóãà. Ýòî ïîäðàçóìåâàåò ñâîé ñîáñòâåííûé íàáîð èíñòðóìåíòîâ, ñåðâèñîâ è óòèëèò äëÿ êàæäîãî ýêçåìïëÿðà.  ñâîþ î÷åðåäü ðàçëè÷íûå íàáîðû ñåðâèñîâ äèêòóþò ìàñòåðó óñòàíîâêè òðåáîâàíèÿ îòíîñèòåëüíî ïàïîê è ôàéëîâ ñåðâåðà SQL, ðàñïîëàãàþùèõñÿ íà êîìïüþòåðå. Êàæäûé ýêçåìïëÿð SQL Server (â òîì ñëó÷àå, åñëè èõ áîëüøå îäíîãî íà êîìïüþòåðå) èìååò ñâîé ñîáñòâåííûé íàáîð ïàïîê è ôàéëîâ äàííûõ. Ïàïêè àáñîëþòíî íå ïåðåñåêàþòñÿ ìåæäó ñîáîé, ÷òî óïðîùàåò ïðîöåññ àäìèíèñòðèðîâàíèÿ. ×òî êàñàåòñÿ îáùèõ ôàéëîâ, òî îíè èñïîëüçóþòñÿ ñîâìåñòíî âñåìè ýêçåìïëÿðàìè. Çà ñ÷åò ýòîãî ýêîíîìèòñÿ ìåñòî è óïðîùàåòñÿ ïðîöåññ óñòàíîâêè äîïîëíèòåëüíûõ êîìïîíåíòîâ äëÿ îòäåëüíî âçÿòîãî ýêçåìïëÿðà (åñëè ïîäîáíûå êîìïîíåíòû ðàíåå áûëè óñòàíîâëåíû äëÿ äðóãîãî ýêçåìïëÿðà íà äàííîì êîìïüþòåðå). Èñïîëíÿåìûå ôàéëû êàæäîãî êîìïîíåíòà SQL Server ÿâëÿþòñÿ óíèêàëüíûìè äëÿ âûáðàííîãî ýêçåìïëÿðà. Ýòî ïîçâîëÿåò âûïîëíÿòü ìîäåðíèçàöèþ îòäåëüíîãî ýêçåìïëÿðà SQL Server â òî âðåìÿ, êîãäà äðóãèå ýêçåìïëÿðû, çàïóùåííûå íà äàííîì êîìïüþòåðå, áóäóò ïðîäîëæàòü ðàáîòàòü â òîé ðåäàêöèè SQL Server, â êîòîðîé îíè áûëè èçíà÷àëüíî óñòàíîâëåíû.  ðàçäåëå 1.2.9 «Îáùèå ôàéëû ðàçëè÷íûõ ýêçåìïëÿðîâ» ìû ðàññìîòðèì íàáîðû ôàéëîâ, êîòîðûå íåëüçÿ óäàëÿòü äëÿ îòäåëüíîãî ýêçåìïëÿðà áàçû äàííûõ, ïîñêîëüêó îíè ÿâëÿþòñÿ ðàçäåëÿåìûìè ìåæäó ýêçåìïëÿðàìè.
1.2.9. Îáùèå ôàéëû ðàçëè÷íûõ ýêçåìïëÿðîâ Îáùèå ôàéëû ÿâëÿþòñÿ ðàçäåëÿåìûìè ìåæäó âñåìè ýêçåìïëÿðàìè SQL Server, à ñëåäîâàòåëüíî, íå ìîãóò áûòü óäàëåíû ñ êîìïüþòåðà äàæå â òîì ñëó÷àå, åñëè óäàëÿåòñÿ îäèí èç âûáðàííûõ êîìïîíåíòîâ èëè ýêçåìïëÿðîâ. Îáùèå ôàéëû õðàíÿòñÿ â ïàïêå C:\Program Files\Microsoft SQL Server\8.0. Îáðàòèòå âíèìàíèå íà òî, ÷òî îáùèå ôàéëû íå ìîãóò áûòü óñòàíîâëåíû íà ñæàòûé äèñê, à ïîòîìó ïåðåä óñòàíîâêîé ïåðâîãî ýêçåìïëÿðà SQL Server óáåäèòåñü â òîì, ÷òî äèñê íå ÿâëÿåòñÿ ñæàòûì. Íà ðèñ. 1.3 ïîêàçàíà ñòðóêòóðà êàòàëîãà, â êîòîðîé õðàíÿòñÿ îáùèå ôàéëû. Íà ðèñ. 1.4 ïîêàçàíî ñîäåðæèìîå ïàïîê îòäåëüíûõ ýêçåìïëÿðîâ SQL Server.
Ðèñ. 1.3. Êàòàëîã äëÿ õðàíåíèÿ îáùèõ ôàéëîâ
Âî âðåìÿ óñòàíîâêè ýêçåìïëÿðà SQL Server äëÿ êàæäîãî êîìïîíåíòà ñåðâåðà ãåíåðèðóåòñÿ ñâîé ñîáñòâåííûé èäåíòèôèêàöèîííûé íîìåð, êîòîðûé ïîçâîëÿåò îòäåëèòü êîìïîíåíòû SQL Server äðóã îò äðóãà â ñòðóêòóðå ïàïîê è êëþ÷àõ ðååñòðà. Ïîäîáíûå èäåíòèôèêàöèîííûå íîìåðà ãåíåðèðóþòñÿ äëÿ ñëåäóþùèõ
38
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
êîìïîíåíòîâ SQL Server 2005 (íà îñíîâå êîòîðûõ ìîãóò áûòü ñîçäàíû îòäåëüíûå ýêçåìïëÿðû SQL Server): · ÿäðî SQL Server; · ñåðâèñû îò÷åòîâ; · ñåðâèñû àíàëèòèêè.
Ðèñ. 1.4. Êàòàëîã äëÿ õðàíåíèÿ ôàéëîâ îòäåëüíûõ ýêçåìïëÿðîâ
Ãåíåðàöèÿ èäåíòèôèêàöèîííîãî êîäà âûïîëíÿåòñÿ ïî ñëåäóþùåìó àëãîðèòìó: MSSQL.N
ãäå N — ýòî ïîðÿäêîâûé íîìåð êîìïîíåíòà, êîòîðûé óñòàíàâëèâàåòñÿ âìåñòå ñ äàííûì ýêçåìïëÿðîì (íàïðèìåð, MSSQL.1 — äëÿ ïåðâîãî êîìïîíåíòà, MSSQL.2 — äëÿ âòîðîãî è ò. ä.). Òàêèì îáðàçîì, ìîæíî íå òîëüêî áûñòðî ïðîñìîòðåòü êîìïîíåíòû îòäåëüíîãî ýêçåìïëÿðà, íî è áûñòðî îöåíèòü, êàêèå êîìïîíåíòû áûëè óñòàíîâëåíû â ïîñëåäíþþ î÷åðåäü, ïðîñòî âçãëÿíóâ íà ñòðóêòóðó ïàïîê èëè êëþ÷è ðååñòðà Windows. Ïðèìåð èñïîëüçîâàíèÿ èäåíòèôèêàöèîííîãî êîäà â èìåíîâàíèè ñòðóêòóðû ïàïîê (äëÿ ÿäðà SQL Server 2005): C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\ Ïðèìåð èìåíîâàíèÿ êëþ÷åé ðååñòðà: [HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\MSSQL.1]
Ñâÿçü ìåæäó èìåíåì ýêçåìïëÿðà è åãî èäåíòèôèêàöèîííûì êîäîì õðàíèòñÿ â ðååñòðå Windows â êëþ÷å: [HKEY_LOCAL_MACHINE\Software\Microsoft\Microsoft SQL Server\Instance Name\SQL]
1.3. Îáíîâëåíèå MS SQL Server 2005
39
 ýòîì êëþ÷å õðàíèòñÿ çíà÷åíèå: "Srv2005$Instance1"="MSSQL.1", ãäå "Srv2005$Instance1" — èìÿ ýêçåìïëÿðà, à "MSSQL.1" — åãî èäåíòèôèêàöèîííûé íîìåð.
1.2.10. Óñòàíîâêà íåñêîëüêèõ ýêçåìïëÿðîâ  òîì ñëó÷àå, åñëè íà îòäåëüíî âçÿòîì ñåðâåðå óñòàíîâëåíî íåñêîëüêî ýêçåìïëÿðîâ SQL Server, âñå îíè áóäóò êîíêóðèðîâàòü ìåæäó ñîáîé çà ðåñóðñû äàííîãî ñåðâåðà. Êàæäûé ýêçåìïëÿð ðàáîòàåò íà ñåðâåðå íåçàâèñèìî îò äðóãèõ ýêçåìïëÿðîâ, à ñëåäîâàòåëüíî, ïîäðàçóìåâàåò, ÷òî îí íàõîäèòñÿ íà ñåðâåðå «â ãîðäîì îäèíî÷åñòâå». Ïîíèìàíèå äàííîãî, íà ïåðâûé âçãëÿä, òðèâèàëüíîãî ôàêòà ïîçâîëèò èçáåæàòü îãðîìíîãî ÷èñëà ïðîáëåì, ñâÿçàííûõ ñ ïðîèçâîäèòåëüíîñòüþ áàçû äàííûõ. Íàïðèìåð, óñòàíîâêà áîëüøîãî ÷èñëà ýêçåìïëÿðîâ íà ñåðâåð ïîòðåáóåò äîïîëíèòåëüíûõ êàïèòàëîâëîæåíèé â ïðîèçâîäèòåëüíîñòü ïîñëåäíåãî. Îáðàáîòêà áîëüøîãî ÷èñëà çàïðîñîâ îäíèì èç ýêçåìïëÿðîâ ïðèâåäåò ê çíà÷èòåëüíîé íàãðóçêå íà ïîäñèñòåìó ââîäà-âûâîäà ñåðâåðà, ÷òî òàêæå ìîæåò íåãàòèâíî ñêàçàòüñÿ íà îáùåé ïðîèçâîäèòåëüíîñòè äðóãèõ ýêçåìïëÿðîâ SQL Server. Íà îòäåëüíî âçÿòîì ñåðâåðå ìîæíî óñòàíîâèòü íå áîëåå îäíîãî ýêçåìïëÿðà ïî óìîë÷àíèþ è 49 èìåíîâàííûõ ýêçåìïëÿðîâ. Ïðè ýòîì äîïóñêàåòñÿ óñòàíîâêà (ñ ïîìîùüþ ïàðàìåòðîâ ìàñòåðà) èìåíîâàííûõ ýêçåìïëÿðîâ áåç ïðåäâàðèòåëüíîé óñòàíîâêè ýêçåìïëÿðà ïî óìîë÷àíèþ. Îäíàêî îáû÷íî ïåðâûé ýêçåìïëÿð, óñòàíàâëèâàåìûé íà ñåðâåð, ÿâëÿåòñÿ ýêçåìïëÿðîì ïî óìîë÷àíèþ, ïîñëå êîòîðîãî óñòàíàâëèâàþòñÿ íà ñåðâåð èìåíîâàííûå ýêçåìïëÿðû. Î òîì, êàê âûïîëíèòü óñòàíîâêó èìåíîâàííîãî ýêçåìïëÿðà, ìû ãîâîðèëè â ðàçäåëå 1.2.6 «Óñòàíîâêà èìåíîâàííîãî ýêçåìïëÿðà».
1.3. Îáíîâëåíèå MS SQL Server 2005 Îáíîâëåíèå äëÿ SQL Server 2005 ïîääåðæèâàåòñÿ ñ âåðñèé 7.0 è âûøå. Ýòî îçíà÷àåò, ÷òî êîìïîíåíòû SQL Server 2005 ìîãóò áûòü óñòàíîâëåíû ïîâåðõ êîìïîíåíòîâ SQL Server áîëåå ðàííèõ âåðñèé. Ïðè ýòîì êîìïàíèÿ Microsoft ãàðàíòèðóåò, ÷òî ïîñëå îáíîâëåíèÿ ýêçåìïëÿðà ìîæíî áóäåò è äàëåå ïðîäîëæèòü ðàáîòó ñ äàííûìè, êàê ýòî âûïîëíÿëîñü äî åãî îáíîâëåíèÿ. Ïðîöåññ ìîäåðíèçàöèè SQL Server, íàïðèìåð, âåðñèè 2000 íåñêîëüêî îòëè÷àåòñÿ îò ïðîöåññà ìîäåðíèçàöèè SQL Server 7.0. Îá ýòîì ìû ïîãîâîðèì â ðàçäåëå 1.3.3 «Ïåðåíîñ áàç äàííûõ ñ SQL Server 7 èëè 2000 íà 2005». ×òî êàñàåòñÿ SQL Server âåðñèé 6.5, òî ïðÿìàÿ ìîäåðíèçàöèÿ ñåðâåðà äî âåðñèè 2005 íåâîçìîæíà. Î òîì, êàê ðåøèòü äàííóþ ïðîáëåìó, ìû ïîãîâîðèì â ðàçäåëå 1.3.1 «Îáíîâëåíèå SQL Server 6.5». Ïîñëå òîãî êàê ìîäåðíèçàöèÿ ýêçåìïëÿðà SQL Server âûïîëíåíà, ìîæíî ïðèñòóïèòü ê äîáàâëåíèþ èëè óäàëåíèþ îòäåëüíûõ êîìïîíåíòîâ. Ðàññìîòðèì áîëåå äåòàëüíî âîçìîæíûå âàðèàíòû ìîäåðíèçàöèè SQL Server. Äî âåðñèè 2005 ìîæíî ìîäåðíèçèðîâàòü ýêçåìïëÿðû SQL Server ñëåäóþùèõ âåðñèé: · SQL Server 2000 (+SP1–SP4); · SQL Server 7.0;
40
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
· SQL Server 2000 (64-bit); · MSDE (äî SQL Express Server 2005). Ïðè ýòîì óñòàíîâêà íîâûõ êîìïîíåíòîâ è ôàéëîâ áóäåò âûïîëíÿòüñÿ â òå æå ïàïêè, ÷òî è ýêçåìïëÿðû ïðåäûäóùåãî ñåðâåðà. Òàêæå îáðàòèòå âíèìàíèå íà òî, ÷òî äëÿ ñåðâèñîâ àíàëèòèêè (SQL Server 2000) ïåðåä îáíîâëåíèåì äî SQL Server 2005 ñíà÷àëà íåîáõîäèìî ïåðåíåñòè äàííûå â íîâûé ýêçåìïëÿð, à çàòåì óæå âûïîëíèòü îáíîâëåíèå. Äëÿ ñëåäóþùèõ âåðñèé SQL Server ìîäåðíèçàöèÿ íå ïîääåðæèâàåòñÿ: · SQL Server 6.5; · MSDE (äî âåðñèè SQL Server 2005).
1.3.1. Îáíîâëåíèå SQL Server 6.5 Ïðÿìîå îáíîâëåíèå ñ âåðñèè Microsoft SQL Server 6.5 äî âåðñèè SQL Server 2005 íåäîñòóïíî. Äëÿ òîãî ÷òîáû ðåøèòü äàííóþ ïðîáëåìó, íåîáõîäèìî ñíà÷àëà âûïîëíèòü îáíîâëåíèå SQL Server 6.5 äî îäíîé èç áîëåå ïîçäíèõ âåðñèé (íàïðèìåð, 7.0 èëè 2000), à çàòåì âûïîëíèòü ìîäåðíèçàöèþ îáíîâëåííîé âåðñèè äî SQL Server 2005.
1.3.2. Îáíîâëåíèå âåðñèé SQL Server 2000 Îáíîâëåíèþ äî íîâîé âåðñèè SQL Server ìîãóò ïîäâåðãàòüñÿ ñëåäóþùèå âåðñèè SQL Server 2000: · SQL Server 2000 Enterprise Edition; · SQL Server 2000 Developer Edition; · SQL Server 2000 Standard Edition; · SQL Server 2000 Personal Edition; · SQL Server 2000 Evaluation Edition; · MSDE. Äëÿ SQL Server 2000 Enterprise Edition äîñòóïíî îáíîâëåíèå äî âåðñèé SQL Server 2005 Standard, Developer, Enterprise èëè Workgroup Edition. SQL Server 2000 Developer Edition îáíîâëÿåòñÿ äî âåðñèè SQL Server 2005 Enterprise Edition. Îáíîâëåíèå SQL Server 2000 Standard Edition âîçìîæíî äî âåðñèé Developer, Enterprise èëè Workgroup. SQL Server 2000 Personal Edition ìîæíî îáíîâèòü äî âåðñèé Standard, Developer èëè Enterprise. Äëÿ MSDE äîñòóïíî îáíîâëåíèå òîëüêî äî âåðñèè SQL Server 2005 Express Edition.
1.3.3. Ïåðåíîñ áàç äàííûõ ñ SQL Server 7 èëè 2000 íà 2005 Ïðîöåññ îáíîâëåíèÿ SQL Server âåðñèé 7 èëè 2000 äî âåðñèè 2005 ïðàêòè÷åñêè íå îòëè÷àåòñÿ îò ïðîöåññà óñòàíîâêè ïîñëåäíåãî ïðîãðàììíîãî îáåñïå÷åíèÿ. Ìû íå áóäåì îñòàíàâëèâàòüñÿ íà ýòîì âîïðîñå, ïîñêîëüêó äåòàëüíî ðàññìîòðåëè åãî
1.3. Îáíîâëåíèå MS SQL Server 2005
41
â ðàçäåëå 1.2 «Óñòàíîâêà MS SQL Server 2005».  äàííîì ðàçäåëå ìû ïîñòàðàåìñÿ áîëåå äåòàëüíî ðàññìîòðåòü ïðîöåññ ïåðåíîñà áàç äàííûõ íà íîâóþ ïëàòôîðìó, à òàêæå îñòàíîâèìñÿ íà íåêîòîðûõ íþàíñàõ îáíîâëåíèÿ ñåðâèñîâ SQL Server. Äëÿ òîãî ÷òîáû âûïîëíèòü ïåðåíîñ áàç äàííûõ SQL Server ñ âåðñèé 7.0 èëè 2000, íåîáõîäèìî âîñïîëüçîâàòüñÿ óòèëèòîé Copy Database Wizard. Äàííàÿ óòèëèòà ïîçâîëÿåò âûïîëíÿòü ïåðåíîñ (è êîïèðîâàíèå) áàç äàííûõ ìåæäó îòäåëüíûìè ýêçåìïëÿðàìè SQL Server. Áîëå òîãî, äàííàÿ óòèëèòà îäèíàêîâî õîðîøî ðàáîòàåò ñ ðàçëè÷íûìè âåðñèÿìè SQL Server, ÷òî ïîçâîëÿåò èñïîëüçîâàòü åå â êà÷åñòâå òðàíçèòíîãî ïðèëîæåíèÿ. Âûïîëíèòå ñëåäóþùèé íàáîð äåéñòâèé â Copy Database Wizard äëÿ ïåðåíîñà äàííûõ: 1. Ðàçâåðíèòå â êîíñîëè ãðóïïó ñåðâåðîâ, à çàòåì ïàðàìåòðû ñàìîãî ñåðâåðà, ùåëêíóâ íà íåì óêàçàòåëåì ìûøè. 2. Ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà âûáðàííîì ñåðâåðå è âûáåðèòå ïóíêò ìåíþ All Tasks. 3. Âûáåðèòå ïóíêò ìåíþ Copy Database Wizard. 4. Âûïîëíèòå ïîñëåäîâàòåëüíîñòü äåéñòâèé, ïðåäëàãàåìóþ äàííûì ìàñòåðîì. 5. Ïîñëå òîãî êàê ïåðåíîñ áàç äàííûõ áóäåò çàâåðøåí, çàïóñòèòå ïðîöåäóðó sp_updatestats äëÿ òîãî, ÷òîáû âûïîëíèòü îáíîâëåíèå ñòàòèñòèêè ðàáîòû ñåðâåðà è óáåäèòüñÿ â òîì, ÷òî ïðîèçâîäèòåëüíîñòü ñêîïèðîâàííîé áàçû äàííûõ íàõîäèòñÿ íà çàäàííîì óðîâíå. Óñêîðèòü ïðîöåññ ïåðåâîäà ýêçåìïëÿðîâ Microsoft SQL Server âåðñèé 7.0 èëè 2000 íà ïëàòôîðìó SQL Server 2005 ìîæíî çà ñ÷åò èíòåãðàöèè íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server 7.0 èëè 2000 â îòäåëüíûé ýêçåìïëÿð SQL Server 2000 ñ ïîñëåäóþùèì îáíîâëåíèåì äî âåðñèè SQL Server 2005. Îáðàòèòå âíèìàíèå íà òî, ÷òî âî âðåìÿ îáíîâëåíèÿ áàç äàííûõ SQL Server 7.0 äî SQL Server 2000 ìîäåðíèçàöèÿ ýêçåìïëÿðà ïðîâîäèòñÿ òîëüêî äî èìåíîâàííîãî ýêçåìïëÿðà SQL Server. Îäíàêî â ñëó÷àå ïîäîáíîãî îáíîâëåíèÿ ñ óäàëåííîãî êîìïüþòåðà ìîäåðíèçàöèÿ ìîæåò áûòü òàêæå âûïîëíåíà è äî ýêçåìïëÿðà ïî óìîë÷àíèþ. Îáû÷íî âìåñòå ñ ÿäðîì SQL Server âûïîëíÿåòñÿ îáíîâëåíèå êîìïîíåíòîâ ïðîãðàììíîãî îáåñïå÷åíèÿ. Îñòàíîâèìñÿ íà ðàññìîòðåíèè ïðîöåññà îáíîâëåíèÿ ñåðâèñîâ àíàëèòèêè è ïðåîáðàçîâàíèÿ äàííûõ. Ïðîöåññ îáíîâëåíèÿ ñåðâèñîâ àíàëèòèêè SQL Server 2000 äî âåðñèè 2005 ìîæíî ðàçáèòü íà äâà ýòàïà. Íà ïåðâîì ýòàïå óñòàíàâëèâàþòñÿ ñåðâèñû àíàëèòèêè SQL Server 2005. Íà âòîðîì âûïîëíÿåòñÿ ìèãðàöèÿ áàç äàííûõ ñåðâèñîâ àíàëèòèêè SQL Server 2000 íà íîâóþ ïëàòôîðìó. Ïîäîáíûé ïîäõîä íåîáõîäèì, ïîñêîëüêó ôîðìàòû ïðåäñòàâëåíèÿ äàííûõ â ñåðâèñàõ àíàëèòèêè SQL Server ðàçíûõ âåðñèé íåñêîëüêî îòëè÷àþòñÿ äðóã îò äðóãà. Ïðè ýòîì ïðîöåññ ïåðåâîäà áàç äàííûõ òðåáóåò çíàíèÿ è èñïîëüçîâàíèÿ äîïîëíèòåëüíûõ óòèëèò (òàêèõ, êàê Migration Wizard, SQL Server Management Studio è äð.). Äëÿ òîãî ÷òîáû ïåðåâåñòè ñåðâèñû àíàëèòèêè ñ îäíîé âåðñèè íà äðóãóþ, âîñïîëüçóéòåñü ñëåäóþùèìè îáùèìè ðåêîìåíäàöèÿìè: 1. Óñòàíîâèòå èìåíîâàííûé ýêçåìïëÿð SQL Server 2005 Analysis Services, èñïîëüçóÿ ìàñòåð óñòàíîâêè SQL Server èëè êîìàíäíóþ ñòðîêó.
42
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
2. Âûïîëíèòå ïåðåíîñ ìåòàäàííûõ SQL Server 2000 Analysis Services íà ýêçåìïëÿð SQL Server 2005 Analysis Services ñ ïîìîùüþ Migration Wizard. 3. Çàïóñòèòå ýêçåìïëÿð SQL Server 2005 Analysis Services. Ýòî ïðèâåäåò ê òîìó, ÷òî ñåðâåð ñàìîñòîÿòåëüíî âûïîëíèò ïåðåíîñ â íîâóþ ñòðóêòóðó áàçû äàííûõ. 4. Âûïîëíèòå ïðîâåðêó öåëîñòíîñòè ïåðåíåñåííîé áàçû äàííûõ è åå ñòðóêòóðó ñ ïîìîùüþ SQL Server Management Studio. Âûïîëíèòå òåñòèðîâàíèå öåëîñòíîñòè äàííûõ è âîññòàíîâëåííûõ ñâÿçåé ñ ïîìîùüþ êëèåíòñêèõ ïðèëîæåíèé. 5.  ñëó÷àå óñïåøíîãî ïåðåíîñà äàííûõ âûïîëíèòå äåèíñòàëëÿöèþ SQL Server 2000 Analysis Services. 6. Ïîñëå çàâåðøåíèÿ äåèíñòàëëÿöèè âîñïîëüçóéòåñü èíñòðóìåíòîì Analysis Services Instance Rename äëÿ òîãî, ÷òîáû ïåðåèìåíîâàòü ýêçåìïëÿð SQL Server 2005 Analysis Services (åñëè ýòî íåîáõîäèìî) è íàçíà÷èòü ýòîò ýêçåìïëÿð â êà÷åñòâå èñïîëüçóåìîãî ïî óìîë÷àíèþ.  îòíîøåíèè ïðîöåññà îáíîâëåíèÿ SQL Server 2000 Data Transformation Services äî íîâîé âåðñèè äåëà îáñòîÿò íåñêîëüêî èíà÷å. Äåëî â òîì, ÷òî äàííûé êîìïîíåíò íå óñòàíàâëèâàåòñÿ ïî óìîë÷àíèþ, à ñëåäîâàòåëüíî, åãî íåîáõîäèìî àêòèâèðîâàòü â ïðîöåññå óñòàíîâêè. Åñëè ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ áûëè óñòàíîâëåíû âìåñòå ñ SQL Server 2000 è òðåáóåòñÿ èõ îáíîâëåíèå, òî çàïóñòèòå ìàñòåð óñòàíîâêè SQL Server 2005. Äîéäÿ äî ýòàïà âûáîðà êîìïîíåíòîâ SQL Server (ñòðàíèöà Components to Install ìàñòåðà óñòàíîâêè), âûáåðèòå êîìïîíåíò Data Transformation Services. Ïî çàâåðøåíèè ïðîöåññà óñòàíîâêè äàííûå ñåðâèñû áóäóò óñòàíîâëåíû.
1.3.4. Îáíîâëåíèå ðåïëèöèðóåìûõ áàç äàííûõ Îáíîâëÿÿ SQL Server äî âåðñèè 2005, òàêæå ìîæíî âûïîëíèòü îáíîâëåíèå ðåïëèöèðóåìûõ áàç äàííûõ. Ïðè ýòîì íåò íåîáõîäèìîñòè îñòàíàâëèâàòü ïðîöåäóðó ðåïëèêàöèè äëÿ îáíîâëåíèÿ êàêîãî-ëèáî óçëà ñõåìû áàç äàííûõ ñ ðåïëèêàöèåé. Îáíîâëåíèå ðåïëèöèðóåìûõ áàç äàííûõ íåîáõîäèìî âûïîëíÿòü â ñëåäóþùåì ïîðÿäêå: · Ðàñïðîñòðàíèòåëü (Distributor). Îáû÷íî âî ìíîãèõ ñõåìàõ ðåïëèêàöèè ðàñïðîñòðàíèòåëü è ñåðâåð ïóáëèêàöèé — ýòî îäèí è òîò æå êîìïüþòåð, îäíàêî ñóùåñòâóþò ñõåìû ðåïëèêàöèè, â êîòîðûõ ôóíêöèè ðàñïðîñòðàíèòåëÿ è ñåðâåðà ïóáëèêàöèé âûïîëíÿþò ðàçëè÷íûå êîìïüþòåðû. · Ñåðâåð ïóáëèêàöèé. · Ïîäïèñ÷èê. Ïîìèìî ó÷åòà ïîðÿäêà ìîäåðíèçàöèè ñåðâåðîâ, ó÷àñòâóþùèõ â ðåïëèêàöèè, âàì íåîáõîäèìî óáåäèòüñÿ â òîì, ÷òî îíè óäîâëåòâîðÿþò ñëåäóþùèì óñëîâèÿì: · âåðñèÿ SQL Server, óñòàíîâëåííàÿ íà ðàñïðîñòðàíèòåëå áîëüøå èëè ðàâíà âåðñèè SQL Server, óñòàíîâëåííîé íà ñåðâåðå ïóáëèêàöèé;
1.3. Îáíîâëåíèå MS SQL Server 2005
43
· ïîäïèñ÷èêè òðàíçàêöèîííûõ ïóáëèêàöèé äîëæíû èìåòü âåðñèè SQL Server íå íèæå SQL Server 2000 SP3; · ïîäïèñ÷èêè, âûïîëíÿþùèå òîëüêî ÷òåíèå, äîëæíû èìåòü âåðñèþ SQL Server, êîòîðàÿ ìåíüøå èëè ðàâíà âåðñèè SQL Server ñåðâåðà ïóáëèêàöèè; · ïîäïèñ÷èêè, âûïîëíÿþùèå îáúåäèíÿþùóþ ðåïëèêàöèþ, äîëæíû èìåòü SQL Server âåðñèè íå íèæå 2000 SP3. Ïîñëå òîãî êàê îáíîâëåíèå êàæäîãî óçëà áóäåò âûïîëíåíî, çàïóñòèòå Snapshot Agent íà êàæäîì ñåðâåðå ïóáëèêàöèé äëÿ âûïîëíåíèÿ ïóáëèêàöèè äàííûõ. Íà êàæäîì ñåðâåðå-ïîäïèñ÷èêå äëÿ êàæäîé ïîäïèñêè çàïóñòèòå Merge Agent.
1.3.5. Áåçîïàñíîñòü è ðåïëèêàöèÿ  ïðåäûäóùèõ âåðñèÿõ SQL Server ïî óìîë÷àíèþ àãåíò çàïóñêàëñÿ îò èìåíè ó÷åòíîé çàïèñè SQL Server Agent.  íîâîé âåðñèè SQL Server äîáàâèëèñü íå òîëüêî äîïîëíèòåëüíûå ôóíêöèè áåçîïàñíîñòè, íî è ñâîáîäà â çàïóñêå ïðèëîæåíèé. Òåïåðü àãåíò ðåïëèêàöèè ìîæåò áûòü çàïóùåí îò èìåíè ëþáîé ó÷åòíîé çàïèñè. Îò èìåíè ýòîé çàïèñè ìîãóò âûïîëíÿòüñÿ ëþáûå äåéñòâèÿ, äîñòóïíûå àãåíòó: ïîäêëþ÷åíèå ê áàçàì äàííûõ è äðóãèì èñòî÷íèêàì äàííûõ, èçâëå÷åíèå è ìàíèïóëèðîâàíèå äàííûìè, îãðàíè÷åíèå äîñòóïà è äð. Áîëåå òîãî, â ñëó÷àå ñóùåñòâîâàíèÿ â ñèñòåìå íåñêîëüêèõ àãåíòîâ êàæäûé èç íèõ ìîæåò áûòü çàïóùåí îò èìåíè îòäåëüíîé ó÷åòíîé çàïèñè. Ýòî ïîçâîëèò áîëåå òî÷íî êîíòðîëèðîâàòü ðàáîòó è äîñòóï ê ðåñóðñàì îòäåëüíî âçÿòîãî àãåíòà, îäíàêî òðåáîâàíèÿ ê áåçîïàñíîñòè ïðè ýòîì ìîãóò âîçðàñòè íà ïîðÿäîê. Îñòàíîâèìñÿ áîëåå äåòàëüíî íà ðàññìîòðåíèè íîâûõ âîçìîæíîñòåé, êîòîðûå ïîÿâèëèñü â SQL Server 2005 â îòíîøåíèè ìîäåëè áåçîïàñíîñòè ïðè èñïîëüçîâàíèè ñõåìû ðåïëèêàöèè: · Ñöåíàðèè ðåïëèêàöèè, êîòîðûå ñîçäàâàëèñü ñ èñïîëüçîâàíèåì ñðåäñòâ SQL Server 7.0 è 2000, äîëæíû áûòü îáíîâëåíû äëÿ òîãî, ÷òîáû ìîæíî áûëî èõ èñïîëüçîâàòü äëÿ ðàáîòû SQL Server 2005. · Íà ñåðâåðàõ ðàñïðîñòðàíèòåëÿ è ïîäïèñ÷èêà äîëæíà áûòü óñòàíîâëåíà âåðñèÿ 2005 SQL Server.  ýòîì ñëó÷àå ìîæåò îêàçàòüñÿ òàê, ÷òî àãåíò ðåïëèêàöèè áóäåò ïðîäîëæàòü èñïîëüçîâàòü ó÷åòíóþ çàïèñü SQL Server Agent. Äàííàÿ ó÷åòíàÿ çàïèñü èìååò áîëüøå ïðèâèëåãèé, ÷åì òðåáóåòñÿ â íåêîòîðûõ ñëó÷àÿõ. Ïîýòîìó ïîñëå îáíîâëåíèÿ âåðñèè ïðîãðàììíîãî îáåñïå÷åíèÿ ðåêîìåíäóåòñÿ ñîçäàòü îòäåëüíóþ ó÷åòíóþ çàïèñü äëÿ àãåíòà ðåïëèêàöèè, êîòîðàÿ áóäåò èìåòü ìèíèìàëüíûå ïðèâèëåãèè. Äëÿ ñîçäàíèÿ îòäåëüíîé ó÷åòíîé çàïèñè âûïîëíèòå ñëåäóþùèå äåéñòâèÿ:
1) 2) 3) 4)
ðàçäåëèòå ñöåíàðèè ïóáëèêàöèè è ïîäïèñêè; âíåñèòå èçìåíåíèÿ â ñöåíàðèè ïóáëèêàöèè è ïîäïèñêè; óäàëèòå ïóáëèêàöèþ è ïîäïèñêó èç áàçû äàííûõ; ñîçäàéòå íîâóþ ïóáëèêàöèþ è ïîäïèñêó ñ èñïîëüçîâàíèåì íîâûõ ñöåíàðèåâ.
44
Ãëàâà 1 • Îáùèå ïîëîæåíèÿ, óñòàíîâêà è îáíîâëåíèå SQL Server 2005
Îáðàòèòå âíèìàíèå íà òî, ÷òî ëþáîé àãåíò ðåïëèêàöèè ìîæåò áûòü íàñòðîåí òàêèì îáðàçîì, ÷òî îí áóäåò èñïîëüçîâàòü àóòåíòèôèêàöèþ êàê SQL Server, òàê è Windows. Ïðè ýòîì ïåðâûé òèï àóòåíòèôèêàöèè èñïîëüçóåòñÿ îáû÷íî äëÿ ñîåäèíåíèÿ ñ ëîêàëüíîé áàçîé (ýêçåìïëÿð êîòîðîé ðàñïîëàãàåòñÿ íà îäíîì êîìïüþòåðå ñ àãåíòîì ðåïëèêàöèè). Àóòåíòèôèêàöèÿ Windows îáû÷íî èñïîëüçóåòñÿ äëÿ ïîäêëþ÷åíèÿ ê êîìïüþòåðó, êîòîðûé íàõîäèòñÿ âíóòðè ëîêàëüíîé ñåòè.  ïðîöåññå èñïîëüçîâàíèÿ ñèñòåìû áåçîïàñíîñòè äëÿ ñõåìû ðåïëèêàöèè ìîæåò ñëó÷èòüñÿ òàê, ÷òî â êîìïàíèè ïî êàêèì-òî ïðè÷èíàì áóäåò ïðèíÿòî ðåøåíèå îñòàâèòü ñèñòåìó áåçîïàñíîñòè àãåíòà ðåïëèêàöèè. Ýòî îçíà÷àåò, â ïåðâóþ î÷åðåäü, ÷òî äëÿ àãåíòà ðåïëèêàöèè íå áóäåò ñîçäàíà îòäåëüíàÿ ó÷åòíàÿ çàïèñü, îò èìåíè êîòîðîé îí áóäåò âûïîëíÿòü êàêèå-ëèáî äåéñòâèÿ â ñèñòåìå. Ýòî ìîæåò ñêàçàòüñÿ íà îáùåé áåçîïàñíîñòè ñèñòåìû. Âî âðåìÿ ïåðåõîäíîãî ïåðèîäà (äî îáíîâëåíèÿ ñåðâåðà SQL äî âåðñèè 2005) ñëåäóéòå ñëåäóþùèì ðåêîìåíäàöèÿì: · Ñåðâåð ïóáëèêàöèé ðàáîòàåò íà îñíîâå ñèñòåìû SQL Server 7.0 èëè 2000, ðàñïðîñòðàíèòåëü äëÿ ñâîåé ðàáîòû èñïîëüçóåò SQL Server 2005. Ïðè ýòîì íåëüçÿ èñïîëüçîâàòü íîâóþ ñèñòåìó áåçîïàñíîñòè àãåíòà ðåïëèêàöèè, ïîñêîëüêó àãåíò èñïîëüçóåòñÿ äëÿ îáåñïå÷åíèÿ ðàáîòû ñåðâåðà ïóáëèêàöèé. · Ïîäïèñ÷èê, èñïîëüçóþùèé pull-ïîäïèñêó, ðàáîòàåò íà îñíîâå SQL Server 7.0 èëè 2000 è íå ìîæåò èñïîëüçîâàòü â ñâîåé ðàáîòå íîâóþ ñèñòåìó áåçîïàñíîñòè, ïîñêîëüêó àãåíò ñîçäàåòñÿ íà ñòîðîíå ïîäïèñ÷èêà. · Ðàñïðîñòðàíèòåëü, èñïîëüçóþùèé pull-ïîäïèñêó è ðàáîòàþùèé íà îñíîâå SQL Server 2005, è ïîäïèñ÷èê, ðàáîòàþùèé íà îñíîâå SQL Server 7.0 èëè 2000, íå ñìîãóò èñïîëüçîâàòü íîâóþ ñèñòåìó áåçîïàñíîñòè, ïîñêîëüêó àãåíòû ñîçäàþòñÿ è èñïîëüçóþòñÿ íà ñòîðîíå ðàñïðîñòðàíèòåëÿ.
1.3.6. Îáíîâëåíèå êëàñòåðà äî âåðñèè SQL Server 2005 Âî âðåìÿ îáíîâëåíèÿ êëàñòåðà äî âåðñèè SQL Server 2005 ðàçðåøàåòñÿ èñïîëüçîâàíèå òîëüêî îäíîãî ýêçåìïëÿðà SQL Server. Ýòîò ýêçåìïëÿð äîëæåí âûñòóïàòü â êà÷åñòâå îòäåëüíîãî åêçåìïëÿðà, íà îñíîâå êîòîðîãî ñòðîèòñÿ ñõåìà êëàñòåðîâ, èëè â êà÷åñòâå ýêçåìïëÿðà MSDE èëè SQL Server Express, êîòîðûé çàïóùåí íà îäíîì èç óçëîâ ñõåìû êëàñòåðîâ. Äëÿ òîãî ÷òîáû âûïîëíèòü îáíîâëåíèå SQL Server, âõîäÿùåãî â ñîñòàâ ñõåìû êëàñòåðîâ, äî íîâîé âåðñèè ïðîãðàììíîãî ïðîäóêòà, âàì íåîáõîäèìî ñíà÷àëà âûâåñòè äàííûé ñåðâåð èç ñõåìû êëàñòåðîâ. Äëÿ ýòîãî ìîæíî âîñïîëüçîâàòüñÿ óòèëèòîé Cluster Wizard, êîòîðàÿ âõîäèò â ñîñòàâ SQL Server 7.0. Ïîñëå òîãî êàê âû çàêîí÷èòå îáíîâëåíèå îòäåëüíîãî ýêçåìïëÿðà SQL Server äî âåðñèè 2005, ìîæíî áóäåò ñíîâà âêëþ÷èòü ýòîò ñåðâåð ñ ïîìîùüþ óòèëèòû Cluster Wizard â ñîñòàâ ñõåìû êëàñòåðèçàöèè.  ïðåäûäóùèõ âåðñèÿõ SQL Server ïîìèìî ýêçåìïëÿðà, èñïîëüçóþùåãîñÿ äëÿ êëàñòåðèçàöèè, íà êîìïüþòåðå íå ìîãëî áûòü óñòàíîâëåíî äðóãèõ ýêçåìïëÿðîâ SQL Server. Íà ñåðâåðàõ ñ SQL Server 7.0 ìîæíî áûëî óñòàíàâëèâàòü äâà ýêçåìïëÿðà (îäèí äëÿ ñõåìû êëàñòåðîâ, äðóãîé — äëÿ ðåøåíèÿ äðóãèõ çàäà÷), îäíàêî ýòî ïðèâîäèëî ê êîíôëèêòàì âî âðåìÿ èñïîëüçîâàíèÿ êàê ñõåìû êëàñòåðèçàöèè, òàê è äðóãèõ ïðèëîæåíèé. Êîíôëèêòû ïðîèñõîäèëè èç-çà òîãî, ÷òî îáà ýêçåìïëÿðà äëÿ ñåðâåðà ÿâëÿëèñü ýêçåìïëÿðàìè, èñïîëüçóåìûìè ïî óìîë÷àíèþ.
Àäìèíèñòðèðîâàíèå SQL Server 2005
2
Äî ñèõ ïîð âñå ïîñëåäíèå âåðñèè ïðîäóêòà ëèíåéêè SQL Server áûëè ñîçäàíû íà îñíîâå ÿäðà SQL Server 7.0. Êîëè÷åñòâî çàäà÷, à òàêæå èõ ñëîæíîñòü ðîñëè íåèìîâåðíûìè òåìïàìè, è Microsoft íåîáõîäèìî áûëî âíåñòè ðåâîëþöèîííûå èçìåíåíèÿ â SQL Server ñ âûõîäîì íîâîé âåðñèè ýòîãî ïðîãðàììíîãî ïðîäóêòà. Óñëîæíÿåò ýòîò ïðîöåññ â ïåðâóþ î÷åðåäü óâåëè÷åíèå êðóãà çàäà÷, ðåøàåìûõ ñåðâåðàìè áàç äàííûõ. Òåïåðü íåäîñòàòî÷íî èìåòü ÿäðî, âûïîëíÿþùåå ôóíêöèè ñ äàííûìè. Íåîáõîäèìî îáåñïå÷èòü íàáîð ñåðâèñîâ, êîòîðûå ìîãóò îáðàáàòûâàòü çàïðîñû ïîëüçîâàòåëåé è ïðåäîñòàâëÿòü èì ñîîòâåòñòâóþùèå àãðåãàöèè äàííûõ. Ê ïîäîáíûì ñåðâèñàì ìîæíî îòíåñòè ñåðâèñû àíàëèòèêè, îò÷åòîâ, ïðåîáðàçîâàíèÿ äàííûõ è äð. Âñå îíè ñóùåñòâîâàëè â ïðåäûäóùåé âåðñèè Microsoft SQL Server, íî â äàííîé âåðñèè èõ ôóíêöèè çíà÷èòåëüíî äîïîëíåíû è ðàñøèðåíû. Ïîìèìî ýòîãî SQL Server 2005 âîáðàë â ñåáÿ âñå ïðåèìóùåñòâà, áàçèðóþùèåñÿ íà îñíîâå íîâîãî àïïàðàòíîãî îáåñïå÷åíèÿ, êîòîðîå ìîæåò óäîâëåòâîðèòü ëþáîãî êîðïîðàòèâíîãî ïîëüçîâàòåëÿ.  òî æå âðåìÿ ñïåöèàëèñòàìè Microsoft áûëè äîáàâëåíû íîâûå ôóíêöèè è ïåðåñìîòðåíû èìåþùèåñÿ, ÷òî, â êîíöå êîíöîâ, ïðèâåëî ê óïðîùåíèþ êîíôèãóðèðîâàíèÿ è àäìèíèñòðèðîâàíèÿ ñåðâåðà, à òàêæå ïîçâîëèëî äîáàâèòü íîâóþ ôóíêöèîíàëüíîñòü.  ýòîé ãëàâå ìû ïåðå÷èñëèì è äåòàëüíî ðàññìîòðèì íåêîòîðûå íîâîââåäåíèÿ, êîòîðûå ïîÿâèëèñü â ïîñëåäíåé âåðñèè Microsoft SQL Server 2005, à òàêæå ïîñòàðàåìñÿ êîðîòêî ðàçîáðàòüñÿ ñ âëèÿíèåì ýòèõ ïðåèìóùåñòâ íà îáùóþ ôóíêöèîíàëüíîñòü ïðîãðàììíîãî ïðîäóêòà è ðåøåíèé íà åãî îñíîâå. Áîëåå äåòàëüíî ìíîãèå èç ïðåèìóùåñòâ è íîâîââåäåíèé áóäóò íàìè ðàññìîòðåíû â ïîñëåäóþùèõ ãëàâàõ äàííîé êíèãè.  ðàçäåëå 2.1 «ßäðî SQL Server 2005» ìû îñòàíîâèìñÿ íà óëó÷øåíèÿõ, êîñíóâøèõñÿ îáùèõ ìåõàíèçìîâ, êîòîðûå ÿâëÿþòñÿ æèçíåííî âàæíûìè äëÿ ðàáîòû SQL Server 2005. Ðàçäåë 2.2 «SQL Server è íîâîå àïïàðàòíîå îáåñïå÷åíèå» áóäåò ïîñâÿùåí ïîääåðæêå íîâîãî àïïàðàòíîãî îáåñïå÷åíèÿ (òàêîãî, êàê ëîãè÷åñêèå ïðîöåññîðû, íîâàÿ àðõèòåêòóðà ïàìÿòè è 64-ðàçðÿäíûå ñèñòåìû). Çàêîí÷èì äàííûé
46
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
ðàçäåë ðàññìîòðåíèåì âîïðîñîâ áåçîïàñíîñòè SQL Server. Ýòîìó áóäåò ïîñâÿùåíà îòäåëüíàÿ ãëàâà êíèãè, îäíàêî îñíîâíûå óëó÷øåíèÿ áóäóò î÷åð÷åíû íàìè â ðàçäåëå 2.3 «Áåçîïàñíîñòü» äàííîé ãëàâû.
2.1. ßäðî SQL Server 2005  ñëåäóþùåì ðàçäåëå ìû ðàññìîòðèì àïïàðàòíóþ ñîñòàâëÿþùóþ ñèñòåì, íà êîòîðûõ áóäåò ðàáîòàòü SQL Server 2005.  äàííîì ðàçäåëå ìû ïîñòàðàåìñÿ áîëåå äåòàëüíî îñòàíîâèòüñÿ íà ðàññìîòðåíèè ïðîãðàììíîé ñîñòàâëÿþùåé: ïðèìåíåíèå íîâûõ òèïîâ äàííûõ, êîòîðûå áûëè ñîçäàíû è èñïîëüçîâàíû â íîâîé âåðñèè ýòîãî ïðîãðàììíîãî ïðîäóêòà; âîçìîæíîñòè òðèããåðîâ è ñîáûòèé; èñïîëüçîâàíèå ìåòîäîâ äåêîìïîçèöèè äàííûõ; èñïîëüçîâàíèå ñðåäû ðàçðàáîòêè .NET Framework, ñðåäñòâ ïîëíîòåêñòîâîãî ïîèñêà è èíäåêñèðîâàíèÿ. Âñå ýòè âîçìîæíîñòè è òåõíîëîãèè ïðèçâàíû óâåëè÷èòü ñêîðîñòü ðàáîòû ñèñòåì íà àïïàðàòíîì óðîâíå.  äàííîì ðàçäåëå ìû áîëåå äåòàëüíî îñòàíîâèìñÿ íà íîâûõ âîçìîæíîñòÿõ ÿäðà SQL Server, íå âäàâàÿñü äåòàëüíî â ðàññìîòðåíèå áîëåå ñëîæíûõ è êîìïëåêñíûõ âîïðîñîâ óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè SQL Server 2005.
2.1.1. Îãðàíè÷åíèå íà êîëè÷åñòâî ýêçåìïëÿðîâ SQL Server 2000 ïîçâîëÿë ïîääåðæèâàòü äî 16 ýêçåìïëÿðîâ, çàïóùåííûõ íà îäíîì îòäåëüíî âçÿòîì êîìïüþòåðå. Îáû÷íî ïîäîáíîå êîëè÷åñòâî ýêçåìïëÿðîâ ïîçâîëÿëî óäîâëåòâîðèòü áîëüøóþ ÷àñòü êîðïîðàòèâíûõ êëèåíòîâ, èñïîëüçóþùèõ â ñâîåé ðàáîòå îãðîìíîå ÷èñëî ýêçåìïëÿðîâ.  ïåðâóþ î÷åðåäü ýòî îòíîñèëîñü ê òåì ïðåäïðèÿòèÿì, êîòîðûå èìåëè äîñòàòî÷íî ìíîãî ðàçíîðîäíûõ ñèñòåì, ïîçâîëÿâøèõ àâòîìàòèçèðîâàòü ðàçëè÷íûå îáëàñòè ðàáîòû ïðåäïðèÿòèÿ. Îäíàêî íåêîòîðîå ÷èñëî íàèáîëåå êðóïíûõ êîðïîðàòèâíûõ êëèåíòîâ îñòàâàëèñü çà áîðòîì ïîäîáíîé àâòîìàòèçàöèè, ïîñêîëüêó SQL Server 2000 îãðàíè÷èâàë èõ â êîëè÷åñòâå äîñòóïíûõ ýêçåìïëÿðîâ íà îäíîì êîìïüþòåðå. Ñ âûõîäîì SQL Server 2005 êîëè÷åñòâî äîñòóïíûõ ýêçåìïëÿðîâ íà îòäåëüíîì êîìïüþòåðå óâåëè÷åíî äî 50. Ýòî ïîçâîëèò íå òîëüêî ðàçâîðà÷èâàòü áîëüøåå ÷èñëî ïðèëîæåíèé íà îòäåëüíî âçÿòîì ñåðâåðå, íî è ýêîíîìèòü íà êîëè÷åñòâå ëèöåíçèé (â ñëó÷àå ïðèîáðåòåíèÿ SQL Server 2005 â ðàñ÷åòå íà êîëè÷åñòâî ïðîöåññîðîâ ñåðâåðà).
2.1.2. Óëó÷øåíèÿ ìåõàíèçìà èíäåêñàöèè Äîñòàòî÷íî ìíîãî èçìåíåíèé ïðîèçîøëî ñ ìåõàíèçìîì èíäåêñàöèè â SQL Server 2005. Âî-ïåðâûõ, èçìåíåíèÿ êîñíóëèñü ìåòîäîâ ðàáîòû ñ èíäåêñàìè â ñëó÷àå èñïîëüçîâàíèÿ êëàñòåðíîé ñõåìû. Ïðè ýòîì íåò íåîáõîäèìîñòè ïåðåñòðàèâàòü èíäåêñû óçëîâ êëàñòåðà ïîñëå ïåðåñòðîéêè èíäåêñà êëàñòåðà.  SQL Server 2000 ïåðåñòðîéêà èíäåêñîâ óçëîâ, êîòîðûå çàâèñÿò îò êëàñòåðíîãî èíäåêñà, âûïîëíÿëàñü àâòîìàòè÷åñêè, è àäìèíèñòðàòîð íå ìîã ïîâëèÿòü íà ýòîò ïðîöåññ.  SQL Server 2005 àäìèíèñòðàòîð ìîæåò íàñòðîèòü ïåðåñòðîéêó èíäåêñîâ òàêèì îáðàçîì, ÷òî ïåðåñòðîéêà êëàñòåðíîãî èíäåêñà íèêàê íå áóäåò âëèÿòü íà èíäåêñû, çàâèñÿùèå îò íåãî.
2.1. ßäðî SQL Server 2005
47
Âòîðîå íîâøåñòâî, êîòîðîå ïîÿâèëîñü â ìåõàíèçìå èíäåêñàöèè SQL Server 2005, — ýòî âîçìîæíîñòü äîáàâëåíèÿ íåêëþ÷åâîé êîëîíêè â òàáëèöó èíäåêñà. Òàêèì îáðàçîì, ìîæíî íå òîëüêî âíîñèòü â èíäåêñ îïðåäåëåííûå äàííûå, íî è óïðîñòèòü çàïðîñû (ïîñêîëüêó äàííûå, ïîëó÷àåìûå â ðåçóëüòàòå ïîäçàïðîñîâ, ïðåäâàðèòåëüíî ìîãóò áûòü âíåñåíû â òàáëèöó èíäåêñà). Òàêæå ñòîèò çàìåòèòü, ÷òî çà ñ÷åò äîáàâëåíèÿ íåñêîëüêèõ êîëîíîê â òàáëèöó èíäåêñà çíà÷èòåëüíî ìîæåò áûòü óâåëè÷åíà ñêîðîñòü îáðàáîòêè äàííûõ è ñîñòàâëåíèå âûáîðîê. Äîáàâëåíèå îäíîé èëè íåñêîëüêèõ êîëîíîê â òàáëèöó èíäåêñà íå âëèÿåò íà ìàêñèìàëüíûé ðàçìåð èíäåêñà, êîòîðûé, êàê è ðàíåå, ñîñòàâëÿåò 900 áàéò. Èíòåðåñíûì íîâîââåäåíèåì â îòíîøåíèè èíäåêñîâ ÿâëÿåòñÿ òî, ÷òî â SQL Server 2005 ìîæíî îòêëþ÷àòü èíäåêñû. Îòêëþ÷åíèå èíäåêñîâ ïðèâîäèò ê òîìó, ÷òî ÿäðî SQL Server 2005 íå èñïîëüçóåò èõ, à îáðàùàåòñÿ íàïðÿìóþ ê ñîîòâåòñòâóþùèì òàáëèöàì. Îòêëþ÷åíèå èíäåêñà ìîæåò èñïîëüçîâàòüñÿ, â ïåðâóþ î÷åðåäü, äëÿ îñâîáîæäåíèÿ õðàíèëèùà ïîä ðåøåíèå äðóãèõ çàäà÷. Îäíàêî âî âðåìÿ îòêëþ÷åíèÿ èíäåêñà ìåòàäàííûå èíäåêñà îñòàþòñÿ äîñòóïíûìè äëÿ ïîëüçîâàòåëÿ èëè ñòîðîííåãî ïðèëîæåíèÿ. Ïîñêîëüêó îòêëþ÷åíèå èíäåêñà ïðèâîäèò ê åãî óäàëåíèþ èç õðàíèëèùà, òî ïåðåä òåì, êàê îí áóäåò âíîâü çàäåéñòâîâàí, íåîáõîäèìî åãî ïåðåñòðîèòü. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà ALTER INDEX.  ïðåäûäóùåé âåðñèè SQL Server ïîëüçîâàòåëü íå ìîã ïîëó÷èòü äîñòóï ê èíäåêñó, êîòîðûé ïåðåñòðàèâàåòñÿ, äî òåõ ïîð, ïîêà ïåðåñòðîéêà èíäåêñà íå áóäåò çàêîí÷åíà.  íîâîé âåðñèè SQL Server ïîëüçîâàòåëü ìîæåò âûïîëíÿòü äîáàâëåíèå äàííûõ, èõ èçìåíåíèå è óäàëåíèå â òî âðåìÿ, ïîêà âûïîëíÿåòñÿ ïåðåñòðîéêà èíäåêñà. Áîëåå äåòàëüíî îá ýòîé ôóíêöèîíàëüíîñòè SQL Server ìû ïîãîâîðèì â ðàçäåëå 2.1.2 «Óëó÷øåíèÿ ìåõàíèçìà èíäåêñàöèè».
2.1.3. Íîâûå òèïû äàííûõ  SQL Server 2005 ïîÿâèëîñü íåñêîëüêî íîâûõ òèïîâ äàííûõ, êîòîðûå ðàñøèðÿþò ñóùåñòâóþùèé íàáîð è ïîçâîëÿþò ðàçðàáîò÷èêàì ñîçäàâàòü áîëåå ñëîæíûå ïðèëîæåíèÿ ïî îáðàáîòêå äàííûõ. Ïîìèìî èñïîëüçîâàíèÿ íîâûõ òèïîâ, ñóùåñòâóåò âîçìîæíîñòü ñîçäàâàòü ïîëüçîâàòåëüñêèå, ïðèìåíÿÿ ôóíêöèîíàëüíîñòü Microsoft .NET Framework íà ïðàêòèêå.  SQL Server 2005 ïî ñðàâíåíèþ ñ SQL Server 2000 ïîÿâèëîñü äâà íîâûõ òèïà äàííûõ: · Varbinary(max) — íîâûé ìåòîä èñïîëüçîâàíèÿ â SQL Server òåõíîëîãèè LOB. Ïðè ýòîì äàííûé òèï ìîæåò èñïîëüçîâàòüñÿ íå òîëüêî äëÿ õðàíåíèÿ òåêñòà è êàðòèíîê, íî è â êà÷åñòâå ïåðåìåííîé, êîòîðóþ ìîãóò âûçûâàòü ðàçðàáîò÷èêè èç ñâîèõ ïðèëîæåíèé; · XML — íîâûé òèï äàííûõ, êîòîðûé ÿâëÿåòñÿ ðåçóëüòàòîì íàñëåäîâàíèÿ òèïà Varbinary. Îí ïîçâîëÿåò õðàíèòü äàííûå â ôîðìàòå XML â áàçå äàííûõ. Îäíàêî â îòëè÷èå îò Varbinary òèï äàííûõ XML ïîçâîëÿåò âûïîëíÿòü íå òîëüêî õðàíåíèå XML-äîêóìåíòîâ, íî è âåðèôèêàöèþ ñõåìû äîêóìåíòà â ôîðìàòå XML. Áëàãîäàðÿ ýòîìó ìîæíî ïåðåëîæèòü íåêîòîðûå çàäà÷è ïî ïðîâåðêå öåëîñòíîñòè ïîäîáíûõ äîêóìåíòîâ íà ñèñòåìó è íå ñîçäàâàòü
48
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
ïðèëîæåíèÿ, îðèåíòèðîâàííûå íà ïðîâåðêó ïðàâèëüíîñòè ñîçäàíèÿ XML-äîêóìåíòîâ. Áîëåå äåòàëüíî âîïðîñû, ñâÿçàííûå ñ òèïîì äàííûõ XML, ìû ðàññìîòðèì â ðàçäåëå 11.1 «Òèï äàííûõ XML». Ïîìèìî äîáàâèâøèõñÿ òèïîâ äàííûõ, ðàçðàáîò÷èêè ìîãóò ñîçäàâàòü ñâîè ñîáñòâåííûå è èñïîëüçîâàòü èõ â ïðèëîæåíèÿõ. Òàêèå òèïû äàííûõ ìîãóò áûòü íàñëåäîâàíû îò ñóùåñòâóþùèõ òèïîâ äàííûõ.
2.1.4. Íîâûå êîìàíäû ïîëíîòåêñòîâîãî ïîèñêà Ïåðåðàáîòêå è óëó÷øåíèþ â Microsoft SQL Server 2005 òàêæå ïîäâåðãñÿ ìåõàíèçì ïîëíîòåêñòîâîãî ïîèñêà.  ïðåäûäóùèõ âåðñèÿõ SQL Server òðåáîâàëîñü èñïîëüçîâàòü ñïåöèàëüíûå õðàíèìûå ïðîöåäóðû, êîòîðûå ñîçäàâàëè è îáíîâëÿëè êàòàëîã ïîëíîòåêñòîâîãî ïîèñêà. Àíàëîãè÷íûì îáðàçîì ïîëíîòåêñòîâûé ïîèñê ðåàëèçîâàí è â íîâîé âåðñèè SQL Server, îäíàêî äîáàâëåíî íåñêîëüêî íîâûõ êîìàíä, êîòîðûå äîëæíû óïðîñòèòü ðàáîòó àäìèíèñòðàòîðîâ è ðàçðàáîò÷èêîâ. Ê ýòèì DDL-êîìàíäàì îòíîñÿòñÿ ñëåäóþùèå: · CREATE FULLTEXT CATALOG — ñîçäàíèå êàòàëîãà ïîëíîòåêñòîâîãî ïîèñêà; · CREATE FULLTEXT INDEX — ñîçäàíèå èíäåêñà ïîëíîòåêñòîâîãî ïîèñêà. Òåïåðü, èñïîëüçóÿ äàííûå êîìàíäû, ìîæíî ñîçäàâàòü íåîãðàíè÷åííîå ÷èñëî êàòàëîãîâ ïîëíîòåêñòîâîãî ïîèñêà è ïðè íåîáõîäèìîñòè èíäåêñèðîâàòü èõ äëÿ óâåëè÷åíèÿ ñêîðîñòè ðàáîòû. Òàêæå ñòîèò îòìåòèòü, ÷òî â íîâîé âåðñèè SQL Server ïîÿâèëàñü âîçìîæíîñòü íå òîëüêî ñîçäàâàòü, íî è âûïîëíÿòü ðåçåðâíîå êîïèðîâàíèå è âîññòàíîâëåíèå èç ðåçåðâíîé êîïèè êàòàëîãà ïîëíîòåêñòîâîãî ïîèñêà. Êàòàëîãè ïîëíîòåêñòîâîãî ïîèñêà ìîãóò áûòü ïðèêðåïëåíû ê ñîîòâåòñòâóþùåé áàçå. Ïðè íåîáõîäèìîñòè äàííûå êàòàëîãè ìîãóò áûòü îòêðåïëåíû îò áàçû äàííûõ ñ öåëüþ ïåðåíîñà íà äðóãóþ àíàëîãè÷íóþ (íàïðèìåð, ðåïëèöèðîâàííóþ èëè çåðêàëüíóþ) áàçó äàííûõ. Åùå îäíîé èíòåðåñíîé îñîáåííîñòüþ SQL Server 2005 ÿâëÿåòñÿ âîçìîæíîñòü èñïîëüçîâàòü òåçàóðóñ äëÿ ïîèñêà ñèíîíèìè÷åñêèõ ñëîâ è âûðàæåíèé. Ýòî óñêîðÿåò è çíà÷èòåëüíî ðàñøèðÿåò âîçìîæíîñòè ïîèñêà.
2.1.5. Ìîìåíòàëüíûé ñíèìîê áàçû äàííûõ è çåðêàëèðîâàíèå Êîìïàíèè, äëÿ êîòîðûõ äàííûå ÿâëÿþòñÿ äîñòàòî÷íî áîëüøîé öåííîñòüþ è èõ ïîòåðÿ ðàâíîöåííà ïîòåðå äåíåã, êëèåíòîâ èëè èõ ëîÿëüíîñòè, îáû÷íî ñòàðàþòñÿ îáåçîïàñèòü ñåáÿ îò ñëó÷àéíîé èëè ïðåäíàìåðåííîé ïîòåðè äàííûõ. Òàêàÿ ïîòåðÿ ìîæåò ïðîèçîéòè â ðåçóëüòàòå íåêîìïåòåíòíîñòè ñîòðóäíèêîâ, ñáîåâ â ðàáîòå ñèñòåìû èëè äåéñòâèé ñòîðîííèõ ëèö. Îäíèì èç ðàñïðîñòðàíåííûõ ñïîñîáîâ èçáåæàòü ïîòåðè äàííûõ ÿâëÿåòñÿ èñïîëüçîâàíèå ìåõàíèçìà çåðêàëèðîâàíèÿ áàç äàííûõ. Çåðêàëèðîâàíèå — ýòî ìåõàíèçì äóáëèðîâàíèÿ äàííûõ íà íåñêîëüêèõ ðàáîòàþùèõ íåçàâèñèìî äðóã îò äðóãà ñåðâåðàõ. Âî âðåìÿ èñïîëüçîâàíèÿ äàííîé òåõíîëîãèè äîñòèãàåòñÿ èçáûòî÷íîñòü õðàíåíèÿ äàííûõ è çà ñ÷åò ýòîãî óâåëè÷èâàåòñÿ íàäåæíîñòü. Çåðêàëèðîâàíèå ïðåêðàñíî çàðåêîìåíäîâàëî ñåáÿ íå òîëüêî â êà÷åñòâå òåõíîëîãèè äëÿ áåñïðåðûâíîé ðàáîòû. Ýòî òàêæå òåõíîëîãèÿ äëÿ óñêîðåíèÿ äîñòóïà ê äàííûì, ïîñêîëüêó ëîãè÷åñêîå ðàññòîÿíèå ìåæäó ñåðâåðàìè
2.1. ßäðî SQL Server 2005
49
çåðêàëèðóåìûõ áàç äàííûõ ìîæåò áûòü äîñòàòî÷íî áîëüøèì, à ñêîðîñòü ïåðåäà÷è äàííûõ äîñòàòî÷íî ìàëîé. Ïðè ýòîì äîñòóï óäàëåííîãî ïîëüçîâàòåëÿ ìîæíî âûïîëíèòü íà îäíó èç áëèæàéøèõ áàç äàííûõ (äëÿ äîñòóïà ê êîòîðîé òðåáóåòñÿ ìåíüøåå êîëè÷åñòâî òðàíçèòíûõ óçëîâ), õðàíÿùèõ èäåíòè÷íóþ êîïèþ îñíîâíîé áàçû äàííûõ. Çåðêàëèðîâàíèå äàííûõ ðàáîòàåò çà ñ÷åò ïåðåñûëêè log-ôàéëîâ òðàíçàêöèé ìåæäó îñíîâíûì ñåðâåðîì áàç äàííûõ è âòîðè÷íûì (íà êîòîðûé âûïîëíÿåòñÿ çåðêàëüíàÿ êîïèÿ). Ýòî ïîçâîëÿåò îáîèì ñåðâåðàì âûïîëíèòü ñèíõðîíèçàöèþ ñîäåðæèìîãî. Çåðêàëèðîâàíèå ìîæåò áûòü íàñòðîåíî êàê â îòíîøåíèè îäíîé áàçû, òàê è â îòíîøåíèè íåñêîëüêèõ.  ïåðâîì ñëó÷àå êîïèðîâàíèå äàííûõ áóäåò âûïîëíÿòüñÿ ñ îñíîâíîãî ñåðâåðà íà çåðêàëüíûé. Ïðè ýòîì ïåðâûé áóäåò âûñòóïàòü â êà÷åñòâå ãëàâíîãî, à âòîðîé — â êà÷åñòâå âåäîìîãî. Âî âòîðîì ñëó÷àå âûïîëíÿåòñÿ çåðêàëüíîå êîïèðîâàíèå äàííûõ ìåæäó ðàçëè÷íûìè ñåðâåðàìè áàç äàííûõ.  êà÷åñòâå äðóãîãî ìåõàíèçìà äëÿ âîññòàíîâëåíèÿ ïðåäûäóùåãî ñîñòîÿíèÿ äàííûõ (àíàëîãè÷íî âîññòàíîâëåíèþ èç ðåçåðâíîé êîïèè) èñïîëüçóåòñÿ ìîìåíòàëüíûé ñíèìîê áàç äàííûõ. Ìîìåíòàëüíûé ñíèìîê — ýòî ñòàòèñòè÷åñêèé ñíèìîê áàçû äàííûõ (âêëþ÷àÿ òàáëèöû, òðèããåðû, õðàíèìûå ïðîöåäóðû è äð.) â îïðåäåëåííûé ìîìåíò âðåìåíè. Îí ïðåêðàñíî ïîäõîäèò äëÿ ôèêñàöèè ñîñòîÿíèÿ áàçû äàííûõ íà îïðåäåëåííûé ìîìåíò âðåìåíè ñ öåëüþ ïîñëåäóþùåãî ñðàâíåíèÿ ñ òåêóùèì èëè îòêàòà äî ïðåäûäóùåãî ñîñòîÿíèÿ. Ìîìåíòàëüíûé ñíèìîê áàç äàííûõ ÷àñòî èñïîëüçóåòñÿ íà îïåðàòèâíûõ ñèñòåìàõ, ãäå äèíàìèêà èçìåíåíèÿ äàííûõ äîñòàòî÷íî âåëèêà. Èñïîëüçîâàíèå ìåõàíèçìà ìîìåíòàëüíîãî ñíèìêà ìîæåò ñî÷åòàòüñÿ ñ èñïîëüçîâàíèåì òåõíîëîãèè çåðêàëèðîâàíèÿ ñ öåëüþ ñîçäàíèÿ ñåðâåðà îò÷åòîâ, êîòîðûé ñìîæåò ñðàâíèâàòü ìîìåíòàëüíûé ñíèìîê ãëàâíîé áàçû äàííûõ è òåêóùåå ñîñòîÿíèå çåðêàëèðîâàííîé. Ïðè ýòîì íåîáõîäèìî ïîìíèòü, ÷òî äàííûå íà çåðêàëå ìîãóò áûòü íåäîñòóïíû, ïîñêîëüêó äàííûé ñåðâåð âñåãäà íàõîäèòñÿ â ñîñòîÿíèè îæèäàíèÿ.  òîì ñëó÷àå, åñëè ñ îñíîâíûì ñåðâåðîì ÷òî-òî ïðîèçîéäåò, äàííûé ñåðâåð âñòóïèò â äåéñòâèå. Îäíàêî ïðè æåëàíèè äëÿ ïîäîáíûõ ñåðâåðîâ íàñòðàèâàåòñÿ ðåïëèêàöèÿ äàííûõ.  ýòîì ñëó÷àå äàííûå íà îáîèõ ñåðâåðàõ áóäóò äîñòóïíû. Áîëåå äåòàëüíî î òåõíîëîãèÿõ çåðêàëèðîâàíèÿ è ðåïëèêàöèè äàííûõ ìû ïîãîâîðèì â ðàçäåëå 9.1 «Ñïîñîáû ñîõðàíåíèÿ äàííûõ».
2.1.6. XML-ôàéë è çàãðóçêà äàííûõ  SQL Server 2005 çíà÷èòåëüíî ïåðåñìîòðåíà ôóíêöèîíàëüíîñòü ïîëíîé çàãðóçêè äàííûõ. Ýòî ïîçâîëèëî óâåëè÷èòü ñêîðîñòü ïîëíîé çàãðóçêè äàííûõ. Òåïåðü â ïðîöåññå çàãðóçêè äàííûõ èñïîëüçóåòñÿ XML-ôàéë, êîòîðûé áåðåò íà ñåáÿ âñþ ôóíêöèîíàëüíîñòü, ðàíåå äîñòóïíóþ ïðè ðàáîòå ñ BCP-ôàéëîì (Bulk Copy Program), îäíàêî îí äîáàâëÿåò è ñîáñòâåííóþ. Ïðè ýòîì â ñèñòåìå íà îñíîâå SQL Server 2005 ìîæåò èñïîëüçîâàòüñÿ êàê XML-ôàéë â îòäåëüíîñòè, òàê è âìåñòå ñ BCP-ôàéëîì (èñïîëüçóåòñÿ äëÿ îáðàòíîé ñîâìåñòèìîñòè áàç äàííûõ). Òåïåðü ñ ïîìîùüþ XML-ôàéëà áûñòðåå âûïîëíÿåòñÿ ÷òåíèå è ðàçáîðêà BCP-ôàéëà, ÷òî ïîëîæèòåëüíî ñêàçûâàåòñÿ íà îáùåé ïðîèçâîäèòåëüíîñòè ñåðâåðà. Èñïîëüçîâàíèå XML-ôàéëà ïîçâîëèëî ðåàëèçîâàòü î÷åíü âàæíóþ ôóíêöèîíàëüíóþ îñîáåííîñòü ïîëíîé çàãðóçêè äàííûõ. Òåïåðü çàãðóçêà äàííûõ ïîääåðæèâàåò çàïèñü log-ôàéëà ïðè ïîÿâëåíèè ïîâðåæäåííûõ ñòðîê òàáëèö. Ýòî ïîçâîëÿåò
50
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
áûñòðåå âûÿâèòü âîçíèêøèå îøèáêè è ìîìåíòàëüíî óñòðàíèòü èõ. Òàêæå áëàãîäàðÿ ýòîé ôóíêöèîíàëüíîñòè ïîëíàÿ çàãðóçêà äàííûõ ìîæåò áûòü çàâåðøåíà äàæå â ñëó÷àå âîçíèêíîâåíèÿ îøèáîê (÷òî ÷àñòî ñëó÷àåòñÿ ïðè ðàáîòå ñ «ñûðûìè» òàáëèöàìè äàííûõ). Äàííûå, ñîäåðæàùèå îøèáêè, à òàêæå ñîîáùåíèÿ îá îøèáêàõ çàïèñûâàþòñÿ â log-ôàéë. Ïîñëå òîãî êàê îøèáêè áóäóò óñòðàíåíû, àäìèíèñòðàòîð ìîæåò âûïîëíèòü â ðó÷íîì ðåæèìå çàãðóçêó íåäîñòàþùèõ äàííûõ.
2.1.7. Îáðàáîòêà HTTP-çàïðîñîâ  íîâîé âåðñèè SQL Server âñòðîåíà ïîääåðæêà HTTP (Hyper Text Transfer Protocol), ÷òî ïîçâîëÿåò ñåðâåðó îáðàáàòûâàòü HTTP-çàïðîñû, ïîñòóïàþùèå îò ñòîðîííèõ ïðèëîæåíèé. Ïðè ýòîì òàêæå ñòàíîâèòñÿ äîñòóïíûì èñïîëüçîâàíèå SOAP äëÿ óäàëåííîãî âûçîâà õðàíèìûõ ïðîöåäóð è âûïîëíåíèÿ SQL-çàïðîñîâ. Ýòî îçíà÷àåò, ÷òî SQL Server 2005 ìîæåò âûïîëíÿòü çàïðîñû îò ñòîðîííèõ âåá-ñåðâèñîâ áåç èñïîëüçîâàíèÿ êàêîãî-ëèáî âåá-ñåðâåðà. Ýòî ýêîíîìèò íå òîëüêî ðåñóðñû äëÿ óñòàíîâêè è íàñòðîéêè âåá-ñåðâåðà, íî è äåíüãè, ïîñêîëüêó íå òðåáóåòñÿ ïðèîáðåòàòü äîïîëíèòåëüíûå ëèöåíçèè. Ïîääåðæêà HTTP â SQL Server 2005 òàêæå ïîäðàçóìåâàåò íàñòðîéêó òàêèõ ïàðàìåòðîâ, êàê URL, ïîðò è çàïðîñ, êîòîðûé äîëæåí ïîääåðæèâàòüñÿ ñåðâåðîì. Ïðè ýòîì SQL Server 2005 ïîñòîÿííî îïðàøèâàåò âûáðàííûé ïîðò íà ïðåäìåò ïîëó÷åíèÿ êàêèõ-ëèáî çàïðîñîâ è ïðè ïîëó÷åíèè èõ âûïîëíÿåò. Ïîääåðæêà HTTP â SQL Server 2005 ïîäðàçóìåâàåò èñïîëüçîâàíèå ìåõàíèçìîâ àóòåíòèôèêàöèè Windows èëè SQL Server, à òàêæå èñïîëüçîâàíèå SSL äëÿ îáåñïå÷åíèÿ áåçîïàñíîñòè ïåðåäà÷è äàííûõ. Òàêæå ñðåäè ïðåèìóùåñòâ SQL Server ñòîèò âûäåëèòü âîçìîæíîñòü ïóáëèêàöèè âåá-ñåðâèñîâ ñ èñïîëüçîâàíèåì WSDL (Web Services Description Language). Ïðè ýòîì ïîääåðæèâàþòñÿ ñëåäóþùèå ñòàíäàðòû: WSDL 1.1, SOAP 1.0 è SOAP 1.2.
2.1.8. Ñîáûòèÿ ñåðâåðà è òðèããåðû DDL  ïðèëîæåíèÿõ, êîòîðûå ñîçäàþòñÿ ðàçðàáîò÷èêàìè äëÿ ðåøåíèÿ òåõ èëè èíûõ çàäà÷ â SQL Server, ÷àñòî ñóùåñòâóåò íåîáõîäèìîñòü îáðàáàòûâàòü êàêèå-ëèáî ñèñòåìíûå èëè ïîëüçîâàòåëüñêèå ñîáûòèÿ. Äëÿ ðåøåíèÿ ïîäîáíûõ çàäà÷ èñïîëüçóþòñÿ òðèããåðû DDL, à òàêæå îáðàáîò÷èêè ñîáûòèé ñåðâåðà. Íåñìîòðÿ íà òî ÷òî äàííûå ìåõàíèçìû âûïîëíÿþò ïðàêòè÷åñêè èäåíòè÷íûå ðîëè, èõ ðåàëèçàöèÿ çíà÷èòåëüíî îòëè÷àåòñÿ äðóã îò äðóãà. Òàê æå êàê è DML-òðèããåðû, DDLòðèããåðû ÿâëÿþòñÿ ñèíõðîííûìè ñîáûòèÿìè, êîòîðûå èñïîëüçóþòñÿ äëÿ çàïóñêà õðàíèìûõ ïðîöåäóð. Áîëåå äåòàëüíî âîïðîñû, êàñàþùèåñÿ DML- è DDL-òðèããåðîâ, ìû ðàññìîòðèì â ðàçäåëàõ 10.2.4 «Òðèããåðû DDL» è 10.2.5 «Ïåðåíàïðàâëåíèå âûâîäà».  îòëè÷èå îò DML- è DDL-òðèããåðîâ, ñîáûòèÿ ñåðâåðà ÿâëÿþòñÿ àñèíõðîííûìè ñîáûòèÿìè.  ñëó÷àå ñ àñèíõðîííûìè ñîáûòèÿìè SQL Server ïóáëèêóåò ñîáûòèå â î÷åðåäü äëÿ îáðàáîòêè áðîêåðîì ñåðâèñîâ SQL Server 2005. Ïîñëå ýòîãî êëèåíòñêîå ïðèëîæåíèå ìîæåò íåçàâèñèìî îò ðàáîòû ñèñòåìû ïîëó÷èòü è îáðàáîòàòü èíôîðìàöèþ î äàííîì ñîáûòèè. Ïðè ýòîì çàïèñü ñîáûòèé âûïîëíÿåòñÿ
2.1. ßäðî SQL Server 2005
51
â ôîðìàòå XML, ÷òî ïîçâîëÿåò âûïîëíèòü áûñòðóþ îáðàáîòêó äàííûõ. Íåâîçìîæíî âûïîëíèòü îòêàò äî ïðåäûäóùåãî ñîñòîÿíèÿ àñèíõðîííîãî ñîáûòèÿ, ïîñêîëüêó äàííûå ïîìåùàþòñÿ â î÷åðåäü, à íå ñ÷èòûâàþòñÿ èç òàáëèöû âûáðàííîãî îáúåêòà (êàê ýòî ïðîèñõîäèò â ñëó÷àå ñ òðèããåðîì). Áîëåå äåòàëüíóþ èíôîðìàöèþ î òîì, êàê ðàáîòàåò áðîêåð ñåðâèñîâ SQL Server 2005, âû íàéäåòå â ãëàâå 4 «Áðîêåð çàïðîñîâ SQL Server».
2.1.9. Âðåìåííàÿ áàçà äàííûõ  SQL Server 2005 ïîääåðæèâàåòñÿ âîçìîæíîñòü èçìåíèòü äèðåêòîðèþ, â êîòîðîé õðàíÿòñÿ äàííûå. Äëÿ ýòîãî ìîæåò áûòü èñïîëüçîâàíà êîìàíäà ALTER DATABASE. Ïðè ýòîì íåîáõîäèìî îãîâîðèòüñÿ, ÷òî ðàíåå âåðñèÿ SQL Server 2000 ïîçâîëÿëà ïåðåìåùàòü äàííûå â ñëóæåáíóþ áàçó äàííûõ ñ öåëüþ ðåçåðâíîãî êîïèðîâàíèÿ, ïåðåíîñà äàííûõ èëè öåëîé áàçû íà íîâûé ñåðâåð. Ïîäîáíàÿ áàçà îáû÷íî íîñèëà íàçâàíèå tempdb è èñïîëüçîâàëàñü èñêëþ÷èòåëüíî â ñëóæåáíûõ öåëÿõ.  SQL Server 2005 ðàçðàáîò÷èêè ïîøëè äàëüøå â ðàçâèòèè äàííîé êîíöåïöèè. Òåïåðü äàííûå ìîæíî ïåðåíåñòè â äðóãóþ ïàïêó. Îäíàêî ïåðåä òåì êàê âûïîëíèòü äàííóþ îïåðàöèþ, íåîáõîäèìî îñòàíîâèòü ñåðâåð, âûïîëíèòü ïåðåíîñ äàííûõ, à çàòåì çàïóñòèòü åãî çàíîâî. Äëÿ ïåðåíîñà äàííûõ ìîæíî âîñïîëüçîâàòüñÿ ñëåäóþùèì ñèíòàêñèñîì: ALTER DATABASE MODIFY FILE (name = , filename = )
2.1.10. Äåêîìïîçèöèÿ äàííûõ  SQL Server 2000 íå áûëî âîçìîæíîñòè âûïîëíÿòü äåêîìïîçèöèþ äàííûõ. Ýòî íåñêîëüêî îãðàíè÷èâàëî âîçìîæíîñòè àäìèíèñòðàòîðîâ âî âðåìÿ ïåðåíîñà äàííûõ â íîâóþ äèðåêòîðèþ èëè ïðè ðàáîòå ñ áîëüøèìè ìàññèâàìè äàííûõ è òðåáîâàëî âûïîëíåíèÿ ïðîñòåéøèõ äîðàáîòîê (íàïèñàíèå ïðîöåäóð, ñîçäàíèå íîâûõ òèïîâ è äð.) äëÿ äåêîìïîçèöèè äàííûõ.  íîâîé âåðñèè SQL Server äàííàÿ ôóíêöèîíàëüíîñòü áûëà ïåðåíåñåíà íà ñåðâåð è òåïåðü íå òðåáóåò ïðèâëå÷åíèÿ ðàçðàáîò÷èêîâ. ×òî ïîäðàçóìåâàåò ïîä ñîáîé äåêîìïîçèöèÿ äàííûõ? Ýòî ðàçáèåíèå áîëüøèõ ìàññèâîâ äàííûõ íà áîëåå ìåëêèå êóñêè, ñ êîòîðûìè ïðîùå ðàáîòàòü. Òàêæå ñòîèò îòìåòèòü, ÷òî ðàáîòà ñ ìåíüøèìè îáúåìàìè äàííûõ ïðåäúÿâëÿåò áîëåå íèçêèå òðåáîâàíèÿ â îòíîøåíèè àïïàðàòíîãî îáåñïå÷åíèÿ, ÷òî òàêæå íåìàëîâàæíî äëÿ ìíîãèõ ïðåäïðèÿòèé. Èñïîëüçóÿ äåêîìïîçèöèþ äàííûõ, ìîæíî ðàçáèâàòü íå òîëüêî áîëüøèå òàáëèöû íà áîëåå ìåëêèå, íî è âûïîëíèòü äåêîìïîçèöèþ èíäåêñîâ è ïðåäñòàâëåíèé. Ïîëó÷åííûå â ðåçóëüòàòå äåêîìïîçèöèè äàííûå äëÿ ïðèëîæåíèé ñòîðîííèõ ïðîèçâîäèòåëåé áóäóò ïðåäñòàâëåíû â âèäå åäèíîé òàáëèöû, òî åñòü äåêîìïîçèöèÿ ñêðûòà îò ïðèëîæåíèé è ÿâëÿåòñÿ âñòðîåííîé ôóíêöèîíàëüíîñòüþ SQL Server 2005. ×àñòè äàííûõ, ïîäâåðãøèõñÿ äåêîìïîçèöèè, íîñÿò íàçâàíèå ðàçäåëû (àíàëîãè÷íî íàçâàíèþ ëîãè÷åñêèõ ðàçäåëîâ ôèçè÷åñêîãî äèñêà êîìïüþòåðà). Ïðè ýòîì ñîçäàíèå îòäåëüíûõ ðàçäåëîâ èëè èõ óíè÷òîæåíèå àáñîëþòíî íå âëèÿåò íà ðàáîòîñïîñîáíîñòü áàçû äàííûõ. Ïðîñòåéøåå ïðåäñòàâëåíèå äåêîìïîçèöèè äàííûõ ïðèâåäåíî íà ðèñ. 2.1.
52
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
Ðèñ. 2.1. Äåêîìïîçèöèÿ äàííûõ
Ïðîñòåéøèì ïðåäñòàâèòåëåì ðàçäåëà ìîæåò âûñòóïàòü îäíà ñòðîêà òàáëèöû. Ïðè ýòîì ñîçäàíèå ðàçäåëîâ ìîæåò ïðîèñõîäèòü êàê ïî ïðèíöèïó ðàâíîìåðíîãî ðàçäåëåíèÿ ó÷àñòêîâ òàáëèöû íà îòäåëüíûå ðàçäåëû (íàïðèìåð, ïî 1000 ñòðîê â êàæäîì ðàçäåëå), òàê è ïî ïðèíöèïó ëîãè÷åñêîãî ðàçáèåíèÿ íà ó÷àñòêè (íàïðèìåð, íà îñíîâå çíà÷åíèé îïðåäåëåííîé ñòðîêè èëè ÿ÷åéêè). Òàêæå äîñòóïíî ñîçäàíèå îòäåëüíûõ ðàçäåëîâ íà îñíîâå ñèñòåìíîé èíôîðìàöèè, êîòîðàÿ äîñòóïíà ïðè ñ÷èòûâàíèè ïàðàìåòðîâ SQL Server èëè îïåðàöèîííîé ñèñòåìû, óñòàíîâëåííîé íà êîìïüþòåðå. Òàê, íàïðèìåð, ìîæíî íàñòðîèòü SQL Server òàêèì îáðàçîì, ÷òî ìîæíî áóäåò ñîçäàâàòü îòäåëüíûé ðàçäåë äëÿ âûáðàííîé òàáëèöû êàæäûé ãîä. Òàêîé ïîäõîä â îòíîøåíèè ðàçäåëîâ äàííûõ ìîæåò áûòü î÷åíü èíòåðåñåí äëÿ ìíîãèõ ðàçðàáîò÷èêîâ, ïîñêîëüêó äàííûå òàáëèöû íåò íåîáõîäèìîñòè ôèëüòðîâàòü è èçáèðàòåëüíî àðõèâèðîâàòü (íàïðèìåð, ïåðåíîñèòü íà áîëåå ìåäëåííûå íîñèòåëè) èëè óäàëÿòü. Ðàçðàáîò÷èê ìîæåò áûñòðî îïðåäåëèòü, êàêîé èìåííî ðàçäåë áûë ñîçäàí â òîì èëè èíîì ãîäó, è âûïîëíèòü ñ íèì íåîáõîäèìûå äåéñòâèÿ (àðõèâèðîâàíèå èëè óäàëåíèå). Çà ñ÷åò ýòîãî óïðîùàåòñÿ ðàáîòà àäìèíèñòðàòîðîâ è ðàçðàáîò÷èêîâ, à ôóíêöèè ýëåìåíòàðíîé ôèëüòðàöèè äàííûõ áåðåò íà ñåáÿ ÿäðî SQL Server. Îñíîâíûå ïðåèìóùåñòâà èñïîëüçîâàíèÿ äåêîìïîçèöèè äàííûõ äîñòèãàþòñÿ ïðè ðàáîòå ñ áîëüøèìè áàçàìè äàííûõ (VLDB — Very Large DataBases). Ìîæíî àðõèâèðîâàòü îòäåëüíûå ðàçäåëû òàêèõ áàç äàííûõ, âûïîëíèòü èõ ðåçåðâíîå êîïèðîâàíèå è äðóãèå äåéñòâèÿ. Òàêæå ñòîèò îòìåòèòü, ÷òî èñïîëüçîâàíèå äåêîìïîçèöèè äàííûõ íà ìíîãîïðîöåññîðíûõ ñèñòåìàõ ïîçâîëÿò çíà÷èòåëüíî óñêîðèòü îáðàáîòêó äàííûõ. Ýòî äîñòèãàåòñÿ çà ñ÷åò òîãî, ÷òî îòäåëüíûé ïðîöåññîð ïîçâîëÿåò âûïîëíÿòü êàæäîìó èç íèõ ðàáîòó ñ îòäåëüíûì ðàçäåëîì äàííûõ, à ýòî ìíîãîêðàòíî óâåëè÷èâàåò ñêîðîñòü îáðàáîòêè äàííûõ (îñîáåííî âî âðåìÿ ïîèñêà, èíäåêñèðîâàíèÿ èëè ñîñòàâëåíèÿ âûáîðêè). Ðåàëèçîâàòü äåêîìïîçèöèþ äàííûõ ìîæíî, èñïîëüçóÿ ñëåäóþùèå øàãè: 1. Îïðåäåëèòü, êàêèì îáðàçîì áóäåò âûïîëíÿòüñÿ äåêîìïîçèöèÿ äàííûõ è íà êàêîé îñíîâå; êàêèå óñëîâèÿ ïðè ýòîì äîëæíû âûïîëíÿòüñÿ äëÿ âíåñåíèÿ äàííûõ â îòäåëüíûå ðàçäåëû. 2. Âûïîëíèòü ñâÿçûâàíèå êàæäîãî ðàçäåëà ñ âûáðàííîé äèðåêòîðèåé íà äèñêå êîìïüþòåðà. Ïðè ýòîì íåîáõîäèìî ó÷èòûâàòü, ÷òî ðàçäåëû ìîãóò ðàñïîëàãàòüñÿ êàê â îäíîé äèðåêòîðèè, òàê è â îòäåëüíûõ.
2.1. ßäðî SQL Server 2005
53
3. Ñîçäàòü ôóíêöèþ, èñïîëüçóÿ ñëåäóþùèé øàáëîí: CREATE PARTITION FUNCTION PartFunc (int) AS RANGE LEFT FOR VALUES (0, 50) GO CREATE PARTITION SCHEME PartScheme AS PARTITION PartFunc TO (FileGrp) GO CREATE TABLE Tbl (clmn1 int, clmn2 varchar(100), clmn3 varchar(50)) ON PartScheme (clmn1) GO
Ðàññìîòðèì ïðèâåäåííûé ïðèìåð èñïîëüçîâàíèÿ ðàçäåëîâ áîëåå äåòàëüíî.  ïåðâîé ñòðîêå ìû ñîçäàåì ôóíêöèþ PartFunc, êîòîðàÿ áóäåò âûïîëíÿòü ðàçáèåíèå íà ðàçäåëû.  êà÷åñòâå ïàðàìåòðà äëÿ äàííîé ôóíêöèè èñïîëüçóåòñÿ öåëîå çíà÷åíèå äëÿ ïåðåäà÷è ÷èñëà êîëîíîê, íàä êîòîðûìè áóäåò âûïîëíÿòüñÿ ðàçáèåíèå íà ðàçäåëû. Ïðè ýòîì êîìàíäà RANGE èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ äèàïàçîíà äàííîãî ðàçäåëà. Ñ ïîìîùüþ êîìàíäû LEFT ìû îïðåäåëèëè, ÷òî òîëüêî òå êîëîíêè, êîòîðûå èìåþò çíà÷åíèÿ, óäîâëåòâîðÿþùèå óñëîâèþ, áóäóò ïîìåùåíû â ðàçäåë. Ïðè ýòîì ïîìåùåíèå íîâîé êîëîíêè áóäåò âûïîëíÿòüñÿ â ëåâóþ ÷àñòü òàáëèöû äàííîãî ðàçäåëà. Êîìàíäà VALUES èñïîëüçîâàëàñü íàìè äëÿ îïðåäåëåíèÿ äèàïàçîíà çíà÷åíèé, ïðîâåðêà êîòîðûõ áóäåò âûïîëíÿòüñÿ äëÿ ïîìåùåíèÿ çàïèñåé â òàáëèöó. Äèàïàçîí (0, 50) îçíà÷àåò, ÷òî áóäåò ñîçäàíî òðè ðàçäåëà.  ïåðâûé áóäóò ïîìåùåíû îòðèöàòåëüíûå çíà÷åíèÿ, âî âòîðîé — çíà÷åíèÿ â äèàïàçîíå îò 0 äî 50, à â òðåòèé — ïîëîæèòåëüíûå çíà÷åíèÿ áîëüøå 50. Âî âòîðîé ñòðîêå ìû ñîçäàåì ñõåìó PartScheme. Äëÿ ñõåìû îïðåäåëÿåòñÿ ôóíêöèÿ, êîòîðàÿ áóäåò èñïîëüçîâàòüñÿ äàííîé ñõåìîé. Êîìàíäà AS PARTITION îïðåäåëÿåò, ÷òî â êà÷åñòâå ïîäîáíîé ôóíêöèè áóäåò èñïîëüçîâàòüñÿ ðàíåå ñîçäàííàÿ íàìè ôóíêöèÿ PartFunc. Ñ ïîìîùüþ êîìàíäû TO ìû îïðåäåëèëè ãðóïïó ôàéëîâ FileGrp, êîòîðàÿ áóäåò èñïîëüçîâàòüñÿ äëÿ õðàíåíèÿ äàííûõ ñîçäàâàåìîãî ðàçäåëà. Äàëåå, â ñåäüìîé ñòðîêå ìû ñîçäàåì òàáëèöó, äëÿ êîòîðîé áóäåò âûïîëíÿòüñÿ ðàçáèåíèå íà ðàçäåëû. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà CREATE TABLE. Ñ åå ïîìîùüþ ìû ñîçäàåì òàáëèöó Tbl, êîòîðàÿ ñîäåðæèò òðè êîëîíêè ñ íàçâàíèÿìè clmn1, clmn2, clmn3. Êîìàíäà ON èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû îïðåäåëèòü ñõåìó, êîòîðàÿ áóäåò èñïîëüçîâàòüñÿ äëÿ äàííîé òàáëèöû.  äàííîì ñëó÷àå ìû èñïîëüçóåì ðàíåå ñîçäàííóþ ñõåìó PartScheme.  êà÷åñòâå ïàðàìåòðîâ ïåðåäàåì åé çíà÷åíèÿ ïåðâîé êîëîíêè òàáëèöû, â ñîîòâåòñòâèè ñ êîòîðîé áóäåò âûïîëíÿòüñÿ ðàçáèåíèå íà ðàçäåëû. Òåïåðü ïîãîâîðèì îá îãðàíè÷åíèÿõ, êîòîðûå íàêëàäûâàåò SQL Server íà èñïîëüçîâàíèå ðàçäåëîâ: 1.  êà÷åñòâå òèïîâ äëÿ ïðîâåðêè çíà÷åíèé ïðè ðàçáèåíèè íà ðàçäåëû ìîãóò èñïîëüçîâàòüñÿ âñå òèïû, êðîìå text, ntext, timestamp, à òàêæå image. 2. Íåëüçÿ èñïîëüçîâàòü ïîëüçîâàòåëüñêèå òèïû äëÿ ñîçäàíèÿ óñëîâèé âûáîðêè ðàçäåëîâ. 3. Âñåãî ìîæåò áûòü ñîçäàíî íå áîëåå 1000 ðàçäåëîâ â ðàñ÷åòå íà îäíó òàáëèöó. 4. Âñå ðàçäåëû äîëæíû ðàñïîëàãàòüñÿ íà îòäåëüíî âçÿòîì óçëå â òîì ñëó÷àå, åñëè ñòðóêòóðà áàçû ïîäðàçóìåâàåò èñïîëüçîâàíèå òåõíîëîãèè êëàñòåðèçàöèè.
54
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
2.1.11. Ñèñòåìíûé êàòàëîã è ìåòàäàííûå  SQL Server 2000 è áîëåå ðàííèõ âåðñèÿõ èíôîðìàöèÿ î ñèñòåìíîì êàòàëîãå è ìåòàäàííûå õðàíèëèñü â êà÷åñòâå îòäåëüíîé ÷àñòè áàçû äàííûõ (â ãëàâíîé áàçå äàííûõ). ×òî êàñàåòñÿ SQL Server 2005, òî òåïåðü õðàíåíèå ìåòàäàííûõ âûïîëíÿåòñÿ â áàçå äàííûõ ðåñóðñîâ, êîòîðàÿ â ñâîþ î÷åðåäü õðàíèòñÿ â âèäå ñèñòåìíîãî îáúåêòà. Ïðè ýòîì â SQL Server 2005 çàêðûò ïðÿìîé äîñòóï ê ñèñòåìíûì òàáëèöàì, ÷òî íå ïîçâîëÿåò âûïîëíÿòü ïðÿìîå ðåäàêòèðîâàíèå ìåòàäàííûõ. Ýòî ïðèâåëî ê òîìó, ÷òî óëó÷øèëàñü áåçîïàñíîñòü ðàáîòû SQL Server, à òàêæå óïðîñòèëîñü âûïîëíåíèå îïåðàöèè îáíîâëåíèÿ ñåðâåðà, ïîñêîëüêó ìåòàäàííûå ãàðàíòèðîâàííî íå ìîãóò áûòü èçìåíåíû àäìèíèñòðàòîðîì, à ñëåäîâàòåëüíî, ïðåäñòàâëÿþò ïîëíóþ êàðòèíó ðàáîòû SQL Server. Áîëåå äåòàëüíî áåçîïàñíîñòü ñèñòåìû ìû ðàññìîòðèì â ðàçäåëå 2.3 «Áåçîïàñíîñòü». Ìåòàäàííûå SQL Server 2005 ïîëíîñòüþ îáðàòíî ñîâìåñòèìû, ÷òî óïðîùàåò ïðîöåññ ìèãðàöèè ñåðâåðîâ áàç äàííûõ áîëåå ðàííèõ âåðñèé íà âåðñèþ 2005.  òîì ñëó÷àå, åñëè â ïðåäûäóùèõ âåðñèÿõ SQL Server âàìè âûïîëíÿëèñü êàêèå-ëèáî ìîäèôèêàöèè ìåòàäàííûõ èëè èñïîëüçîâàëèñü íåäîêóìåíòèðîâàííûå âîçìîæíîñòè SQL Server â îòíîøåíèè ðàáîòû ñ ìåòàäàííûìè, âûïîëíÿéòå ìèãðàöèþ SQL Server ïðåäåëüíî àêêóðàòíî. Ïðîñìàòðèâàòü ñèñòåìíûå ìåòàäàííûå ìîæíî ñ ïîìîùüþ íàáîðà ïðåäñòàâëåíèé. Ïðåäñòàâëåíèÿ — ýòî âñòðîåííûå ôóíêöèè, âûçîâ êîòîðûõ ïîçâîëÿåò âûïîëíÿòü ïðîñòåéøèå îïåðàöèè ñ ñèñòåìíûìè ìåòàäàííûìè. Âñåãî â SQL Server 2005 ñóùåñòâóåò áîëåå 250 íîâûõ ïðåäñòàâëåíèé, äëÿ èñïîëüçîâàíèÿ êîòîðûõ íåîáõîäèìî âûçâàòü ñîîòâåòñòâóþùèå äèðåêòèâû â ñèñòåìíîé ñõåìå êàæäîé ïîëüçîâàòåëüñêîé áàçû äàííûõ. Äëÿ ïðîñìîòðà âñåãî ñïèñêà ñèñòåìíûõ ïðåäñòàâëåíèé âîñïîëüçóéòåñü Microsoft SQL Server Manager Studio. Äëÿ ýòîãî âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Îòêðîéòå áðàóçåð îáúåêòîâ (Object Browser). 2. Âûáåðèòå óçåë Databases44Views4System Views. Ðàñêðûòûé óçåë áóäåò ñîäåðæàòü ïîëíûé ñïèñîê ñèñòåìíûõ ïðåäñòàâëåíèé. Òàêæå ìîæíî âîñïîëüçîâàòüñÿ çàïðîñîì äëÿ ïîëó÷åíèÿ ïîëíîãî ñïèñêà ñèñòåìíûõ ïðåäñòàâëåíèé, êîòîðûå â ñâîþ î÷åðåäü õðàíÿòñÿ â ñèñòåìíîì ïðåäñòàâëåíèè sys.system_views. Äëÿ ýòîãî âûïîëíèòå ñëåäóþùèé çàïðîñ: SELECT * FROM sys.system_views
2.1.12. Òåõíîëîãèÿ MARS Çíà÷èòåëüíûì óëó÷øåíèåì ôóíêöèîíàëüíîñòè SQL Server 2005 ïî ñðàâíåíèþ ñ ïðåäûäóùèìè âåðñèÿìè ÿâëÿåòñÿ âîçìîæíîñòü ïîëó÷åíèÿ íåñêîëüêèõ íàáîðîâ ðåçóëüòàòîâ â òå÷åíèå îäíîãî ñîåäèíåíèÿ. Äàííàÿ ôóíêöèîíàëüíîñòü íàçûâàåòñÿ «ìíîæåñòâåííûé íàáîð àêòèâíûõ ðåçóëüòàòîâ» (MARS — Multiple Active Results Set). MARS ïîçâîëÿåò îòêðûâàòü åäèíñòâåííîå ñîåäèíåíèå ñ áàçîé äàííûõ, âûïîëíÿòü çàïðîñ, à çàòåì, ïîëó÷èâ îïðåäåëåííûé íàáîð ðåçóëüòàòîâ, âûïîëíèòü ñëåäóþùèé çàïðîñ è òàê äàëåå. Ïðè ýòîì íå òðåáóåòñÿ êàæäûé ðàç äëÿ îòäåëüíîé ñåññèè îòêðûâàòü îòäåëüíîå ñîåäèíåíèå. Îäíî ñîåäèíåíèå ìîæåò ðàçäåëÿòüñÿ ìåæäó ðàçëè÷íûìè ñåññèÿìè ðàáîòû ñ SQL Server 2005. Ñ ó÷åòîì ýòîãî
2.2. SQL Server è íîâîå àïïàðàòíîå îáåñïå÷åíèå
55
òåïåðü ìîæíî ñîçäàâàòü ïðèëîæåíèÿ, êîòîðûå áóäóò ïîïåðåìåííî âûïîëíÿòü îïðåäåëåííûå çàïðîñû è îïåðèðîâàòü íàáîðàìè àêòèâíûõ äàííûõ, êîòîðûå ïîëó÷åíû â ðåçóëüòàòå âûïîëíåíèÿ êàæäîãî çàïðîñà. Áîëåå äåòàëüíî MARS ìû ðàññìîòðèì â ðàçäåëå 10.3.3 «Ïîääåðæêà MARS».
2.1.13. Ïðîöåññîð çàïðîñîâ T-SQL Èçìåíåíèÿ òàêæå êîñíóëèñü ïðîöåññîðà T-SQL.  ðàçäåëå 4.3.2 «Íîâûé íàáîð êîìàíä T-SQL» ìû áîëåå äåòàëüíî ðàññìîòðèì äàííûå óëó÷øåíèÿ è íîâûå âîçìîæíîñòè T-SQL è ïðîöåññîðà îáðàáîòêè çàïðîñîâ. Çäåñü æå ìû òîëüêî î÷åðòèì òå âîçìîæíîñòè, êîòîðûå ïîäâåðãëèñü èçìåíåíèþ.  T-SQL ïðîöåññîð áûëè âíåñåíû ñëåäóþùèå èçìåíåíèÿ: · äîáàâëåíà íîâàÿ êîìàíäà OUTPUT; · óëó÷øåí ìåõàíèçì CTE (Common Tables Expressions); · ðàñøèðåíû âîçìîæíîñòè èñïîëüçîâàíèÿ êîìàíäû WAITFOR; · ðàñøèðåíû âîçìîæíîñòè èñïîëüçîâàíèÿ êîìàíäû TOP.
2.1.14. Èíòåãðàöèÿ ñ .NET Framework Çíà÷èòåëüíûå èçìåíåíèÿ êîñíóëèñü SQL Server â îòíîøåíèè ïðîöåññà è ìåòîäîâ ðàçðàáîòêè ïðèëîæåíèé.  ïåðâóþ î÷åðåäü ýòî îòíîñèòñÿ ê âîçìîæíîñòè èñïîëüçîâàíèÿ ñðåäû Microsoft .NET Framework äëÿ ðàçðàáîòêè õðàíèìûõ ïðîöåäóð, ïîëüçîâàòåëüñêèõ ôóíêöèé, òðèããåðîâ, ïîëüçîâàòåëüñêèõ òèïîâ, ñåðâèñîâ è ðàçëè÷íûõ ïðèëîæåíèé. Òåïåðü ðàçðàáîò÷èêè ìîãóò ëåãêî èñïîëüçîâàòü äàííîå ðåøåíèå äëÿ ñîçäàíèÿ ïðèëîæåíèé ïîä SQL Server, ïðè ýòîì èì íåò íåîáõîäèìîñòè ïåðåó÷èâàòüñÿ. Îíè ìîãóò èñïîëüçîâàòü ÿçûêè ïðîãðàììèðîâàíèÿ C#, VB.NET èëè J#, âõîäÿùèå â ñîñòàâ ñðåäû ðàçðàáîòêè Microsoft .NET Framework. Òàêæå ñòîèò âûäåëèòü òî, ÷òî ðàçðàáîò÷èêàìè SQL Server áûëà âûïîëíåíà èíòåãðàöèÿ SQL Server ñ .NET CLR. Áîëåå äåòàëüíî äàííûé âîïðîñ è äðóãèå, ñâÿçàííûå ñ èíòåãðàöèåé Microsoft .NET Framework è SQL Server, ìû ðàññìîòðèì â ðàçäåëå 10.1 «Èíòåãðàöèÿ CLR».
2.2. SQL Server è íîâîå àïïàðàòíîå îáåñïå÷åíèå Îäíî èç îñíîâíûõ íîâîââåäåíèé, êîòîðûå ïîÿâèëèñü â Microsoft SQL Server 2005, — ýòî ïîääåðæêà íîâîãî àïïàðàòíîãî îáåñïå÷åíèÿ, ïîçâîëèâøàÿ äîáèòüñÿ ïðîèçâîäèòåëüíîñòè, äî ñèõ ïîð äîñòóïíîé òîëüêî ìîùíûì áàçàì äàííûõ, ðàáîòàþùèì ïîä óïðàâëåíèåì Unix.  ïåðâóþ î÷åðåäü ñòîèò âûäåëèòü ïîääåðæêó 64-ðàçðÿäíûõ ñèñòåì. Ýòî ïîçâîëèëî íå òîëüêî óâåëè÷èòü ñêîðîñòü ðàáîòû ïðîöåññîðîâ, íî, ÷òî ñàìîå ãëàâíîå, äîáèòüñÿ çíà÷èòåëüíîãî óâåëè÷åíèÿ îáúåìà äîñòóïíîé ïàìÿòè. Ïàìÿòü äëÿ òàêèõ ìîùíûõ ñèñòåì, êàê áàçû äàííûõ, îáÿçàííûõ îïåðèðîâàòü îãðîìíûìè îáúåìàìè äàííûõ, ÿâëÿåòñÿ êðèòè÷åñêèì ïàðàìåòðîì ïðîèçâîäèòåëüíîé ñèñòåìû, è åå óâåëè÷åíèå äîëæíî ïðèâåñòè ê çíà÷èòåëüíîìó óâåëè÷åíèþ ìîùíîñòè ïîäîáíûõ ñèñòåì. Áîëåå òîãî, â íàñòîÿùèé ìîìåíò ñóùåñòâóåò
56
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
îãðîìíîå ÷èñëî òðåõçâåííûõ ñèñòåì, â êîòîðûõ áàçà äàííûõ âûñòóïàåò îäíîâðåìåííî â êà÷åñòâå «ñåðäöà» è «ìîçãà» ñèñòåìû. Òàêèì îáðàçîì, óâåëè÷åíèå ïðîèçâîäèòåëüíîñòè áàç äàííûõ ïðèâåäåò ê óâåëè÷åíèþ ñêîðîñòè ðàáîòû ïîäîáíûõ ñèñòåì â öåëîì. Íå òàê äàâíî ñòàëà äîñòóïíà îïåðàöèîííàÿ ñèñòåìà (êëîí Windows), êîòîðàÿ ïîçâîëèëà áû ðàçâåðíóòü íà ñâîåé îñíîâå áîëåå ñëîæíûå è êîìïëåêñíûå ïðîäóêòû. Íåñìîòðÿ íà òî ÷òî 64-ðàçðÿäíûå ñèñòåìû óæå äîñòàòî÷íî äàâíî èçâåñòíû íà ðûíêå, îïåðàöèîííûå ñèñòåìû Windows äàííîé ìîäèôèêàöèè ïîÿâèëèñü ñðàâíèòåëüíî íåäàâíî. Êàê òîëüêî ñòàë äîñòóïåí Windows Server 2003, ñåðâåð SQL ñðàçó æå ìîæíî áûëî ïåðåâåñòè íà ðàáîòó ïîä óïðàâëåíèåì äàííîé ÎÑ. SQL Sever óíàñëåäîâàë âñå ïðåèìóùåñòâà 64-ðàçðÿäíîé ïëàòôîðìû, â òîì ÷èñëå è ïîääåðæêó àðõèòåêòóðû íåîäíîðîäíîé ïàìÿòè (NUMA — Non-Uniform Memory Architecture). Òàêæå ñòîèò çàìåòèòü, ÷òî SQL Server ïîçâîëÿåò ðåàëèçîâàòü óñòîé÷èâóþ ðàáîòó íà ñèñòåìàõ ñ ïðîöåññîðàìè ñåìåéñòâà Itanium IA-64 è AMD x64, ïîñêîëüêó äàííàÿ ïîääåðæêà âñòðîåíà â Windows Server 2003.
2.2.1. Ëîãè÷åñêèå ïðîöåññîðû Òåõíîëîãèÿ ëîãè÷åñêèõ ïðîöåññîðîâ (hyper-threading) áûëà ðàçðàáîòàíà è çàïàòåíòîâàíà ñîòðóäíèêàìè êîìïàíèè Intel. Íà ñèñòåìàõ ñ ïðîöåññîðàìè, ïîääåðæèâàþùèìè ýòó òåõíîëîãèþ, ìîæíî ïðîãðàììíî ñîçäàâàòü è èñïîëüçîâàòü íåñêîëüêî ëîãè÷åñêèõ ïðîöåññîðîâ. Áëàãîäàðÿ ýòîìó óâåëè÷èâàåòñÿ îáùàÿ ïðîèçâîäèòåëüíîñòü ñèñòåìû. Ïðîèñõîäèò ýòî çà ñ÷åò òîãî, ÷òî áîëüøóþ ÷àñòü âðåìåíè ïðîöåññîðû ïðîñòàèâàþò, à íàãðóçêà íà íèõ ÷àñòî íîñèò ïèêîâûé õàðàêòåð. Ïðè ýòîì ëîãè÷åñêèå ïðîöåññîðû èìåþò ñâîè ñîáñòâåííûå êîíâåéåðû êîìàíä, ÷òî ïîçâîëÿåò èì íåçàâèñèìî äðóã îò äðóãà îáðàáàòûâàòü ïîòîêè êîìàíä è îïåðèðîâàòü äàííûìè. Òàêèì îáðàçîì ïðîöåññîðû ðàçãðóæàþòñÿ âî âðåìÿ ïèêîâûõ âñïëåñêîâ âû÷èñëåíèé, à òàêæå óñêîðÿåòñÿ ðàáîòà ñèñòåìû çà ñ÷åò ðàçäåëåíèÿ ëîãè÷åñêîãî áëîêà êîìàíä äëÿ ïðåäñêàçàíèÿ õîäà âû÷èñëåíèé. Åñëè ïðåäñêàçàíèå âåòâëåíèÿ áûëî âûïîëíåíî íåïðàâèëüíî, ýòî ïðèâîäèò ê î÷èñòêå êîíâåéåðà êîìàíä, íà ÷òî òðàòèòñÿ ïðîöåññîðíîå âðåìÿ. Çà ñ÷åò òîãî, ÷òî äâà ïðîöåññîðà ðàáîòàþò íåçàâèñèìî äðóã îò äðóãà, âåðîÿòíîñòü îäíîâðåìåííîé î÷èñòêè êîíâåéåðîâ ïðè âûïîëíåíèè ïàðàëëåëüíûõ âû÷èñëåíèé ìåíüøå, ÷åì âåðîÿòíîñòü î÷èñòêè îäíîãî êîíâåéåðà êîìàíä. Ïîääåðæêà òåõíîëîãèè ëîãè÷åñêèõ ïðîöåññîðîâ âïåðâûå áûëà âñòðîåíà â Windows XP, à ïîçäíåå ñ âûõîäîì Windows Server 2003 îíà áûëà çàäåéñòâîâàíà íå òîëüêî â äîìàøíèõ ñèñòåìàõ, íî è â ñåðâåðíûõ. Èñïîëüçîâàíèå ïîäîáíûõ ñèñòåì ïîçâîëÿåò óâåëè÷èòü ïðîèçâîäèòåëüíîñòü ñèñòåì íåñìîòðÿ íà òî, ÷òî ëîãè÷åñêèå ïðîöåññîðû, òàê æå êàê è ôèçè÷åñêèå, êîíêóðèðóþò ìåæäó ñîáîé â îòíîøåíèè äîñòóïà ê ñèñòåìíûì ðåñóðñàì. Äëÿ SQL Server 2005 íåò ðàçíèöû, íà êàêîé ñèñòåìå ðàáîòàòü — ñ äâóìÿ ëîãè÷åñêèìè èëè ôèçè÷åñêèìè ïðîöåññîðàìè. Ëîãèêà ðàáîòû ïðè ýòîì íå èçìåíÿåòñÿ. Ïðè ýòîì ñåðâåðîì áàç äàííûõ àêòèâíî ýêñïëóàòèðóþòñÿ âîçìîæíîñòè ëîãè÷åñêîãî ðàçäåëåíèÿ êîìàíä â ñèñòåìå íà îñíîâå Windows Server 2003. Âî-ïåðâûõ, Windows Server 2003 ïîçâîëÿåò ðåàëèçîâàòü ðàñïèñàíèå êîìàíä, èäóùèõ íà îáðàáîòêó êîíâåéåðó êîìàíä, ÷òî çíà÷èòåëüíî óâåëè÷èâàåò ñêîðîñòü èõ îáðàáîòêè. Âî-âòîðûõ, ïîäîáíûé ïðîöåññîð (êîòîðûé
2.2. SQL Server è íîâîå àïïàðàòíîå îáåñïå÷åíèå
57
â îïåðàöèîííîé ñèñòåìå ïðåäñòàâëåí äâóìÿ ëîãè÷åñêèìè ïðîöåññîðàìè) íà ñàìîì äåëå ÿâëÿåòñÿ îäíèì ôèçè÷åñêèì, ÷òî ïîçâîëÿåò âîñïîëüçîâàòüñÿ ïðîãðàììîé ëèöåíçèðîâàíèÿ â ðàñ÷åòå íà îäèí ôèçè÷åñêèé, à íå äâà ëîãè÷åñêèõ ïðîöåññîðà. Ýòî ñýêîíîìèò ñðåäñòâà ïðåäïðèÿòèÿ.
2.2.2. Ïîääåðæêà NUMA Çíà÷èòåëüíîé ïåðåðàáîòêå è óëó÷øåíèþ ïîäâåðãëàñü òåõíîëîãèÿ âçàèìîäåéñòâèÿ SQL Server 2005 ñ îïåðàòèâíîé ïàìÿòüþ êîìïüþòåðà. Íîâàÿ òåõíîëîãèÿ íîñèò íàçâàíèå «àðõèòåêòóðà íåîäíîðîäíîé ïàìÿòè» (NUMA — Non-Uniform Memory Architecture). Ýòî òåõíîëîãèÿ ðàáîòû ïðèëîæåíèé â ìíîãîïðîöåññîðíîé ñðåäå, êîòîðàÿ ìîæåò èìåòü íåîäíîðîäíóþ àðõèòåêòóðó ïàìÿòè. Áëàãîäàðÿ èñïîëüçîâàíèþ äàííîé òåõíîëîãèè óâåëè÷èâàåòñÿ ñêîðîñòü ðàáîòû ñ ïàìÿòüþ, à òàêæå óïðîùàåòñÿ ìåõàíèçì àäðåñàöèè. Ýòà òåõíîëîãèÿ áûëà ðàçðàáîòàíà è çàïàòåíòîâàíà ñïåöèàëèñòàìè êîìïàíèè IBM. Ïðè ðàçðàáîòêå NUMA áûëè ïåðåñìîòðåíû è ïðîðàáîòàíû ñëàáûå ñòîðîíû òåõíîëîãèè SMP, ÷òî ïîçâîëèëî óìåíüøèòü êîíêóðåíöèþ ìåæäó îòäåëüíûìè ïðîöåññîðàìè â ìóëüòèïðîöåññîðíîé ñèñòåìå. Äåëî â òîì, ÷òî ïðè èñïîëüçîâàíèè òåõíîëîãèè äîñòóïà ê ïàìÿòè SMP ïðè óâåëè÷åíèè êîëè÷åñòâà ïðîöåññîðîâ óñèëèâàëàñü êîíêóðåíöèÿ ìåæäó íèìè â îòíîøåíèè îïåðàòèâíîé ïàìÿòè. Ýòî ïðèâîäèò ê òîìó, ÷òî óâåëè÷èâàåòñÿ âðåìÿ âûïîëíåíèÿ êîìàíä ïðè îïåðèðîâàíèè áîëüøèìè îáúåìàìè äàííûõ, êîòîðûå ÷àñòî íåîáõîäèìî êýøèðîâàòü (èìåííî òàêèå çàäà÷è ÷àñòî âîçíèêàþò ïåðåä SQL Server è ñåðâèñàìè àíàëèòèêè). Ïîäîáíûå çàäåðæêè îãðàíè÷èâàþò ìàñøòàáèðîâàíèå ñèñòåì, à òàêæå ïðèâîäÿò ê òîìó, ÷òî ñ óâåëè÷åíèåì ÷èñëà ïðîöåññîðîâ çàâèñèìîñòü ïðîèçâîäèòåëüíîñòè ðàáîòû ñèñòåìû ðàñòåò íå ëèíåéíî, à áîëåå ïîëîãî. Àðõèòåêòóðà NUMA ðàçðàáîòàíà òàêèì îáðàçîì, ÷òîáû ðåøèòü ïðîáëåìó àðõèòåêòóðû SMP è ïðåäîñòàâèòü ïðîöåññîðó âîçìîæíîñòü âûïîëíÿòü äîñòóï ê äàííûì îïåðàòèâíîé ïàìÿòè ñî ñêîðîñòüþ, ïðåâûøàþùåé ñêîðîñòü ðàáîòû ñèñòåìíîé øèíû. Íà ïåðâûé âçãëÿä àáñóðäíîå óòâåðæäåíèå íåîáõîäèìî àðãóìåíòèðîâàòü. Äåëî â òîì, ÷òî ñîãëàñíî àðõèòåêòóðå NUMA ïðîöåññîðû è ïàìÿòü ñãðóïïèðîâàíû â âèäå òàê íàçûâàåìûõ êîëëåêòîðîâ. Äàííûå êîëëåêòîðû ñîåäèíåíû äðóã ñ äðóãîì ñ ïîìîùüþ ñèñòåìíîé øèíû è ìîãóò âûïîëíÿòü îáðàáîòêó äàííûõ íåçàâèñèìî äðóã îò äðóãà. Ïîñðåäñòâîì ýòèõ ñîåäèíåíèé âûïîëíÿåòñÿ ïåðåäà÷à äàííûõ ìåæäó êëàñòåðàìè. Ñêîðîñòü ïåðåäà÷è äàííûõ ìåæäó êëàñòåðàìè ðàâíÿåòñÿ ñêîðîñòè ðàáîòû ñèñòåìíîé øèíû, ïðè ýòîì ïðèîðèòåòíûé äîñòóï ïðîöåññîðû èìåþò ê ïàìÿòè êîëëåêòîðà, â ñîñòàâ êîòîðîãî îíè âõîäÿò. Òàêèì îáðàçîì, óìåíüøàåòñÿ êîíêóðåíöèÿ ìåæäó ïðîöåññîðàìè â îòíîøåíèè îïåðàòèâíîé ïàìÿòè. Êàê äîñòèãàåòñÿ óâåëè÷åíèå ñêîðîñòè ñ÷èòûâàíèÿ è çàïèñè äàííûõ â ïàìÿòü? Çà ñ÷åò óìåíüøåíèÿ ìåæêëàñòåðíîãî âçàèìîäåéñòâèÿ è ïåðåäà÷è äàííûõ. Ïðîöåññîðû ïåðåäàþò ìåíüøèå îáúåìû êîìàíä è äàííûõ ìåæäó îòäåëüíûìè êëàñòåðàìè, ÷òî â êîíå÷íîì èòîãå ïîçâîëÿåò óìåíüøèòü êîíêóðåíöèþ ìåæäó íèìè â îòíîøåíèè äîñòóïà ê ðàçëè÷íûì ðåñóðñàì êîìïüþòåðà (è â ïåðâóþ î÷åðåäü ê îïåðàòèâíîé ïàìÿòè). Äëÿ òîãî ÷òîáû ðåøèòü ïîäîáíóþ ïðîáëåìó, íåîáõîäèìî ñïåöèàëüíûì îáðàçîì ñîçäàâàòü ïðèëîæåíèÿ (è ÷òî ñàìîå ãëàâíîå, îïåðàöèîííóþ ñèñòåìó).
58
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
Êîìïàíèÿ Microsoft îðèåíòèðîâàëàñü íà ðåøåíèå ïîäîáíûõ çàäà÷. À ïîòîìó ïðåäóñìîòðèòåëüíî ñîçäàëà îïåðàöèîííóþ ñèñòåìó Windows Server 2003 è SQL Server 2005 â ðàñ÷åòå íà óìåíüøåíèå ìåæêîëëåêòîðíîãî òðàôèêà. Ýòî ïîçâîëÿåò óñêîðèòü ðàáîòó ñèñòåì è äîñòè÷ü îáùåãî óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè ñèñòåìû, àêòèâíî ìàíèïóëèðóþùåé äàííûìè.
2.2.3. Ïîääåðæêà 64-ðàçðÿäíûõ ïðèëîæåíèé Äëÿ SQL Server 2005 ïîääåðæèâàåòñÿ ðàáîòà â ñèñòåìàõ íà îñíîâå ïðîöåññîðîâ Intel Itanium, Xeon è Intel Itanium II. Ïîìèìî ýòèõ ïðîöåññîðîâ ïîääåðæèâàåòñÿ ðàáîòà íà ñèñòåìàõ, êîòîðûå áàçèðóþòñÿ íà ïðîöåññîðàõ AMD Opteron è Athlon x64. Äëÿ òîãî ÷òîáû óñòàíîâèòü è íàñòðîèòü ðàáîòó SQL Server íà ïîäîáíûõ ñèñòåìàõ, íåîáõîäèìî óñòàíîâèòü 64-ðàçðÿäíóþ îïåðàöèîííóþ ñèñòåìó Windows Server 2003. Ïðè ýòîì âñå ñóùåñòâóþùèå â íîâîé ðåäàêöèè SQL Server ñåðâèñû ñóùåñòâóþò â âåðñèè äëÿ 64-ðàçðÿäíûõ ñèñòåì. Ýòî îçíà÷àåò, ÷òî ñåðâèñû àíàëèòèêè, îò÷åòîâ, ïðåîáðàçîâàíèÿ äàííûõ è äðóãèå ìîãóò áûòü óñòàíîâëåíû è íàñòðîåíû êàê íà 32-ðàçðÿäíûõ ñèñòåìàõ, òàê è íà 64-ðàçðÿäíûõ, ÷òî çíà÷èòåëüíî ðàñøèðÿåò îáëàñòè ïðèìåíåíèÿ ïîäîáíûõ ñèñòåì. Ïîìèìî óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè ðàáîòû êîìïîíåíòîâ SQL Server 2005 íà 64-ðàçðÿäíûõ ñèñòåìàõ çíà÷èòåëüíî ðàñøèðÿåòñÿ îáëàñòü çàäà÷, ðåøàåìûõ SQL Server 2005. Äîñòèãàåòñÿ ýòî çà ñ÷åò óâåëè÷åíèÿ ìîùíîñòè ïðîöåññîðîâ ñèñòåìû, à òàêæå óâåëè÷åíèÿ äîñòóïíîé ïàìÿòè äëÿ àäðåñàöèè (ðèñ. 2.2).
Ðèñ. 2.2. 64-ðàçðÿäíûå ñèñòåìû ìîãóò àäðåñîâàòü áîëüøèå îáúåìû ïàìÿòè
2.3. Áåçîïàñíîñòü Ïîæàëóé, íàèáîëüøèì èçìåíåíèÿì è óëó÷øåíèÿì ïîäâåðãëèñü ìåõàíèçìû îáåñïå÷åíèÿ áåçîïàñíîñòè â SQL Server. Ñïåöèàëèñòû Microsoft ìíîãî âðåìåíè ïîñâÿòèëè ïåðåñìîòðó è óëó÷øåíèþ ìåõàíèçìîâ ðàáîòû SQL Server, óïðàâëåíèþ ïðàâàìè äîñòóïà ê äàííûì, ðàçäà÷å ïðàâ è äðóãèì âîïðîñàì, êîòîðûå òàê èëè èíà÷å ñâÿçàíû ñ áåçîïàñíîñòüþ. Âî âðåìÿ ðàçðàáîòêè ñèñòåìû áåçîïàñíîñòè SQL Server 2005 Microsoft ïîëüçîâàëàñü öåëûì íàáîðîì ïðàâèë, ñîáëþäåíèå êîòîðûõ äîëæíî ãàðàíòèðîâàòü âûñîêèé óðîâåíü áåçîïàñíîñòè äàííûõ. Âî-ïåðâûõ, ñïåöèàëèñòû Microsoft õîòåëè, ÷òîáû áåçîïàñíîñòü SQL Server áûëà íà äîëæíîì óðîâíå ñðàçó ïîñëå óñòàíîâêè ñåðâåðà è ïîäêëþ÷åíèÿ ê ñåòè. Æåëàòåëüíî, ÷òîáû áåç êàêîé-ëèáî äîâîäêè ñî ñòîðîíû àäìèíèñòðàòîðà ñèñòåìà ïîëíîñòüþ îáåñïå-
2.3. Áåçîïàñíîñòü
59
÷èâàëà áåçîïàñíûé äîñòóï ê äàííûì. Äëÿ ðåàëèçàöèè äàííîãî ïëàíà áûëè îòêëþ÷åíû ïî óìîë÷àíèþ ìíîãèå ôóíêöèè SQL Server 2005, ÷òîáû îáåñïå÷èòü ñîîòâåòñòâóþùèé óðîâåíü áåçîïàñíîñòè. Ïðè íåîáõîäèìîñòè äîïîëíèòåëüíûå ìåõàíèçìû è ôóíêöèè SQL Server ìîãóò áûòü çàäåéñòâîâàíû, ÷òî ïîòðåáóåò âíèìàíèÿ àäìèíèñòðàòîðà, à ñëåäîâàòåëüíî, áóäåò îáåñïå÷åí äîëæíûé óðîâåíü áåçîïàñíîñòè. Âî-âòîðûõ, Microsoft õîòåëà îãðàíè÷èòü íàáîð êîìïîíåíòîâ, êîòîðûå ìîãóò áûòü èñïîëüçîâàíû â ñèñòåìå. Äëÿ ýòîãî îïðåäåëåí ñïèñîê ïîëüçîâàòåëåé, êîòîðûå ìîãóò èñïîëüçîâàòü òîëüêî îïðåäåëåííûå êîìïîíåíòû è íå ìîãóò âûïîëíÿòü óñòàíîâêó äîïîëíèòåëüíûõ. Â-òðåòüèõ, ïîëüçîâàòåëè â ñèñòåìå èìåþò òîëüêî òå ïðèâèëåãèè, êîòîðûå èì íåîáõîäèìû äëÿ âûïîëíåíèÿ çàäà÷. Ýòî ïîçâîëÿåò åùå áîëåå îãðàíè÷èòü ñâîáîäó äåéñòâèé ïîëüçîâàòåëÿ â ñèñòåìå, à ñëåäîâàòåëüíî, äîáèòüñÿ íåîáõîäèìîãî óðîâíÿ áåçîïàñíîñòè. Ïðàêòè÷åñêè âñå íîâîââåäåíèÿ, êîòîðûå ïîÿâèëèñü â ïîñëåäíåé âåðñèè SQL Server, áûëè äîáàâëåíû â ðåçóëüòàòå èññëåäîâàíèé, ïðîâîäèìûõ ñïåöèàëèñòàìè Microsoft â ïîñëåäíèå òðè ãîäà. Áîëåå äåòàëüíî âîïðîñû, êîòîðûå êàñàþòñÿ áåçîïàñíîñòè, ìû ðàññìîòðèì â ãëàâå 12 «Áåçîïàñíîñòü».  ýòîì æå ðàçäåëå ìû ðàññìîòðèì òîëüêî íåêîòîðûå èç íèõ â ñîêðàùåííîì îáúåìå.
2.3.1. Äîñòóï ê îáúåêòàì SQL Server 2005 Ïî ñðàâíåíèþ ñ SQL Server 2000 íîâàÿ âåðñèÿ ýòîãî ïðîãðàììíîãî ïðîäóêòà ïîçâîëÿåò ðåàëèçîâàòü áîëåå òîíêèé äîñòóï ê îáúåêòàì. Äëÿ ýòîãî ðåàëèçîâàíî íåñêîëüêî äîïîëíèòåëüíûõ óðîâíåé äîñòóïà. Òåïåðü äàííûå óðîâíè äîñòóïà ìîãóò áûòü ïðèìåíåíû ê áàçå äàííûõ, ñåðâåðó, îáúåêòó, ñõåìå èëè ïðèíöèïàëó. Ýòî ïîçâîëÿåò àäìèíèñòðàòîðó áàç äàííûõ ðåàëèçîâàòü áîëåå òîíêèé êîíòðîëü íàä îáúåêòàìè, áàçîé äàííûõ è äðóãèìè ýëåìåíòàìè áåçîïàñíîñòè SQL Server. Ïðè ýòîì ñóùåñòâóþùèå ðîëè ìîãóò â äàëüíåéøåì áûòü èñïîëüçîâàíû äëÿ îáåñïå÷åíèÿ áåçîïàñíîñòè ñèñòåìû è ðàçãðàíè÷åíèÿ óðîâíåé äîñòóïà. Íîâûå óðîâíè äîñòóïà äîëæíû èñïîëüçîâàòüñÿ, â ïåðâóþ î÷åðåäü, äëÿ îáåñïå÷åíèÿ ïðàâ àóäèòà èñïîëüçîâàíèÿ îáúåêòîâ.  ïðåäûäóùåé âåðñèè SQL Server òðåáîâàëîñü âõîäèòü â ñîñòàâ ãðóïïû sysadmins äëÿ òîãî, ÷òîáû èìåòü ïðàâà íà âûïîëíåíèå àóäèòà. Ïðè ýòîì äîáàâëåíèå ïîëüçîâàòåëÿ â äàííóþ ãðóïïó ïðèâîäèëî ê òîìó, ÷òî îí, ïîìèìî âîçìîæíîñòè àóäèòà, ïîëó÷àë äîïîëíèòåëüíûå âîçìîæíîñòè è ïðàâà äëÿ äåéñòâèÿ â ñèñòåìå. ×àñòî ïîäîáíàÿ ñâîáîäà ïîëüçîâàòåëÿ áûëà íåæåëàòåëüíà. Ïîýòîìó â SQL Server 2005 ïðàâà íà îñóùåñòâëåíèå àóäèòà áûëè îòäåëåíû îò äðóãèõ ïðàâ. Òåïåðü íåò íåîáõîäèìîñòè âêëþ÷àòü ïîëüçîâàòåëÿ â ñîñòàâ ãðóïïû sysadmins äëÿ òîãî, ÷òîáû îí ìîã âûïîëíÿòü àóäèò. Ïðè ýòîì ñóùåñòâóþùèå êîìàíäû REVOKE, DENY è GRANT äëÿ óïðàâëåíèÿ ïðàâàìè äîñòóïà ïîëüçîâàòåëÿ ê îáúåêòàì òàêæå ìîãóò áûòü èñïîëüçîâàíû àäìèíèñòðàòîðàìè è ðàçðàáîò÷èêàìè äëÿ ðàñøèðåíèÿ óðîâíÿ äîñòóïà âûáðàííîãî ïîëüçîâàòåëÿ ê îáúåêòàì áàçû äàííûõ. Îäíèì èç íîâîââåäåíèé SQL Server 2005 ÿâëÿåòñÿ òî, ÷òî óðîâíè äîñòóïà ìîãóò èñïîëüçîâàòüñÿ â ðàçëè÷íûõ öåëÿõ â çàâèñèìîñòè îò îáúåêòà, óðîâåíü äîñòóïà ê êîòîðîìó çàäàåòñÿ. Íàïðèìåð, åñëè âûïîëíÿåòñÿ ïðèñâîåíèå ïðàâ äîñòóïà â îòíîøåíèè áàçû äàííûõ, òî çàäàâàåìûé óðîâåíü äîñòóïà äëÿ âûáðàííîãî ïîëüçîâàòåëÿ áóäåò íàñòðîåí òàêæå íà âñå îáúåêòû, ñîäåðæàùèåñÿ â âûáðàííîé áàçå äàííûõ.
60
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
 òîì ñëó÷àå, åñëè ïðèñâîåíèå óðîâíÿ äîñòóïà âûïîëíÿåòñÿ â îòíîøåíèè ñõåìû, ïðèìåíåíèå óðîâíÿ äîñòóïà òàêæå âûïîëíÿåòñÿ â îòíîøåíèè îáúåêòîâ, âõîäÿùèõ â ñîñòàâ äàííîé ñõåìû. Áîëåå äåòàëüíîå îïèñàíèå óðîâíåé äîñòóïà ïðèâåäåíî â òàáë. 2.1. Òàáëèöà 2.1. Óðîâíè äîñòóïà â SQL Server 2005 ¹
Óðîâåíü äîñòóïà
Îïèñàíèå
1
ALTER
Ïîçâîëÿåò èçìåíÿòü ñâîéñòâà îáúåêòà. Òàêæå ïîçâîëÿåò âûïîëíÿòü â îòíîøåíèè äàííîãî îáúåêòà ñëåäóþùèå êîìàíäû: ALTER, CREATE, DROP
2
ALTER ANY 'X'
Ïîçâîëÿåò èçìåíÿòü ñâîéñòâà âñåõ îáúåêòîâ, èìåþùèõ òèï 'X', à òàêæå âûïîëíÿòü êîìàíäû ALTER, CREATE, DROP â îòíîøåíèè îáúåêòîâ îïðåäåëåííîãî òèïà
3
ALTER TRACE
Ïîçâîëÿåò âûïîëíÿòü àóäèò, à òàêæå çàïóñêàòü ïðîôàéëåð (Profiler)
4
CONTROL
Ïîçâîëÿåò çàäàâàòü âëàäåëüöà îáúåêòà
5
SELECT
Ïîçâîëÿåò âûïîëíÿòü äîñòóï ê îáúåêòó (êîìàíäó SELECT). Òåïåðü äàííûé óðîâåíü äîñòóïà òàêæå ìîæíî ïðèìåíÿòü â îòíîøåíèè áàç äàííûõ è ñõåì, à íå òîëüêî îáúåêòîâ
6
EXECUTE
Ïîçâîëÿåò çàäàâàòü ïðèíöèïàëó ïðàâà íà âûïîëíåíèå ïðîöåäóð, ôóíêöèé è ñáîðîê
7
IMPERSONATE
Ïðåäîñòàâëÿåò ïðàâà âõîäà â ñèñòåìó
8
TAKE OWNERSHIP
Ïîçâîëÿåò èçìåíÿòü ïðàâà âëàäåíèÿ îáúåêòîì
9
VIEW DEFINITION
Ïðåäîñòàâëÿåò âîçìîæíîñòü äëÿ ïðîñìîòðà ìåòàäàííûõ
Âñå óðîâíè äîñòóïà äëÿ ñåðâåðà õðàíÿòñÿ â ïðåäñòàâëåíèè sys.server_ permissions. Ïðàâà äîñòóïà äëÿ áàçû äàííûõ õðàíÿòñÿ â ïðåäñòàâëåíèè sys. database_permissions. Äëÿ èõ ïðîñìîòðà ìîæíî âîñïîëüçîâàòüñÿ ñëåäóþùèìè çàïðîñàìè: SELECT * FROM sys.server_permissions SELECT * FROM sys.database_permissions
2.3.2. Ïîëèòèêè áåçîïàñíîñòè â îòíîøåíèè ïàðîëåé Åùå îäíîé âàæíîé îñîáåííîñòüþ SQL Server 2005 ÿâëÿåòñÿ ïîääåðæêà ïîëèòèê â îòíîøåíèè ïàðîëåé ó÷åòíûõ çàïèñåé. Äàííàÿ ôóíêöèîíàëüíîñòü ïîçâîëÿåò ïîääåðæèâàòü ïîëèòèêè áåçîïàñíîñòè Windows â îòíîøåíèè ïàðîëåé. Òåïåðü äàííûå ïîëèòèêè ìîãóò áûòü ïðèìåíåíû òàêæå â îòíîøåíèè ñåðâåðîâ SQL. Ñ ïîìîùüþ ïîëèòèê áåçîïàñíîñòè òåïåðü ìîæíî íàñòðîèòü ìèíèìàëüíóþ äëèíó ïàðîëÿ, çàäàòü åãî ñëîæíîñòü, à ïðè íåîáõîäèìîñòè ñðîê èñòå÷åíèÿ. Ýòî ïîçâîëèò àäìèíèñòðàòîðàì íå áåñïîêîèòüñÿ î ïîñòîÿííîé ñìåíå ïàðîëÿ ïîëüçîâàòåëÿìè äëÿ îáåñïå÷åíèÿ äîëæíîãî óðîâíÿ áåçîïàñíîñòè, à òàêæå îáåçîïàñèòü ñåáÿ îò ïðîñòåéøèõ ñëó÷àåâ âçëîìà ñèñòåì â ñëó÷àå ýëåìåíòàðíîãî ïîäáîðà ïàðîëÿ. Ïîëèòèêà áëîêèðîâàíèÿ ó÷åòíîé çàïèñè ïîçâîëèò îáåñïå÷èòü ãàðàíòèðîâàííîå áëîêèðîâàíèå ó÷åòíîé çàïèñè â òîì ñëó÷àå, åñëè ïîëüçîâàòåëü îïðåäåëåííîå ÷èñëî ðàç íåïðàâèëüíî ââîäèë ïàðîëü. Ïîëèòèêè ïîääåðæèâàþòñÿ Windows Server 2003.
2.3. Áåçîïàñíîñòü
61
Îäíàêî â ñëó÷àå èñïîëüçîâàíèÿ ñâÿçêè Microsoft Windows 2000 è SQL Server 2005 ïîääåðæèâàåòñÿ òîëüêî ïîëèòèêà êîìïëåêñíîñòè ïàðîëÿ. Äðóãèå ïîëèòèêè ïîääåðæèâàþòñÿ òîëüêî íà óðîâíå îïåðàöèîííîé ñèñòåìû Windows Server 2003. Ïî óìîë÷àíèþ âñå ïîëèòèêè çàäåéñòâîâàíû ïîñëå óñòàíîâêè SQL Server 2005. Àäìèíèñòðàòîð ìîæåò çà íåíàäîáíîñòüþ îòêëþ÷èòü îäíó èëè íåñêîëüêî ïîëèòèê áåçîïàñíîñòè. Õðàíåíèå ïîëèòèê áåçîïàñíîñòè, à òàêæå äàííûõ îá èõ èñïîëüçîâàíèè âûïîëíÿåòñÿ â ïðåäñòàâëåíèè sys.sql_logins SQL Server 2005. Äëÿ ïðîñìîòðà ñïèñêà ïîëèòèê âîñïîëüçóéòåñü ñëåäóþùèì çàïðîñîì: SELECT * FROM sys.sql_logins
2.3.3. Óðîâåíü äîñòóïà VIEW DEFINITION  SQL Server 2005 òàêæå ïîäâåðãëàñü ïåðåñìîòðó è óëó÷øåíèþ áåçîïàñíîñòü êàòàëîãîâ. Òåïåðü âñå ñèñòåìíûå òàáëèöû, êîòîðûå ñóùåñòâîâàëè â SQL Server 2000, à òàêæå ãëàâíûå áàçû äàííûõ ñóùåñòâóþò â âèäå ïðåäñòàâëåíèé êàòàëîãîâ â SQL Server 2005. Âñå ìåòàäàííûå ñåðâåðà, êîòîðûå ðàíåå áûëè äîñòóïíû äëÿ ïîëüçîâàòåëåé, òåïåðü õðàíÿòñÿ â âèäå ïîäîáíûõ ïðåäñòàâëåíèé. Ïîëüçîâàòåëè èìåþò ìèíèìàëüíûé óðîâåíü äîñòóïà ê ïîäîáíûì äàííûì. Ïðåäñòàâëåíèÿ çàùèùåíû ñ ïîìîùüþ íàñòðîéêè óðîâíÿ äîñòóïà ê çàïèñÿì òàáëèö, à ñëåäîâàòåëüíî, òîëüêî îãðàíè÷åííîå ÷èñëî ïîëüçîâàòåëåé èìåþò äîñòóï äëÿ ÷òåíèÿ ýòèõ äàííûõ. Ñòîèò çàìåòèòü, ÷òî ïîëüçîâàòåëü SA, êàê è ðàíåå, èìååò äîñòóï êî âñåì ïîäîáíûì òàáëèöàì. Äëÿ òîãî ÷òîáû íàñòðîèòü óðîâåíü äîñòóïà äëÿ ïðèíöèïàëà ê ìåòàäàííûì, ñèñòåìíûé àäìèíèñòðàòîð äîëæåí óñòàíîâèòü äëÿ íåãî óðîâåíü äîñòóïà VIEW DEFINITION. Äàííûé óðîâåíü ðàçðåøàåò ïîëüçîâàòåëþ (êîòîðûé íå ÿâëÿåòñÿ âëàäåëüöåì îáúåêòà) âûïîëíÿòü ÷òåíèå ìåòàäàííûõ âûáðàííîãî îáúåêòà. Óðîâåíü äîñòóïà VIEW DEFINITION ìîæåò áûòü ïðèìåíåí â îòíîøåíèè ñëåäóþùèõ ýëåìåíòîâ: · áàçà äàííûõ; · ñåðâåð; · ñõåìà; · îáúåêò.
2.3.4. Êîíòåêñòíîå âûïîëíåíèå õðàíèìûõ ïðîöåäóð  íîâîé âåðñèè SQL Server ïîÿâèëîñü òîëüêî îäíî ïðåèìóùåñòâî â îáëàñòè ðàáîòû ñ õðàíèìûìè ïðîöåäóðàìè ïî ñðàâíåíèþ ñ ïðåäûäóùèìè âåðñèÿìè SQL Server. Ìîæíî ñêàçàòü, ÷òî äàííîå ïðåèìóùåñòâî ñêîðåå îòíîñèòñÿ ê ìîäóëÿì SQL Server, ÷åì ê ñàìîìó ìåõàíèçìó èñïîëüçîâàíèÿ õðàíèìûõ ïðîöåäóð. Òåïåðü äëÿ ìîäóëåé ìîæíî çàäàâàòü êîíòåêñò âûïîëíåíèÿ.  äàííîì ñëó÷àå â êà÷åñòâå ìîäóëåé ìîãóò âûñòóïàòü õðàíèìûå ïðîöåäóðû, ñáîðêè èëè ïîëüçîâàòåëüñêèå ôóíêöèè. Çàäàâàÿ êîíòåêñò âûïîëíåíèÿ ìîäóëÿ, ìîæíî äîáèòüñÿ òîãî, ÷òî âî âðåìÿ åãî âûïîëíåíèÿ áóäåò âûïîëíÿòüñÿ ïðîâåðêà óðîâíÿ äîñòóïà ïðè âûïîëíåíèè òîé èëè èíîé ôóíêöèè èëè õðàíèìîé ïðîöåäóðû. Èíûìè ñëîâàìè, ñ ïîìîùüþ ïàðàìåòðîâ èñïîëíåíèÿ ìîæíî äîáèòüñÿ òîãî, ÷òî ïðîöåäóðà èëè ôóíêöèÿ áóäóò âûïîëíÿòüñÿ îò èìåíè ïîëüçîâàòåëÿ, â îáùåì ñëó÷àå îòëè÷íîãî îò òîãî, êîòîðûé
62
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
âûïîëíÿåò ïðîöåäóðó èëè ôóíêöèþ. Òàêèì îáðàçîì, ìîæíî äîáèòüñÿ âûïîëíåíèÿ ìîäóëåé îò èìåíè äðóãèõ ïîëüçîâàòåëåé. Ýòî ïîçâîëÿåò äîáàâèòü äîïîëíèòåëüíûé óðîâåíü ñâîáîäû äëÿ ðàáîòû àäìèíèñòðàòîðà èëè ðàçðàáîò÷èêà. Ïîäîáíûé ìåõàíèçì î÷åíü ïîõîæ íà ðàáîòó ìåõàíèçìà öåïî÷êè âëàäåëüöåâ, êîòîðûé áûë ðåàëèçîâàí â ïðåäûäóùåé âåðñèè SQL Server. Íàïðèìåð, âû íå ñìîæåòå èçìåíèòü êîíòåêñò âûïîëíåíèÿ äëÿ äèíàìè÷åñêîãî çàïðîñà SQL, èñïîëüçóÿ ìåõàíèçì öåïî÷êè âëàäåëüöåâ â SQL Server 2000. Îäíàêî ýòà îïåðàöèÿ îñóùåñòâèìà â SQL Server 2005 áëàãîäàðÿ èñïîëüçîâàíèþ ìåõàíèçìà êîíòåêñòíîãî âûïîëíåíèÿ ìîäóëÿ.  ýòîì ñëó÷àå äëÿ SQL Server 2005 äèíàìè÷åñêèé SQL-çàïðîñ ïðàêòè÷åñêè íè÷åì íå îòëè÷àåòñÿ îò ñòàòè÷åñêîãî çàïðîñà è ïîçâîëÿåò ðåàëèçîâàòü ïðàêòè÷åñêè áåçãðàíè÷íûé íàáîð ñðåäñòâ, äîñòóïíûõ äëÿ ðàáîòû ñî ñòàòè÷åñêèì çàïðîñîì. Äëÿ òîãî ÷òîáû áîëåå äåòàëüíî ðàçîáðàòüñÿ â ðàçëè÷èè ìåõàíèçìîâ öåïî÷êè âëàäåëüöåâ â SQL Server 2000 è êîíòåêñòíîãî âûïîëíåíèÿ â SQL Server 2005, ðàññìîòðèì ïðèìåð (ðèñ. 2.3).
Ðèñ. 2.3. Öåïî÷êà âëàäåëüöåâ â SQL Server 2000
Íàïðèìåð, ïîëüçîâàòåëü User1 äëÿ òîãî, ÷òîáû âûïîëíÿòü ïðîöåäóðó DBO. Procedure1, äîëæåí èìåòü ïðàâà íà åå âûïîëíåíèå. Îäíàêî åñëè â ïðîöåäóðå DBO.Procedure1 âûïîëíÿåòñÿ äîñòóï (íàïðèìåð, èçìåíåíèå) ê òàáëèöå DBO.Table1, òî â ýòîì ñëó÷àå íå âûïîëíÿåòñÿ ïðîâåðêà óðîâíÿ äîñòóïà ïîëüçîâàòåëÿ User1 ê òàáëèöå DBO.Table1. Ïîäîáíàÿ ïðîâåðêà íå âûïîëíÿåòñÿ èç-çà òîãî, ÷òî ïîëüçîâàòåëü User1 ÿâëÿåòñÿ âëàäåëüöåì îáîèõ îáúåêòîâ (êàê ïðîöåäóðû, òàê è òàáëèöû). Ýòîò ïðèìåð äåìîíñòðèðóåò äåéñòâèå ìåõàíèçìà öåïî÷êè âëàäåëüöåâ. Ðàññìîòðèì äðóãîé ïðèìåð. Ïîëüçîâàòåëþ User1 äëÿ âûïîëíåíèÿ ïðîöåäóðû User2.Procedure1 íåîáõîäèìî ñíà÷àëà ïîëó÷èòü äîñòóï ê íåé.  ïðîöåäóðå User2.Procedure1 âûïîëíÿåòñÿ äîñòóï ê òàáëèöå User3.Table1.  ýòîì ñëó÷àå ïîëüçîâàòåëü User1 äîëæåí èìåòü äîñòóï ê äàííîé òàáëèöå, íàïðèìåð, íà óðîâíå WRITE, ïîñêîëüêó â ýòîì ñëó÷àå âëàäåëüöåì ïðîöåäóðû User2.Procedure1 ÿâëÿåòñÿ ïîëüçîâàòåëü User2 (â îáùåì ñëó÷àå îòëè÷íûé îò ïîëüçîâàòåëÿ, âûïîëíÿþùåãî äîñòóï). Ãîâîðÿ ÿçûêîì àäìèíèñòðàòîðà áàç äàííûõ, âî âòîðîì ñëó÷àå ìû íàáëþäàåì ðàçðûâ öåïî÷êè âëàäåëüöåâ. ×òî êàñàåòñÿ SQL Server 2005, òî â äàííîì ñëó÷àå äåéñòâèÿ ñåðâåðà íåñêîëüêî îòëè÷àþòñÿ îò ðàáîòû SQL Server 2000 (ðèñ. 2.4). Ðàññìîòðèì áîëåå äåòàëüíî äåéñòâèå äàííîãî ìåõàíèçìà íà ïðèìåðå. Ïóñòü ïîëüçîâàòåëü User1 âûïîëíÿåò ïðîöåäóðó User2.Procedure1, â êîòîðîé â ñâîþ î÷åðåäü âûïîëíÿåòñÿ äîñòóï ê òàá-
2.3. Áåçîïàñíîñòü
63
ëèöå User3.Table1. Âî âðåìÿ âûïîëíåíèÿ ïðîöåäóðû User2.Procedure1 ïîëüçîâàòåëåì User1 SQL Server 2005 âûïîëíèò ïðîâåðêó ïðàâ âûïîëíåíèÿ äàííîé ïðîöåäóðû äëÿ ïîëüçîâàòåëÿ User1. Åñëè âî âðåìÿ ñîçäàíèÿ ïðîöåäóðû User2.Procedure1 áûë îïðåäåëåí êîíòåêñò âûïîëíåíèÿ, â êîòîðîì áûëî îïðåäåëåíî, ÷òî èñïîëíèòåëåì ïðîöåäóðû áóäåò ÿâëÿòüñÿ User1, òî ïðîâåðêà áóäåò âûïîëíÿòüñÿ ñëåäóþùèì îáðàçîì: 1. Âíà÷àëå SQL Server 2005 âûïîëíèò ïðîâåðêó óðîâíÿ äîñòóïà ê òàáëèöå, âûçûâàåìîé èç ïðîöåäóðû (User3.Table1), äëÿ ïîëüçîâàòåëÿ, îïðåäåëåííîãî â êîíòåêñòå âûïîëíåíèÿ (íàïðèìåð, User1). 2. Åñëè äàííûé ïîëüçîâàòåëü èìååò ïðàâà äîñòóïà ê òàáëèöå (íàïðèìåð, íà óðîâíå Write), òî äîñòóï ê òàáëèöå åìó ðàçðåøàåòñÿ, è îí ìîæåò âûïîëíÿòü ïðîöåäóðó User2.Procedure1. Åñëè æå îí íå èìååò ïîäîáíûõ ïðàâ, òî äîñòóï ê ïðîöåäóðå îí íå ïîëó÷èò, à ñëåäîâàòåëüíî, íå ñìîæåò âûïîëíèòü ÷òåíèå èëè çàïèñü äàííûõ â òàáëèöó User3.Table1.
Ðèñ. 2.4. Êîíòåêñòíîå âûïîëíåíèå ìîäóëÿ â SQL Server 2005
Òàêèì îáðàçîì, èñïîëüçóÿ ìåõàíèçì êîíòåêñòíîãî âûïîëíåíèÿ ìîäóëÿ, ìîæíî îãðàíè÷èòü äîñòóï ïîëüçîâàòåëåé ê îáúåêòàì, ïðàâà íà èñïîëüçîâàíèå êîòîðûõ îíè íå èìåþò. Ïîìèìî ïîâûøåíèÿ áåçîïàñíîñòè ýòî ïîçâîëÿåò óïðîñòèòü ïðîöåññ ñîçäàíèÿ õðàíèìûõ ïðîöåäóð, ôóíêöèé è ñáîðîê. Äëÿ òîãî ÷òîáû íàñòðîèòü êîíòåêñò âûïîëíåíèÿ, âîñïîëüçóéòåñü ñëåäóþùåé êîìàíäîé: ALTER PROC User1Schema.Procedure1 WITH EXECUTE AS USER User2
Ñ ïîìîùüþ äàííîé êîìàíäû ìû íàñòðîèëè âîçìîæíîñòü êîíòåêñòíîãî âûïîëíåíèÿ ïðîöåäóðû User1Schema.Procedure1 äëÿ ïîëüçîâàòåëÿ User2. Çäåñü íåîáõîäèìî îãîâîðèòüñÿ, ÷òî â êà÷åñòâå êîíòåêñòà íåëüçÿ ïåðåäàâàòü ðîëü. Ðîëü íå ìîæåò âûñòóïàòü â êà÷åñòâå êîíòåêñòíîãî èñïîëíèòåëÿ ìîäóëÿ. Âñå íàñòðîéêè êîíòåêñòíîãî èñïîëíåíèÿ ìîäóëåé õðàíÿòñÿ â ïðåäñòàâëåíèè sys.sql_modules. Èõ ìîæíî ïðîñìîòðåòü, âûïîëíèâ çàïðîñ: SELECT * FROM sys.sql_modules
2.3.5. Áåçîïàñíîñòü ïîëüçîâàòåëüñêèõ ñõåì Ïîæàëóé, îäíèì èç íàèáîëåå ïðèìå÷àòåëüíûõ èçìåíåíèé, êîòîðûå êîñíóëèñü ìåõàíèçìîâ áåçîïàñíîñòè â SQL Server 2005, ÿâëÿåòñÿ ðàçäåëåíèå ïîëüçîâàòåëüñêèõ ñõåì. Òåïåðü ïðàêòè÷åñêè êàæäûé îáúåêò SQL Server ìîæåò áûòü çàùèùåí îò äåéñòâèé òîãî èëè èíîãî ïîëüçîâàòåëÿ. Ïðè ýòîì â êà÷åñòâå ïîëüçîâàòåëÿ ìîæåò
64
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
âûñòóïàòü êàê îòäåëüíûé ïîëüçîâàòåëü, ïðîøåäøèé àâòîðèçàöèþ Windows, òàê è ðîëü èëè ïîëüçîâàòåëü SQL Server. Â SQL Server 2000 èíôîðìàöèÿ îáî âñåõ ïîëüçîâàòåëÿõ è ðîëÿõ, ñóùåñòâîâàâøèõ â ñèñòåìå, õðàíèëàñü â ñèñòåìíîé òàáëèöå sys_users. Òåïåðü ïîäõîä íåñêîëüêî èçìåíèëñÿ. Âñå ïîëüçîâàòåëè SQL Server 2005 õðàíÿòñÿ â íîâîì ïðåäñòàâëåíèè sys.database_principals. Â íîâîé âåðñèè SQL Server âëàäåëüöàìè îáúåêòîâ ÿâëÿþòñÿ íå îòäåëüíûå ïîëüçîâàòåëè, à ñõåìû. Äëÿ õðàíåíèÿ äàííûõ ñõåì èñïîëüçóåòñÿ ñèñòåìíîå ïðåäñòàâëåíèå sys.schemas. Ïðîñìîòðåòü ñîäåðæèìîå äàííûõ ïðåäñòàâëåíèé ìîæíî, âûïîëíèâ çàïðîñû: SELECT * FROM sys.database_principals SELECT * FROM sys.schemas
Ïîäõîä ê ñõåìàì íå èçìåíèëñÿ. Ñõåìà ïðåäñòàâëÿåò ñîáîé êîíòåéíåð, âìåùàþùèé íåêîòîðûå îáúåêòû. Äëÿ îáîçíà÷åíèÿ ñõåìû, êàê è â ïðåäûäóùèõ âåðñèÿõ, èñïîëüçóåòñÿ òðåõñîñòàâíîé èëè ÷åòûðåõñîñòàâíîé èäåíòèôèêàòîð. Ïðèìåðîì èìåíè ñõåìû ìîæåò ñëóæèòü ñëåäóþùèé: SERVER_NAME.DATABASE_NAME.SCHEMA_NAME.OBJECT_NAME
 ïðåäûäóùèõ âåðñèÿõ SQL Server èìåíà ñõåìû è âëàäåëüöà ÷àñòî ñîâïàäàëè.  íîâîé âåðñèè ïîíÿòèå èìåíè ïîëüçîâàòåëÿ îòäåëåíî îò ïîíÿòèÿ èìåíè ñõåìû. Åñëè âû èñïîëüçóåòå SQL Server 2000 èëè áîëåå ðàííþþ âåðñèþ, òî âî âðåìÿ îïðåäåëåíèÿ èìåíè îáúåêòà ñåðâåð áóäåò ïðîñìàòðèâàòü ñîäåðæèìîå òàáëèöû Database_name.  òîì ñëó÷àå, åñëè ðàáîòà âåäåòñÿ ïîä óïðàâëåíèåì SQL Server 2005, âíà÷àëå ñåðâåð áóäåò ïðîñìàòðèâàòü ñîäåðæèìîå òàáëèöû Object_name, à åñëè äàííàÿ òàáëèöà íå áóäåò íàéäåíà, òî ñåðâåð âûïîëíèò ïðîñìîòð ñîäåðæèìîãî òàáëèöû Database_name.dbo.Object_name. Îñíîâíîé ïðè÷èíîé, êîòîðàÿ ïîáóäèëà ðàçðàáîò÷èêîâ SQL Server 2005 ê èçìåíåíèÿì, âèäèòñÿ òî, ÷òî ïðè èñïîëüçîâàíèè ñõåìû â êà÷åñòâå âëàäåëüöà îáúåêòà àäìèíèñòðàòîð âñåãäà ñìîæåò èçìåíèòü ñõåìó-âëàäåëüöà îáúåêòà íà äðóãóþ. Åñëè â êà÷åñòâå âëàäåëüöà èñïîëüçóåòñÿ ïîëüçîâàòåëü, òî áåç íåãî èíîãäà íåëüçÿ âûïîëíèòü ñìåíó ïðàâ âëàäåíèÿ îïðåäåëåííûì îáúåêòîì.  ñâÿçè ñ ýòèì â îðãàíèçàöèè âîçíèêàþò ñåðüåçíûå ïðîáëåìû, êîãäà îïðåäåëåííûé ñîòðóäíèê óâîëüíÿåòñÿ, è íåëüçÿ èçìåíèòü âëàäåëüöà îïðåäåëåííîãî îáúåêòà èëè öåëîé áàçû äàííûõ. Ïîìèìî ýòîãî ñóùåñòâóåò òàêæå ïðîáëåìà ñìåíû èìåíè îáúåêòà âî âðåìÿ ñìåíû åãî âëàäåëüöà. Ðàññìîòðèì ýòî íà ïðèìåðå. Âëàäåëüöåì òàáëèöû Table, ðàñïîëîæåííîé â áàçå DataBase, ÿâëÿåòñÿ ïîëüçîâàòåëü User1. Ïîëíîå èìÿ òàáëèöû â òàêîì ñëó÷àå èìååò ñëåäóþùèé âèä: DataBase.User1.Table. Åñëè âëàäåëåö îáúåêòà ñìåíèëñÿ è èì ñòàë, íàïðèìåð, User2, òî ñîîòâåòñòâóþùèì îáðàçîì ñìåíèëîñü òàêæå èìÿ äàííîé òàáëèöû íà DataBase.User2.Table. Òàêèì îáðàçîì, ïðèëîæåíèÿ, â êîòîðûõ âûïîëíåíà ïðèâÿçêà ê îïðåäåëåííîìó âëàäåëüöó äàííîé òàáëèöû, ìîãóò ïîïðîñòó íå ðàáîòàòü èëè ðàáîòàòü íåêîððåêòíî ââèäó òîãî, ÷òî èç-çà ñìåíû îáúåêòîâ ñìåíèëèñü ïîëíûå èìåíà îáúåêòîâ. Äëÿ ðåøåíèÿ ïîäîáíûõ ïðîáëåì ìíîãèì îðãàíèçàöèÿì ïðèõîäèëîñü ïðèáåãàòü ê ðàçðàáîòêå ñòàíäàðòîâ, êîòîðûõ äîëæíû áûëè ïðèäåðæèâàòüñÿ àäìèíèñòðàòîðû è ðàçðàáîò÷èêè áàç äàííûõ.  òàêèõ ñëó÷àÿõ îáû÷íî ñîçäàâàëñÿ êàêîé-ëèáî ïîëüçîâàòåëü (èëè èñïîëüçîâàëñÿ ñèñòåìíûé), îò èìåíè êîòîðîãî è âûïîëíÿëèñü ìíîãèå äåéñòâèÿ â
2.3. Áåçîïàñíîñòü
65
ñèñòåìå. Ýòîò æå ïîëüçîâàòåëü ÿâëÿëñÿ âëàäåëüöåì ïðàêòè÷åñêè âñåõ îáúåêòîâ áàçû äàííûõ. Èñïîëüçîâàíèå ñõåì â êà÷åñòâå âëàäåëüöåâ îáúåêòîâ â SQL Server 2005 äîáàâëÿåò äîïîëíèòåëüíûé óðîâåíü àáñòðàêöèè â îòíîøåíèè âëàäåëüöà îáúåêòà. Òàêèì îáðàçîì, ïîñðåäñòâîì ñõåìû îïðåäåëÿåòñÿ ïîëüçîâàòåëü, êîòîðûé áóäåò âëàäåòü îáúåêòîì (ðèñ. 2.5).
Ðèñ. 2.5. Ñõåìà äîáàâëÿåò äîïîëíèòåëüíûé óðîâåíü àáñòðàêöèè â îòíîøåíèè âëàäåíèÿ îáúåêòîì
Êàê ïîêàçàíî íà ðèñóíêå, âëàäåëüöåì îáúåêòà ÿâëÿåòñÿ ñõåìà, à ïîëüçîâàòåëü, â ñâîþ î÷åðåäü, ÿâëÿåòñÿ âëàäåëüöåì ñõåìû. Ïîäîáíûé óðîâåíü àáñòðàêöèè ïîçâîëÿåò ðåàëèçîâàòü äîïîëíèòåëüíûé óðîâåíü ñâîáîäû â ïðîöåññå ñìåíû âëàäåëüöà îáúåêòà.  ýòîì ñëó÷àå ìîæíî ñìåíèòü êàê ñõåìó-âëàäåëüöà, òàê è ïîëüçîâàòåëÿ, êîòîðûé ÿâëÿåòñÿ âëàäåëüöåì ñõåìû. Âòîðîé ñëó÷àé áîëåå ïðåäïî÷òèòåëåí, ïîñêîëüêó íå âëèÿåò íà èìÿ îáúåêòà. Ïîñëå òîãî êàê ñìåíà âëàäåëüöà ñõåìû áóäåò âûïîëíåíà óñïåøíî, ïîëüçîâàòåëÿ, ðàíåå âëàäåâøåãî îáúåêòàìè, ìîæíî óäàëèòü áåç êàêîãî-ëèáî íåãàòèâíîãî âëèÿíèÿ íà ðàáîòîñïîñîáíîñòü áàçû äàííûõ. Èç-çà òîãî ÷òî ïðîèçîøëà ñìåíà ïîäõîäà ê âëàäåíèþ îáúåêòàìè, èçìåíèëîñü è ïîëíîå èìÿ îáúåêòîâ. Òåïåðü êàæäûé ïîëüçîâàòåëü èìååò ñõåìó ïî óìîë÷àíèþ, êîòîðàÿ àññîöèèðîâàíà ñ äàííûì ïîëüçîâàòåëåì. Âî âðåìÿ îáðàùåíèÿ ê îáúåêòàì, êîòîðûå ñîäåðæàòñÿ â ñõåìå, ñåðâåð SQL ñíà÷àëà ïðîâåðÿåò èìÿ ñîãëàñíî íàèìåíîâàíèþ ñõåìû. Åñëè ïîäîáíîãî èìåíè íå ñóùåñòâóåò, òî âûïîëíÿåòñÿ ïðîâåðêà ñóùåñòâîâàíèÿ îáúåêòà, âëàäåëüöåì êîòîðîãî ÿâëÿåòñÿ ñõåìà, óñòàíîâëåííàÿ ïî óìîë÷àíèþ äëÿ ïîëüçîâàòåëÿ DBO. Ðàññìîòðèì äàííîå óòâåðæäåíèå íà ïðèìåðå. Ïîëüçîâàòåëü User1, äëÿ êîòîðîãî îïðåäåëåíà ñõåìà User1Schema ïî óìîë÷àíèþ, âûïîëíÿåò çàïðîñ íà ïîëó÷åíèå äàííûõ èç òàáëèöû Table1.  ýòîì ñëó÷àå äåéñòâèÿ SQL Server âî âðåìÿ îáðàáîòêè çàïðîñà áóäóò âûãëÿäåòü ñëåäóþùèì îáðàçîì: 1. Âíà÷àëå SQL Server âûïîëíèò ïîèñê òàáëèöû ïî àäðåñó User1Schema.Table1. 2. Åñëè òàêîãî îáúåêòà íå áóäåò íàéäåíî, òî SQL Server âûïîëíèò ïîèñê îáúåêòà ñ èìåíåì DBO.Table1. Ïîäîáíàÿ ôóíêöèîíàëüíîñòü SQL Server 2005 äàåò âîçìîæíîñòü äëÿ ïåðåíîñà ñòàðûõ áàç äàííûõ è ïðèëîæåíèé íà íîâóþ âåðñèþ ïðîäóêòà. Äëÿ ýòîãî äîñòàòî÷íî óñòàíîâèòü â êà÷åñòâå âëàäåëüöà âñåõ îáúåêòîâ ñõåìó DBO.
66
Ãëàâà 2 • Àäìèíèñòðèðîâàíèå SQL Server 2005
Òàê æå êàê SQL Server 2000 ìîã èìåòü íåñêîëüêî ïîëüçîâàòåëåé è ðîëåé, â SQL Server 2005 ìîæåò ñóùåñòâîâàòü íåñêîëüêî ñõåì. Äëÿ êàæäîé ñõåìû îïðåäåëÿåòñÿ ïîëüçîâàòåëü èëè ðîëü, êîòîðàÿ ÿâëÿåòñÿ âëàäåëüöåì äàííîé ñõåìû. Ïðè ýòîì êàæäûé ïîëüçîâàòåëü èìååò ñõåìó, óñòàíîâëåííóþ äëÿ íåãî ïî óìîë÷àíèþ. Âñå îáúåêòû, ïðèíàäëåæàùèå ñõåìå, ñîäåðæàòñÿ â ñõåìå. Äëÿ ñîçäàíèÿ íîâîãî îáúåêòà â êàêîé-ëèáî ñõåìå íåîáõîäèìî, ÷òîáû ïîëüçîâàòåëü èìåë ïðàâà íà ñîçäàíèå îáúåêòîâ (CREATE) â âûáðàííîé áàçå äàííûõ èëè ïðàâà ALTER, CONTROL â âûáðàííîé ñõåìå, â êîòîðîé ñîçäàåòñÿ íîâûé îáúåêò. Äëÿ ðàçãðàíè÷åíèÿ îïåðàöèé, âûïîëíÿåìûõ îò èìåíè ñõåìû èëè îò èìåíè ïîëüçîâàòåëÿ, â SQL Server 2005 ïîÿâèëîñü íåñêîëüêî íîâûõ êîìàíä äëÿ îáúåêòîâ òèïà schema, user, role. Ðàññìîòðèì ñîçäàíèå ñõåìû è åå ñâÿçûâàíèå ñ ïîëüçîâàòåëåì íà ñëåäóþùåì ïðèìåðå: CREAÒÅ LOGIN User1 WITH PASSWORD = 'qwerty7' GO CRÅÀÒÅ USER User1 FOR LOGIN User1 WITH DEFAULT_SCHEMA = User1Schema GO CREAÒÅ SCHEMA User1Schema AUTHORIZATION User1 GO CREAÒÅ TABLE User1Schema.Tablel (col1 int, col2 varchar (100)) GO
 ïåðâîé ñòðîêå ìû ñîçäàåì ó÷åòíóþ çàïèñü äëÿ ïîëüçîâàòåëÿ. Çàòåì ñîçäàåì ïîëüçîâàòåëÿ User1, êîòîðûé áóäåò ÿâëÿòüñÿ âëàäåëüöåì ñõåìû. Îïðåäåëÿåì äëÿ ýòîãî ïîëüçîâàòåëÿ ñõåìó, èñïîëüçóåìóþ ïî óìîë÷àíèþ. Äàííîé ñõåìîé áóäåò User1Schema. Îáðàòèòå âíèìàíèå íà òî, ÷òî ñõåìà åùå íå áûëà ñîçäàíà. Ïîñëå ýòîãî ñîçäàåì ñõåìó User1Schema, êîòîðàÿ áóäåò èñïîëüçîâàòüñÿ ïî óìîë÷àíèþ äàííûì ïîëüçîâàòåëåì.  êà÷åñòâå ïîëüçîâàòåëÿ, ÿâëÿþùåãîñÿ âëàäåëüöåì ñõåìû, îïðåäåëÿåì User1 (ñ ïîìîùüþ êîìàíäû AUTHORIZATION).  êîíöå ñîçäàåì òàáëèöó âíóòðè ïîëüçîâàòåëüñêîé ñõåìû User1Schema. Òåïåðü âëàäåëüöåì òàáëèöû Table1 ÿâëÿåòñÿ ñõåìà User1Schema, êîòîðîé, â ñâîþ î÷åðåäü, âëàäååò ïîëüçîâàòåëü User1. Òàêèì îáðàçîì, ïîëüçîâàòåëü User1 òàêæå ÿâëÿåòñÿ âëàäåëüöåì òàáëèöû Table1.
Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
3
 îòíîøåíèè ìåòîäîâ àäìèíèñòðèðîâàíèÿ c âûõîäîì SQL Server 2005 èçìåíèëîñü ìíîãîå. Ïîÿâèëîñü íåñêîëüêî íîâûõ ïîäñèñòåì è óòèëèò äëÿ óïðîùåíèÿ ïðîöåññà óïðàâëåíèÿ è ðàçðàáîòêè ïðèëîæåíèé. Íåêîòîðûå èç óòèëèò áûëè îáíîâëåíû, ñóùåñòâåííî ïåðåðàáîòàíû èëè çàìåíåíû íîâûìè.  ýòîé ãëàâå ìû ðàññìîòðèì íîâûå è óëó÷øåííûå èíñòðóìåíòû SQL Server, êîòîðûå ïîìîãàþò ïîâûñèòü ïðîèçâîäèòåëüíîñòü è óïðàâëÿåìîñòü ñèñòåì, ðàçðàáîòàòü íîâûå ïðèëîæåíèÿ è âûïîëíèòü òîíêóþ íàñòðîéêó ïðîèçâîäèòåëüíîñòè ñèñòåì íà îñíîâå SQL Server 2005. Íàìè áóäóò ðàññìîòðåíû ñëåäóþùèå èíñòðóìåíòû SQL Server: · SQL Server Configuration Manager; · SQL Server Management Studio; · Business Intelligence Management Studio, à òàêæå äðóãèå èíñòðóìåíòû äëÿ àäìèíèñòðèðîâàíèÿ è ðàçðàáîòêè ïðèëîæåíèé íà îñíîâå SQL Server 2005.
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè  SQL Server 2005 ïðèìåíÿåòñÿ îãðîìíîå êîëè÷åñòâî èíñòðóìåíòîâ, èñïîëüçóåìûõ àäìèíèñòðàòîðàìè âìåñòå ñ ïðåäûäóùèìè âåðñèÿìè ýòîãî ïðîãðàììíîãî ïðîäóêòà.  ýòîì ðàçäåëå ìû áîëåå äåòàëüíî ðàññìîòðèì íîâîââåäåíèÿ, êîòîðûå ïîÿâèëèñü â SQL Server 2005.
3.1.1. Óòèëèòà SQL Server Configuration Manager Îäíî èç îñíîâíûõ íîâîââåäåíèé SQL Server 2005 — ýòî òî, ÷òî òåïåðü íåò èíñòðóìåíòà Server Manager, ïîçâîëÿâøåãî àâòîìàòèçèðîâàòü ðàáîòó àäìèíèñòðàòîðà.  ïðåäûäóùèõ âåðñèÿõ SQL Server äàííûé èíñòðóìåíò óñòàíàâëèâàëñÿ âìåñòå ñ ñåðâåðîì. Îí ïîçâîëÿë ïðîñìàòðèâàòü â ãðàôè÷åñêîì ðåæèìå ñîñòîÿíèå ìíîãèõ
68
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
ñåðâèñîâ SQL Server, âêëþ÷àÿ ñåðâèñ SQL Server, ñåðâèñ ïðåîáðàçîâàíèÿ äàííûõ, à òàêæå ñòàòóñ àãåíòà ñåðâèñîâ. Èíñòðóìåíò Server Manager òàêæå èñïîëüçîâàëñÿ äëÿ çàïóñêà è îñòàíîâêè ïåðå÷èñëåííûõ ñåðâèñîâ. Òåïåðü ôóíêöèè Server Manager âûïîëíÿåò äðóãîé èíñòðóìåíò — SQL Server Configuration Manager. Äàííûé èíñòðóìåíò ïðåäñòàâëÿåò ñîáîé êîíñîëü, ê êîòîðîé ìîæíî ïîëó÷èòü äîñòóï ñ ïîìîùüþ MMC. Èíòåðôåéñ SQL Server Configuration Manager ïðèâåäåí íà ðèñ. 3.1.
Ðèñ. 3.1. Èíòåðôåéñ óòèëèòû SQL Server Configuration Manager
Òàê æå êàê èíñòðóìåíò Server Manager ïðåäûäóùèõ âåðñèé SQL Server, íîâûé èíñòðóìåíò SQL Server Configuration Manager ïîçâîëÿåò íàñòðàèâàòü ñåðâèñû SQL Server. Ñ ïîìîùüþ SQL Server Configuration Manager ìîæíî óïðàâëÿòü ðàáîòîé ñëåäóþùèõ ñåðâèñîâ: · SQL Server; · àãåíò ñåðâèñîâ SQL; · ñåðâèñû àíàëèòèêè; · ñåðâèñû îò÷åòîâ; · ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ; · ñåðâèñ ïîëíîòåêñòîâîãî ïîèñêà. Äëÿ òîãî ÷òîáû íà÷àòü ðàáîòó ñ îïðåäåëåííûì ñåðâèñîì (êîòîðûé áûë óñòàíîâëåí â ñèñòåìå), íåîáõîäèìî â ëåâîé ÷àñòè SQL Server Configuration Manager âûáðàòü äåðåâî ñîîòâåòñòâóþùåãî ñåðâèñà.  ýòî âðåìÿ â ïðàâîé ÷àñòè SQL Server Configuration Manager áóäåò îòîáðàæåíà èíôîðìàöèÿ î âûáðàííîì ñåðâèñå, âêëþ÷àÿ òåêóùèé ñòàòóñ ñåðâèñà è ðàñïèñàíèå çàïóñêà. Óïðàâëåíèå ñåðâèñàìè SQL Server
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
69
íè÷åì íå îòëè÷àåòñÿ îò ïîäîáíûõ äåéñòâèé ñ äðóãèìè ñåðâèñàìè, çàïóùåííûìè íà êîìïüþòåðå. Âû ìîæåòå âûïîëíèòü ñ âûáðàííûì ñåðâèñîì ñëåäóþùèå äåéñòâèÿ: · çàïóñê; · îñòàíîâêà; · ïàóçà; · ïåðåçàïóñê; · ïðîäîëæåíèå âûïîëíåíèÿ. Äëÿ ýòîãî âûáåðèòå îäíó èç êîìàíä â êîíòåêñòíîì ìåíþ, êîòîðîå ïîÿâëÿåòñÿ ïðè ùåë÷êå ïðàâîé êíîïêîé ìûøè íà âûáðàííîì ñåðâèñå.
3.1.2. SQL Server Management Studio (SQL SMS) Server Manager — ýòî íå åäèíñòâåííûé èíñòðóìåíò, êîòîðûé ïîäâåðãñÿ êîðåííûì èçìåíåíèÿì â SQL Server 2005. Èíñòðóìåíò SQL Server Enterprise Manager, êîòîðûé ÿâëÿëñÿ, ïîæàëóé, îñíîâíûì èíñòðóìåíòîì àäìèíèñòðàòîðà ñåðâåðà SQL âåðñèé 7.0 è 2000, òåïåðü çàìåíåí íà SQL Server Management Studio (SQL SMS). Íîâûé èíñòðóìåíò â SQL Server 2005 âûïîëíÿåò íå òîëüêî ôóíêöèè SQL Server Enterprise Manager — îí òàêæå âûñòóïàåò â ðîëè àíàëèçàòîðà çàïðîñîâ, âçÿâ íà ñåáÿ ôóíêöèè Query Analyzer, ðàíåå àêòèâíî èñïîëüçîâàâøåãîñÿ â SQL Server âåðñèé 7.0 è 2000. Ïîìèìî SQL Server Management Studio â SQL Server 2005 èìååòñÿ äîïîëíèòåëüíûé íàáîð èíñòðóìåíòîâ, ïîçâîëÿþùèõ àâòîìàòèçèðîâàòü ðàáîòó àäìèíèñòðàòîðà áàç äàííûõ. Ñðåäè íèõ ñòîèò âûäåëèòü Profiler, Database Tuning Advisor è Administrative Console. Ñòîèò çàìåòèòü, ÷òî SQL Server Management Studio ðàäèêàëüíî îòëè÷àåòñÿ îò ñâîåãî ïðåäøåñòâåííèêà. Òåïåðü ýòîò èíñòðóìåíò âêëþ÷àåò â ñåáÿ áîëüøóþ ÷àñòü ôóíêöèîíàëüíîñòè, êîòîðàÿ áûëà ïðèñóùà SQL Server Enterprise Manager è Query Analyzer, ïðè ýòîì ðàçâèâàÿ åå â ñîîòâåòñòâèè ñ âîçðîñøèìè ïîòðåáíîñòÿìè àäìèíèñòðàòîðîâ SQL Server 2005. SQL Server Management Studio óñòàíàâëèâàåòñÿ âìåñòå ñ SQL Server 2005. Äëÿ òîãî ÷òîáû çàïóñòèòü äàííîå ïðèëîæåíèå, âûáåðèòå â ìåíþ Start4Programs4Microsoft SQL Server4 SQL Server Management Studio.  ðåçóëüòàòå ýòîãî áóäåò îòêðûòî îñíîâíîå îêíî SQL Server Management Studio (ðèñ. 3.2). Ñòîèò çàìåòèòü, ÷òî ñïåöèàëèñòû Microsoft ïîçàáîòèëèñü îá îáðàòíîé ñîâìåñòèìîñòè ñðåäñòâ ñîçäàíèÿ çàïðîñîâ è óïðàâëåíèÿ SQL Server. Ïîýòîìó óòèëèòà SQL Server Management Studio ìîæåò áûòü òàêæå èñïîëüçîâàíà ñ SQL Server âåðñèé 7.0 è 2000. Îäíàêî äàííûé èíñòðóìåíò íå ìîæåò èñïîëüçîâàòüñÿ ñ SQL Server 6.5 èëè áîëåå ðàííèìè ïðîãðàììíûìè ïðîäóêòàìè ýòîé ëèíåéêè. Ñîâìåñòèìîñòü áûëà áû íåïîëíîé, åñëè áû íåëüçÿ áûëî èñïîëüçîâàòü SQL Server Enterprise Manager äëÿ óïðàâëåíèÿ è íàñòðîéêè ðàáîòû SQL Server 2005. Ïîäîáíàÿ ñîâìåñòèìîñòü òàêæå ñóùåñòâóåò. SQL Server Enterprise Manager âåðñèé 7.0 è 2000 òàêæå ìîæåò èñïîëüçîâàòüñÿ äëÿ íàñòðîéêè ðàáîòû SQL Server 2005. Îäíàêî èç-çà çíà÷èòåëüíûõ àðõèòåêòóðíûõ ðàçëè÷èé ìåæäó äàííûìè âåðñèÿìè ïðîãðàììíûõ ïðîäóêòîâ ñïåöèàëèñòû Microsoft íå ðåêîìåíäóþò èñïîëüçîâàòü SQL Server
70
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
Enterprise Manager äëÿ íàñòðîéêè è óïðàâëåíèÿ ðàáîòîé SQL Server 2005. Ïðè ýòîì èñïîëüçîâàíèå SQL Server Enterprise Manager íå ïîçâîëèò çàäåéñòâîâàòü âñå íîâûå ïðåèìóùåñòâà SQL Server 2005, êîòîðûå ïîÿâèëèñü â ïîñëåäíèõ âåðñèÿõ ýòîãî ïðîãðàììíîãî ïðîäóêòà. Ïîìèìî ýòîãî âû íå ñìîæåòå ïðîñìàòðèâàòü ðÿä ñèñòåìíûõ òàáëèö, à ïðîñìîòð íåêîòîðûõ èç íèõ âîîáùå áóäåò ïðèâîäèòü ê âîçíèêíîâåíèþ îøèáîê â ñèñòåìå. Èìåííî ïîýòîìó ñïåöèàëèñòû Microsoft ðåêîìåíäóþò èñïîëüçîâàòü SQL Server Management Studio äëÿ óïðàâëåíèÿ ñèñòåìàìè, â êîòîðûõ ïðèñóòñòâóþò SQL Server ðàçëè÷íûõ âåðñèé (íàïðèìåð, 2000 è 2005), ïîñêîëüêó â ýòîì ñëó÷àå äîñòèãàåòñÿ îäíîðîäíîñòü óòèëèò óïðàâëåíèÿ SQL Server, à òàêæå âîçìîæíî èñïîëüçîâàòü âñå ïðåèìóùåñòâà, êîòîðûå ïðåäîñòàâëÿåò íîâàÿ âåðñèÿ ýòîãî ïðîãðàììíîãî ïðîäóêòà.
Ðèñ. 3.2. Èíòåðôåéñ SQL Server Management Studio
Èíñòðóìåíò SQL Server Management Studio ñòàë åùå áîëåå áëèçîê ê ñðåäå ðàçðàáîòêè Visual Studio. Ýòîò ïðîãðàììíûé ïðîäóêò ïîñòðîåí íà îñíîâå ñïåöèàëèçèðîâàííîé âåðñèè Visual Studio 2005 IDE (Interactive Development Environment). Òàê æå êàê è åãî ñòàðøèé áðàò, SQL Server Management Studio ïîääåðæèâàåò ñîçäàíèå ïðîãðàììíûõ ïðîåêòîâ, èõ îòëàäêó è èíñòàëëÿöèþ. Çà ñ÷åò èíòåãðàöèè ñ Visual Studio 2005 âû ìîæåòå èñïîëüçîâàòü ýòîò ïðîäóêò äëÿ ñîçäàíèÿ ïðîãðàììíîãî êîäà íà ðàçëè÷íûõ ÿçûêàõ ïðîãðàììèðîâàíèÿ, âõîäÿùèõ â ñîñòàâ .NET Framework. Èíòåãðàöèÿ ñ èíñòðóìåíòîì Visual SourceSafe ïîçâîëèò äîáèòüñÿ ïîëíîãî êîíòðîëÿ íàä âåðñèÿìè ïðîãðàììíûõ ïðîäóêòîâ. Íåñìîòðÿ íà èíòåãðàöèþ ñ Visual Studio 2005, â SQL Server Management Studio âû íå ñìîæåòå êîìïèëèðîâàòü ïðèëîæåíèÿ, ñîäåðæàùèå âñòàâêè êîäà íà ÿçûêàõ C#, J#
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
71
èëè VB.NET. Âàì íåîáõîäèìî èñïîëüçîâàòü äëÿ ýòèõ öåëåé Visual Studio 2005. SQL Server Management Studio ïîçâîëÿåò ñîçäàâàòü ïðèëîæåíèÿ ñ èñïîëüçîâàíèåì òåõíîëîãèé MX, MDX, T-SQL è XMLA. Èíñòðóìåíò SQL Server Management Studio èìååò ðÿä ïðåèìóùåñòâ ïî ñðàâíåíèþ ñ êîìáèíàöèåé èíñòðóìåíòîâ SQL Server Enterprise Manager è Query Analyzer. Îíè çàêëþ÷àþòñÿ â ñëåäóþùåì: 1.  SQL Server Management Studio ïî ñðàâíåíèþ ñ SQL Server Enterprise Manager óâåëè÷åíî êîëè÷åñòâî îáúåêòîâ, ñ êîòîðûìè ìîæåò ðàáîòàòü ýòîò èíñòðóìåíò.  ïðåäûäóùèõ âåðñèÿõ êîëè÷åñòâî îáúåêòîâ âñåãäà ïîäñ÷èòûâàëîñü. Äëÿ ìíîãèõ ïðèëîæåíèé, êîòîðûå ñîçäàâàëèñü äëÿ ðàáîòû íà ìàëûõ è ñðåäíèõ ïðåäïðèÿòèÿõ, ýòî íå ÿâëÿëîñü ïðîáëåìîé. Îäíàêî â îòíîøåíèè áîëüøèõ áàç äàííûõ ñ îãðîìíûì ÷èñëîì îáúåêòîâ äàííîå îãðàíè÷åíèå íå òîëüêî ðàçäðàæàëî, íî è ïðåïÿòñòâîâàëî ñîçäàíèþ ìíîãèõ äîñòàòî÷íî ñëîæíûõ ïðèëîæåíèé, êîòîðûå îïåðèðîâàëè áîëüøèì ÷èñëîì îáúåêòîâ áàç äàííûõ. SQL Server Enterprise Manager ðàíåå ìîã äîñòàòî÷íî äîëãî âûïîëíÿòü ñ÷èòûâàíèå îáúåêòîâ è èõ ñâîéñòâ â áàçå äàííûõ.  ýòîì îòíîøåíèè SQL Server Management Studio ðàáîòàåò çíà÷èòåëüíî áûñòðåå çà ñ÷åò òîãî, ÷òî âî âðåìÿ ñ÷èòûâàíèÿ îí íå âûâîäèò ïîëíóþ èíôîðìàöèþ îá îáúåêòàõ, à äåëàåò ýòî òîëüêî òîãäà, êîãäà ïîëüçîâàòåëü ïîñòàðàåòñÿ ðàçâåðíóòü ñïèñîê ñãðóïïèðîâàííûõ îáúåêòîâ. Ïîñëå ýòîãî âûïîëíÿåòñÿ äîïîëíèòåëüíîå ñ÷èòûâàíèå èç áàçû äàííûõ è äàííûå âûâîäÿòñÿ íà ýêðàí ñ ïîìîùüþ îáîçðåâàòåëÿ îáúåêòîâ. Ýòî ïîçâîëÿåò óâåëè÷èòü ñêîðîñòü ñ÷èòûâàíèÿ îáúåêòîâ è èõ ñâîéñòâ. 2. Äèàëîãîâûå îêíà, êîòîðûå îòîáðàæàþòñÿ â SQL Server Management Studio, íå ÿâëÿþòñÿ ìîäàëüíûìè. Ýòî ïîçâîëÿåò ðåàëèçîâàòü áîëüøóþ ñâîáîäó äëÿ ðàçðàáîò÷èêà, ïîñêîëüêó îò íåãî íå òðåáóåòñÿ îáÿçàòåëüíî çàâåðøèòü äèàëîã, íàæàâ êàêóþ-ëèáî êëàâèøó, ïåðåä òåì êàê ïðîäîëæèòü ðàáîòó. Ïðàêòè÷åñêè âñå äèàëîãîâûå îêíà, êîòîðûå ñóùåñòâîâàëè â SQL Server Enterprise Manager, áûëè ìîäàëüíûìè, ÷òî ÷àñòî ðàçäðàæàëî è ìåøàëî ïëîäîòâîðíîé ðàáîòå. Òåïåðü èñïîëüçîâàíèå íåìîäàëüíûõ îêîí ïîçâîëÿåò àäìèíèñòðàòîðó áàç äàííûõ ïðîäîëæàòü ñâîþ ðàáîòó äàæå òîãäà, êîãäà îäíî èç äèàëîãîâûõ îêîí îñòàåòñÿ îòêðûòûì. 3. Óòèëèòà SQL Server Management Studio âûñòóïàåò â êà÷åñòâå îñíîâíîãî èíñòðóìåíòà äëÿ óïðàâëåíèÿ SQL Server 2005, à òàêæå äëÿ ìíîãèõ äðóãèõ óòèëèò ýòîãî ïðîãðàììíîãî ïðîäóêòà. Äëÿ ïîëíîöåííîé ðàáîòû â SQL Server Management Studio èñïîëüçóåòñÿ íàáîð îêîí, ïîçâîëÿþùèõ àâòîìàòèçèðîâàòü ðàáîòó ïðèëîæåíèÿ: · îêíî Solutions Explorer ðåàëèçóåò äëÿ ðàçðàáîò÷èêà âîçìîæíîñòü ïðîñìàòðèâàòü èñõîäíûé êîä è ãðóïïèðîâàòü åãî â âèäå ëîãè÷åñêîé êîëëåêöèè, êîòîðàÿ ïðè íåîáõîäèìîñòè ìîæåò áûòü ïåðåíåñåíà íà äðóãóþ áàçó äàííûõ; · îêíî Registered Servers ïîçâîëÿåò âûáðàòü ñåðâåð SQL, ðàáîòà ñ êîòîðûì áóäåò âûïîëíÿòüñÿ;
72
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
· îêíî Object Explorer ïîçâîëÿåò âûïîëíÿòü ðàáîòó ñ îáúåêòàìè âûáðàííîãî ñåðâåðà, ïðîñìàòðèâàòü è èçìåíÿòü èõ ñâîéñòâà; · îêíî Report Designer ïîçâîëÿåò ñîçäàâàòü è íàñòðàèâàòü îò÷åòû SQL Server 2005. Áîëåå äåòàëüíî äðóãèå èíñòðóìåíòû è îêíà SQL Server Management Studio ìû ðàññìîòðèì â ðàçäåëàõ 3.1.3 «Îêíî Solution Explorer SQL SMS » — 3.1.6 «Îêíî Object Explorer SQL SMS».
3.1.3. Îêíî Solution Explorer SQL SMS Îêíî Solution Explorer — ýòî îñíîâíîå îêíî äëÿ ðàáîòû ñ îòäåëüíûìè êîìïîíåíòàìè ñîçäàâàåìîãî ïðèëîæåíèÿ. Îíî ïî óìîë÷àíèþ îòîáðàæàåòñÿ â ïðàâîì âåðõíåì óãëó SQL Server Management Studio (ðèñ. 3.3).  îêíå Solution Explorer îòîáðàæàåòñÿ â âèäå äðåâîïîäîáíîé ñòðóêòóðû íàáîð èñïîëüçóåìûõ îáúåêòîâ, ñîåäèíåíèé è çàïðîñîâ ê áàçå äàííûõ. Âñå ýòî ñîñòàâëÿåò ïðîåêò, íàä êîòîðûì âåäåòñÿ ðàáîòà. Êîðíåâîé ýëåìåíò äåðåâà íîñèò íàçâàíèå ðåøåíèÿ. Ïî óìîë÷àíèþ åìó ïðèñâàèâàåòñÿ çíà÷åíèå Solution 1, îäíàêî ðàçðàáîò÷èê ìîæåò èçìåíèòü ýòî èìÿ íà ëþáîå äðóãîå, èñïîëüçóÿ îêíî ñâîéñòâ ðåøåíèÿ.
Ðèñ. 3.3. Îêíà SQL Server Management Studio
Äàëåå â âèäå âåòâåé äåðåâà îòîáðàæàþòñÿ òåêóùèå ïðîåêòû. Ðåøåíèå ìîæåò âêëþ÷àòü â ñâîé ñîñòàâ îäèí èëè íåñêîëüêî ïðîåêòîâ. Ïðè ýòîì îáúåêòû, âûñòóïàþùèå â êà÷åñòâå ëèñòüåâ äåðåâà, ìîãóò áûòü ñâÿçàíû ñ îäíèì èç ïðîåêòîâ èëè íàïðÿìóþ ñ ðåøåíèåì. Ëèñòüÿ îáû÷íî ïðåäñòàâëÿþò ñîáîé ôàéëû, êîòîðûå
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
73
ìîãóò ñîäåðæàòü èíôîðìàöèþ íå òîëüêî îá îïðåäåëåííîì îáúåêòå, íî è î öåëîì êëàññå ïîäîáíûõ îáúåêòîâ. Ýòè êëàññû ìîãóò ñîçäàâàòüñÿ ðàçðàáîò÷èêàìè íà îäíîì èç ñëåäóþùèõ ÿçûêîâ çàïðîñîâ: Analysis Server, XMLA èëè T-SQL. Óòèëèòà SQL Server Management Studio ïîääåðæèâàåò íåñêîëüêî ðàçëè÷íûõ òèïîâ ïðîåêòîâ: · SQL Server Scripts — ýòîò òèï ïðîåêòà èñïîëüçóåòñÿ â SQL Server äëÿ òîãî, ÷òîáû âûïîëíèòü ëîãè÷åñêóþ ãðóïïèðîâêó ñöåíàðèåâ T-SQL è ñîåäèíåíèé ê áàçå äàííûõ. Íàèáîëåå âàæíûì ïðèìåíåíèåì äàííîãî òèïà ïðîåêòà òàêæå âèäèòñÿ âîçìîæíîñòü âûïîëíåíèÿ ãðóïïèðîâêè DDL-ñöåíàðèåâ; · SQL Mobile Scripts — äàííûé òèï ïðîåêòà èñïîëüçóåòñÿ äëÿ ãðóïïèðîâêè çàïðîñîâ è ñîåäèíåíèé äëÿ áàç äàííûõ íà îñíîâå SQL Server CE Edition; · Analysis Server Scripts — äàííûé òèï ïðîåêòà èñïîëüçóåòñÿ äëÿ ëîãè÷åñêîé ãðóïïèðîâêè ñöåíàðèåâ T-SQL, ñîçäàííûõ äëÿ îáðàáîòêè ñåðâåðîì àíàëèòèêè. Òàêæå ìîæåò ñîäåðæàòü MDX- è XMLA-ñöåíàðèè. Äëÿ ñîçäàíèÿ íîâîãî ïðîåêòà âîñïîëüçóéòåñü îêíîì Add New Project (ðèñ. 3.4).
Ðèñ. 3.4. Ñîçäàíèå íîâîãî ïðîåêòà â SQL Server Management Studio
3.1.4. Îêíî Properties SQL SMS Îêíî Properties ðàñïîëàãàåòñÿ â ïðàâîì íèæíåì óãëó SQL Server Management Studio (ñì. ðèñ. 3.3) è ïîçâîëÿåò íàñòðàèâàòü è ïðîñìàòðèâàòü ñâîéñòâà îáúåêòà, âûáðàííîãî â îêíå Solution Explorer. Äàííîå îêíî ïîìèìî ïðîñìîòðà çíà÷åíèé ñâîéñòâ âûáðàííîãî îáúåêòà ïîçâîëÿåò ðåøàòü öåëûé ðÿä ðàçíîðîäíûõ çàäà÷.
74
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
Âî-ïåðâûõ, ñ åãî ïîìîùüþ âû ìîæåòå óñòàíàâëèâàòü íàèìåíîâàíèå ðåøåíèÿ, ïðîåêòà èëè îòäåëüíîãî îáúåêòà. Âî-âòîðûõ, ñ ïîìîùüþ îêíà Properties ìîæíî êîíòðîëèðîâàòü âûïîëíåíèå DTS-ïàêåòîâ. Íàêîíåö, îñíîâíàÿ çàäà÷à, äëÿ ðåøåíèÿ êîòîðîé èñïîëüçóåòñÿ îêíî Properties, — ýòî áûñòðîå èçìåíåíèå ñâîéñòâ äëÿ íåñêîëüêèõ îáúåêòîâ îäíîâðåìåííî. Äëÿ òîãî ÷òîáû ñäåëàòü ýòî, âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1.  îêíå Solution Explorer âûäåëèòå îáúåêòû, äëÿ êîòîðûõ îäíîâðåìåííî íåîáõîäèìî èçìåíèòü çíà÷åíèå âûáðàííîãî ñâîéñòâà. Äëÿ ýòîãî ìîæíî âîñïîëüçîâàòüñÿ êëàâèøàìè Shift èëè Ctrl. 2. Èçìåíèòå âûáðàííîå ñâîéñòâî â îêíå Properties. Ïîñëå ýòîãî çíà÷åíèå ñâîéñòâà áóäåò èçìåíåíî äëÿ âñåõ âûäåëåííûõ îáúåêòîâ.
3.1.5. Îêíî Registered Servers SQL SMS  ñèñòåìå, â êîòîðîé âåäåòñÿ ðàçðàáîòêà ïðèëîæåíèé, ìîæåò èñïîëüçîâàòüñÿ íåñêîëüêî çàðåãèñòðèðîâàííûõ ñåðâåðîâ. Äëÿ ðàçðàáîòêè ïðèëîæåíèé è íàñòðîéêè íåñêîëüêèõ ñåðâåðîâ ìîæåò èñïîëüçîâàòüñÿ îäíà óòèëèòà SQL Server Management Studio. Äëÿ òîãî ÷òîáû àâòîìàòèçèðîâàòü ðàçðàáîòêó è äàòü ðàçðàáîò÷èêó âîçìîæíîñòü âûáèðàòü ñåðâåð, äëÿ êîòîðîãî âûïîëíÿþòñÿ ðàçðàáîòêè ïðèëîæåíèé, èñïîëüçóåòñÿ îêíî Registered Servers. Ýòî îêíî ñîäåðæèò ñïèñîê çàðåãèñòðèðîâàííûõ ñåðâåðîâ SQL è ïîçâîëÿåò âûïîëíÿòü ëîãè÷åñêóþ ãðóïïèðîâêó íåñêîëüêèõ ñåðâåðîâ äëÿ óïðîùåíèÿ ïðîöåññà âçàèìîäåéñòâèÿ ñ ãðóïïîé ñåâåðîâ. Ïåðåä òåì êàê íà÷àòü ðàáîòó ñ âûáðàííûì ñåðâåðîì, íåîáõîäèìî åãî çàðåãèñòðèðîâàòü â îêíå Registered Servers. Äëÿ ýòîãî ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà âûáðàííîì ñåðâåðå â îêíå Registered Servers è âûáåðèòå â êîíòåêñòíîì ìåíþ êîìàíäó New4Server Registration. Ïîñëå ýòîãî ñåðâåð áóäåò çàðåãèñòðèðîâàí è äîñòóïåí äëÿ èñïîëüçîâàíèÿ. Ðàçðàáîò÷èêàìè ÷àñòî èñïîëüçóåòñÿ ëîãè÷åñêàÿ ãðóïïèðîâêà ñåðâåðîâ. Äëÿ òîãî ÷òîáû ñîçäàòü ëîãè÷åñêóþ ãðóïïó ñåðâåðîâ, âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Ùåëêíèòå ïðàâîé êíîïêîé ìûøè â îêíå Registered Servers è âûáåðèòå â êîíòåêñòíîì ìåíþ êîìàíäó New4Server Group. Ðåçóëüòàòîì ýòîãî áóäåò ñîçäàíèå íîâîé ãðóïïû. 2. Ââåäèòå èìÿ ãðóïïû è ïåðåìåñòèòå â äàííóþ ãðóïïó íåîáõîäèìûå ñåðâåðû, èñïîëüçóÿ óêàçàòåëü ìûøè. Òàêæå ÷àñòî âîçíèêàåò íåîáõîäèìîñòü ïåðåíîñà ñïèñêà çàðåãèñòðèðîâàííûõ ñåðâåðîâ ìåæäó îòäåëüíûìè êîïèÿìè SQL Server Management Studio. Ýòî ïîçâîëèò âàì èçáåæàòü ðó÷íîãî ââîäà êàæäîãî ñåðâåðà è åãî ðåãèñòðàöèè, à òàêæå óñêîðèò ïðîöåññ ñîçäàíèÿ ñïèñêà çàðåãèñòðèðîâàííûõ ñåðâåðîâ â òîì ñëó÷àå, åñëè òàêèõ ñåðâåðîâ â ñèñòåìå äîñòàòî÷íî ìíîãî. Äî ðåãèñòðàöèè ñåðâåðà â ñèñòåìå âû íå ñìîæåòå óïðàâëÿòü åãî ñåðâèñàìè. Ïîñëå âûïîëíåíèÿ ðåãèñòðàöèè âñå ñåðâèñû ñåðâåðà ñòàíîâÿòñÿ äîñòóïíû äëÿ óïðàâëåíèÿ. Âû ìîæåòå çàïóñêàòü, îñòàíàâëèâàòü, ïðèîñòàíàâëèâàòü è îòêëþ÷àòü âûïîëíåíèå ñåðâèñà. Òàêæå ïîñëå âûïîëíåíèÿ ïðîöåäóðû ðåãèñòðàöèè ìîæíî ðàáîòàòü ñ îáúåêòàìè âûáðàííîãî ñåðâåðà. Äëÿ ýòîãî äîñòàòî÷íî äâàæäû ùåëê-
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
75
íóòü íà âûáðàííîì ñåðâåðå. Ïîñëå ýòîãî áóäåò âûïîëíåíî ñîåäèíåíèå ñ ñåðâåðîì, è ñïèñîê äîñòóïíûõ îáúåêòîâ îòîáðàçèòñÿ â îêíå Object Explorer.
3.1.6. Îêíî Object Explorer SQL SMS Îêíî Object Explorer óòèëèòû SQL Server Management Studio ïîçâîëÿåò ðåàëèçîâàòü òàêîé æå íàáîð äåéñòâèé, ÷òî è óòèëèòà SQL Server Enterprise Manager â ïðåäûäóùèõ âåðñèÿõ SQL Server. Äàííîå îêíî îòîáðàæàåòñÿ â ëåâîé íèæíåé ÷àñòè îêíà óòèëèòû SQL Server Management Studio (ñì. ðèñ. 3.3) è ïîçâîëÿåò âûïîëíÿòü çàïóñê è îñòàíîâêó ñåðâåðà, ñîçäàíèå áàç äàííûõ, èõ ñîåäèíåíèå è îòêëþ÷åíèå, à òàêæå íàñòðîéêó ñâîéñòâ ñåðâåðà, ñîçäàíèå îáúåêòîâ áàç äàííûõ (òàêèõ, êàê ïðåäñòàâëåíèÿ, õðàíèìûå ïðîöåäóðû è òàáëèöû), ãåíåðàöèþ ñöåíàðèåâ T-SQL, óïðàâëåíèå ïðàâàìè äîñòóïà ê îáúåêòàì, ìîíèòîðèíã ðàáîòû ñåðâåðà, ïðîñìîòð ñèñòåìíûõ æóðíàëîâ, íàñòðîéêó ìåõàíèçìà ðåïëèêàöèè è ìíîãîå äðóãîå. Äëÿ òîãî ÷òîáû íà÷àòü ðàáîòó ñ îáúåêòàìè, êîòîðûå îòîáðàæàþòñÿ â îêíå Object Explorer, ùåëêíèòå íà âûáðàííîì îáúåêòå ïðàâîé êíîïêîé ìûøè è âûáåðèòå â êîíòåêñòíîì ìåíþ òðåáóåìûé ïóíêò.  êîíòåêñòíîì ìåíþ îòîáðàæàåòñÿ óíèêàëüíûé íàáîð ñâîéñòâ äëÿ êàæäîãî îáúåêòà. Òàêæå êîíòåêñòíîå ìåíþ ïîçâîëÿåò âûïîëíèòü îäíî èç ñëåäóþùèõ äåéñòâèé ñ îáúåêòîì: · óäàëåíèå; · ïåðåèìåíîâàíèå; · ñîçäàíèå íîâîé òàáëèöû; · ïîäêëþ÷åíèå; · ïðîñìîòð çàâèñèìîñòåé òàáëèöû; · îòêëþ÷åíèå; · íàñòðîéêà ñâîéñòâ îáúåêòà; · ñîêðàùåíèå; · èçìåíåíèå òàáëèöû; · ðåçåðâíîå êîïèðîâàíèå áàçû äàííûõ; · âîññòàíîâëåíèå áàçû äàííûõ èç ðåçåðâíîé êîïèè è äðóãèå äåéñòâèÿ. Ñîñòàâ êîíòåêñòíîãî ìåíþ è, ñîîòâåòñòâåííî, íàáîð äîñòóïíûõ äåéñòâèé çàâèñèò îò òèïà âûáðàííîãî îáúåêòà. Ïîæàëóé, ñàìûì ãëàâíûì ïðåèìóùåñòâîì îêíà Object Explorer ÿâëÿåòñÿ âîçìîæíîñòü ãåíåðèðîâàòü ñöåíàðèè ñîçäàíèÿ îòîáðàæàåìûõ â íåì îáúåêòîâ. Ýòî óïðîùàåò è óñêîðÿåò ïðîöåññ ñîçäàíèÿ ïðèëîæåíèé. Äëÿ àâòîìàòèçàöèè ýòîé îïåðàöèè ïðåäóñìîòðåíî èñïîëüçîâàíèå ìàñòåðà ñöåíàðèåâ (óòèëèòà Script Wizard). Ýòî ñðåäñòâî àâòîìàòèçàöèè ïîçâîëÿåò ñîçäàâàòü ðåçåðâíóþ êîïèþ áàçû äàííûõ, ñîçäàâàòü òåñòîâóþ áàçó äàííûõ èëè íåîáõîäèìûé îáúåêò. Èñïîëüçóÿ óòèëèòó Script Wizard äëÿ íåñêîëüêèõ îáúåêòîâ, ìîæíî ðàçðàáîòàòü ëèáî îòäåëüíûé ñöåíàðèé äëÿ ñîçäàíèÿ êàæäîãî îáúåêòà, ëèáî îáùèé ñöåíàðèé äëÿ ñîçäàíèÿ íåñêîëüêèõ îáúåêòîâ îäíîâðåìåííî. Ïðè ýòîì ðåçóëüòèðóþùèé ñöåíàðèé ìîæåò áûòü âûâåäåí â îòäåëüíûé ôàéë, â áóôåð îáìåíà èëè â ðåäàêòîð çàïðîñîâ SQL Server Management Studio.
76
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
3.1.7. Óòèëèòà Business Intelligence Development Studio (BIDS) Óòèëèòà Business Intelligence Development Studio (BIDS) èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ ïðèëîæåíèé àíàëèòèêè. Èíòåðôåéñ ýòîãî ïðèëîæåíèÿ î÷åíü ïîõîæ íà ïðèëîæåíèå SQL Server Management Studio, îäíàêî èìååò ðÿä îòëè÷èé. Íàïðèìåð, SQL Server Management Studio ìîæåò èñïîëüçîâàòüñÿ íå òîëüêî äëÿ ðàçðàáîòêè ïðèëîæåíèé, íî è äëÿ ðåøåíèÿ àäìèíèñòðàòèâíûõ çàäà÷, â òî âðåìÿ êàê Business Intelligence Development Studio ìîæåò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ ïðèëîæåíèé àíàëèòè÷åñêîé îáðàáîòêè äàííûõ è ðåøåíèÿ äðóãèõ çàäà÷. Èíñòðóìåíò Business Intelligence Development Studio èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ ïðèëîæåíèé, êîòîðûå â äàëüíåéøåì áóäóò âçàèìîäåéñòâîâàòü ñ ñåðâèñàìè àíàëèòèêè SQL Server 2005. C ïîìîùüþ ýòîé óòèëèòû ðàçðàáîò÷èêè ìîãóò ñîçäàâàòü ïðîåêòû, ñîçäàâàòü è ðàçâîðà÷èâàòü îò÷åòû äëÿ ñåðâèñîâ îò÷åòîâ, ðàçðàáàòûâàòü ïàêåòû äëÿ ñåðâèñîâ ïðåîáðàçîâàíèÿ äàííûõ, à òàêæå âûïîëíÿòü äðóãèå äåéñòâèÿ. BIDS óñòàíàâëèâàåòñÿ âìåñòå ñ SQL Server 2005 è äîñòóïíà èç ìåíþ. Äëÿ åå çàïóñêà âûáåðèòå êîìàíäó ìåíþ Start4Programs4Microsoft SQL Server4Business Intelligence Development Studio.  ðåçóëüòàòå ýòîãî îòêðîåòñÿ îêíî, ïîêàçàííîå íà ðèñ. 3.5.
Ðèñ. 3.5. Èíòåðôåéñ Business Intelligence Development Studio
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
77
SQL Server Management Studio è Business Intelligence Development Studio èìåþò ìíîãî îáùåãî. Âî-ïåðâûõ, îáà ïðèëîæåíèÿ ñîçäàíû íà îñíîâå Visual Studio 2005 IDE. Ýòî ïîçâîëÿåò èñïîëüçîâàòü âñþ ìîùü ñðåäû ðàçðàáîòêè ïðèëîæåíèé Visual Studio 2005. Âî-âòîðûõ, êàæäûé ïðîåêò â îáåèõ óòèëèòàõ ïðåäñòàâëÿåò ñîáîé íàáîð ôàéëîâ, êîòîðûìè ìîæåò ìàíèïóëèðîâàòü ðàçðàáîò÷èê.  îáîèõ ñëó÷àÿõ ïðîåêò ïðåäñòàâëÿåò ñîáîé ëîãè÷åñêè ñãðóïïèðîâàííûé íàáîð ôàéëîâ. Â-òðåòüèõ, îáà ïðèëîæåíèÿ íå ìîãóò èñïîëüçîâàòüñÿ äëÿ êîìïèëÿöèè êîäà ÿçûêîâ ïðîãðàììèðîâàíèÿ .NET Framework (òàêèõ, êàê J#, C# è VB.NET). Òî÷íî òàê æå, êàê è SQL Server Management Studio, óòèëèòà BIDS èìååò ðÿä ñðåäñòâ äëÿ èíòåãðàöèè ñ Visual SourceSafe, ÷òî ïîçâîëÿåò ðåàëèçîâàòü ðÿä ïðåèìóùåñòâ óïðàâëåíèÿ ðàçëè÷íûìè âåðñèÿìè ôàéëîâ è ïðîåêòîâ. Îòëè÷èå ìåæäó ýòèìè äâóìÿ ïðèëîæåíèÿìè ñîñòîèò â òîì, ÷òî SQL Server Management Studio àâòîìàòè÷åñêè óñòàíàâëèâàåò ñîåäèíåíèå âî âðåìÿ ðàçðàáîòêè ïðèëîæåíèÿ èëè åãî çàïóñêà. ×òî êàñàåòñÿ BIDS, òî ðåæèì, èñïîëüçóåìûé ïî óìîë÷àíèþ äëÿ ýòîãî ïðèëîæåíèÿ, — ýòî îòêëþ÷åíèå îò áàçû. Ðàçðàáîò÷èêó íåîáõîäèìî â ðó÷íîì ðåæèìå óñòàíîâèòü ñîåäèíåíèå ñ âûáðàííîé áàçîé äàííûõ.
3.1.8. Íàáîð èíñòðóìåíòîâ BIDS Áîëüøàÿ ÷àñòü îêîí â Business Intelligence Development Studio âûïîëíÿåò òå æå ôóíêöèè, ÷òî è àíàëîãè÷íûå îêíà â SQL Server Management Studio. Ýòî îòíîñèòñÿ ê îêíàì Solution Explorer, Properties è ìíîãèì äðóãèì. Ïàíåëü èíñòðóìåíòîâ BIDS îòîáðàæàåòñÿ â âåðõíåé ÷àñòè îêíà (ñì. ðèñ. 3.5) è ñîäåðæèò íàáîð êîìïîíåíòîâ, êîòîðûå ìîæíî èñïîëüçîâàòü ïðè ñîçäàíèè ïðèëîæåíèÿ.
3.1.9. Îêíî Solution Explorer Óòèëèòà Business Intelligence Development Studio èìååò ñâîå ñîáñòâåííîå îêíî Solution Explorer, êîòîðîå âûïîëíÿåò ôóíêöèè, àíàëîãè÷íûå ôóíêöèÿì ñâîåãî ñîáðàòà â SQL Server Development Studio. Ðàñïîëîæåíèå äàííîãî îêíà àíàëîãè÷íî åãî ïîëîæåíèþ â îêíå SQL Server Development Studio: îíî íàõîäèòñÿ â ïðàâîì âåðõíåì óãëó (ñì. ðèñ. 3.5). Îêíî Solution Explorer ñîäåðæèò èåðàðõè÷åñêóþ ñòðóêòóðó ôàéëîâ ïðîåêòà. Êîðåíü äåðåâà ïðåäñòàâëÿåò ñîáîé íàèìåíîâàíèå ðåøåíèÿ, äàëåå èäóò ïðîåêòû è çàêàí÷èâàåòñÿ ñòðóêòóðà îòäåëüíûìè ôàéëàìè, êîòîðûå ïðèíàäëåæàò ëèáî îòäåëüíûì ïðîåêòàì, ëèáî âñåìó ðåøåíèþ. Ñ ïîìîùüþ Business Intelligence Development Studio ìîæíî ñîçäàâàòü ïðîåêòû ñëåäóþùèõ òèïîâ: · ïðîåêò ñåðâèñîâ àíàëèòèêè; · áàçà äàííûõ ñåðâèñîâ àíàëèòèêè 9.0; · ïðîåêò ñåðâèñîâ îò÷åòà; · ìàñòåð îò÷åòîâ; · ïðîåêò ïðåîáðàçîâàíèÿ äàííûõ. Ïîìèìî ïåðå÷èñëåííûõ ïðîåêòîâ ðàçðàáîò÷èê òàêæå ìîæåò çàãðóçèòü ëþáîé øàáëîí ïðîåêòà ñ ñàéòà Microsoft.
78
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
Òî÷íî òàê æå, êàê è â SQL Server Development Studio, â BIDS ìîæíî ñîçäàâàòü ðåøåíèÿ, êîòîðûå áóäóò ñîäåðæàòü íåñêîëüêî ïðîåêòîâ. Ðàçðàáîò÷èê íå îãðàíè÷åí ðàìêàìè îäíîãî ïðîåêòà. Âî âðåìÿ ñîçäàíèÿ ïðîåêòà ïåðåä âàìè îòêðîåòñÿ îêíî New Project (ðèñ. 3.6), â êîòîðîì âû ñìîæåòå âûáðàòü îäèí èç ïåðå÷èñëåííûõ òèïîâ ïðîåêòîâ.
Ðèñ. 3.6. Ñîçäàíèå íîâîãî ïðîåêòà â Business Intelligence Development Studio
Ðàññìîòðèì áîëåå äåòàëüíî êàæäûé òèï ïðîåêòà, êîòîðûé ìîæíî ñîçäàòü â BIDS. · Ïðîåêò ñåðâèñîâ àíàëèòèêè — äàííûé òèï ïðîåêòà ñîäåðæèò îïðåäåëåíèÿ îáúåêòîâ áàçû äàííûõ ñåðâèñîâ àíàëèòèêè. Ïîäîáíûå îïðåäåëåíèÿ îïèñûâàþò èñòî÷íèêè äàííûõ, ïðåäñòàâëåíèÿ, êóáû, èçìåðåíèÿ, ìîäåëè äàííûõ, ðîëè è ñáîðêè. Îäíà èç îñíîâíûõ óòèëèò äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè — ýòî óòèëèòà Cube Designer. Îíà ïîçâîëÿåò ñîçäàâàòü, èíñòàëëèðîâàòü, íàñòðàèâàòü âñå ïåðå÷èñëåííûå îáúåêòû äëÿ ñåðâèñîâ àíàëèòèêè è óïðàâëÿòü èìè. Äàííàÿ óòèëèòà ïðåäñòàâëÿåò ñîáîé âèçóàëüíóþ ñðåäó ðàçðàáîòêè. Äëÿ åå çàïóñêà ùåëêíèòå äâàæäû íà ýëåìåíòå Cube â Solution Explorer è âûáåðèòå ïóíêò View Designer. Áîëåå äåòàëüíî íàáîð èíñòðóìåíòîâ äëÿ ðàáîòû ñ êóáàìè ìû ðàññìîòðèì â ðàçäåëàõ 5.3.4 «Óòèëèòà Cube Wizard» — 5.3.6 «Óòèëèòà Cube Browser». · Áàçà äàííûõ ñåðâèñîâ àíàëèòèêè 9.0 — äàííûé òèï ïðîåêòà ïîçâîëÿåò ñîçäàâàòü íîâûå ðåøåíèÿ äëÿ ñåðâèñîâ àíàëèòèêè, èñïîëüçóÿ ðàíåå ñîçäàííûå ðåøåíèÿ äëÿ áàç äàííûõ SQL Server âåðñèé 7.0 è 2000.
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
79
· Ïðîåêò ñåðâèñîâ îò÷åòà — äàííûé øàáëîí èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ ïðèëîæåíèé ñåðâèñîâ îò÷åòîâ. Îí ïîçâîëÿåò ðàçðàáîò÷èêàì ñîçäàâàòü îò÷åòû, íàñòðàèâàòü èõ ïàðàìåòðû, îòëàæèâàòü, à òàêæå óñòàíàâëèâàòü íà ðàáîòàþùèå ñåðâåðû. Ñ ïîìîùüþ èíñòðóìåíòà Reporting Services Designer ðàçðàáîò÷èê ìîæåò ñîçäàâàòü íàáîð äàííûõ, à çàòåì íàñòðàèâàòü èíòåðôåéñ îò÷åòà ñ ïîìîùüþ íàáîðà êîìïîíåíòîâ. Ïðîâàéäåð äàííûõ ìîæåò ïîëó÷àòü äàííûå íåïîñðåäñòâåííî èç áàçû äàííûõ SQL Server 2005 èëè èç ëþáîãî èñòî÷íèêà, ïîääåðæèâàþùåãî ñòàíäàðò OLE DB èëè ODBC. Áîëåå äåòàëüíî äàííûé èíñòðóìåíò ìû ðàññìîòðèì â ðàçäåëå 8.1.3 «Äèçàéíåð îò÷åòîâ». · Ìàñòåð îò÷åòîâ — äàííûé òèï ïðîåêòà ïîçâîëÿåò ñîçäàâàòü ìàñòåð îò÷åòîâ, êîòîðûé ñîäåðæèò íåñêîëüêî ýòàïîâ, àâòîìàòèçèðóþùèõ ñîçäàíèå îò÷åòîâ íà îñíîâå óñëîâèé, îïðåäåëåííûõ ïîëüçîâàòåëåì. Èíòåãðèðîâàííûé â äàííûé òèï ïðîåêòà, ðàçðàáîò÷èê çàïðîñîâ ïîçâîëÿåò ñîçäàâàòü SQL-çàïðîñû è âûïîëíÿòü èõ. Ïîñëå òîãî êàê âû ñîçäàäèòå îò÷åò ñ ïîìîùüþ øàáëîíà ïðîåêòîâ ñåðâèñà îò÷åòîâ, ìîæíî ïåðåéòè ê íàñòðîéêå ïàðàìåòðîâ, èñïîëüçóÿ ìàñòåð îò÷åòîâ. Ýòî ïîçâîëèò ñîêðàòèòü âðåìÿ íà ñîçäàíèå ïðèëîæåíèÿ, à ïîëüçîâàòåëþ óñêîðèò è óïðîñòèò ñîçäàíèå îò÷åòîâ. Áîëåå äåòàëüíî äàííûé òèï øàáëîíà áóäåò ðàññìîòðåí â ðàçäåëå 8.1.14 «Óòèëèòà Report Builder». · Ïðîåêò ïðåîáðàçîâàíèÿ äàííûõ — äàííûé òèï ïðîåêòà ïîçâîëÿåò ñîçäàâàòü èñòî÷íèêè äàííûõ, ïðåäñòàâëåíèÿ äàííûõ, DTS-ïàêåòû è äðóãèå îáúåêòû. Îñíîâíîé èíñòðóìåíò äëÿ âûïîëíåíèÿ ïîäîáíûõ äåéñòâèé — ýòî DTS Designer, êîòîðûé îòîáðàæàåòñÿ â ñðåäíåé ÷àñòè îêíà Business Intelligence Development Studio. Äëÿ òîãî ÷òîáû ñîçäàòü êàêîé-ëèáî îáúåêò, ïðîñòî âûáåðèòå åãî óêàçàòåëåì ìûøè íà ïàíåëè èíñòðóìåíòîâ è ïåðåòàùèòå íà ôîðìó. Ïîñëå ýòîãî ìîæíî íàñòðîèòü ïàðàìåòðû îáúåêòà è ñâÿçè ìåæäó íèìè, èñïîëüçóÿ óêàçàòåëü ìûøè. Áîëåå äåòàëüíî ðàáîòó ñ DTS Designer ìû ðàññìîòðèì â ðàçäåëå 6.2.2 «Äèçàéíåð ñåðâèñîâ èíòåãðàöèè».
3.1.10. Îêíî Properties Îêíî Properties îòîáðàæàåòñÿ â ïðàâîì íèæíåì óãëó îêíà Business Intelligence Development Studio (ñì. ðèñ. 3.5) è âûïîëíÿåò òå æå ôóíêöèè, ÷òî è ñîîòâåòñòâóþùåå îêíî â SQL Server Development Studio. Çäåñü âû ìîæåòå ïðîñìîòðåòü è íàñòðîèòü ñâîéñòâà îáúåêòîâ, êîòîðûå âûáðàíû â îêíå Solution Explorer.
3.1.11. Îêíî Dynamic Help Îêíî äèíàìè÷åñêîé ñïðàâêè èñïîëüçóåòñÿ äëÿ êîíòåêñòíîé ïîäñêàçêè. Åãî ñîäåðæèìîå èçìåíÿåòñÿ â çàâèñèìîñòè îò òåêóùåãî ïîëîæåíèÿ êóðñîðà èëè óêàçàòåëÿ ìûøè è ïîìîãàåò ïîëüçîâàòåëþ îñâîèòüñÿ ñ íîâûì ïðèëîæåíèåì.
3.1.12. Êîíòðîëü íàä âåðñèÿìè ðåøåíèé â BIDS Óòèëèòà Business Intelligence Development Studio òàêæå èíòåãðèðîâàíà ñ Visual SourceSafe, ÷òî ïîçâîëÿåò óïðîñòèòü è óñêîðèòü ïðîöåññ ñîçäàíèÿ ïðèëîæåíèé êîìàíäàìè ðàçðàáîò÷èêîâ. Òåïåðü âñå ïðîåêòû, ñîçäàâàåìûå ñ ïîìîùüþ Business
80
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
Intelligence Development Studio, ìîãóò áûòü ñîõðàíåíû â åäèíîì õðàíèëèùå, äëÿ íèõ ìîæåò âûïîëíÿòüñÿ êîíòðîëü è îòñëåæèâàíèå âåðñèé. Âî âðåìÿ ðàáîòû ñ îòäåëüíûì ôàéëîì èëè ïðîåêòîì ðàçðàáîò÷èêè ìîãóò âûïèñûâàòü ôàéëû, òåì ñàìûì ñîîáùàÿ äðóãèì ðàçðàáîò÷èêàì î òîì, ÷òî ñ äàííûìè ôàéëàìè âûïîëíÿþòñÿ ðàáîòû. Çàïèñü ðàíåå âûïèñàííîãî ôàéëà â õðàíèëèùå ìîæåò âûïîëíÿòüñÿ êàê ïîä òîé âåðñèåé, ïîä êîòîðîé îí áûë ðàíåå âûïèñàí, òàê è ïîä íîâîé âåðñèåé. Ïðè ýòîì ìîæåò áûòü ïðèñâîåí ëèáî íîâûé íîìåð âåðñèè (÷òî áóäåò ñâèäåòåëüñòâîâàòü î ñåðüåçíûõ èçìåíåíèÿõ â êîäå), ëèáî íîâûé íîìåð ïîäâåðñèè (÷òî ñâèäåòåëüñòâóåò î íåçíà÷èòåëüíûõ èçìåíåíèÿõ). Äëÿ òîãî ÷òîáû äîáàâèòü ðåøåíèÿ, ïðîåêòû èëè îòäåëüíûå ôàéëû â ñèñòåìó êîíòðîëÿ âåðñèé, âûáåðèòå â ìåíþ BIDS êîìàíäó File4Source Control.
3.1.13. Óòèëèòà Query Editor Óòèëèòà Query Editor ñîçäàíà äëÿ òîãî, ÷òîáû çàìåíèòü àêòèâíî èñïîëüçîâàâøèéñÿ ðàíåå èíñòðóìåíò Query Analyzer. Îíà ïîçâîëÿåò ñîçäàâàòü è çàïóñêàòü ñöåíàðèè T-SQL. Îêíî Query Editor îòîáðàæàåòñÿ â âåðõíåé ÷àñòè îêíà SQL Server Management Studio (ñì. ðèñ. 3.3). Äëÿ çàïóñêà ðåäàêòîðà çàïðîñîâ ìîæíî ëèáî íàæàòü â ïàíåëè èíñòðóìåíòîâ SQL Server Management Studio êíîïêó New Query, ëèáî âûáðàòü â ìåíþ ïóíêò File4New4SQL Server Query4SQL Server Query. Ïîìèìî ñîçäàíèÿ ñöåíàðèåâ íà T-SQL, ðåäàêòîð çàïðîñîâ ìîæíî èñïîëüçîâàòü òàêæå äëÿ ñîçäàíèÿ ñöåíàðèåâ íà îñíîâå òåõíîëîãèé SQL Mobile Queries, DMX, MDX è XMLA. Ïðåèìóùåñòâîì ðåäàêòîðà çàïðîñîâ ÿâëÿåòñÿ òî, ÷òî îí, â îòëè÷èå îò Query Analyzer, ìîæåò ðàáîòàòü êàê ïðè îòêðûòîì ñîåäèíåíèè, òàê è áåç íåãî. Ïî óìîë÷àíèþ ðåäàêòîð çàïðîñîâ íå ïîäêëþ÷åí ê ñåðâåðó, îäíàêî êàê òîëüêî ðàçðàáîò÷èê íà÷èíàåò ñîçäàíèå íîâîãî çàïðîñà, Query Editor ñàìîñòîÿòåëüíî îïðåäåëÿåò ïàðàìåòðû çàðåãèñòðèðîâàííîãî ñåðâåðà è óñòàíàâëèâàåò ñ íèì ñîåäèíåíèå. Åùå îäíèì ïðåèìóùåñòâîì ðåäàêòîðà çàïðîñîâ ÿâëÿåòñÿ òî, ÷òî îí ïîääåðæèâàåò âîçìîæíîñòü àâòîìàòè÷åñêîãî âûäåëåíèÿ öâåòîì ñîäåðæàùåãîñÿ â îêíå êîäà. Ýòî ïîçâîëÿåò âûäåëèòü â êîäå ïðèìå÷àíèÿ, îøèáêè è ôðàãìåíòû êîäà, ÷òî çíà÷èòåëüíî óïðîùàåò ðàáîòó ïðîãðàììèñòà. Áîëåå òîãî, Query Editor, â îòëè÷èå îò ñâîåãî ïðåäøåñòâåííèêà, ïîääåðæèâàåò ïîíÿòèå ïðîåêòà, â êîòîðîì ôàéëû ñãðóïïèðîâàíû ïî ëîãè÷åñêîìó ïðèíöèïó. Ïîìèìî ýòîãî â ðåäàêòîðå çàïðîñîâ ïîääåðæèâàåòñÿ âîçìîæíîñòü èñïîëüçîâàòü Visual SourceSafe äëÿ êîíòðîëÿ íàä âåðñèÿìè ñîçäàâàåìûõ ïðîåêòîâ è îòäåëüíûõ ôàéëîâ ñî ñöåíàðèÿìè. Ýòî ïîçâîëÿåò îòñëåæèâàòü èçìåíåíèÿ â îòäåëüíûõ âåðñèÿõ ôàéëîâ, à òàêæå ñîõðàíÿòü ñöåíàðèè T-SQL â âèäå îòäåëüíûõ ôàéëîâ, ÷òîáû îáåñïå÷èòü âîçìîæíîñòü äàëüíåéøåãî ïåðåíîñà. Ïåðåä òåì êàê ðàçðàáîò÷èê íà÷èíàåò èçìåíÿòü îòäåëüíûé ôàéë ïðîåêòà, åìó íåîáõîäèìî ñíà÷àëà âûïèñàòü åãî èç õðàíèëèùà Visual SourceSafe. Áëàãîäàðÿ ýòîìó äðóãèå ðàçðàáîò÷èêè ñìîãóò óçíàòü, ÷òî ñ äàííûì ôàéëîì âûïîëíÿåòñÿ ðàáîòà, è ôàéë áóäåò çàùèùåí îò ïåðåçàïèñè ðàçëè÷íûìè êîïèÿìè. Èñïîëüçîâàíèå ñïåöèàëüíîãî ïðîãðàììíîãî îáåñïå÷åíèÿ äëÿ êîíòðîëÿ âåðñèé ïîçâîëÿåò ðåàëèçîâàòü âîçìîæíîñòü õðàíåíèÿ èñõîäíûõ êîäîâ ïðîãðàìì, ïðîåêòîâ è îòäåëüíûõ ñöåíàðèåâ, àññîöèèðîâàííûõ ñ âûáðàííîé ñõåìîé áàçû äàííûõ. Ýòî ïîçâîëÿåò îäíîçíà÷íî
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
81
èäåíòèôèöèðîâàòü àâòîðà èçìåíåíèé èëè îòäåëüíûõ ôðàãìåíòîâ êîäà, à òàêæå îãðàíè÷èòü ïðèìåíåíèå ïðîãðàììíîãî îáåñïå÷åíèÿ äëÿ ìîäèôèêàöèè êîäà.  ðåäàêòîðå çàïðîñîâ, êðîìå òîãî, äîáàâëåíî íåñêîëüêî íîâûõ ýëåìåíòîâ, êîòîðûõ íå ñóùåñòâîâàëî â àíàëèçàòîðå çàïðîñîâ. Query Editor ìîæåò îòîáðàæàòü ñöåíàðèé, ñ êîòîðûì ðàáîòàåò ïðîãðàììèñò, â âèäå äâóõ ïðåäñòàâëåíèé: · îáû÷íûé òåêñò; · òàáëèöà. Ïîìèìî ýòîãî â ðåäàêòîðå çàïðîñîâ îòîáðàæàåòñÿ õîä âûïîëíåíèÿ ñöåíàðèÿ â âèäå îòäåëüíûõ ýòàïîâ, ÷òî ïîçâîëÿåò áûñòðåå âûïîëíèòü îòëàäêó êîäà è ñîêðàòèòü ýíåðãèþ íà ïðîâåðêó êîäà. Ðåçþìèðóÿ âûøåñêàçàííîå, ñòîèò çàìåòèòü, ÷òî ðåäàêòîð çàïðîñîâ, ïî ñðàâíåíèþ ñî ñâîèì ìëàäøèì áðàòîì, ïðåäñòàâëÿåò ñîáîé áîëåå óäîáíîå ñðåäñòâî äëÿ ñîçäàíèÿ ïðîãðàììíîãî êîäà, åãî ñîõðàíåíèÿ è êîíòðîëÿ âåðñèé. Òåïåðü ñîçäàâàòü ñöåíàðèè è ïðîåêòû ñ ïîìîùüþ Query Editor íàìíîãî ïðîùå, ïîñêîëüêó äîáàâèëèñü òàêèå ïðåèìóùåñòâà, êàê âûäåëåíèå öâåòîì, ïëàí âûïîëíåíèÿ ïðîåêòà, à òàêæå âûäåëåíèå ôðàãìåíòà âûïîëíÿþùåãîñÿ êîäà.
3.1.14. Îêíî Results Window óòèëèòû Query Editor Ñîçäàíèå ñöåíàðèåâ ñ ïîìîùüþ ðåäàêòîðà çàïðîñîâ ïîäðàçóìåâàåò ÷àñòûå çàïðîñû ê áàçå äàííûõ è èõ îáðàáîòêó. Ðåçóëüòàòàìè îáðàáîòêè ïîäîáíûõ çàïðîñîâ ÿâëÿåòñÿ âûâîä äàííûõ íà ýêðàí êîìïüþòåðà. Âñå ðåçóëüòàòû âûïîëíåíèÿ çàïðîñîâ îòîáðàæàþòñÿ â îêíå Results Window. Ýòî îêíî íàõîäèòñÿ â íèæíåì ïðàâîì óãëó SQL Server Management Studio (ñì. ðèñ. 3.3). Îòîáðàæåíèå ðåçóëüòàòîâ ìîæåò âûïîëíÿòüñÿ êàê â òåêñòîâîì ôîðìàòå, òàê è â âèäå òàáëèöû. Ýòî óïðîùàåò ðàáîòó ñ ðåçóëüòàòàìè è èõ îòîáðàæåíèå íà ýêðàíå.
3.1.15. Îêíî Dynamic Help Îêíî äèíàìè÷åñêîé ïîäñêàçêè ïîçâîëÿåò ïðîñìàòðèâàòü ñïðàâî÷íûå ñâåäåíèÿ îá ýëåìåíòå, íà êîòîðûé óñòàíîâëåí êóðñîð èëè óêàçàòåëü ìûøè. Ýòî óñîâåðøåíñòâîâàíèå ïåðåøëî â SQL Server Management Studio èç Visual Studio 2005 IDE.
3.1.16. Êîíòðîëü íàä âåðñèÿìè ïðîãðàììíîãî êîäà Èíòåãðèðîâàííàÿ â SQL Server Management Studio ñèñòåìà êîíòðîëÿ è õðàíåíèÿ âåðñèé ïîçâîëÿåò ðåàëèçîâàòü ìíîãî ìåõàíèçìîâ êîíòðîëÿ íàä âåðñèÿìè ñîçäàâàåìûõ ïðèëîæåíèé. Ñèñòåìà êîíòðîëÿ îðèåíòèðîâàíà â ïåðâóþ î÷åðåäü íà êîìàíäû ðàçðàáîò÷èêîâ. Ýôôåêòèâíîñòü åå èñïîëüçîâàíèÿ äîñòèãàåòñÿ ïðè ðàáîòå íàä áîëüøèìè ïðîåêòàìè. Äëÿ òîãî ÷òîáû íà÷àòü èñïîëüçîâàòü äàííóþ èíòåãðèðîâàííóþ ñèñòåìó, íåîáõîäèìî ñíà÷àëà óñòàíîâèòü ïðèëîæåíèå Visual SourceSafe, êîòîðîå âõîäèò â ñîñòàâ Microsoft Visual Studio 2005.  ðåçóëüòàòå ñòàíóò äîñòóïíû ñëåäóþùèå ôóíêöèè â îòíîøåíèè ïðîãðàììíîãî êîäà: · âûïèñêà ôàéëîâ; · çàïèñü ôàéëîâ â õðàíèëèùå;
82
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
· êîíòðîëü íàä âåðñèÿìè ôàéëîâ; · îòîáðàæåíèå ðåçóëüòàòîâ ñðàâíåíèÿ âûáðàííûõ ôàéëîâ; · àðõèâèðîâàíèå «ñòàðûõ» âåðñèé ïðîåêòà. Âñå ýòè ïðåèìóùåñòâà ïðåäîõðàíÿþò ðàçðàáîò÷èêîâ îò ñëó÷àéíîãî ïåðåçàïèñûâàíèÿ ôàéëîâ ïðè ðàáîòå áîëüøèõ ïðîåêòíûõ êîìàíä.
3.1.17. Ïðîñìîòð ýòàïîâ âûïîëíåíèÿ çàïðîñà Äëÿ ïðîñìîòðà òåêóùåãî ýòàïà îáðàáîòêè çàïðîñà, âûâîäà îøèáîê, ñïèñêà ñîåäèíåíèé è äðóãèõ öåëåé â SQL Server Management Studio ñóùåñòâóåò îêíî Current Activity. Äëÿ îòêðûòèÿ ýòîãî îêíà âûáåðèòå â îêíå Object Explorer âåòâü äåðåâà Database4Management4Activity Monitor. Â ðåçóëüòàòå îòêðîåòñÿ îêíî Current Activity, â êîòîðîì ñîäåðæèòñÿ ñïèñîê òåêóùèõ çàïóùåííûõ ïðîöåññîâ. Ïîìèìî ñïèñêà ïðîöåññîâ â äàííîì îêíå ñîäåðæèòñÿ ñëåäóþùàÿ èíôîðìàöèÿ: · ñâåäåíèÿ î ïðîöåññå; · ñîåäèíåíèÿ ïîëüçîâàòåëåé; · áëîêèðîâàííûå ïðîöåññû; · ïîëüçîâàòåëüñêèå áëîêèðîâêè; · äðóãèå áëîêèðîâêè.
3.1.18. Ñðàâíåíèå SQL SMS è BIDS Íåñìîòðÿ íà òî ÷òî SQL Server Management Studio è Business Intelligence Development Studio íà ïåðâûé âçãëÿä ÿâëÿþòñÿ áðàòüÿìè-áëèçíåöàìè, îíè ñîçäàâàëèñü äëÿ ðåøåíèÿ ðàçíûõ çàäà÷. Îáà ýòè ïðèëîæåíèÿ ñîçäàâàëèñü íà îñíîâå Visual Studio 2005 IDE è èìåþò ïîõîæèé íàáîð îêîí è èíñòðóìåíòîâ äëÿ ðàáîòû ñ ïðîåêòàìè ðàçëè÷íûõ òèïîâ. Ïðè ýòîì SQL Server Management Studio èñïîëüçóåòñÿ äëÿ ðàçðàáîòêè ïðèëîæåíèé, êîòîðûå áóäóò ðàáîòàòü ñ ðåëÿöèîííîé áàçîé SQL Server, à Business Intelligence Development Studio ïîçâîëÿåò ñîçäàâàòü ïðèëîæåíèÿ äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè. Îäíàêî íå ñòîèò çàáëóæäàòüñÿ, ïîëàãàÿ, ÷òî ïåðâîå ïðèëîæåíèå ìîæåò àêòèâíî èñïîëüçîâàòüñÿ äëÿ íàñòðîéêè ïàðàìåòðîâ áàçû äàííûõ, à âòîðîå — äëÿ íàñòðîéêè ïàðàìåòðîâ ñåðâèñîâ àíàëèòèêè. SQL Server Management Studio ïîçâîëÿåò óïðàâëÿòü êàê SQL Server, òàê è ñåðâèñàìè àíàëèòèêè, ïðè ýòîì âû ëåãêî ìîæåòå èñïîëüçîâàòü åãî äëÿ ñîçäàíèÿ MDXè SQL-çàïðîñîâ. Ïîìèìî SQL Server è ñåðâèñîâ àíàëèòèêè SQL Server Management Studio ìîæåò óñòàíàâëèâàòü ñîåäèíåíèå ñ ñåðâèñàìè îò÷åòîâ äëÿ âûïîëíåíèÿ èõ íàñòðîéêè. Òàêæå ñ åãî ïîìîùüþ ìîæíî çàïóñêàòü è îñòàíàâëèâàòü îòäåëüíûå ýêçåìïëÿðû ñåðâèñîâ è ñåðâåðîâ, íàñòðàèâàòü èíòåðôåéñ ïðèëîæåíèé èëè âûïîëíÿòü ñöåíàðèè äëÿ ïîëó÷åíèÿ è îáðàáîòêè íåîáõîäèìûõ äàííûõ. Íåñìîòðÿ íà áîëüøîå ñõîäñòâî ñ SQL Server Management Studio, Business Intelligence Development Studio íå ÿâëÿåòñÿ ñðåäñòâîì àäìèíèñòðèðîâàíèÿ ñåðâèñîâ SQL Server 2005. Îäíàêî ýòî ìîùíîå ïðèëîæåíèå ïîçâîëÿåò ñîçäàâàòü ïðèëîæåíèÿ äëÿ àíàëèòè÷åñêîé îáðàáîòêè äàííûõ, ñîñòàâëåíèÿ îò÷åòîâ è íàñòðîéêè
3.1. Óïðàâëåíèå áàçàìè äàííûõ è ñðåäñòâà ðàçðàáîòêè
83
ïàðàìåòðîâ ïðåîáðàçîâàíèÿ äàííûõ. Ñ åãî ïîìîùüþ ìîæíî íàñòðàèâàòü ñîåäèíåíèÿ, ñîçäàâàòü çàïðîñû â äèçàéíåðå çàïðîñîâ, âûïîëíÿòü èõ, ñîçäàâàòü DTS-ïàêåòû, XMLA- è MDX-çàïðîñû è äðóãèå ïðèëîæåíèÿ ñåðâèñîâ àíàëèòèêè. Òàêæå BIDS ïîçâîëÿåò ñîçäàâàòü ãðàôè÷åñêèé èíòåðôåéñ ïðèëîæåíèÿ è íàñòðàèâàòü åãî ïàðàìåòðû. Äëÿ ýòîãî èñïîëüçóåòñÿ íàáîð ðàíåå ñîçäàííûõ êîìïîíåíòîâ, êîòîðûå ðàñïîëàãàþòñÿ íà ïàíåëè èíñòðóìåíòîâ.
3.1.19. Óòèëèòà Sqlcmd Åùå îäèí íîâûé êîìïîíåíò SQL Server 2005, èñïîëüçóåìûé äëÿ àäìèíèñòðèðîâàíèÿ ñèñòåìû, — ýòî óòèëèòà Sqlcmd. Äàííàÿ óòèëèòà çàìåíÿåò ñîáîé óòèëèòû osql è isql, êîòîðûå èñïîëüçîâàëèñü àäìèíèñòðàòîðàìè â ïðåäûäóùèõ âåðñèÿõ SQL Server. Óòèëèòà isql èñïîëüçîâàëà áèáëèîòåêó SQL Server-DB äëÿ óñòàíîâêè ñîåäèíåíèÿ ñ SQL Server. Óòèëèòà osql, â ñâîþ î÷åðåäü, äëÿ óñòàíîâêè ñîåäèíåíèÿ ñ SQL Server èñïîëüçîâàëà ODBC. Äëÿ îáðàòíîé ñîâìåñòèìîñòè äàííûå óòèëèòû òàêæå ïîääåðæèâàþòñÿ â SQL Server 2005. Äëÿ çàïóñêà óòèëèòû Sqlcmd èñïîëüçóåòñÿ êîìàíäíàÿ ñòðîêà. Àäìèíèñòðàòîðû è ðàçðàáîò÷èêè ìîãóò âûïîëíÿòü çàïðîñû T-SQL, õðàíèìûå ïðîöåäóðû è ïàêåòû T-SQL ïðÿìî èç êîìàíäíîé ñòðîêè. Ýòî óïðîùàåò ïðîöåäóðó âûïîëíåíèÿ ïðîñòåéøèõ çàïðîñîâ è íå òðåáóåò äîïîëíèòåëüíûõ ïðîãðàììíûõ ñðåäñòâ. Îäíî èç îñíîâíûõ ïðåèìóùåñòâ, êîòîðîå áûëî ðåàëèçîâàíî â Sqlcmd, — ýòî âîçìîæíîñòü âûïîëíÿòü îòäåëüíûå êîìàíäû è õðàíèìûå ïðîöåäóðû ïðÿìî èç êîìàíäíîé ñòðîêè, èñïîëüçóÿ íàáîð êëþ÷åé. Äëÿ ýòîãî ñ áàçîé äàííûõ óñòàíàâëèâàåòñÿ ñîåäèíåíèå ñ ïîìîùüþ òåõíîëîãèè Dedicated Administrative Connection (DAC). Åñëè ñ SQL Server 2005 óñòàíàâëèâàåòñÿ ñîåäèíåíèå íà óðîâíå DAC, òî äëÿ äàííîãî ñîåäèíåíèÿ çàïðîñû è êîìàíäû âûïîëíÿþòñÿ ñ áîëüøèì ïðèîðèòåòîì, ÷åì SQL-çàïðîñû äðóãèõ ñîåäèíåíèé. Äëÿ òîãî ÷òîáû óñòàíîâèòü DAC-ñîåäèíåíèå ñ ïîìîùüþ Sqlcmd, âàì íåîáõîäèìî çàïóñòèòü ýòó óòèëèòó ñ êëþ÷îì –A. Ïîìèìî ýòîãî êëþ÷à óòèëèòîé ïîääåðæèâàåòñÿ öåëûé ðÿä äðóãèõ êëþ÷åé, ïîçâîëÿþùèõ àâòîìàòèçèðîâàòü âûïîëíåíèå íåêîòîðûõ îïåðàöèé. Íàïðèìåð, ðàçðàáîò÷èêè ìîãóò èñïîëüçîâàòü êëþ÷ –L äëÿ ïðîñìîòðà ïîëíîãî ñïèñêà çàðåãèñòðèðîâàííûõ ñåðâåðîâ SQL.  ýòîì ñëó÷àå ñèíòàêñèñ çàïóñêà óòèëèòû áóäåò âûãëÿäåòü ñëåäóþùèì îáðàçîì: Sqlcmd –L
Åùå îäèí ÷àñòî èñïîëüçóåìûé êëþ÷ — ýòî êëþ÷ –P. Îí ïîçâîëÿåò ïðîñìîòðåòü ñòàòèñòèêó ïðîèçâîäèòåëüíîñòè SQL Server 2005. Äëÿ òîãî ÷òîáû ïðîñìîòðåòü ïîëíûé ñïèñîê êëþ÷åé ñ èõ îïèñàíèåì, ââåäèòå â êîìàíäíîé ñòðîêå: Sqlcmd /?
3.1.20. Èñïîëüçîâàíèå ôàéëîâ ñöåíàðèåâ â Sqlcmd Ïîìèìî íàáîðà êëþ÷åé óòèëèòà Sqlcmd èìååò ðÿä âîçìîæíîñòåé äëÿ îáðàáîòêè ôàéëîâ, ñîäåðæàùèõ ñöåíàðèè. Ýòî ïîçâîëÿåò êîíòðîëèðîâàòü âûïîëíåíèå ôàéëà, à òàêæå èñïîëüçîâàòü ïåðåìåííûå. Äëÿ òîãî ÷òîáû îïðåäåëèòü ïåðåìåííûå
84
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
âî âðåìÿ âûïîëíåíèÿ ñöåíàðèÿ, èñïîëüçóåòñÿ êëþ÷ –V. Ïðèìåð îïðåäåëåíèÿ ïåðåìåííîé: sclcmd -v FIO="Petrenko P.I. "
Òàêæå äëÿ ðåøåíèÿ äàííîé çàäà÷è ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé –shell. Ðàññìîòðèì áîëåå äåòàëüíî ïðèìåð èñïîëüçîâàíèÿ êîìàíäû è çàïóñêà ôàéëà ñöåíàðèÿ ñ ïîìîùüþ óòèëèòû Sqlcmd: sclcmd -S NameOfSQLServer -D WorksDB -V FIO="Petrenko P.I." -I SQLScript.sql
 ýòîì ïðèìåðå èñïîëüçóåòñÿ öåëûé ðÿä êëþ÷åé: · -S — èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû çàäàòü èìÿ àêòèâíîãî çàðåãèñòðèðîâàííîãî ñåðâåðà; · -D — ïîçâîëÿåò îïðåäåëèòü èìÿ áàçû äàííûõ, ñ êîòîðîé áóäåò óñòàíîâëåíî ñîåäèíåíèå.  äàííîì ñëó÷àå â êà÷åñòâå áàçû äàííûõ èñïîëüçóåòñÿ áàçà WorksDB; · -V — èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ ïåðåìåííîé FIO. Òàêæå äëÿ íåå çàäàåòñÿ çíà÷åíèå ïî óìîë÷àíèþ; · -I — êëþ÷, óêàçûâàþùèé Sqlcmd, ÷òî âñå ðåçóëüòàòû íåîáõîäèìî âûâîäèòü â ôàéë SQLScript.sql. Ïîìèìî òîãî, ÷òî âû ìîæåòå çàäàâàòü ïåðåìåííûå ïðè çàïóñêå óòèëèòû Sqlcmd, ñóùåñòâóåò íåñêîëüêî ïðåäîïðåäåëåííûõ ïåðåìåííûõ, êîòîðûå òàêæå ìîãóò èñïîëüçîâàòüñÿ âìåñòå ñ óòèëèòîé Sqlcmd. Ïîëíûé ñïèñîê ïåðåìåííûõ è ñîîòâåòñòâóþùèõ êëþ÷åé â Sqlcmd ïðèâåäåí â òàáë. 3.1. Òàáëèöà 3.1. Ñïèñîê ïåðåìåííûõ è ñîîòâåòñòâóþùèõ èì êëþ÷åé Sqlcmd ¹
Ïåðåìåííàÿ
Êëþ÷ Sqlcmd
1
SQLCMDCOLSEP
–s
2
SQLCMDCOLWIDTH
–w
3
SQLCMDDBNAME
–d
4
SQLCMDERRORLEVEL
–m
5
SQLCMDHEADERS
–h
6
SQLCMDLOGINTIMEOUT
–l
7
SQLCMDPACKETSIZE
–a
8
SQLCMDPASSWORD
–P
9
SQLCMDSERVER
–S
10
SQLCMDSTATTIMEOUT
–t
11
SQLCMDUSER
–U
12
SQLCMDWORKSTATION
–H
Ïîìèìî íàáîðà ïðåäîïðåäåëåííûõ ïåðåìåííûõ óòèëèòà Sqlcmd èìååò íàáîð ðàñøèðåííûõ êîìàíä. Äàííûå êîìàíäû, à òàêæå èõ îïèñàíèå ïðèâåäåíû â òàáë. 3.2.
3.2. Íîâûå ñðåäñòâà óïðàâëåíèÿ
85
Òàáëèöà 3.2. Ñïèñîê ðàñøèðåííûõ êîìàíä è èõ îïèñàíèå ¹
Êîìàíäà
Îïèñàíèå
1
:Connect [timeout]
Èñïîëüçóåòñÿ äëÿ ñîåäèíåíèÿ ñ ýêçåìïëÿðîì SQL Server
2
:Error (filename)
Ïîçâîëÿåò ïåðåíàïðàâèòü âûâîä ñîîáùåíèé îá îøèáêàõ â îïðåäåëåííûé ôàéë
3
:List
Èñïîëüçóåòñÿ äëÿ îòîáðàæåíèÿ ñîäåðæèìîãî êýøà êîìàíä
4
:On error [exit/retry/ ignore]
Ïîçâîëÿåò îïðåäåëèòü êîìàíäó, êîòîðàÿ áóäåò âûïîëíÿòüñÿ âî âðåìÿ âîçíèêíîâåíèÿ îøèáêè
5
:Out
Ïîçâîëÿåò ïåðåíàïðàâèòü âûâîä ðåçóëüòàòîâ âûïîëíåíèÿ çàïðîñà
6
:Perftrace (filename)
Ïåðåíàïðàâëÿåò âûâîä ñòàòèñòèêè ïðîèçâîäèòåëüíîñòè ñèñòåìû â îïðåäåëåííûé ôàéë
7
:ServerList
Èñïîëüçóåòñÿ äëÿ îòîáðàæåíèÿ ïîëíîãî ñïèñêà äîñòóïíûõ ñèñòåì ñ SQL Server
8
:XML[ON/OFF]
Îïðåäåëÿåò ïàðàìåòðû âûâîäà ðåçóëüòàòîâ â ôîðìàòå XML
9
[:]!!
Èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ ñèñòåìíûõ êîìàíä
10
[:]ED
Âûïîëíÿåò ðåäàêòèðîâàíèå êîìàíäû êýøà
11
[:]EXIT (results)
Èñïîëüçóåò çíà÷åíèå (results) â êà÷åñòâå ïàðàìåòðîâ âûõîäà
12
[:]GO[count]
Èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ êîíöà âûïîëíåíèÿ ïàêåòà äëÿ êýøèðîâàííûõ êîìàíä. Äîáàâëåíèå ïàðàìåòðà [count] ïîçâîëÿåò âûïîëíÿòü äàííóþ êîìàíäó îïðåäåëåííîå ÷èñëî ðàç
13
[:]QUIT
Èñïîëüçóåòñÿ äëÿ âûõîäà èç óòèëèòû Sqlcmd
14
[:]r (filename)
Ïîçâîëÿåò îïðåäåëèòü íàáîð êîìàíä Sqlcmd äëÿ îïðåäåëåííîãî ôàéëà
15
[:]RESET
Èñïîëüçóåòñÿ äëÿ î÷èñòêè êýøà
Ðàññìîòðèì èñïîëüçîâàíèå ðàñøèðåííîãî íàáîðà êîìàíä íà ïðèìåðå.  ïðèâåäåííîì ïðèìåðå ìû, èñïîëüçóÿ óòèëèòó Sqlcmd, âûïîëíèëè ñîåäèíåíèå ñ ñåðâåðîì WorksDB, à çàòåì âîçâðàòèëè çíà÷åíèå, êîòîðîå ÿâëÿåòñÿ ðåçóëüòàòîì âûïîëíåíèÿ çàïðîñà (ïîäñ÷åòà êîëè÷åñòâà ñòðîê â òàáëèöå): Ñ:\>sqlcmd 1> use WorksDB 2> :EXTT(select count{*) from Table1) ----------------------------Changed database context to 'WorksDB'. 91 (1 rows affected)
3.2. Íîâûå ñðåäñòâà óïðàâëåíèÿ Â SQL Server 2005 ïîÿâèëèñü íå òîëüêî íîâûå ñðåäñòâà äëÿ óïðàâëåíèÿ, íî è ñðåäñòâà äëÿ ñîçäàíèÿ ïðèëîæåíèé è èíòåãðàöèè ñ ñóùåñòâóþùèìè ñèñòåìàìè ðàçðàáîòêè (òàêèìè, êàê .NET Framework). Äëÿ ýòèõ öåëåé â SQL Server áûë ñîçäàí íîâûé íàáîð îáúåêòîâ — System Management Objects (SMO), ïîçâîëÿþùèé àâòîìàòèçèðîâàòü è óñêîðèòü ñîçäàíèå íîâûõ ïðèëîæåíèé. Ïîìèìî ýòîãî â SQL
86
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
Server 2005 ðàñøèðåí íàáîð ôóíêöèé API äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè è ðåïëèêàöèè, ÷òî ïîçâîëÿåò ðàçðàáîò÷èêàì ñîçäàâàòü íîâûå ïðèëîæåíèÿ äëÿ ðàáîòû ñ äàííûìè ôóíêöèÿìè SQL Server. Åùå îäíèì ïðåèìóùåñòâîì SQL Server 2005 ÿâëÿåòñÿ ïîääåðæêà êîíôèãóðàöèè è ñîáûòèé WMI. Äàëåå ìû áîëåå äåòàëüíî ðàññìîòðèì System Management Objects, Analysis Management Objects, Replication Management Objects, à òàêæå WMI.
3.2.1. SQL Server Management Objects (SMO) Òàê æå êàê è ïðåäøåñòâåííèê, Distributed Management Objects (DMO), íîâûé íàáîð îáúåêòîâ SQL Server Management Objects (SMO) ñîçäàí ñ ó÷åòîì âñåõ òîíêîñòåé ðàáîòû SQL Server 2005. Îäíàêî â îòëè÷èå îò DMO, êîòîðûé áàçèðîâàëñÿ íà óñòàðåâàþùåé òåõíîëîãèè COM, íîâûé íàáîð îáúåêòîâ SMO áàçèðóåòñÿ íà áèáëèîòåêå êëàññîâ .NET. Ïîìèìî âñåãî ïðî÷åãî ýòî ïîäðàçóìåâàåò, ÷òî äëÿ ðàáîòû ñ íàáîðîì SMO òðåáóåòñÿ ñíà÷àëà óñòàíîâèòü íà êîìïüþòåð .NET Framework. Êðîìå SQL Server 2005, SMO ìîæåò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ ïðèëîæåíèé è óïðàâëåíèÿ â ñèñòåìàõ SQL Server 7.0 è SQL Server 2000.  îòíîøåíèè íàáîðà îáúåêòîâ ïîääåðæèâàåòñÿ íå òîëüêî ïðÿìàÿ ñîâìåñòèìîñòü, íî è îáðàòíàÿ: DMO òàêæå ïîääåðæèâàåòñÿ SQL Server 2005, îäíàêî â ýòîì ñëó÷àå âû íå ñìîæåòå èñïîëüçîâàòü ðÿä ïðåèìóùåñòâ, ïðåäîñòàâëÿåìûõ íîâûì íàáîðîì îáúåêòîâ. Íàïðèìåð, DMO íåëüçÿ èñïîëüçîâàòü äëÿ óïðàâëåíèÿ áðîêåðîì ñåðâèñîâ, íîâûìè òèïàìè VARBINARY, XML è äðóãèìè ïðåèìóùåñòâàìè SQL Server 2005. Ïîìèìî ýòîãî â SMO ïîÿâèëîñü îêîëî 150 íîâûõ êëàññîâ äëÿ ðàáîòû ñ íîâûìè âîçìîæíîñòÿìè SQL Server 2005. Âñå îíè îêàæóòñÿ íåäîñòóïíûìè ïðè èñïîëüçîâàíèè DMO. Ïîìèìî ïåðå÷èñëåííûõ ïðåèìóùåñòâ â SMO ïîÿâèëèñü ñëåäóþùèå: · îïòèìèçèðîâàííàÿ èíèöèàëèçàöèÿ îáúåêòîâ — ðàçðàáîò÷èê ìîæåò ñîçäàâàòü ýêçåìïëÿð îáúåêòà, êîòîðûé íå áóäåò òðåáîâàòü îïðåäåëåíèÿ âñåõ ñâîéñòâ âî âðåìÿ åãî ñîçäàíèÿ. Ýòî îçíà÷àåò, ÷òî SMO íå òðåáóåòñÿ ïîëó÷èòü âñþ èíôîðìàöèþ îáî âñåõ áàçàõ äàííûõ äàííîãî ñåðâåðà âî âðåìÿ ñîçäàíèÿ ýòîãî îáúåêòà. Ïîëíàÿ èíèöèàëèçàöèÿ ìîæåò áûòü âûïîëíåíà â ëþáîé ìîìåíò ïîñëå òîãî, êàê âûïîëíèòñÿ ñ÷èòûâàíèå ïîëíîãî ñïèñêà îáúåêòîâ. Îïòèìèçèðîâàííàÿ èíèöèàëèçàöèÿ îáúåêòà èñïîëüçóåòñÿ â îñíîâíîì äëÿ óñêîðåíèÿ ðàáîòû ïðèëîæåíèé; · óëó÷øåííûå âîçìîæíîñòè ïî îáðàáîòêå ñöåíàðèåâ ðåàëèçîâàíû çà ñ÷åò èñïîëüçîâàíèÿ íîâîãî êëàññà Scripter. Íîâûé êëàññ ìîæåò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ ñöåíàðèåâ äëÿ îáúåêòîâ áàçû äàííûõ è ñâÿçåé ìåæäó íèìè. Äëÿ ýòîãî èñïîëüçóþòñÿ ñëåäóþùèå òàáëèöû: Microsoft.SqlServer. Microsoft.SqlServer.Management.Smo.Common è MicroManagement.Smo, soft.SqlServer.Management.Smo.Agent.
3.2.2. Èñïîëüçîâàíèå Windows Management Instrumentation (WMI) Äëÿ óïðàâëåíèÿ SQL Server 2005 òàêæå ìîæåò èñïîëüçîâàòüñÿ èíñòðóìåíòàðèé API Windows — Windows Management Instrumentation (WMI). WMI ïðåäñòàâëÿåò ñîáîé ñòàíäàðò Microsoft, êîòîðûé ïîääåðæèâàåòñÿ ìíîãèìè ïðîãðàììíûìè
3.2. Íîâûå ñðåäñòâà óïðàâëåíèÿ
87
ïðîäóêòàìè.  ïðåäûäóùèõ âåðñèÿõ SQL Server äàííûé API íå ìîã áûòü ýôôåêòèâíî èñïîëüçîâàí, ïîñêîëüêó îí íå áûë äîñòàòî÷íî ðàçâèò â ïðåäûäóùèõ âåðñèÿõ ýòîãî ïðîãðàììíîãî ïðîäóêòà. Äëÿ óïðàâëåíèÿ SQL Server â ýòîì ñëó÷àå èñïîëüçîâàëèñü DMO è SQL Server Enterprise Manager. Äëÿ ïðåäîñòàâëåíèÿ åùå îäíîãî äîïîëíèòåëüíîãî ìåõàíèçìà óïðàâëåíèÿ ôóíêöèÿìè SQL Server 2005 áûë ðåàëèçîâàí è ðàçâèò ìåõàíèçì WMI, à òàêæå ðàñøèðåíû âîçìîæíîñòè ïðîâàéäåðà WMI äëÿ îáðàáîòêè íîâûõ ñîáûòèé WMI.
3.2.3. Ïðîâàéäåð WMI Íîâûé ïðîâàéäåð WMI â SQL Server 2005 ïîçâîëÿåò ðåàëèçîâàòü âîçìîæíîñòè óäàëåííîãî óïðàâëåíèÿ ïðèëîæåíèÿìè è SQL Server. WMI ñîçäàâàëñÿ ñ òàêèì ðàñ÷åòîì, ÷òî îí ìîæåò ðàáîòàòü êàê â ïîäêëþ÷åííîì ðåæèìå, òàê è â àâòîíîìíîì, ïîçâîëÿÿ îáðàáàòûâàòü çàïðîñû è ñîçäàâàòü ïðèëîæåíèÿ, êîãäà ñîåäèíåíèå ñ çàðåãèñòðèðîâàííûì ñåðâåðîì îòñóòñòâóåò. Äëÿ ðàáîòû ïðîâàéäåðà WMI èñïîëüçóåòñÿ òàáëèöà Microsoft.SqlServer.Smo.WMI.
3.2.4. Ñîáûòèÿ WMI Ðàñøèðåíèå WMI áûëî äîñòèãíóòî çà ñ÷åò èñïîëüçîâàíèÿ íîâûõ ñîáûòèé WMI è èõ îáðàáîòêè. Äëÿ ìîíèòîðèíãà âîçíèêíîâåíèÿ ýòèõ ñîáûòèé èñïîëüçóåòñÿ Microsoft Operations Manager (MOM) — ñïåöèàëüíîå ïðèëîæåíèå, ðàçðàáîòàííîå äëÿ âûïîëíåíèÿ ïîäîáíûõ ôóíêöèé. Ñîáûòèÿ WMI âîçíèêàþò ïðè âûïîëíåíèè âñåõ îïåðàöèé ñ ïîìîùüþ ïðîôàéëåðà. Íàïðèìåð, ñîáûòèÿ WMI ãåíåðèðóþòñÿ âî âðåìÿ ñîçäàíèÿ áàçû äàííûõ, åå óäàëåíèè, äîáàâëåíèè çíà÷åíèé, à òàêæå âî âðåìÿ äðóãèõ îïåðàöèé, âûïîëíÿåìûõ ïîëüçîâàòåëåì â SQL Server. Ñîáûòèÿ WMI ãåíåðèðóþòñÿ íå òîëüêî ÿäðîì SQL Server, íî è ñåðâèñàìè îò÷åòîâ, àíàëèòèêè è ïðåîáðàçîâàíèÿ äàííûõ.
3.2.5. Íàáîð îáúåêòîâ Analysis Management Objects (AMO) Äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè è ñîçäàíèÿ ïðèëîæåíèé íà èõ îñíîâå â SQL Server 2005 ïðåäóñìîòðåí êîìïîíåíò Analysis Management Objects (AMO) — íàáîð îáúåêòîâ äëÿ ñîçäàíèÿ ïðèëîæåíèé ñåðâèñîâ àíàëèòèêè. Ïîìèìî óïðàâëåíèÿ ñåðâèñàìè àíàëèòèêè AMO ìîæåò áûòü èñïîëüçîâàí äëÿ óïðàâëåíèÿ ñëåäóþùèìè îáúåêòàìè SQL Server 2005: · èñòî÷íèêè äàííûõ; · êóáû; · èçìåðåíèÿ; · ìîäåëè èíôîðìàöèîííîé ïðîõîäêè. Òàê æå êàê è SMO, AMO ïîñòðîåíî íà îñíîâå ñðåäû ðàçðàáîòêè .NET Framework è òðåáóåò åå óñòàíîâêè. AMO ïîñòðîåíî íà îñíîâå áèáëèîòåêè COM-îáúåêòîâ, êîòîðàÿ íîñèò íàçâàíèå Decision Support Objects (DSO). Äëÿ AMO ïîääåðæèâàåòñÿ îáðàòíàÿ ñîâìåñòèìîñòü. Ýòî îçíà÷àåò, ÷òî SQL Server 2005 ìîæåò èñïîëüçîâàòü â ñâîåé ðàáîòå áîëåå ðàííèå âåðñèè AMO.
88
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
Âî âðåìÿ ðàáîòû AMO ãåíåðèðóåò íàáîð XML-ñîîáùåíèé, êîòîðûå èñïîëüçóþòñÿ äëÿ ñîçäàíèÿ è èçìåíåíèÿ ïàðàìåòðîâ èëè óäàëåíèÿ îáúåêòîâ ñåðâèñîâ àíàëèòèêè. Ýòè ñîîáùåíèÿ ìîãóò áûòü ñîõðàíåíû â âèäå îòäåëüíûõ ôàéëîâ äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ. Äëÿ õðàíåíèÿ îáúåêòîâ èñïîëüçóåòñÿ òàáëèöà Microsoft.SqlServer.Management.AnalysisServices.
3.2.6. Áèáëèîòåêà Replication Management Objects (RMO) Íàáîð îáúåêòîâ SMO ñîçäàâàëñÿ äëÿ óïðàâëåíèÿ ïðàêòè÷åñêèìè âñåìè âîçìîæíûìè ïàðàìåòðàìè SQL Server 2005, îäíàêî îí íå îõâàòûâàåò âîçìîæíîñòè ýòîãî ïðîãðàììíîãî ïðîäóêòà â îòíîøåíèè ðåïëèêàöèè. Äëÿ ýòèõ öåëåé ñîçäàíà åùå îäíà áèáëèîòåêà — Replication Management Objects (RMO). Ýòà áèáëèîòåêà èñïîëüçóåòñÿ äëÿ íàñòðîéêè ïàðàìåòðîâ ðåïëèêàöèè è áàçèðóåòñÿ, òàê æå êàê è ñâîè ðîäñòâåííèêè AMO è SMO, íà îñíîâå ñðåäû ðàçðàáîòêè .NET Framework. RMO ñîäåðæèò íàáîð êëàññîâ, êîòîðûå ïîçâîëÿþò âûïîëíèòü ðåïëèêàöèþ, àäìèíèñòðèðîâàíèå, ñèíõðîíèçàöèþ è ìîíèòîðèíã ðàñïðåäåëåííûõ ñèñòåì ñ èñïîëüçîâàíèåì ìåõàíèçìà ðåïëèêàöèè. Äëÿ èñïîëüçîâàíèÿ RMO â SQL Server 2005 èñïîëüçóåòñÿ òàáëèöà Microsoft.SqlServer.Replication.
3.3. Ñðåäñòâà óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè Ïîìèìî íàáîðà èíñòðóìåíòîâ äëÿ ðàçðàáîòêè ïðèëîæåíèé SQL Server 2005, ñåðâèñîâ àíàëèòèêè, ñåðâèñîâ îò÷åòîâ è äðóãèõ ïðèëîæåíèé â SQL Server ñóùåñòâóåò ðÿä ïðèëîæåíèé è óòèëèò, èñïîëüçóþùèõñÿ ñïåöèàëüíî äëÿ îïòèìèçàöèè ðàáîòû ïðèëîæåíèé, áàç äàííûõ, ñåðâåðîâ è ò. ä. Îíè ïîçâîëÿþò ïðîàíàëèçèðîâàòü ðàáîòó ïðèëîæåíèé, âûÿâèòü ñëàáûå ìåñòà è óìåíüøèòü íàãðóçêó íà ñåðâåð çà ñ÷åò îïòèìèçàöèè åãî ðàáîòû. Ïî ñðàâíåíèþ ñ ïðåäûäóùèìè âåðñèÿìè SQL Server êîëè÷åñòâî ïîäîáíûõ óòèëèò óâåëè÷èëîñü. È ýòî íåóäèâèòåëüíî, ïîñêîëüêó âîçìîæíîñòè íîâîé âåðñèè SQL Server íåñðàâíèìû ñ âîçìîæíîñòÿìè ñòàðûõ âåðñèé, à ñëåäîâàòåëüíî, âîçðàñòàåò íàãðóçêà íà ñåðâåð è òðåáîâàíèÿ ê íåìó è åãî íàñòðîéêå.  äàííîì ðàçäåëå ìû ðàññìîòðèì íîâûå ñðåäñòâà äëÿ óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè SQL Server 2005. Äëÿ ýòîãî èñïîëüçóþòñÿ òàêèå óòèëèòû, êàê Showplan, Profiler è Database Tuning Advisor.
3.3.1. Óòèëèòà Profiler Ïðîôàéëåð ðàíåå èñïîëüçîâàëñÿ â ñèñòåìàõ SQL Server áîëåå ðàííèõ âåðñèé, ïîýòîìó îí íå ÿâëÿåòñÿ íîâûì ïðåäñòàâèòåëåì ïîäîáíîãî êëàññà óòèëèò. Îäíàêî â íîâîé âåðñèè ýòîãî ïðèëîæåíèÿ ïîÿâèëîñü íåñêîëüêî óëó÷øåíèé, íà êîòîðûõ õîòåëîñü áû çàîñòðèòü âàøå âíèìàíèå. Ðàíåå âî âðåìÿ îáíîâëåíèÿ SQL Server íåîáõîäèìî áûëî òàêæå âûïîëíÿòü ñîîòâåòñòâóþùåå îáíîâëåíèå ïðîôàéëåðà. Èíà÷å èíôîðìàöèÿ, îòîáðàæàåìàÿ ïðîôàéëåðîì, â ëó÷øåì ñëó÷àå áóäåò íåêîððåêòíà, à â õóäøåì ïðîôàéëåð íå áóäåò ðàáîòàòü. Ïîäîáíàÿ çàâèñèìîñòü âåðñèè óòèëèòû îò âåðñèè SQL Server òðåáîâàëà ïðèñòàëüíîãî âíèìàíèÿ ñî ñòîðîíû àäìèíèñòðàòîðîâ. Ñ âûõîäîì SQL Server 2005 ýòà çàâèñèìîñòü èñ÷åçëà, ïîñêîëüêó èíôîðìàöèÿ òåïåðü õðàíèòñÿ íå â òàáëèöàõ SQL Server, à â XML-ôàéëàõ. Áëàãîäàðÿ
3.3. Ñðåäñòâà óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè
89
ýòîìó íàñòðîå÷íàÿ èíôîðìàöèÿ íå çàâèñèò îò âåðñèè SQL Server, à ñëåäîâàòåëüíî, íå òðåáóåò îáíîâëåíèÿ ïðîôàéëåðà âìåñòå ñ îáíîâëåíèåì SQL Server. Ïðîôàéëåð ðàáîòàåò â ñëó÷àå îáíîâëåíèÿ ñëåäóþùèì îáðàçîì: âî âðåìÿ çàïóñêà îí èíèöèèðóåò ñîåäèíåíèå ñ ñóùåñòâóþùèì ñåðâåðîì SQL è ïðîâåðÿåò åãî âåðñèþ. Åñëè ýòî îêàçàëàñü ñòàðàÿ âåðñèÿ, ñ êîòîðîé ðàíåå ðàáîòàë ïðîôàéëåð, òî îí ïîëó÷àåò ñîîòâåòñòâóþùóþ èíôîðìàöèþ è ñòàíîâèòñÿ äîñòóïåí äëÿ âûïîëíåíèÿ äåéñòâèé. Åñëè æå âåðñèÿ SQL Server èçìåíèëàñü, òî ïðîôàéëåð âûïîëíÿåò çàãðóçêó íîâûõ íàñòðîåê â ôîðìàòå XML. Ïîñëå âûïîëíåíèÿ çàãðóçêè íàñòðîå÷íîé èíôîðìàöèè ïðîôàéëåð ñòàíîâèòñÿ äîñòóïåí äëÿ ðàáîòû.
3.3.2. Ïðîôèëè ñåðâèñîâ àíàëèòèêè Îäíèì èç íàèáîëåå çíà÷èìûõ èçìåíåíèé â íîâîé âåðñèè ïðîôàéëåðà ÿâëÿåòñÿ âîçìîæíîñòü âûïîëíåíèÿ MDX-çàïðîñîâ ê ñåðâèñó àíàëèòèêè. Âûïîëíåíèå ïîäîáíûõ çàïðîñîâ ñåðâèñîì àíàëèòèêè ïðîèñõîäèò òî÷íî òàêèì æå îáðàçîì, ÷òî è âûïîëíåíèå îáû÷íîãî SQL-çàïðîñà ÿäðîì SQL Server 2005.
3.3.3. Àãðåãèðîâàííûå ïðåäñòàâëåíèÿ Àãðåãèðîâàííûå ïðåäñòàâëåíèÿ ïðîôàéëåðà SQL Server 2005 ïîçâîëÿþò ðàçðàáîò÷èêàì è àäìèíèñòðàòîðàì âûïîëíÿòü ãðóïïèðîâêó ñîáûòèé äëÿ îòîáðàæåíèÿ èõ îáùåãî êîëè÷åñòâà è óïðîùåíèÿ ðàáîòû ñ íèìè. Íàïðèìåð, âû ìîæåòå ïðîñìîòðåòü ñîáûòèÿ ïðîôàéëåðà ñîãëàñíî êîäàì ïðîöåññîâ (SPID — system process ID), à òàêæå ñîáûòèÿì ñõîäà â ñèñòåìó. Ýòî ïîçâîëèò ñîïîñòàâèòü âõîä â ñèñòåìó ñ êîäîì ïðîöåññà. Òàêæå àãðåãèðîâàííûå ïðåäñòàâëåíèÿ ïðåäîñòàâëÿþò èíôîðìàöèþ äëÿ îöåíêè òåíäåíöèé è ñîáûòèé áåç íåîáõîäèìîñòè ïîñòðîåíèÿ ãðàôèêîâ è âûãðóçêè ðåçóëüòàòîâ ðàáîòû ïðîôàéëåðà â òàáëèöó ñ öåëüþ äàëüíåéøåãî àíàëèçà.
3.3.4. Íàáîð ðàçðåøåíèé äëÿ òðàññèðîâêè Åùå îäíî ïðåèìóùåñòâî, êîòîðîå ïîÿâèëîñü â ïðîôàéëåðå, — ýòî âîçìîæíîñòü òðàññèðîâêè çàïðîñîâ è óïðàâëåíèÿ ïðàâàìè íà âûïîëíåíèå ýòîé îïåðàöèè. Äëÿ òîãî ÷òîáû óïðàâëÿòü ïðàâàìè íà òðàññèðîâêó âûïîëíåíèÿ çàïðîñîâ ñ ïîìîùüþ ïðîôàéëåðà, íåîáõîäèìî èìåòü ïðèâèëåãèè ñèñòåìíîãî àäìèíèñòðàòîðà. Äëÿ âûïîëíåíèÿ òðàññèðîâêè çàïðîñîâ â SQL Server 2005 ïðåäóñìîòðåíà ðîëü Trace. Ýòó ðîëü ìîæíî ñâÿçàòü ñ ñîîòâåòñòâóþùåé ó÷åòíîé çàïèñüþ ïîëüçîâàòåëÿ, êîòîðûé áóäåò âûïîëíÿòü òðàññèðîâêó ñ ïîìîùüþ ïðîôàéëåðà.  ýòîì ñëó÷àå ïîëüçîâàòåëþ íåò íåîáõîäèìîñòè âõîäèòü â ñîñòàâ ãðóïïû ñèñòåìíûõ àäìèíèñòðàòîðîâ, ÷òîáû âûïîëíÿòü òðàññèðîâêó. Äëÿ ýòîãî íåîáõîäèìî òîëüêî äîáàâèòü åãî ó÷åòíóþ çàïèñü â ãðóïïó Trace.
3.3.5. Èçâëå÷åíèå äàííûõ ñîãëàñíî èõ òèïó Ïðîôàéëåð SQL Server 2005 èìååò îäíó èíòåðåñíóþ îñîáåííîñòü: îí ìîæåò âûïîëíÿòü çàïðîñû ïî-ðàçíîìó â çàâèñèìîñòè îò òèïà ñîáûòèÿ. Íàïðèìåð, ìîæåò ïîòðåáîâàòüñÿ èçâëå÷ü âñå êîìàíäû SQL èç îïðåäåëåííîé ñåññèè è çàïèñàòü
90
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
èõ â îòäåëüíûé SQL-ôàéë ñ öåëüþ äàëüíåéøåãî àíàëèçà â SQL Server Management Studio. Àíàëîãè÷íîå äåéñòâèå ìîæíî âûïîëíèòü òàêæå â îòíîøåíèè MDX- è DMXçàïðîñîâ. Ïîìèìî ýòîãî âû òàêæå ìîæåòå èçâëåêàòü èç ñåññèè áëîêèðîâî÷íûå çàïðîñû è àíàëèçèðîâàòü èõ äåéñòâèå íà ñèñòåìó. Ýòî ïðåäîñòàâëÿåò ðàçðàáîò÷èêàì è àäìèíèñòðàòîðàì äîïîëíèòåëüíûå ñðåäñòâà äëÿ àíàëèçà ðàáîòû SQL Server è îïòèìèçàöèè çàïðîñîâ.
3.3.6. Óòèëèòà Create Trace Wizard Ìàñòåð òðàññèðîâêè (óòèëèòà Create Trace Wizard) — ýòî åùå îäíî ïðåèìóùåñòâî SQL Server 2005. Îí ïðèñóòñòâîâàë â áîëåå ðàííèõ âåðñèÿõ SQL Server, íà÷èíàÿ ñ âåðñèè 7.0. Îäíàêî â SQL Server 2000 ðàçðàáîò÷èêè îòêàçàëèñü îò íåãî. Òåïåðü îíè ðåøèëè âåðíóòüñÿ íà êðóãè ñâîÿ è âîçðîäèòü äàííóþ óòèëèòó. Ìàñòåð òðàññèðîâêè ïîçâîëÿò óïðîñòèòü ïðîöåññ òðàññèðîâêè çàïðîñîâ, ïðåäîñòàâëÿÿ àäìèíèñòðàòîðó íàáîð ýòàïîâ, ïðîéäÿ êîòîðûå îí ñìîæåò íàñòðîèòü òðàññèðîâêó çàïðîñîâ SQL Server.
3.3.7. Ðåäàêòîð çàïðîñîâ SQL SMS  ïðåäûäóùèõ âåðñèÿõ SQL Server ðîëü ðåäàêòîðà çàïðîñîâ âûïîëíÿë àíàëèçàòîð çàïðîñîâ (Query Analyzer). Ýòî ïðèëîæåíèå èìåëî âîçìîæíîñòü â ãðàôè÷åñêîì âèäå îòîáðàæàòü ïëàí âûïîëíåíèÿ çàïðîñîâ, ÷òî óïðîùàëî ñîçäàíèå ñëîæíûõ çàïðîñîâ è èõ âûïîëíåíèå. Ñ ïîìîùüþ ãðàôè÷åñêîãî îòîáðàæåíèÿ ïëàíà çàïðîñîâ ìîæíî áûëî ëåãêî êîíòðîëèðîâàòü õîä èõ âûïîëíåíèÿ, à ïðè íåîáõîäèìîñòè îòëàæèâàòü. Íîâàÿ óòèëèòà òàêæå ïîçâîëÿåò àâòîìàòèçèðîâàòü âûïîëíåíèå çàïðîñîâ è ïðåäñòàâèòü èõ â ãðàôè÷åñêîì âèäå. Ïîìèìî ýòîãî ðåäàêòîð çàïðîñîâ SQL Server Management Studio ïîçâîëÿåò ñîçäàâàòü ïðåäïîëàãàåìûé ïëàí âûïîëíåíèÿ çàïðîñà, êîòîðûé â îáùåì ñëó÷àå ìîæåò îòëè÷àòüñÿ îò ðåàëüíîãî. Îáùèé âèä ðåäàêòîðà çàïðîñîâ SQL SMS ïðèâåäåí íà ðèñ. 3.7. Ïîìèìî âîçìîæíîñòè ñîçäàâàòü ïðåäïîëàãàåìûå ïëàíû âûïîëíåíèÿ çàïðîñîâ â ðåäàêòîðå çàïðîñîâ ïîÿâèëàñü âîçìîæíîñòü âûäåëåíèÿ öâåòîì êîìàíä, èìåí ïåðåìåííûõ, õðàíèìûõ ïðîöåäóð è ïîëüçîâàòåëüñêèõ ôóíêöèé. Ýòî çíà÷èòåëüíî óïðîùàåò ïðîöåññ ðàçðàáîòêè ïðèëîæåíèé.  ðåäàêòîðå çàïðîñîâ èñïîëüçóåòñÿ ñëåäóþùàÿ öâåòîâàÿ ïàëèòðà äëÿ âûäåëåíèÿ ðàçëè÷íûõ êîìàíä: · æåëòûé — äëÿ âûäåëåíèÿ êóðñîðà; · çåëåíûé — äëÿ âûäåëåíèÿ êîíñòðóêöèé íà SQL; · ñèíèé — äëÿ èòåðàòîðîâ. Çíà÷åíèÿ ïåðåìåííûõ, êîòîðûå èñïîëüçîâàëèñü äëÿ ïàðàìåòðèçàöèè çàïðîñîâ, áóäóò îòîáðàæàòüñÿ â îêíå Showplan. Ýòî ïîçâîëÿåò â èíòåðàêòèâíîì ðåæèìå ïðîñìàòðèâàòü ñîäåðæèìîå ïàðàìåòðîâ. Òàêæå äàííàÿ èíôîðìàöèÿ ìîæåò ñîäåðæàòü èíôîðìàöèþ î òîì, ÷òî ðàçðàáîò÷èêîì èñïîëüçóþòñÿ ðàñøèðåíèÿ (UDX) â êà÷åñòâå ÷àñòè çàïðîñà.  îòëè÷èå îò àíàëèçàòîðà çàïðîñîâ, ðåäàêòîð çàïðîñîâ ïîçâîëÿåò âûïîëíÿòü ýêñïîðò ñîçäàííûõ çàïðîñîâ è ïëàíîâ èõ âûïîëíåíèÿ. Äëÿ ñîõðàíåíèÿ ïëàíà âûïîëíåíèÿ çàïðîñà èñïîëüçóåòñÿ XML-äîêóìåíò. Ýòîò äîêóìåíò âïîñëåäñòâèè ìîæåò
3.3. Ñðåäñòâà óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè
91
áûòü îòïðàâëåí äðóãîìó ðàçðàáîò÷èêó äëÿ îáìåíà îïûòîì èëè èìïîðòèðîâàíèÿ â ñèñòåìó. Äëÿ òîãî ÷òîáû èìïîðòèðîâàòü äàííûé ôàéë â äðóãóþ ñèñòåìó, íå òðåáóåòñÿ èìåòü ïîäîáíóþ áàçó äàííûõ. Íåñìîòðÿ íà ïîÿâëåíèå íîâîãî ôîðìàòà äëÿ õðàíåíèÿ ïëàíîâ âûïîëíåíèÿ, ñòàðûé ôîðìàò (òåêñò ñ ãðàôèêîé) òàêæå ïîääåðæèâàåòñÿ.
Ðèñ. 3.7. Ïëàí âûïîëíåíèÿ çàïðîñà â SQL Server Management Studio
3.3.8. Óòèëèòà Database Tuning Advisor Åùå îäíèì íîâîââåäåíèåì SQL Server 2005 ÿâëÿåòñÿ óòèëèòà Database Tuning Advisor, êîòîðàÿ ïîçâîëÿåò íàñòðàèâàòü ïðîèçâîäèòåëüíîñòü ïðèëîæåíèé, ðàáîòàþùèõ ñ áàçîé äàííûõ Microsoft SQL. Íà ñàìîì äåëå ýòî íå íîâûé ïðîäóêò, à óëó÷øåííàÿ âåðñèÿ ïðîãðàììíîãî ïðîäóêòà, êîòîðûé ðàíåå áûë èçâåñòåí ïîä íàçâàíèåì «Index Tuning Wizard». Ýòà óòèëèòà ïîçâîëÿëà íàñòðàèâàòü èíäåêñû òàáëèö äëÿ óëó÷øåíèÿ îáùåé ïðîèçâîäèòåëüíîñòè ñèñòåìû. Database Tuning Advisor íè÷åì íå îòëè÷àåòñÿ îò ñâîåãî ïðåäêà, ïåðåíèìàÿ îñíîâíóþ ôóíêöèîíàëüíîñòü Index Tuning Wizard, îäíàêî ïîçâîëÿåò íå òîëüêî íàñòðàèâàòü èíäåêñû. Ñðåäè ôóíêöèé Database Tuning Advisor ñòîèò âûäåëèòü ñëåäóþùèå: · ñîçäàíèå è íàñòðîéêà ðàçäåëîâ; · âûïîëíåíèå èíäåêñèðîâàíèÿ ïî ðàñïèñàíèþ; · óëó÷øåííûå ôóíêöèè WHATIF-àíàëèçà. Òåïåðü óòèëèòà Database Tuning Advisor ïðåäñòàâëÿåò ñîáîé ïîëíîöåííîå ïðèëîæåíèå, à íå íàáîð ðàçíîðîäíûõ èíñòðóìåíòîâ è äèàëîãîâ, êàê ýòî áûëî ñ Index Tuning Wizard. Îáùèé âèä îêíà Database Tuning Advisor ïðèâåäåí íà ðèñ. 3.8.
92
Ãëàâà 3 • Óòèëèòû è ñðåäñòâà àäìèíèñòðèðîâàíèÿ áàç äàííûõ
Ðèñ. 3.8. Îáùèé âèä îêíà óòèëèòû Database Tuning Advisor
3.3.9. Óïðàâëåíèå ðàçäåëàìè â Database Tuning Advisor Ïîìèìî ïîääåðæêè èíäåêñîâ óòèëèòà Database Tuning Advisor ïîçâîëÿåò ñîçäàâàòü è íàñòðàèâàòü ðàçäåëû áàçû äàííûõ SQL Server 2005. Ïðè ýòîì â Database Tuning Advisor ìîæíî èñïîëüçîâàòü êàê íàñòðîåííûå ðàçäåëû, òàê è íåíàñòðîåííûå (íàñòðîåííûé ðàçäåë èñïîëüçóåò ãðóïïîâîé èíäåêñ, êîòîðûé èìååò òîò æå ïîðÿäîê ñòðîê, ÷òî è òàáëèöà; íåíàñòðîåííûé ðàçäåë èñïîëüçóåò íåãðóïïîâîé èíäåêñ, â êîòîðîì ïîðÿäîê çàïèñåé îòëè÷àåòñÿ îò ïîðÿäêà â èíäåêñèðóåìîé òàáëèöå). Ïîìèìî âîçìîæíîñòè ñîçäàíèÿ è íàñòðîéêè ðàçäåëà óòèëèòà Database Tuning Advisor ìîæåò áûòü èñïîëüçîâàíà äëÿ óäàëåíèÿ îòäåëüíûõ ðàçäåëîâ, â êîòîðûõ íåò íåîáõîäèìîñòè. Áîëåå äåòàëüíî äàííóþ óòèëèòó, à òàêæå ìåõàíèçì èñïîëüçîâàíèÿ ðàçäåëîâ ìû ðàññìîòðåëè â ðàçäåëå 3.3.8 «Óòèëèòà Database Tuning Advisor» äàííîé êíèãè.
3.3.10. Ïðèîñòàíîâêà ðàáîòû â Database Tuning Advisor Ïðåäîê óòèëèòû Database Tuning Advisor ðàáîòàë â îäíîîêîííîì ðåæèìå, ÷òî ïîçâîëÿëî çàïóñòèòü òîëüêî îäèí ìàñòåð íàñòðîéêè èíäåêñà. Â ýòîì ïðèëîæåíèè íå áûëî âîçìîæíîñòè ïðèîñòàíîâèòü ðàáîòó ìàñòåðà èëè çàïóñêàòü åãî çàíîâî. Â íîâîé âåðñèè ýòîãî ïðîäóêòà ïîÿâèëàñü âîçìîæíîñòü ïðèîñòàíàâëèâàòü ðàáîòó ìàñòåðà è çàïóñêàòü åãî çàíîâî. Ïîìèìî ýòîãî ïðîäîëæèòü âûïîëíåíèå ðàáîòû Database Tuning Advisor òàêæå ìîæíî íà äðóãîì êîìïüþòåðå, ÷òî óïðîùàåò ïðîöåññ àäìèíèñòðèðîâàíèÿ.
3.3. Ñðåäñòâà óâåëè÷åíèÿ ïðîèçâîäèòåëüíîñòè
93
3.3.11. Íàñòðîéêà ïî ðàñïèñàíèþ Óòèëèòà Database Tuning Advisor ïîääåðæèâàåò íåñêîëüêî ðàñïðîñòðàíåííûõ ñöåíàðèåâ ðàáîòû ñ ðàñïèñàíèåì. Òàê æå êàê è Index Tuning Wizard, ýòà óòèëèòà ìîæåò ðàáîòàòü íà ïðîòÿæåíèè äëèòåëüíûõ ïåðèîäîâ âðåìåíè, êîòîðûå îáû÷íî òðåáóþòñÿ äëÿ íàñòðîéêè èíäåêñîâ. Íà ïðîòÿæåíèè ýòîãî âðåìåíè Database Tuning Advisor âûïîëíèò îïòèìàëüíîå èíäåêñèðîâàíèå âûáðàííûõ òàáëèö. Îäíàêî âîñïîëüçîâàòüñÿ ðàñïèñàíèåì òàêæå ìîæíî è â äðóãîì íàïðàâëåíèè. Ñ ïîìîùüþ ðàñïèñàíèÿ ìîæíî çàäàòü ïðîìåæóòîê âðåìåíè, íà ïðîòÿæåíèè êîòîðîãî áóäåò ðàáîòàòü Database Tuning Advisor. Ïî èñòå÷åíèè ýòîãî âðåìåíè óòèëèòà âûïîëíèò íàèëó÷øåå èíäåêñèðîâàíèå òàáëèö, êîòîðîå ìîæåò áûòü äîñòèæèìî çà ýòîò ïðîìåæóòîê âðåìåíè. Èíûìè ñëîâàìè, íàñòðàèâàÿ ðàñïèñàíèå, âû îãðàíè÷èâàåòå ðàáîòó óòèëèòû Database Tuning Advisor âî âðåìåíè è óõóäøàåòå ðåçóëüòàòû åå ðàáîòû.
3.3.12. Ïîääåðæêà ìåòîäèêè WHATIF Åùå îäíî ïðåèìóùåñòâî óòèëèòû Database Tuning Advisor — ýòî âîçìîæíîñòü íàñòðàèâàòü ïðèëîæåíèÿ, èñïîëüçóÿ ìåòîäèêó WHATIF. Ýòî ïîçâîëÿåò ðàçðàáîò÷èêàì âûïîëíÿòü òåñòèðîâàíèå ñîçäàííîãî ñöåíàðèÿ ñîãëàñíî óñòàíîâëåííûì ïàðàìåòðàì, à òàêæå èçìåíÿòü ýòè ïàðàìåòðû ñîãëàñíî ïîòðåáíîñòÿì ðåøàåìûõ áèçíåñ-çàäà÷. Ïóñòü, íàïðèìåð, ñîãëàñíî òðåáîâàíèÿì êëèåíòà, äëÿ êîòîðîãî ðàçðàáàòûâàåòñÿ ðåøåíèå, íåîáõîäèìî âûïîëíèòü èíäåêñèðîâàíèå òàáëèö, îäíàêî âàø îïûò ïîäñêàçûâàåò, ÷òî ïîäîáíîå èíäåêñèðîâàíèå íå óëó÷øèò ñêîðîñòü ðàáîòû áàçû äàííûõ è âûïîëíåíèå çàïðîñîâ. Èñïîëüçóÿ ìåòîäèêó WHATIF, âû ñìîæåòå ëåãêî ïðîòåñòèðîâàòü ðàáîòó ïðèëîæåíèÿ â ñëó÷àå èñïîëüçîâàíèÿ èíäåêñà, ïðè ýòîì íå íàñòðàèâàÿ åãî.
Áðîêåð çàïðîñîâ SQL Server
4
Áðîêåð ñåðâèñîâ Microsoft SQL Server — ýòî íîâàÿ ïîäñèñòåìà, êîòîðàÿ ïîçâîëÿåò ðåàëèçîâàòü ìåõàíèçì î÷åðåäè çàïðîñîâ ê îäíîìó èç ñåðâèñîâ è äîáàâèòü ôóíêöèîíàëüíîñòü óïðàâëåíèÿ äàííîé î÷åðåäüþ. Àñèíõðîííîå óïðàâëåíèå î÷åðåäüþ äîáàâëÿåò äîïîëíèòåëüíûé óðîâåíü ãèáêîñòè ïðèëîæåíèÿì Microsoft SQL Server 2005. Ðàíåå ïîäîáíûå ïîäñèñòåìû ñóùåñòâîâàëè â äðóãèõ ñèñòåìàõ óïðàâëåíèÿ áèçíåñ-ïðîöåññàìè è îáðàáîòêè çàïðîñîâ ïîëüçîâàòåëåé, âåá-ñåðâåðàõ, ñèñòåìàõ ââîäà-âûâîäà è äð.  íîâîé âåðñèè SQL Server ñïåöèàëèñòû Microsoft ðåøèëè äîáàâèòü ýòó ôóíêöèîíàëüíîñòü äàííîìó ïðîãðàììíîìó ðåøåíèþ. Äîáàâëåíèå ôóíêöèîíàëüíîñòè óïðàâëåíèÿ î÷åðåäÿìè â SQL Server 2005 ïîçâîëèëî îáðàáàòûâàòü àñèíõðîííî ïîñòóïàþùèå çàïðîñû è óïðàâëÿòü ïðîöåññîì èõ îáðàáîòêè. Ýòî, â ïåðâóþ î÷åðåäü, ïîçâîëÿåò áîëåå ãèáêî ðàñïðåäåëÿòü ïèêîâûå íàãðóçêè íà áàçó äàííûõ, òåì ñàìûì ïîâûøàÿ óðîâåíü óïðàâëÿåìîñòè â ïðèëîæåíèÿõ Microsoft SQL Server 2005. Óïðàâëåíèå î÷åðåäüþ ÿâëÿåòñÿ âàæíûì ïàðàìåòðîì, êîòîðûé ó÷èòûâàåòñÿ ïðè ìàñøòàáèðîâàíèè ñèñòåì. Îí ïîçâîëÿåò ïðèëîæåíèÿì îáðàáàòûâàòü áîëüøåå êîëè÷åñòâî ïîñòóïàþùèõ îò ïîëüçîâàòåëåé çàïðîñîâ, ÷åì ñèñòåìà ôèçè÷åñêè ìîæåò èõ îáðàáîòàòü. Äàííûå çàïðîñû êýøèðóþòñÿ è ïîìåùàþòñÿ â î÷åðåäü. Êîãäà ïðèëîæåíèå îñâîáîäèòñÿ è áóäåò ñïîñîáíî îáðàáîòàòü äàííûå çàïðîñû, îíè äîñòàþòñÿ èç êýøà è ïåðåäàþòñÿ íà îáðàáîòêó ñåðâèñó. Ïðîèëëþñòðèðóåì ïðåèìóùåñòâà î÷åðåäè çàïðîñîâ íà ïðèìåðå. Íàïðèìåð, èìååòñÿ âåá-ñåðâåð ñ äîñòàòî÷íî áîëüøèì êîëè÷åñòâîì ïîëüçîâàòåëåé. Êàæäûé èç ýòèõ ïîëüçîâàòåëåé ïûòàåòñÿ ïîëó÷èòü îïðåäåëåííóþ èíôîðìàöèþ ñ âåá-ñåðâåðà (âåá-ñòðàíèöû, ôàéëû è äðóãèå äàííûå). Êîëè÷åñòâî ïîäîáíûõ ïîëüçîâàòåëåé íàñòîëüêî âåëèêî, ÷òî âåá-ñåðâåð íå ìîæåò ôèçè÷åñêè îáñëóæèòü èõ çàïðîñû.  ýòîì ñëó÷àå áîëüøàÿ ÷àñòü ïîëüçîâàòåëåé, êîòîðûå íå ñìîãëè ïîäêëþ÷èòüñÿ ê ñåðâåðó, ïîëó÷èò ñîîáùåíèå î òîì, ÷òî ñåðâåð íåäîñòóïåí. Åñëè æå èñïîëüçóåòñÿ î÷åðåäü çàïðîñîâ, âåá-ñåðâåð ïîìåùàåò âñå ïîñòóïàþùèå çàïðîñû â î÷åðåäü è âûïîëíÿåò èõ îáðàáîòêó ñîãëàñíî ïîëîæåíèþ â î÷åðåäè. ×òî êàñàåòñÿ áðîêåðà
4.1. Îáçîð áðîêåðà çàïðîñîâ
95
îïðåäåëåííîãî ñåðâèñà, òî îí áóäåò âûïîëíÿòü ïîñòàíîâêó â î÷åðåäü çàïðîñîâ, ïîñòóïàþùèõ ñåðâèñó, ñ öåëüþ èõ ïîñëåäóþùåé îáðàáîòêè.  äàííîé ãëàâå ìû ðàññìîòðèì âîçìîæíîñòè, ðåàëèçóåìûå áðîêåðîì ñåðâèñîâ SQL Server 2005, èçó÷èì äàííóþ ïîäñèñòåìó, à òàêæå êîìïîíåíòû, âõîäÿùèå â åå ñîñòàâ, è âîçìîæíîñòè, ïðåäîñòàâëÿåìûå åþ äëÿ ðàçðàáîò÷èêîâ è ïîëüçîâàòåëåé. Ïîñëå òîãî êàê ìû âûïîëíèì îáçîð áðîêåðà çàïðîñîâ è èçó÷èì òàêèå áàçîâûå ïîíÿòèÿ áðîêåðà çàïðîñîâ SQL Server, êàê î÷åðåäè, äèàëîãè è ãðóïïû âçàèìîäåéñòâèÿ, ìû ðàññìîòðèì âîçìîæíîñòè àêòèâàöèè áðîêåðà çàïðîñîâ, èçó÷èì ïðîöåññ åãî àäìèíèñòðèðîâàíèÿ ñ öåëüþ íàñòðîéêè ïàðàìåòðîâ áåçîïàñíîñòè è ñèñòåìíûõ ïàðàìåòðîâ.  êîíöå ãëàâû ìû ðàññìîòðèì íåñêîëüêî ïðèìåðîâ ñîçäàíèÿ ïðèëîæåíèé ñ èñïîëüçîâàíèåì ôóíêöèîíàëüíîñòè áðîêåðà çàïðîñîâ SQL Server.
4.1. Îáçîð áðîêåðà çàïðîñîâ Áðîêåð ñåðâèñîâ SQL Server ïîçâîëÿåò âûïîëíÿòü îáðàáîòêó î÷åðåäåé. Ýòà âîçìîæíîñòü âñòðîåíà â ÿäðî SQL Server 2005 è âûïîëíÿåòñÿ íà îñíîâå òðàíçàêöèîííîé ìîäåëè. Ýòî îçíà÷àåò, ÷òî â òîì ñëó÷àå, åñëè òðàíçàêöèÿ îáðàáîòêè î÷åðåäè íå ìîæåò áûòü âûïîëíåíà äî êîíöà (íàïðèìåð, èç-çà âîçíèêíîâåíèÿ îøèáîê), îíà ôèêñèðóåòñÿ è îòêàòûâàåòñÿ äî ïðåäûäóùåãî ñîñòîÿíèÿ. Äëÿ äîñòóïà ê ôóíêöèîíàëüíîñòè áðîêåðà ñåðâèñîâ SQL Server èñïîëüçóåòñÿ íàáîð êîìàíä SQL. Äàëåå â äàííîì ðàçäåëå ìû ðàññìîòðèì íåñêîëüêî ïðèìåðîâ ñ èñïîëüçîâàíèåì ýòèõ êîìàíä. Áîëåå òîãî, áðîêåð ñåðâèñîâ òàêæå ïîääåðæèâàåò ìåõàíèçì äîñòàâêè ñîîáùåíèé äëÿ óäàëåííîé î÷åðåäè. Èíûìè ñëîâàìè, áðîêåð ñåðâèñîâ ìîæåò îáðàáàòûâàòü çàïðîñû î÷åðåäè, êîòîðûå áûëè äîáàâëåíû â íåå óäàëåííûì ïðèëîæåíèåì. Ïîäîáíàÿ ôóíêöèîíàëüíîñòü ìîæåò ïðèìåíÿòüñÿ â òîì ñëó÷àå, åñëè èìååòñÿ ðàñïðåäåëåííàÿ ñèñòåìà ñåðâåðîâ SQL. Ïðè ýòîì ðàçìåð ñîîáùåíèé, ïåðåñûëàåìûõ ÷åðåç ñåòü, ìîæåò áûòü äîñòàòî÷íî áîëüøèì ïî îáúåìó è äîñòèãàòü 2 Ãáàéò. Áðîêåð ñåðâèñîâ ñàìîñòîÿòåëüíî ðàçîáüåò ñîîáùåíèå áîëüøîãî îáúåìà íà áîëåå ìåëêèå êóñêè è ïîñëå ïåðåäà÷è ÷åðåç ñåòü ñîåäèíèò èõ, ÷òîáû ïîëó÷èòü èñõîäíîå ñîîáùåíèå. Ýòî ïîçâîëÿåò äîáàâèòü äîïîëíèòåëüíûé óðîâåíü íàäåæíîñòè â ñèñòåìó ïåðåäà÷è ñîîáùåíèé ÷åðåç ñåòü.  íîâîé âåðñèè SQL Server äîñòóïíû îáå ðåäàêöèè áðîêåðà ñåðâèñîâ — êàê 32-, òàê è 64-ðàçðÿäíàÿ.
4.1.1. Î÷åðåäè Èñïîëüçîâàíèå î÷åðåäåé â ïðèëîæåíèÿõ — ýòî äîñòàòî÷íî ñòàðàÿ èäåÿ, êîòîðàÿ ýêñïëóàòèðóåòñÿ ðàçðàáîò÷èêàìè âî ìíîãèõ ïðèëîæåíèÿõ ðàçëè÷íûõ òèïîâ. Òàêèå òèïû î÷åðåäåé, êàê FIFO (First-In-First-Out) è LIFO (Last-In-First-Out), ÷àñòî èñïîëüçóþòñÿ â ïðèëîæåíèÿõ íèçêîãî óðîâíÿ, à òàêæå â ïðèëîæåíèÿõ, ñîçäàííûõ íà îñíîâå îáúåêòíî-îðèåíòèðîâàííîé ìîäåëè. Ïîäîáíûé îïûò ðàçðàáîòêè ïîçâîëèò ìíîãèì ðàçðàáîò÷èêàì áûñòðåå ðàçîáðàòüñÿ ñ î÷åðåäÿìè ñîîáùåíèé áðîêåðà ñåðâèñîâ SQL Server. Äëÿ òîãî ÷òîáû ðàçîáðàòüñÿ ñ èäååé,
96
Ãëàâà 4 • Áðîêåð çàïðîñîâ SQL Server
çàëîæåííîé â ìåõàíèçìå óïðàâëåíèÿ î÷åðåäüþ áðîêåðà ñåðâèñîâ, ðàññìîòðèì ñëåäóþùèé ïðèìåð (ðèñ. 4.1).
Ðèñ. 4.1. Ïðèìåð î÷åðåäè
Íà ðèñóíêå ïîêàçàí ïðèìåð ãèïîòåòè÷åñêîãî ïðèëîæåíèÿ, êîòîðîå ïîçâîëÿåò îáñëóæèâàòü î÷åðåäü ñîîáùåíèé. Ñ ïîìîùüþ îáû÷íîãî ïðèëîæåíèÿ ìîæíî ïðåäîñòàâèòü êîíå÷íîìó ïîëüçîâàòåëþ âîçìîæíîñòü ñîçäàâàòü ïîäîáíûå ñîîáùåíèÿ, ïîñëå ýòîãî ñîîáùåíèÿ áóäóò óñòàíàâëèâàòüñÿ â î÷åðåäü è îáñëóæèâàòüñÿ ïî ìåðå ïîäõîäà î÷åðåäè èëè ñîãëàñíî óñòàíîâëåííîìó ïðèîðèòåòó ñîîáùåíèÿ. Ïîñëå òîãî êàê ïîëüçîâàòåëü ïîìåñòèò ñâîå ñîîáùåíèå â ñèñòåìó, îíà ñâÿæåòñÿ ñ äðóãîé ñèñòåìîé, êîòîðàÿ âûïîëíÿåò îáðàáîòêó ñîîáùåíèé, è ïåðåäàñò åé íåîáõîäèìûå äàííûå è ïàðàìåòðû ñîîáùåíèÿ. Ïîäîáíîå ïðèëîæåíèå äîëæíî ïîääåðæèâàòü íåïðåðûâíóþ îáðàáîòêó ïîñòóïàþùèõ ñîîáùåíèé. Èíûìè ñëîâàìè, ïîëüçîâàòåëè ìîãóò ðàçìåùàòü ñâîè ñîîáùåíèÿ â ñèñòåìå â ëþáîé ìîìåíò âðåìåíè, äàæå êîãäà ñèñòåìà çàíÿòà îáðàáîòêîé ðàíåå ïîñòóïèâøåãî ñîîáùåíèÿ. Ïîýòîìó íåîáõîäèìî îðãàíèçîâàòü ìåõàíèçì î÷åðåäè, â êîòîðóþ áóäóò ïîìåùàòüñÿ ñîîáùåíèÿ, ïîñòóïàþùèå â òî âðåìÿ, ïîêà ñèñòåìà îáðàáàòûâàåò äðóãîå ñîîáùåíèå.  êà÷åñòâå î÷åðåäè ìîæåò âûñòóïàòü òàáëèöà áàçû äàííûõ, â êîòîðóþ âíîñÿòñÿ íîâûå çàïèñè ïî ìåðå ïîñòóïëåíèÿ ñîîáùåíèé îò ïîëüçîâàòåëåé. Âî âðåìÿ âûïîëíåíèÿ êàêèõ-ëèáî äåéñòâèé íàä ðàíåå ïîñòóïèâøèì ñîîáùåíèåì ñîîòâåòñòâóþùàÿ åìó ñòðîêà â òàáëèöå äîëæíà áëîêèðîâàòüñÿ íà âíåñåíèå èçìåíåíèé. Îäíàêî áëîêèðîâêà ñòðîê ìîæåò â íåêîòîðûõ ñëó÷àÿõ çíà÷èòåëüíî ñêàçûâàòüñÿ íà ñêîðîñòè ðàáîòû ïðèëîæåíèÿ èëè åãî ãèáêîñòè. Äëÿ òîãî ÷òîáû èçáàâèòüñÿ îò ïîäîáíîé çàâèñèìîñòè, íåîáõîäèìî ðàçáèòü ñèñòåìó îáðàáîòêè î÷åðåäè ñîîáùåíèé íà äâå ïîäñèñòåìû: ñèñòåìó îáðàáîòêè çàïðîñîâ ïîëüçîâàòåëåé (front-end) è ñèñòåìó óïðàâëåíèÿ î÷åðåäüþ (back-end). Òàêèì îáðàçîì, íàñòðîèâ ìåæäó ýòèìè ñèñòåìàìè àñèíõðîííûé äîñòóï ê ñîîáùåíèÿì ïîëüçîâàòåëåé, ìîæíî èçáàâèòüñÿ
4.1. Îáçîð áðîêåðà çàïðîñîâ
97
îò áëîêèðîâêè çàïèñåé òàáëèöû ñèñòåìû back-end, òåì ñàìûì óñòðàíèâ çàäåðæêè â åå ðàáîòå. Ïîäîáíûå ñèñòåìû áóäóò ðàáîòàòü â ñâÿçêå ñëåäóþùèì îáðàçîì: · ñèñòåìà îáðàáîòêè çàïðîñîâ, ïîëó÷èâ ñîîáùåíèå îò ïîëüçîâàòåëÿ, ïîìåñòèò åãî â î÷åðåäü; · â î÷åðåäè ñîîáùåíèÿ íàõîäÿòñÿ äðóã çà äðóãîì ñîãëàñíî âðåìåíè èõ ïîñòóïëåíèÿ (ìû èìååì î÷åðåäü òèïà FIFO); · ñèñòåìà óïðàâëåíèÿ î÷åðåäüþ, ðàáîòàÿ â ñâîåì ðåæèìå íåçàâèñèìî îò ñèñòåìû îáðàáîòêè çàïðîñîâ, áóäåò ñ÷èòûâàòü ñîîáùåíèÿ èç î÷åðåäè äðóã çà äðóãîì è âûïîëíÿòü èõ îáðàáîòêó. Òàêèì îáðàçîì, îáå ñèñòåìû íå èìåþò ïðÿìîãî äîñòóïà ê òàáëèöàì äðóã äðóãà, à ñëåäîâàòåëüíî, íå ìåøàþò ðàáîòå äðóã äðóãà.
4.1.2. Äèàëîãè Äèàëîã — ýòî îäèí èç îñíîâíûõ êîìïîíåíòîâ áðîêåðà ñåðâèñîâ SQL Server. Äèàëîã ïðåäîñòàâëÿåò ïîëüçîâàòåëþ âîçìîæíîñòü âûïîëíÿòü îáìåí ñîîáùåíèÿìè ìåæäó äâóìÿ êîíå÷íûìè ñèñòåìàìè íåñêîëüêèìè ñïîñîáàìè.  êà÷åñòâå êîíå÷íûõ òî÷åê, ìåæäó êîòîðûìè âûïîëíÿåòñÿ îáìåí ñîîáùåíèÿìè, ìîãóò âûñòóïàòü ïðèëîæåíèÿ, êîòîðûå îïèñàíû â ðàçäåëå 4.1.1 «Î÷åðåäè». Ïðèìåð äèàëîãà ìåæäó äâóìÿ êîíå÷íûìè òî÷êàìè ïîêàçàí íà ðèñ. 4.2.  ýòîì ñëó÷àå â êà÷åñòâå êîíå÷íûõ òî÷åê âûñòóïàþò äâà ñåðâèñà, îáìåíèâàþùèåñÿ ñîîáùåíèÿìè. Êàæäûé èç ñåðâèñîâ èìååò ñâîþ ñîáñòâåííóþ î÷åðåäü îáðàáîòêè ñîîáùåíèé, îäíàêî îí ìîæåò ïåðåäàâàòü ñîîáùåíèÿ äðóãîìó ñåðâèñó äëÿ èõ îáðàáîòêè.  êà÷åñòâå ñîîáùåíèé, íàïðèìåð, ìîãóò âûñòóïàòü íàáîðû äàííûõ î ñîáûòèÿõ, ïðîèçîøåäøèõ â ñèñòåìå. Òàêèì îáðàçîì, áðîêåð ñåðâèñîâ, óïðàâëÿþùèé äèàëîãîì, ìîæåò ðàñïðåäåëÿòü ñîáûòèÿ, âîçíèêøèå â ñèñòåìå, ìåæäó ðàçëè÷íûìè ñåðâèñàìè, êîòîðûå èìåþòñÿ â åãî ðàñïîðÿæåíèè.  òîì ñëó÷àå, åñëè îäíî èç ïðèëîæåíèé áóäåò îñòàíîâëåíî ïî êàêîé-ëèáî ïðè÷èíå, äðóãîå ïðèëîæåíèå ìîæåò ïðîäîëæàòü îáðàáîòêó ñîîáùåíèé. Äèàëîã ìîæåò áûòü íàñòðîåí íà ïåðåäà÷ó ñîîáùåíèé êàê â äóïëåêñíîì ðåæèìå, òàê è â ïîëóäóïëåêñíîì.
Ðèñ. 4.2. Ïðèìåð äèàëîãà ìåæäó äâóìÿ ñåðâèñàìè
98
Ãëàâà 4 • Áðîêåð çàïðîñîâ SQL Server
4.1.3. Àêòèâàöèÿ áðîêåðà çàïðîñîâ SQL Server Àêòèâàöèÿ áðîêåðà çàïðîñîâ SQL Server — ýòî èíòåðåñíàÿ îñîáåííîñòü äàííîé ïîäñèñòåìû. Àêòèâàöèÿ ïîäðàçóìåâàåò ñîçäàíèå õðàíèìîé ïðîöåäóðû è åå ñâÿçûâàíèå ñ îïðåäåëåííîé î÷åðåäüþ áðîêåðà ñåðâèñîâ.  ýòîì ñëó÷àå õðàíèìàÿ ïðîöåäóðà áóäåò âûïîëíÿòü îáðàáîòêó ñîîáùåíèé, íàõîäÿùèõñÿ â äàííîé î÷åðåäè. Êàê òîëüêî íîâîå ñîîáùåíèå áóäåò ïîìåùàòüñÿ â î÷åðåäü, ñâÿçàííàÿ ñ î÷åðåäüþ ïðîöåäóðà áóäåò àâòîìàòè÷åñêè âûïîëíÿòüñÿ äëÿ îáðàáîòêè ïîñòóïèâøåãî ñîîáùåíèÿ.  òîì ñëó÷àå, åñëè âûïîëíåíèå õðàíèìîé ïðîöåäóðû ïðîèçîéäåò ñ îøèáêîé, âûïîëíèòñÿ ãåíåðàöèÿ èñêëþ÷èòåëüíîé ñèòóàöèè è ñîîáùåíèå áóäåò îáðàáîòàíî ïîâòîðíî. Áðîêåð ñåðâèñîâ SQL Server ïåðèîäè÷åñêè âûïîëíÿåò ïðîâåðêó ñîñòîÿíèÿ î÷åðåäè. Âî âðåìÿ äàííîé ïðîâåðêè ïðîâåðÿåòñÿ ñòàòóñ õðàíèìîé ïðîöåäóðû íà ïðåäìåò òîãî, îáðàáàòûâàåò ëè îíà ïîñòóïàþùèå ñîîáùåíèÿ. Åñëè áðîêåð ñåðâèñîâ SQL Server îïðåäåëèò, ÷òî â î÷åðåäè íàõîäèòñÿ îäíî èëè íåñêîëüêî ñîîáùåíèé, îæèäàþùèõ îáðàáîòêè, òî îí â àâòîìàòè÷åñêîì ðåæèìå çàïóñòèò äîïîëíèòåëüíûé ýêçåìïëÿð ïðîöåäóðû ñ öåëüþ îáðàáîòêè ñîîáùåíèé, íàõîäÿùèõñÿ â î÷åðåäè. Ýòî ïîçâîëèò óñêîðèòü ïðîöåññ îáðàáîòêè ïîñòóïàþùèõ ñîîáùåíèé è ñïðàâèòüñÿ ñ ïèêîâûìè íàãðóçêàìè. Êîëè÷åñòâî îäíîâðåìåííî âûïîëíÿþùèõñÿ ýêçåìïëÿðîâ ïðîöåäóð îïðåäåëÿåòñÿ ñèñòåìíîé ïåðåìåííîé MAX QUEUEREADERS. Äî òåõ ïîð ïîêà âñå ñîîáùåíèÿ, íàõîäÿùèåñÿ â î÷åðåäè, íå áóäóò îáðàáîòàíû èëè íå áóäåò äîñòèãíóòî çíà÷åíèå MAX QUEUEREADERS, áðîêåð ñåðâèñîâ SQL Server áóäåò çàïóñêàòü äîïîëíèòåëüíûå ýêçåìïëÿðû ïðîöåäóð îáðàáîòêè. Îäíàêî íå ñòîèò óñòàíàâëèâàòü ýòî çíà÷åíèå ñëèøêîì áîëüøèì, ïîñêîëüêó çàïóñê äîïîëíèòåëüíîãî ïðîöåññà ïðîöåäóðû ñêàçûâàåòñÿ íà îáùåé ïðîèçâîäèòåëüíîñòè ñèñòåìû, à ñëåäîâàòåëüíî, çàïóñê áîëüøîãî ÷èñëà îäíîòèïíûõ ïðîöåññîâ ìîæåò ïðèâåñòè ê çíà÷èòåëüíîìó çàìåäëåíèþ ðàáîòû ñåðâåðà. Òàêèì îáðàçîì, íåîáõîäèìî ñáàëàíñèðîâàòü êîëè÷åñòâî îäíîâðåìåííî âûïîëíÿåìûõ ýêçåìïëÿðîâ â ðàñ÷åòå íà ïèêîâûå íàãðóçêè íà ñåðâåð SQL. Äëÿ îïðåäåëåííûõ î÷åðåäåé áðîêåðà ñåðâèñîâ SQL Server íå òðåáóåòñÿ óñòàíàâëèâàòü ñâÿçü ñ õðàíèìûìè ïðîöåäóðàìè. Ýòî äîáàâëÿåò äîïîëíèòåëüíûé óðîâåíü íåçàâèñèìîñòè â îòíîøåíèè ìîäåðíèçàöèè è äîðàáîòêè õðàíèìûõ ïðîöåäóð, êîòîðûå âûïîëíÿþò îáðàáîòêó ñîîáùåíèé î÷åðåäè.  íåêîòîðûõ ñëó÷àÿõ ìîæåò ïîòðåáîâàòüñÿ èñïîëüçîâàòü âíåøíèå ïðîöåäóðû äëÿ îáðàáîòêè ñëîæíûõ ñîîáùåíèé èëè âûïîëíèòü êîìïëåêñíûå äåéñòâèÿ (òàêèå, êîòîðûå íåëüçÿ âûïîëíèòü ñ ïîìîùüþ õðàíèìûõ ïðîöåäóð SQL Server). Ïîäîáíûå âíåøíèå ïðîöåäóðû òðåáóþò ñëîæíîãî ïîäõîäà â îòíîøåíèè êàê ñîçäàíèÿ ïðîöåäóð, òàê è âûðàáîòêè äîïîëíèòåëüíûõ òðåáîâàíèé ê ôîðìàòó ñîîáùåíèé è ñàìîé î÷åðåäè. Ïîìèìî ýòîãî òðåáóåòñÿ, ÷òîáû áðîêåð ñåðâèñîâ SQL Server ìîã â àâòîìàòè÷åñêîì ðåæèìå çàïóñêàòü îòäåëüíûå ýêçåìïëÿðû âíåøíèõ ïðîöåäóð. Äëÿ ðåøåíèÿ ýòîé äîñòàòî÷íî ñëîæíîé ïðîáëåìû îáû÷íî èñïîëüçóåòñÿ îáðàáîòêà ñîáûòèé SQL Server. Îáðàáîòêà ñîáûòèé SQL Server ìîæåò âûïîëíÿòüñÿ, íàïðèìåð, ñ èñïîëüçîâàíèåì WMI (Windows Management Instrumentation).  ýòîì ñëó÷àå âî âðåìÿ ïîñòóïëåíèÿ íîâîãî ñîáûòèÿ SQL Server âûïîëíÿåòñÿ åãî ÷òåíèå ñ èñïîëüçîâàíèåì ïîäïèñ÷èêà WMI.  ñâîþ î÷åðåäü ïîäïèñ÷èê WMI çàïóñêàåò âíåøíþþ ïðîöåäóðó, êîòîðàÿ îòâå÷àåò çà îáðàáîòêó ñîîáùåíèé î÷åðåäè.
4.1. Îáçîð áðîêåðà çàïðîñîâ
99
4.1.4. Ãðóïïû âçàèìîäåéñòâèÿ Åùå îäíèì êëþ÷åâûì ïîíÿòèåì áðîêåðà ñåðâèñîâ SQL Server ÿâëÿåòñÿ ãðóïïà âçàèìîäåéñòâèÿ. Ãðóïïà âçàèìîäåéñòâèÿ — ýòî íàáîð ñâÿçàííûõ äðóã ñ äðóãîì äèàëîãîâ áðîêåðà ñåðâèñîâ. Ãðóïïà âçàèìîäåéñòâèÿ èñïîëüçóåòñÿ â òåõ ñëó÷àÿõ, êîãäà â ñèëó àðõèòåêòóðû ïðèëîæåíèþ òðåáóåòñÿ èñïîëüçîâàòü íåñêîëüêî äèàëîãîâ äëÿ îáìåíà ñîîáùåíèÿìè. Èñïîëüçóÿ ãðóïïó âçàèìîäåéñòâèÿ, âû ñìîæåòå ëîãè÷åñêè ñãðóïïèðîâàòü ïîäîáíûå äèàëîãè, ÷òî ïîçâîëèò âûïîëíÿòü îäíîòèïíûå îïåðàöèè íàä íèìè. Íàïðèìåð, â ñëó÷àå ïîñòóïëåíèÿ ñîîáùåíèé ïðèëîæåíèå äîëæíî îáðàáàòûâàòü èõ ñîãëàñíî ïàðàìåòðàì îòäåëüíî âçÿòîãî äèàëîãà.  ïåðâîì ñëó÷àå ýòî ìîæåò áûòü îáðàáîòêà ñîîáùåíèé ïîëüçîâàòåëÿ, â äðóãîì — îáðàáîòêà ïëàòåæíûõ ïîðó÷åíèé, à â òðåòüåì — ñêëàäñêèõ äîêóìåíòîâ î äîñòàâêå êàêîãî-ëèáî òîâàðà. Âñå àíàëîãè÷íûå äèàëîãè ìîãóò áûòü ñîáðàíû â îäíó ãðóïïó âçàèìîäåéñòâèÿ.  ýòîì ñëó÷àå ãðóïïà âçàèìîäåéñòâèÿ áóäåò ïðåäñòàâëÿòü ñîáîé ëîãè÷åñêè ñãðóïïèðîâàííûå äèàëîãè òðåõ òèïîâ. Íà ðèñ. 4.3 ïîêàçàíà ãðóïïà âçàèìîäåéñòâèÿ, ñîäåðæàùàÿ â ñâîåì ñîñòàâå òðè äèàëîãà.
Ðèñ. 4.3. Ãðóïïà âçàèìîäåéñòâèÿ
Îñíîâíîå ïðåèìóùåñòâî, êîòîðîå ðåàëèçóåòñÿ ñ ïîìîùüþ ãðóïï âçàèìîäåéñòâèÿ, — ýòî ìåõàíèçì áëîêèðîâàíèÿ ñâÿçàííûõ î÷åðåäåé.  ýòîì ñëó÷àå áëîêèðîâàíèå âûïîëíÿåòñÿ íå íà óðîâíå áàç äàííûõ, èñïîëüçóþùèõñÿ äëÿ îáìåíà ñîîáùåíèÿìè, à áëîêèðóþòñÿ ñàìè î÷åðåäè ñ èìåþùèìèñÿ â íèõ ñîîáùåíèÿìè. Òàêèì îáðàçîì, èñïîëüçóÿ ãðóïïó âçàèìîäåéñòâèÿ, ìîæíî áûñòðî âûïîëíÿòü áëîêèðîâêó î÷åðåäåé, âõîäÿùèõ â åå ñîñòàâ.  ñëó÷àå áëîêèðîâàíèÿ î÷åðåäè íè îäèí ïðîöåññ íå ñìîæåò âûïîëíÿòü ÷òåíèå ñîîáùåíèé èç íåå, ïîêà áëîêèðîâêà íå áóäåò ñíÿòà.
100
Ãëàâà 4 • Áðîêåð çàïðîñîâ SQL Server
Ïîìèìî âîçìîæíîñòè áëîêèðîâàòü î÷åðåäü ïîñðåäñòâîì ãðóïïû âçàèìîäåéñòâèÿ òàêæå ðåàëèçóåòñÿ âîçìîæíîñòü óñòàíîâèòü êàêîå-ëèáî ñîñòîÿíèå äëÿ ñèñòåìû. Óñòàíîâêà êàêîãî-ëèáî ñîñòîÿíèÿ äëÿ ñèñòåìû — ýòî îäíà èç íàèáîëåå ñëîæíûõ çàäà÷ â àñèíõðîííîé ñèñòåìå. Ñëîæíîñòü ðåøåíèÿ äàííîé çàäà÷è çàêëþ÷àåòñÿ â òîì, ÷òî â àñèíõðîííîì ðåæèìå îáìåíà ñîîáùåíèÿìè äîñòàòî÷íî ñëîæíî ïîäîáðàòü äëÿ àíñàìáëÿ ïåðåäàò÷èêîâ ìîìåíò, êîãäà îíè áóäóò íàõîäèòüñÿ â îäíîì ñîñòîÿíèè. Äëÿ èäåíòèôèêàöèè ãðóïïû âçàèìîäåéñòâèÿ èñïîëüçóåòñÿ ID. Îí ÿâëÿåòñÿ ïåðâè÷íûì êëþ÷îì, êîòîðûé ïîçâîëÿåò èäåíòèôèöèðîâàòü ñïèñîê î÷åðåäåé, âõîäÿùèõ â ñîñòàâ ãðóïïû.
4.1.5. Ïîääåðæèâàåìûå ïðîòîêîëû Êàê óïîìèíàëîñü â ðàçäåëå 4.1.2 «Äèàëîãè», ñîîáùåíèÿ ðàçëè÷íûõ î÷åðåäåé ìîãóò ïåðåñûëàòüñÿ ÷åðåç ñåòü äëÿ èõ îáðàáîòêè äðóãèì ñåðâèñîì ñ öåëüþ óâåëè÷åíèÿ ñêîðîñòè îáðàáîòêè. Äëÿ ïåðåñûëêè ïîäîáíûõ ñîîáùåíèé èñïîëüçóåòñÿ ñïåöèàëüíûé ïðîòîêîë ïåðåñûëêè ñîîáùåíèé áðîêåðà ñåðâèñîâ SQL Server. Äàííûé ïðîòîêîë îòíîñèòñÿ ê ñòåêó ïðîòîêîëîâ TCP/IP. Ñèñòåìà ïåðåñûëêè ñîîáùåíèé áðîêåðà ñåðâèñîâ SQL Server ïðàêòè÷åñêè íè÷åì íå îòëè÷àåòñÿ îò ñèñòåìû ïåðåäà÷è èíôîðìàöèè, áàçèðóþùåéñÿ íà ïðîòîêîëàõ TCP/IP è FTP. Ïðîòîêîë áðîêåðà ñåðâèñîâ ìîæíî ïðåäñòàâèòü â âèäå äâóõ áîëüøèõ ïîäñèñòåì (ïðîòîêîëîâ): · Binary Adjacent Protocol — ïðîòîêîë íèçêîãî óðîâíÿ (ïîñòðîåííûé íà îñíîâå ïðîòîêîëà TCP); · Dialog Protocol — ïðîòîêîë âûñîêîãî óðîâíÿ, êîòîðûé èñïîëüçóåò â ñâîåé ðàáîòå Binary Adjacent Protocol. Ðàññìîòðèì îáà ýòèõ ïðîòîêîëà áîëåå äåòàëüíî. Binary Adjacent Protocol — ýòî ïðîòîêîë íèçêîãî óðîâíÿ, ïîçâîëÿþùèé âûïîëíÿòü ïåðåäà÷ó ñîîáùåíèé áðîêåðà ñåðâèñîâ. Ýòîò ïðîòîêîë îòíîñèòñÿ ê êëàññó äâóíàïðàâëåííûõ ìóëüòèïëåêñèðîâàííûõ ïðîòîêîëîâ, ïîýòîìó îí ìîæåò ýôôåêòèâíî èñïîëüçîâàòüñÿ äëÿ îäíîâðåìåííîé ïåðåäà÷è ñîîáùåíèé âî âðåìÿ íåñêîëüêèõ äèàëîãîâ áðîêåðà ñåðâèñîâ.  Binary Adjacent Protocol íå èìååòñÿ ìåõàíèçìîâ äëÿ îòñëåæèâàíèÿ î÷åðåäè ïåðåäàâàåìûõ ñîîáùåíèé, à òàêæå ñ åãî ïîìîùüþ âû íå ñìîæåòå ïîäòâåðäèòü äîñòàâêó ñîîáùåíèé. Âñå ýòè ôóíêöèè âîçëîæåíû íà ïðîòîêîë âûñîêîãî óðîâíÿ (Dialog Protocol). Òàêèì îáðàçîì, Binary Adjacent Protocol èñïîëüçóåòñÿ ëèøü äëÿ ïåðåäà÷è ñîîáùåíèé ÷åðåç ñåòü ñîãëàñíî çàäàííûì äèàëîãàì ñ íàèáîëåå äîñòèæèìîé ñêîðîñòüþ. Íà Dialog Protocol âîçëîæåíû ôóíêöèè áîëåå âûñîêîãî óðîâíÿ, ÷åì íà Binary Adjacent Protocol. Ñ åãî ïîìîùüþ âûïîëíÿåòñÿ îáðàáîòêà ñîîáùåíèé ñîãëàñíî çàäàííîìó äèàëîãó. Ïðè ýòîì ó÷èòûâàåòñÿ ïîðÿäîê ñîîáùåíèé, ïðèîðèòåò èõ ïåðåäà÷è, à òàêæå ïîääåðæêà ïåðåäà÷è â îòêðûòîì âèäå. Ïîìèìî ýòîãî ïîääåðæèâàåòñÿ ñèììåòðè÷íàÿ îáðàáîòêà âîçíèêàþùèõ âî âðåìÿ ïåðåäà÷è îøèáîê. Âî âðåìÿ ïîäîáíîé ñèììåòðè÷íîé îáðàáîòêè îáå ñòîðîíû (ïåðåäàþùàÿ è ïðèíèìàþùàÿ) ïîëó÷àþò èíôîðìàöèþ î òîì, ÷òî â ñåòè âî âðåìÿ ïåðåäà÷è ñîîáùåíèÿ âîçíèêëà îøèáêà (íàïðèìåð, êîëëèçèÿ), è ïåðåäà÷ó äàííîãî ïàêåòà èëè âñåãî ñîîáùåíèÿ íåîáõîäèìî ïîâòîðèòü. Åùå îäíîé âàæíîé ôóíêöèåé, êîòîðóþ âûïîëíÿåò Dialog
4.2. Íàñòðîéêà è àäìèíèñòðèðîâàíèå áðîêåðà çàïðîñîâ
101
Protocol, ÿâëÿåòñÿ àóòåíòèôèêàöèÿ ïåðåäàþùåé è ïðèíèìàþùåé ñòîðîíû, à òàêæå øèôðîâàíèå ñîîáùåíèé. Ýòî ïîçâîëÿåò äîáàâèòü íåîáõîäèìûé óðîâåíü áåçîïàñíîñòè â ñèñòåìû ïåðåäà÷è ñîîáùåíèé ÷åðåç ñåòü.
4.2. Íàñòðîéêà è àäìèíèñòðèðîâàíèå áðîêåðà çàïðîñîâ Áðîêåð ñåðâèñîâ SQL Server èìååò íàáîð ïàðàìåòðîâ äëÿ íàñòðîéêè.  äàííîì ðàçäåëå ìû êðàòêî ðàññìîòðèì íåñêîëüêî îñíîâíûõ ïàðàìåòðîâ äëÿ íàñòðîéêè áðîêåðà ñåðâèñîâ SQL Server. Òàêæå ìû ðàññìîòðèì ïàðàìåòðû áåçîïàñíîñòè áðîêåðà çàïðîñîâ è íåñêîëüêî ñèñòåìíûõ ïðåäñòàâëåíèé, ïîçâîëÿþùèõ ïîëó÷èòü äåòàëüíóþ èíôîðìàöèþ îá îáúåêòàõ áðîêåðà ñåðâèñîâ, ïîëüçîâàòåëüñêèõ ïðèëîæåíèÿõ è èõ ïàðàìåòðàõ.
4.2.1. Íàñòðîéêà ïàðàìåòðîâ áðîêåðà çàïðîñîâ Äëÿ íàñòðîéêè áðîêåðà ñåðâèñîâ SQL Server ñóùåñòâóåò íåñêîëüêî ïàðàìåòðîâ. Äëÿ óñòàíîâêè çíà÷åíèé ýòèõ ïàðàìåòðîâ èñïîëüçóåòñÿ ñèñòåìíàÿ õðàíèìàÿ ïðîöåäóðà Sp_configure. Äàíàÿ ïðîöåäóðà èìååò íåñêîëüêî ïàðàìåòðîâ, èñïîëüçóÿ êîòîðûå ìîæíî óñòàíîâèòü íåêîòîðûå ïàðàìåòðû áðîêåðà ñåðâèñîâ SQL Server. Îïèñàíèå ýòèõ ïàðàìåòðîâ ïðèâîäèòñÿ â òàáë. 4.1. Òàáëèöà 4.1. Ïàðàìåòðû õðàíèìîé ïðîöåäóðû Sp_configure ¹
Ïàðàìåòð
Îïèñàíèå
1
Broker authentication port
Ïîçâîëÿåò óñòàíîâèòü ïàðàìåòðû àóòåíòèôèêàöèè ïðè óäàëåííîì ñîåäèíåíèè. Äîïóñêàþòñÿ ñëåäóþùèå çíà÷åíèÿ: 1 — èñïîëüçóåòñÿ àóòåíòèôèêàöèÿ; 2 — àóòåíòèôèêàöèÿ ïîääåðæèâàåòñÿ; 3 — òðåáóåòñÿ àóòåíòèôèêàöèÿ. Ïî óìîë÷àíèþ óñòàíîâëåíî çíà÷åíèå 3
2
Broker forwarding size limit
Ïîçâîëÿåò óñòàíîâèòü ìàêñèìàëüíûé ðàçìåð äèñêîâîãî ïðîñòðàíñòâà â Ìáàéò, êîòîðîå áóäåò èñïîëüçîâàòüñÿ äëÿ õðàíåíèÿ ïåðåñûëàåìûõ ñîîáùåíèé. Ïî óìîë÷àíèþ èñïîëüçóåòñÿ çíà÷åíèå 10 Ìáàéò
3
Broker message forwarding
Ïîçâîëÿåò óñòàíîâèòü òèï ïåðåñûëêè ñîîáùåíèé. Ïîääåðæèâàþòñÿ ñëåäóþùèå çíà÷åíèÿ: 1 — ïåðåñûëêà ñîîáùåíèé íå ðàçðåøåíà; 2 — ïåðåñûëêà ñîîáùåíèé ðàçðåøåíà âíóòðè äîìåíà; 3 — ïåðåñûëêà ñîîáùåíèé ðàçðåøåíà âíåøíåìó ïîëó÷àòåëþ. Ïî óìîë÷àíèþ óñòàíîâëåíî çíà÷åíèå 1
4
Broker tcp listen port
Ïîçâîëÿåò óñòàíîâèòü ïîðò, êîòîðûé áóäåò èñïîëüçîâàòüñÿ áðîêåðîì ñåðâèñîâ SQL Server äëÿ ïåðåäà÷è äàííûõ. Ïî óìîë÷àíèþ èñïîëüçóåòñÿ ïîðò 4022
102
Ãëàâà 4 • Áðîêåð çàïðîñîâ SQL Server
4.2.2. Áåçîïàñíîñòü áðîêåðà çàïðîñîâ  ñèñòåìå èñïîëüçóþòñÿ íåñêîëüêî ïàðàìåòðîâ, êîòîðûå ïîçâîëÿþò îïðåäåëèòü óðîâåíü áåçîïàñíîñòè èñïîëüçîâàíèÿ áðîêåðà ñåðâèñîâ. Äàííûå ïàðàìåòðû óñòàíàâëèâàþòñÿ ñ ïîìîùü õðàíèìîé ïðîöåäóðû Sp_configure. Ïåðå÷åíü ïàðàìåòðîâ, âëèÿþùèõ íà áåçîïàñíîñòü èñïîëüçîâàíèÿ áðîêåðà çàïðîñîâ SQL Server, à òàêæå èõ îïèñàíèå ïðèâîäèòñÿ â òàáë. 4.2. Òàáëèöà 4.2. Ïàðàìåòðû õðàíèìîé ïðîöåäóðû Sp_configure äëÿ íàñòðîéêè áåçîïàñíîñòè ¹
Ïàðàìåòð
Îïèñàíèå
1
Sys.conversation_endpoints
Îòîáðàæàåò ñïèñîê òî÷åê âçàèìîäåéñòâèÿ, êîòîðûå ÿâëÿþòñÿ àêòèâíûìè â äàííûé ìîìåíò
2
Sys.remote_service_bindings
Îòîáðàæàåò ñïèñîê ñåðâèñîâ è ñîîòâåòñòâóþùèõ ïîëüçîâàòåëåé, êîòîðûå áóäóò âûïîëíÿòü ñåðâèñû
3
Sys.routes
Îòîáðàæàåò ïîëíûé ñïèñîê ñîçäàííûõ ñâÿçåé
4
Sys.service_contract_ message_usages
Îòîáðàæàåò ïîëíûé ñïèñîê ñâÿçåé ìåæäó êîíòðàêòàìè è òèïàìè ñîîáùåíèé
5
Sys.service_contract_usage
Îòîáðàæàåò ñâÿçü ìåæäó êîíòðàêòàìè è ñåðâèñàìè
6
Sys.service_contracts
Îòîáðàæàåò ïîëíûé ñïèñîê êîíòðàêòîâ, êîòîðûå áûëè ñîçäàíû â ñèñòåìå
7
Sys.service_instances
Îòîáðàæàåò ïîëíûé ñïèñîê ñåðâèñîâ, àêòèâíûõ â äàííûé ìîìåíò
8
Sys.service_message_types
Ïîçâîëÿåò ïðîñìîòðåòü âñå òèïû ñîîáùåíèé, êîòîðûå áûëè ñîçäàíû â ñèñòåìå. Ñèñòåìíûå òèïû ñîîáùåíèé îòîáðàæàþòñÿ â âåðõíåé ÷àñòè òàáëèöû ðåçóëüòàòîâ. Òèïû ñîîáùåíèé, ñîçäàííûå ïîëüçîâàòåëåì, ñëåäóþò çà ñèñòåìíûìè
Sys.service_queue
Îòîáðàæàåò ïîëíûé ñïèñîê î÷åðåäåé, êîòîðûå áûëè ñîçäàíû
10
9
Sys.services
Îòîáðàæàåò ïîëíûé ñïèñîê ñîçäàííûõ ñåðâèñîâ
11
Sys.transmission_queue
Îòîáðàæàåò ïîëíûé ñïèñîê ñîîáùåíèé, êîòîðûå íàõîäÿòñÿ â î÷åðåäè è îæèäàþò îòïðàâêè
Âî âðåìÿ ñîçäàíèÿ äèàëîãà ìîæíî îïðåäåëèòü åãî óðîâåíü áåçîïàñíîñòè, èñïîëüçóÿ ïàðàìåòð WITH ENCRYPTION. Åñëè âûïîëíÿåòñÿ ñîçäàíèå äèàëîãà ñ äàííûì ïàðàìåòðîì, òî ñîçäàåòñÿ êëþ÷, êîòîðûé â äàëüíåéøåì èñïîëüçóåòñÿ äëÿ øèôðîâàíèÿ âñåõ ñîîáùåíèé, ïåðåñûëàåìûõ âî âðåìÿ ýòîãî äèàëîãà. Ïîìèìî ñàìîé ïåðåäà÷è ñîîáùåíèé â çàøèôðîâàííîì âèäå äëÿ îáåñïå÷åíèÿ ïîëíîé áåçîïàñíîñòè òàêæå òðåáóåòñÿ ñîçäàíèå áåçîïàñíûõ òî÷åê îáìåíà ñîîáùåíèÿìè. Èíûìè ñëîâàìè, íåîáõîäèìî ïîáåñïîêîèòüñÿ î òîì, ÷òî ñîîáùåíèå îòïðàâëÿåòñÿ èç îäíîé êîíå÷íîé òî÷êè â çàøèôðîâàííîì âèäå è ïðèõîäèò â äðóãóþ òî÷êó òàêæå â çàøèôðîâàííîì âèäå. Ñîîáùåíèå íå äîëæíî áûòü äåøèôðîâàíî ïðè ïðîõîæäåíèè ïðîìåæóòî÷íûõ òî÷åê ïóòè ïåðåñûëêè. Äëÿ îáåñïå÷åíèÿ ïîäîáíîãî óðîâíÿ áåçîïàñíîñòè áðîêåð ñåðâèñîâ SQL Server èñïîëüçóåò ìåõàíèçì, ïîñòðîåííûé íà îñíîâå ñåðòèôèêàòîâ. Ïðè ýòîì ñåðòèôèêàò îòïðàâèòåëÿ îòïðàâëÿåòñÿ âìåñòå ñ ñîîáùåíèåì, ÷òîáû ïîëó÷àòåëü ìîã ðàñøèôðîâàòü ïîëó÷åííîå ñîîáùåíèå. Ïîëó÷èâ òàêîé ñåðòèôèêàò, ïîëó÷àòåëü ñîîáùåíèÿ ãåíåðèðóåò çàêðûòûé êëþ÷ íà îñíîâå èìåþùåéñÿ ó íåãî èíôîðìàöèè è âûïîëíÿåò äåøèôðàöèþ ñîîáùåíèÿ.
4.3. Ðàçðàáîòêà ïðèëîæåíèé è áðîêåð çàïðîñîâ
103
4.2.3. Ñèñòåìíûå ïðåäñòàâëåíèÿ Â SQL Server ñóùåñòâóþò íåñêîëüêî ñèñòåìíûõ ïðåäñòàâëåíèé, êîòîðûå ïîçâîëÿþò ïðîñìîòðåòü èíôîðìàöèþ îá îáúåêòàõ áðîêåðà ñåðâèñîâ SQL Server, à òàêæå äîïîëíèòåëüíûå ïàðàìåòðû äàííîé ïîäñèñòåìû. Äàííûé íàáîð ñèñòåìíûõ ïðåäñòàâëåíèé ñîáðàí è îïèñàí â òàáë. 4.3 (ñì. ðàçäåë 4.3.2 «Íîâûé íàáîð êîìàíä T-SQL»).
4.3. Ðàçðàáîòêà ïðèëîæåíèé è áðîêåð çàïðîñîâ  ïåðâîì ðàçäåëå ýòîé ãëàâû ìû ïîïûòàëèñü ðàçîáðàòüñÿ ñ àðõèòåêòóðîé áðîêåðà ñåðâèñîâ SQL Server, à òàêæå ñ âîçìîæíîñòÿìè äàííîé ïîäñèñòåìû â îòíîøåíèè ðàçðàáîòêè è âíåäðåíèÿ ðåøåíèé íà åå îñíîâå. Òåïåðü ïðèøëî âðåìÿ ðàçðàáîòàòü ãîòîâîå ïðîãðàììíîå ðåøåíèå íà îñíîâå äàííîãî ñåðâèñà.  ýòîì ðàçäåëå ìû ðàññìîòðèì ïðîãðàììíóþ ìîäåëü, êîòîðàÿ ïðèìåíÿåòñÿ ïðè ñîçäàíèè ïðèëîæåíèé äàííîãî êëàññà, ñðåäñòâà, ïðèìåíÿåìûå äëÿ ñîçäàíèÿ òàêèõ ïðèëîæåíèé, à òàêæå ðàññìîòðèì ïðèìåð ñîçäàííîãî ïðèëîæåíèÿ íà îñíîâå ôóíêöèîíàëüíîñòè áðîêåðà çàïðîñîâ SQL Server.  ýòîì ïðèìåðå ìû ñíà÷àëà ñîçäàäèì îáúåêòû áðîêåðà çàïðîñîâ SQL Server, çàòåì íàó÷èìñÿ ïîìåùàòü ñîîáùåíèÿ â î÷åðåäü è, íàêîíåö, áóäåì èçâëåêàòü ñîîáùåíèÿ èç î÷åðåäè è îáðàáàòûâàòü èõ ïî îïðåäåëåííîìó àëãîðèòìó.
4.3.1. Èñïîëüçîâàíèå ìåòàäàííûõ  ïðèëîæåíèÿõ îáðàáîòêè ñîîáùåíèé áðîêåðà ñåðâèñîâ SQL Server àêòèâíî èñïîëüçóåòñÿ ìåõàíèçì îáðàáîòêè ìåòàäàííûõ. Ìåòàäàííûå â ýòîì ñëó÷àå îáû÷íî èñïîëüçóþòñÿ äëÿ îïèñàíèÿ òèïà ñîîáùåíèé, íàïðàâëåíèÿ ïåðåñûëêè ñîîáùåíèé è ïàðàìåòðîâ èõ ïåðåñûëêè, à òàêæå ñâÿçè ìåæäó ñîîáùåíèÿìè è äðóãèõ ïàðàìåòðîâ. Íà ñàìîì äåëå ìåòàäàííûå èñïîëüçóþòñÿ äëÿ îïèñàíèÿ òðåáîâàíèé ê ñòðóêòóðå ïðèëîæåíèÿ, êîòîðîå áóäåò âûïîëíÿòü îáðàáîòêó ìåòàäàííûõ. Íà ðèñ. 4.4 ïîêàçàíà ñòðóêòóðà ìåòàäàííûõ, êîòîðàÿ ñîäåðæèò ñëåäóþùèå ýëåìåíòû: · òèï ñîîáùåíèÿ; · êîíòðàêò; · ñåðâèñ; · î÷åðåäü.  îáùåì ñëó÷àå ñòðóêòóðà ìåòàäàííûõ ìîæåò îïèñûâàòü è áîëåå ñëîæíóþ î÷åðåäü. Ðàññìîòðèì áîëåå äåòàëüíî íàçíà÷åíèå îòäåëüíûõ ýëåìåíòîâ ìåòàäàííûõ áðîêåðà ñåðâèñîâ SQL Server. Îäíèì èç îñíîâíûõ ýëåìåíòîâ ìåòàäàííûõ ÿâëÿåòñÿ òèï ñîîáùåíèÿ. Òèï ñîîáùåíèÿ èñïîëüçóåòñÿ äëÿ îïèñàíèÿ êëàññà ñîîáùåíèé, êîòîðûå áóäóò ïîìåùàòüñÿ â î÷åðåäü è îáðàáàòûâàòüñÿ áðîêåðîì ñåðâèñîâ SQL Server. Ìîãóò èñïîëüçîâàòüñÿ êàê òåêñòîâûå ñîîáùåíèÿ (â ôîðìàòå TXT), òàê è áîëåå ñëîæíûå òèïû ñîîáùåíèé (òàêèå, êàê HTML è XML).  ïîñëåäíåì ñëó÷àå ïîíàäîáèòñÿ òàêæå XSLT-ñõåìà äëÿ îòîáðàæåíèÿ ñîîáùåíèé òèïà XML íà ýêðàíå êîíå÷íîãî ïîëüçîâàòåëÿ. Åñëè ïîäîáíàÿ ñõåìà èìååòñÿ, òî áðîêåð ñåðâèñîâ âûïîëíèò åå ïðîâåðêó íà ïðåäìåò
104
Ãëàâà 4 • Áðîêåð çàïðîñîâ SQL Server
ñîîòâåòñòâèÿ äàííîé ñõåìû èìåþùåìóñÿ XML-ôàéëó. Åñëè ñõåìà íå áóäåò îïðåäåëåíà, à òèï ñîîáùåíèé çàäàí â ôîðìàòå XML, òî ñîîáùåíèÿ áóäóò êîíâåðòèðîâàíû â áèíàðíûé ôîðìàò.
Ðèñ. 4.4. Ìîäåëü ìåòàäàííûõ áðîêåðà ñåðâèñîâ SQL Server
Ñîîáùåíèÿ ãðóïïèðóþòñÿ â êîíòðàêòû. Êîíòðàêò — ýòî íàáîð ÷åòêî îïðåäåëåííûõ óñëîâèé, ðåãóëèðóþùèõ îòíîøåíèÿ ìåæäó ñåðâèñîì è åãî êëèåíòàìè. Ýòî îäíî èç îñíîâíûõ ïîíÿòèé ìåòàäàííûõ áðîêåðà ñåðâèñîâ SQL Server. Êîëè÷åñòâî òèïîâ ñîîáùåíèé, êîòîðûå óñòàíàâëèâàþòñÿ â î÷åðåäü, ìîæåò áûòü â îáùåì ñëó÷àå íå îãðàíè÷åíî. Êîíòðàêòû èñïîëüçóþòñÿ äëÿ îïèñàíèÿ âñåãî ìíîæåñòâà òèïîâ ñîîáùåíèé, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ â êîíêðåòíîì ñëó÷àå â îïðåäåëåííîì äèàëîãå. Íàïðèìåð, åñëè ñèñòåìà ïîëó÷àåò è îáðàáàòûâàåò ñîîáùåíèÿ òîëüêî äâóõ ôîðìàòîâ (XML è HTML), òî êîíòðàêò áóäåò ñîäåðæàòü îïèñàíèå äâóõ ôîðìàòîâ, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ äëÿ ïåðåäà÷è ñîîáùåíèé â äàííîì ñëó÷àå.  ñâîþ î÷åðåäü êîíòðàêòû ãðóïïèðóþòñÿ â ñåðâèñû, êîòîðûå ïðåäñòàâëÿþò ñîáîé ñïèñîê äèàëîãîâ, òðåáóþùèõ îáðàáîòêè. Ñåðâèñû àññîöèèðîâàíû ñ îäíîé èëè íåñêîëüêèìè îïðåäåëåííûìè î÷åðåäÿìè. Èìåííî ê î÷åðåäè îáðàùàåòñÿ ïîëüçîâàòåëüñêîå ïðèëîæåíèå ñ öåëüþ ïîìåñòèòü â íåå ñîîáùåíèå çàäàííîãî òèïà èëè âûïîëíèòü ÷òåíèå ïîìåùåííûõ ðàíåå â î÷åðåäü ñîîáùåíèé. Ïîñðåäñòâîì î÷åðåäè ïðèëîæåíèå óñòàíàâëèâàåò ñîåäèíåíèå ñ ñåðâèñîì. Áëàãîäàðÿ èìåþùåìóñÿ ïðîìåæóòî÷íîìó óðîâíþ â âèäå î÷åðåäè ñòîðîííåå ïðèëîæåíèå íå îáÿçàíî çíàòü àðõèòåêòóðó äàííîãî ñåðâèñà.
4.3.2. Íîâûé íàáîð êîìàíä T-SQL Íàáîð êîìàíä T-SQL áûë ïåðåñìîòðåí â íîâîé âåðñèè SQL Server è â îòíîøåíèè áðîêåðà ñåðâèñîâ.  íàáîðå äîáàâèëèñü íåñêîëüêî íîâûõ êîìàíä, êîòîðûå ïîçâîëÿþò óïðàâëÿòü áðîêåðîì ñåðâèñîâ, ñîçäàâàòü íîâûå îáúåêòû è íàñòðàèâàòü ïàðàìåòðû õðàíèìûõ ïðîöåäóð, èñïîëüçóåìûå äëÿ ÷òåíèÿ è îáðàáîòêè ñîîáùåíèé î÷åðåäè SQL Server. Áîëüøàÿ ÷àñòü íîâûõ êîìàíä îòîáðàæåíà â òàáë. 4.3.
4.3. Ðàçðàáîòêà ïðèëîæåíèé è áðîêåð çàïðîñîâ
105
Òàáëèöà 4.3. Íàáîð êîìàíä T-SQL äëÿ ñîçäàíèÿ íîâûõ îáúåêòîâ áðîêåðà ñåðâèñîâ ¹
Êîìàíäà
Îïèñàíèå
1
ALTER CONTRACT
Èçìåíÿåò êîíòðàêò
2
ALTER MESSAGE TYPE
Èçìåíÿåò òèï ñîîáùåíèÿ
3
ALTER QUEUE
Èçìåíÿåò î÷åðåäü
4
ALTER ROUTE
Èçìåíÿåò ïóòü
5
ALTER SERVICE
Èçìåíÿåò ñåðâèñ
6
CREATE CONTRACT
Ñîçäàåò íîâûé êîíòðàêò â áàçå äàííûõ
7
CREATE MESSAGE TYPE
Ñîçäàåò íîâûé òèï ñîîáùåíèÿ
8
CREATE QUEUE
Ñîçäàåò íîâóþ î÷åðåäü â áàçå äàííûõ
9
CREATE ROUTE
Ñîçäàåò íîâûé ïóòü â áàçå äàííûõ
10
CREATE SERVICE
Ñîçäàåò íîâûé ñåðâèñ â áàçå äàííûõ
11
DROP CONTRACT
Óäàëÿåò çàäàííûé êîíòðàêò èç áàçû äàííûõ
12
DROP MESSAGE TYPE
Óäàëÿåò çàäàííûé òèï ñîîáùåíèé èç áàçû äàííûõ
13
DROP QUEUE
Óäàëÿåò çàäàííóþ î÷åðåäü èç áàçû äàííûõ
14
DROP ROUTE
Óäàëÿåò çàäàííûé ïóòü èç áàçû äàííûõ
15
DROP SERVICE
Óäàëÿåò çàäàííûé ñåðâèñ èç áàçû äàííûõ
Ïîäàâëÿþùàÿ ÷àñòü íîâûõ êîìàíä èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ íîâûõ îáúåêòîâ áðîêåðà ñåðâèñîâ SQL Server. Òàêæå èìååòñÿ ãðóïïà êîìàíä, ïîçâîëÿþùèõ âûïîëíÿòü îáðàáîòêó ñîîáùåíèé, êîòîðûå ïîìåùåíû â î÷åðåäü.  òàáë. 4.4 ñîäåðæèòñÿ ñïèñîê êîìàíä T-SQL, èñïîëüçóåìûõ äëÿ îáðàáîòêè ñîîáùåíèé, ïîìåùåííûõ â î÷åðåäü. Òàáëèöà 4.4. Íàáîð êîìàíä T-SQL äëÿ ðàáîòû ñ äèàëîãàìè è î÷åðåäüþ áðîêåðà ñåðâèñîâ ¹
Êîìàíäà
Îïèñàíèå
1
BEGIN DIALOG
Ñîçäàåò íîâûé äèàëîã
2
END CONVERSATION
Çàâåðøàåò îáìåí, èñïîëüçóåìûé âûáðàííûì äèàëîãîì
3
GET SERVICE INSTANCE
Ïîëó÷àåò ID ýêçåìïëÿðà ñåðâèñà èç î÷åðåäè
4
MOVE CONVERSATION
Ïåðåìåùàåò îáìåí â íîâûé äèàëîã
5
RECEIVE
Ïîëó÷àåò ñîîáùåíèå èç î÷åðåäè
6
SEND
Îòïðàâëÿåò ñîîáùåíèå â î÷åðåäü
4.3.3. Ïðèìåð ïðèëîæåíèÿ íà îñíîâå áðîêåðà çàïðîñîâ  ïðåäûäóùèõ ðàçäåëàõ ìû ðàññìîòðåëè íåñêîëüêî íîâûõ âîçìîæíîñòåé, êîòîðûå ïîÿâèëèñü âìåñòå ñ áðîêåðîì ñåðâèñîâ SQL Server, à òàêæå ðàçîáðàëèñü â òîì, êàêèå êîìàíäû T-SQL ìîãóò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ îáúåêòîâ áðîêåðà ñåðâèñîâ è äëÿ óïðàâëåíèÿ î÷åðåäÿìè è äèàëîãàìè. Òåïåðü ìîæíî ïðèñòóïèòü ê ðàññìîòðåíèþ ïðèìåðà ñîçäàíèÿ îáúåêòîâ ñ ïîìîùüþ ðàññìîòðåííîãî íàáîðà êîìàíä.  êà÷åñòâå ïðèìåðà âûáåðåì ñèñòåìó îáðàáîòêè âõîäÿùèõ ñîîáùåíèé, ïîñòóïàþùèõ ê ðàáîòíèêó êàíöåëÿðèè â îðãàíèçàöèè. Âõîäÿùèå ñîîáùåíèÿ
106
Ãëàâà 4 • Áðîêåð çàïðîñîâ SQL Server
áóäóò ïîìåùàòüñÿ â î÷åðåäü ñîãëàñíî âðåìåíè èõ ïðèáûòèÿ â îðãàíèçàöèþ. Ïîñêîëüêó èìååòñÿ òîëüêî îäèí ÷åëîâåê, îáðàáàòûâàþùèé ïîñòóïèâøèå ñîîáùåíèÿ, òî ýòîò ÷åëîâåê ìîæåò áðàòü èç î÷åðåäè ïîñòóïèâøèõ ñîîáùåíèé ïî îäíîìó âõîäÿùåìó ñîîáùåíèþ è îáðàáàòûâàòü åãî. Òåïåðü ïåðåíåñåì äàííûé ïðèìåð íà ýëåêòðîííóþ ñèñòåìó àâòîìàòè÷åñêîé ðåãèñòðàöèè âõîäÿùèõ ýëåêòðîííûõ ñîîáùåíèé. Ïåðåä òåì êàê ìû ïðèñòóïèì ê àâòîìàòèçàöèè äàííîé çàäà÷è, íåîáõîäèìî ñîçäàòü íåñêîëüêî îáúåêòîâ, êîòîðûå ïîìîãóò â ðàáîòå ñ î÷åðåäüþ áðîêåðà ñåðâèñîâ. Äëÿ ýòîãî ìû ñîçäàäèì òèï ñîîáùåíèé, êîíòðàêò, î÷åðåäü è ñåðâèñ (ëèñòèíã 4.1). Ëèñòèíã 4.1. Ïðèìåð ñîçäàíèÿ îáúåêòîâ áðîêåðà ñåðâèñîâ SQL Server CREATE MESSAGE TYPE ExampleMesType ENCODING Varbinary CREATE CONTRACT ExampleContract (ExampleMesType SENT BY ANY) CREATE QUEUE ExampleQueue WITH ACTIVATION {STATUS = ON, PROCEDURE_NAME = ExampleProc, MAX_QUEUE_READERS = 5, EXECUTE AS SELF) CREATE SERVICE ExampleService1 ON QUEUE ExampleQueue(ExampleContract) CREATE SERVICE ExampleService2 ON QUEUE ExampleQueue(ExampleContract)
Íà ïåðâîì ýòàïå ñîçäàíèÿ ïðèëîæåíèÿ ñ èñïîëüçîâàíèåì áðîêåðà ñåðâèñîâ ñîçäàåòñÿ òèï ñîîáùåíèé, êîòîðûé áóäåò îáðàáàòûâàòüñÿ ñèñòåìîé.  äàííîì ïðèìåðå ìû ñîçäàåì îäèí òèï ñîîáùåíèé, êîòîðûé íîñèò íàçâàíèå ExampleMesType. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà CREATE MESSAGE TYPE. Ïàðàìåòð ENCODING äàííîé êîìàíäû ïîçâîëÿåò îïðåäåëèòü ôîðìàò ñîîáùåíèÿ (áèíàðíûé èëè XML).  äàííîì ñëó÷àå ñîîáùåíèÿ áóäóò èìåòü áèíàðíûé ôîðìàò. Ýòî îçíà÷àåò, ÷òî îáðàáîòêà áóäåò âûïîëíÿòüñÿ äëÿ ñîîáùåíèé ëþáîãî òèïà. Ïîñëå ñîçäàíèÿ òèïà ñîîáùåíèé ñîçäàåòñÿ êîíòðàêò. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà CREATE CONTRACT, ïîñëå êîòîðîé ñëåäóåò èìÿ êîíòðàêòà, à ñ ïîìîùüþ ïàðàìåòðà SENT BY îïðåäåëÿåòñÿ, êàêèå ñîîáùåíèÿ íåîáõîäèìî ñâÿçàòü ñ äàííûì êîíòðàêòîì. Òàêèì îáðàçîì, èñïîëüçóÿ êîìàíäó CREATE CONTRACT, ìû îïðåäåëèëè òèïû ñîîáùåíèé, êîòîðûå áóäóò îáðàáàòûâàòüñÿ âûáðàííûì äèàëîãîì. Ïîñëå ñîçäàíèÿ êîíòðàêòà ñîçäàåòñÿ î÷åðåäü.  äàííîì ñëó÷àå ñîçäàåòñÿ î÷åðåäü ExampleQueue. Âìåñòå ñ ñîçäàíèåì î÷åðåäè àêòèâèðóåòñÿ ïðîöåäóðà ExampleProc. Äëÿ ýòîãî èñïîëüçóåòñÿ ïàðàìåòð WITH ACTIVATION. Ìàêñèìàëüíîå ÷èñëî ýêçåìïëÿðîâ õðàíèìîé ïðîöåäóðû, êîòîðûå áóäóò âûïîëíÿòü ÷òåíèå ñîîáùåíèé î÷åðåäè, çàäàåòñÿ ñ ïîìîùüþ ïàðàìåòðà MAX_QUEUE_READERS è ðàâíÿåòñÿ ïÿòè. Ñòîèò îãîâîðèòüñÿ, ÷òî âî âðåìÿ âûïîëíåíèÿ äàííîé êîìàíäû ïðîöåäóðà ExampleProc äîëæíà áûòü ñîçäàíà, èíà÷å êîìàíäà áóäåò âûïîëíåíà ñ îøèáêàìè. Ïàðàìåòð EXECUTE AS ïîçâîëÿåò çàäàòü âûïîëíåíèå ïðîöåäóðû îò èìåíè äðóãîãî ïîëüçîâàòåëÿ (êîòîðûé èìååò íåîáõîäèìûå ïðèâèëåãèè äëÿ âûïîëíåíèÿ ïðîöåäóðû).  äàííîì ñëó÷àå ïðîöåäóðà ExampleProc âûïîëíÿåòñÿ îò èìåíè òîãî ïîëüçîâàòåëÿ, êîòîðûé âûïîëíèò äàííûé ñöåíàðèé. Ïîñëå òîãî êàê ñîçäàíà î÷åðåäü è îïðåäåëåíà ïðîöåäóðà, êîòîðàÿ áóäåò âûïîëíÿòü ÷òåíèå ñîîáùåíèé èç íåå, ñîçäàþòñÿ ñåðâèñû ExampleService1 è ExampleService2. Ìåæäó íèìè áóäåò â äàëüíåéøåì âûïîëíÿòüñÿ îáìåí ñîîáùåíèÿìè. Äëÿ ñîçäàíèÿ ñåðâèñà èñïîëüçóåòñÿ êîìàíäà CREATE SERVICE. Ïàðàìåòð ON QUEUE ïîçâîëÿåò îïðåäåëèòü î÷åðåäü, ñîîòâåòñòâóþùóþ äàííîìó ñåðâèñó. Ïîñëå ýòîãî ñåðâèñó ñîïîñòàâëÿåòñÿ ðàíåå ñîçäàííûé êîíòðàêò. Åñëè â óäà-
4.3. Ðàçðàáîòêà ïðèëîæåíèé è áðîêåð çàïðîñîâ
107
ëåííîé ñèñòåìå ðàíåå áûë ñîçäàí ñåðâèñ, ñ êîòîðûì áóäåò âûïîëíÿòüñÿ âçàèìîäåéñòâèå, òî íåîáõîäèìî îïðåäåëèòü ïóòü äëÿ íåãî.  ýòîì ñëó÷àå èñïîëüçóåòñÿ êîìàíäà CREATE ROUTE, ñ ïîìîùüþ êîòîðîé îïðåäåëÿåòñÿ ñåòåâîé àäðåñ êîìïüþòåðà ñ çàïóùåííûì ñåðâèñîì. Ïîñëå ñîçäàíèÿ âñåõ íåîáõîäèìûõ îáúåêòîâ áðîêåðà ñåðâèñîâ SQL Server ìîæíî ïðèñòóïàòü ê ïîñòàíîâêå ñîîáùåíèé â î÷åðåäü è âûïîëíåíèþ ÷òåíèÿ ñîîáùåíèé.  ñëåäóþùåì ïðèìåðå âûïîëíÿåòñÿ ïîìåùåíèå ñîîáùåíèé â î÷åðåäü ExampleQueue ñ ïîìîùüþ íàáîðà êîìàíä SQL Server (ëèñòèíã 4.2). Ëèñòèíã 4.2. Ïîìåùåíèå ñîîáùåíèé â î÷åðåäü áðîêåðà ñåðâèñîâ SQL Server DECLARE ExampleDialog UNIQUEIDENTIFIER BEGIN TRANSACTION BEGIN DIALOG @ExampleDialog FROM SERVICE ExampleService1 TO SERVICE 'ExampleService2' ON CONTRACT ExampleContract WITH LIFETIME = 1000; SEND ON CONVERSATION @ExampleDialog MESSAGE TYPE ExampleMesType (Message1); SEND ON CONVERSATION ExampleDialog MESSAGE TYPE ExampleMesType (Message2); COMMIT TRANSACTION
Ðàññìîòðèì áîëåå äåòàëüíî êîìàíäû, èñïîëüçîâàííûå íàìè â ïðèâåäåííîì ëèñòèíãå.  ñàìîì íà÷àëå îïðåäåëÿåòñÿ ïåðåìåííàÿ ExampleDialog, êîòîðàÿ ñîäåðæèò óíèêàëüíûé èäåíòèôèêàòîð äèàëîãà. Äàííûé èäåíòèôèêàòîð áóäåò â äàëüíåéøåì àâòîìàòè÷åñêè îïðåäåëåí SQL Server. Ïîñëå ýòîãî íà÷èíàåòñÿ âûïîëíåíèå òðàíçàêöèè. Ðàçðàáîò÷èêè SQL Server ðåêîìåíäóþò âñå êîìàíäû óïðàâëåíèÿ áðîêåðîì ñåðâèñîâ âûïîëíÿòü â òðàíçàêöèîííîì ðåæèìå, ïîñêîëüêó â ñëó÷àå âîçíèêíîâåíèÿ îøèáîê ìîæíî âûïîëíèòü ôèêñàöèþ è îòêàò èçìåíåíèé, âíîñèìûõ â î÷åðåäü. Èíûìè ñëîâàìè, ñîîáùåíèÿ, ïîìåùåííûå â î÷åðåäü, áóäóò îòîçâàíû â ñëó÷àå âîçíèêíîâåíèÿ îøèáîê. Ïîñëå ýòîãî ñîçäàåòñÿ äèàëîã ñ ïîìîùüþ êîìàíäû BEGIN DIALOG. Âî âðåìÿ ñîçäàíèÿ äèàëîãà îáÿçàòåëüíî íåîáõîäèìî îïðåäåëèòü äâóõ ó÷àñòíèêîâ äèàëîãà. Äëÿ ýòîãî èñïîëüçóþòñÿ äâà ïàðàìåòðà — FROM SERVICE è TO SERVICE. Ñ ïîìîùüþ äàííûõ ïàðàìåòðîâ îïðåäåëÿþòñÿ äâà ñåðâèñà, ìåæäó êîòîðûìè áóäåò âûïîëíÿòüñÿ îáìåí ñîîáùåíèÿìè.  äàííîì ñëó÷àå îáìåí áóäåò âûïîëíÿòüñÿ ìåæäó äâóìÿ ðàíåå ñîçäàííûìè íàìè ñåðâèñàìè ExampleService1 è ExampleService2. Ïðè ýòîì ïåðâûé áóäåò âûñòóïàòü â êà÷åñòâå îòïðàâèòåëÿ ñîîáùåíèé, à âòîðîé — â êà÷åñòâå ñåðâèñà, îáðàáàòûâàþùåãî ïîñòóïàþùèå ñîîáùåíèÿ. Ñ ïîìîùüþ êîìàíäû ON CONTRACT îïðåäåëÿåòñÿ êîíòðàêò, êîòîðûé áóäåò èñïîëüçîâàòüñÿ äëÿ äàííîãî äèàëîãà. Êàê áûëî ñêàçàíî ðàíåå, êîíòðàêò èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû îïðåäåëèòü ïàðàìåòðû ñîîáùåíèé, ïåðåñûëàåìûõ ìåæäó îòïðàâèòåëåì è ïîëó÷àòåëåì. Ïåðåä çàêðûòèåì òðàíçàêöèè âûïîëíÿåòñÿ ïîìåùåíèå äâóõ ñîîáùåíèé â î÷åðåäü. Äëÿ ýòîãî èñïîëüçóþòñÿ êîìàíäû SEND. Ïðè ýòîì èñïîëüçóåòñÿ ðàíåå ñîçäàííûé äèàëîã, à òàêæå îïðåäåëÿåòñÿ òèï ñîîáùåíèé ExampleMesType.
108
Ãëàâà 4 • Áðîêåð çàïðîñîâ SQL Server
Ïîñëå ïîìåùåíèÿ ñîîáùåíèé â î÷åðåäü ìîæíî ïåðåéòè ê ðàññìîòðåíèþ ïðèìåðà ïðèëîæåíèÿ, êîòîðîå áóäåò âûïîëíÿòü ÷òåíèå ýòèõ ñîîáùåíèé èç î÷åðåäè ñ öåëüþ äàëüíåéøåé îáðàáîòêè.  ýòîì ïðèìåðå ìû ñîçäàäèì õðàíèìóþ ïðîöåäóðó, êîòîðàÿ áóäåò ÷èòàòü ñîîáùåíèÿ èç î÷åðåäè. Êàê áûëî ðàññìîòðåíî íàìè ðàíåå (ñì. ëèñòèíã 4.1), ìû ñîçäàëè î÷åðåäü ExampleQueue ñ àâòîìàòè÷åñêîé àêòèâàöèåé, ÷òî íå òðåáóåò äîïîëíèòåëüíîé àêòèâàöèè. Ýòî òàêæå îçíà÷àåò, ÷òî ñîîòâåòñòâóþùàÿ ïðîöåäóðà ExampleProc áóäåò àâòîìàòè÷åñêè çàïóùåíà âî âðåìÿ ïîÿâëåíèÿ íîâîãî ñîîáùåíèÿ â î÷åðåäè. Ðàññìîòðèì áîëåå äåòàëüíî õðàíèìóþ ïðîöåäóðó, êîòîðàÿ áûëà ñîçäàíà ðàíåå ïåðåä ñîçäàíèåì îáúåêòîâ áðîêåðà çàïðîñîâ (ëèñòèíã 4.3). Ëèñòèíã 4.3. Ñîçäàíèå õðàíèìîé ïðîöåäóðû CREATE PROC ExampleProc AS DECLARE @ExampleDialog UNIQUEIDENTIFIER DECLARE @mess_type__id int DECLARE @mess_body NVARCHAR(1000) DECLARE @mess NVARCHAR(1000) While (1=1) BEGIN BEGIN TRANSACTION WAITFOR (RECEIVE top(l) @mess_type_id = mess_type_id, @mess_body = mess_body, @ExampleDialog = convers_handle FROM ExampleQueue), TIMEOUT 200; if (@@ROWCOUNT = 0) BEGIN COMMIT TRANSACTION BREAK END IF (@mess_type_id = 2) BEGIN PRINT 'Äèàëîã çàêîí÷åí' + cast(@ExampleDialog as nvarchar(40)) END ELSE BEGIN BEGIN TRANSACTION BEGIN DIALOG @ExampleDialog FROM SERVICE ExampleService1 TO SERVICE 'ExampleService2' ON CONTRACT ExampleContract WITH LIFETIME = 1000; SELECT @mess = 'Ïîëó÷åíî ñîîáùåíèå:' + @mess_body; SEND ON CONVERSATION @ExampleDialog MESSAGE TYPE ExampleMesType (@mess); PRINT CONVERT (varchar(30), @mess) COMMIT TRANSACTION END CONVERSATION @ExampleDialog END COMMIT TRANSACTION END
4.3. Ðàçðàáîòêà ïðèëîæåíèé è áðîêåð çàïðîñîâ
109
Ñîçäàíèå õðàíèìîé ïðîöåäóðû — ýòî îäèí èç ñàìûõ ñëîæíûõ è â òî æå âðåìÿ óâëåêàòåëüíûõ ìîìåíòîâ ðàáîòû ñ î÷åðåäÿìè áðîêåðà ñåðâèñîâ. Ïðè ñîçäàíèè õðàíèìîé ïðîöåäóðû ó÷èòûâàþòñÿ öåëè, êîòîðûå ñòàâèëèñü ïðè ðàáîòå ñ î÷åðåäÿìè. Èíûìè ñëîâàìè, ñîçäàíèå õðàíèìîé ïðîöåäóðû îáû÷íî ó÷èòûâàåò áèçíåñ-çàäà÷è, äëÿ ðåøåíèÿ êîòîðûõ âîçíèêëà íåîáõîäèìîñòü â èñïîëüçîâàíèè î÷åðåäåé áðîêåðà ñåðâèñîâ SQL Server.  äàííîì ïðèìåðå ñíà÷àëà îïðåäåëÿåòñÿ ñïèñîê íåîáõîäèìûõ ïåðåìåííûõ, êîòîðûå áóäóò èñïîëüçîâàòüñÿ íàìè ïðè ñîçäàíèè ïðîöåäóðû: · @ExampleDialog — óíèêàëüíûé èäåíòèôèêàòîð äèàëîãà; · @mess_type_id — ñ÷åò÷èê ñîîáùåíèé; · @mess_body — òåëî ñîîáùåíèÿ (òåêñò); · @mess — ñîîáùåíèå, âûâîäèìîå ïîëüçîâàòåëþ âî âðåìÿ îáðàáîòêè ñîîáùåíèé î÷åðåäè. Êîä ïðîöåäóðû âûïîëíÿåòñÿ ñ èñïîëüçîâàíèåì ìåõàíèçìà òðàíçàêöèé, ÷òî òàêæå ïîçâîëÿåò èçáàâèòüñÿ îò îøèáîê SQL Server âî âðåìÿ ñîçäàíèÿ õðàíèìîé ïðîöåäóðû. Âíà÷àëå âûïîëíÿåòñÿ ÷òåíèå ñîîáùåíèÿ èç î÷åðåäè. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà RECEIVE.  äàííîì ñëó÷àå âûïîëíÿåòñÿ ÷òåíèå òîëüêî îäíîãî ñîîáùåíèÿ èç î÷åðåäè, î ÷åì ãîâîðèò êîìàíäà top(l). Ñ ïîìîùüþ äàííîé êîìàíäû âû ìîæåòå âûïîëíÿòü ÷òåíèå îäíîâðåìåííî íåñêîëüêèõ ñîîáùåíèé èç î÷åðåäè äëÿ óñêîðåíèÿ ïðîöåññà èõ îáðàáîòêè. Ïîñëå ïîëó÷åíèÿ ñîîáùåíèÿ èç î÷åðåäè âûïîëíÿåòñÿ ñîõðàíåíèå çíà÷åíèé ïåðåìåííûõ. ×òåíèå âûïîëíÿåòñÿ èç î÷åðåäè ExampleQueue. Ïîñëå ýòîãî âûïîëíÿåòñÿ ïðîâåðêà òîãî, ÷òî ñîîáùåíèå èç î÷åðåäè áûëî ïðî÷èòàíî. Äëÿ ýòîãî èñïîëüçóåòñÿ îïåðàòîð if (@@ROWCOUNT = 0). Åñëè íè îäíîãî çíà÷åíèÿ íå áûëî ïðî÷èòàíî, òî âûïîëíÿåòñÿ ôèêñàöèÿ òðàíçàêöèè è ðàáîòà ïðîöåäóðû çàâåðøàåòñÿ. Åñëè ñîîáùåíèå âñå æå áûëî ïðî÷èòàíî (ïðîâåðÿåòñÿ ñðàâíåíèåì çíà÷åíèÿ ïåðåìåííîé mess_type_id), òî âûïîëíÿåòñÿ îáðàáîòêà ñîîáùåíèÿ.  ýòîì ñëó÷àå îòêðûâàåòñÿ äèàëîã ExampleDialog. Ýòîò äèàëîã áóäåò èñïîëüçîâàòüñÿ äëÿ ïîìåùåíèÿ ñîîáùåíèé â î÷åðåäü ExampleQueue. Äëÿ îãðàíè÷åíèÿ îáðàáàòûâàåìûõ ñîîáùåíèé (èõ òèïà) èñïîëüçóåòñÿ êîíòðàêò ExampleContract. Ïîñëå îòêðûòèÿ äèàëîãà ïîëó÷åííîå ñîîáùåíèå èçìåíÿåòñÿ è ê íåìó äîáàâëÿåòñÿ ñòðîêà «Ïîëó÷åíî ñîîáùåíèå:». Ïîñëå òîãî êàê ñîîáùåíèå ïîäãîòîâëåíî äëÿ ïåðåäà÷è (èëè îòîáðàæåíèÿ íà ýêðàíå êîìïüþòåðà êîíå÷íîãî ïîëüçîâàòåëÿ), îíî ïîìåùàåòñÿ â î÷åðåäü ExampleQueue. Ïîñëå ýòîãî âûïîëíÿåòñÿ çàâåðøåíèå äèàëîãà è ôèêñèðîâàíèå òðàíçàêöèè.
Ñåðâèñû àíàëèòèêè
5
Ïåðâûé íàáîð OLAP-ñåðâèñîâ ïîÿâèëñÿ ñ âûõîäîì SQL Server 7.0. Ñ òåõ ïîð ýòîò ïðîãðàììíûé ïðîäóêò âñå áîëåå àêòèâíî çàõâàòûâàë ðûíîê ïðîãðàììíîãî îáåñïå÷åíèÿ äàííîãî êëàññà. Îá ýòîì ñâèäåòåëüñòâóåò ïîâñåìåñòíîå ðàñïðîñòðàíåíèå SQL Server, ñîêðàùàþùåå ðàñõîäû êîìïàíèé íà ðàçâåðòûâàíèå ñåðâèñîâ àíàëèòèêè íà ïðåäïðèÿòèè. Òàêèì îáðàçîì, ñåðâèñû àíàëèòèêè ïðîäâèãàþòñÿ íà ðûíîê Business Intelligence (BI) çà ñ÷åò ïðîäâèæåíèÿ ñåðâåðà ðåëÿöèîííûõ áàç äàííûõ. Íàñëåäíèêîì SQL Server 7.0 ÿâëÿåòñÿ SQL Server 2000, â êîòîðîì áûëè ïåðåñìîòðåíû è çíà÷èòåëüíî óëó÷øåíû âîçìîæíîñòè ñåðâèñîâ àíàëèòèêè.  äàííûé ìîìåíò ðûíîê BI ìíîãèå àíàëèòèêè êîìïüþòåðíîãî ðûíêà íàçûâàþò îäíèì èç íàèáîëåå äèíàìè÷íî ðàçâèâàþùèõñÿ. Ýòî îáúÿñíÿåòñÿ òåì, ÷òî âî ìíîãèõ êîìïàíèÿõ â ïðîöåññå èõ ðàáîòû íàêîïèëàñü èíôîðìàöèÿ. Äàííàÿ èíôîðìàöèÿ îáû÷íî ñêðûòà â íåäðàõ ðåëÿöèîííûõ áàç äàííûõ, è òðåáóåòñÿ âûïîëíÿòü åå àíàëèç äîñòóïíûìè ñðåäñòâàìè. Îäèí èç íàèáîëåå äîñòóïíûõ ñïîñîáîâ — ýòî èñïîëüçîâàíèå ñåðâèñîâ àíàëèòèêè, êîòîðûå ïîñòàâëÿþòñÿ âìåñòå ñ SQL Server, ÷òî ñîêðàùàåò ðàñõîäû íà ïðèîáðåòåíèå ïðîãðàììíûõ ïðîäóêòîâ ïîäîáíîãî êëàññà. Ïðîãðàììíîå îáåñïå÷åíèå êëàññà BI ïîçâîëÿåò âûÿâèòü çàâèñèìîñòè â îïåðàöèîííûõ äàííûõ, êîòîðûå èñïîëüçóþòñÿ â èíôîðìàöèîííûõ ñèñòåìàõ. Èçâëåêàÿ èç îïåðàöèîííûõ äàííûõ êîìïàíèè ñêðûòûå çàâèñèìîñòè, òåõíîëîãèè OLAP, Data Mining è Data Warehousing ïîçâîëÿþò àãðåãèðîâàòü îòäåëüíûå êóñêè èíôîðìàöèè â öåëîñòíóþ êàðòèíó ñ öåëüþ ïðåäîñòàâèòü ðóêîâîäñòâó îáùèé âèä ïðîöåññîâ, ïðîèñõîäÿùèõ íà ïðåäïðèÿòèè, â îòðàñëè èëè íà ãëîáàëüíîì ðûíêå. Ñ ïîìîùüþ ïîäîáíûõ ðåøåíèé ìîãóò àíàëèçèðîâàòüñÿ äàííûå èç ñèñòåì çàêóïîê, çàêàçîâ, ïðîäàæ, ïîääåðæêè è ìíîãèõ äðóãèõ, ãäå òðåáóåòñÿ öåëîñòíûé ïîäõîä ê îòäåëüíûì ôðàãìåíòàì èíôîðìàöèè. Êîíå÷íûé ðåçóëüòàò èñïîëüçîâàíèÿ ïîäîáíûõ ñèñòåì íå çàñòàâèò ñåáÿ æäàòü: ðóêîâîäñòâî áóäåò îáëàäàòü áîëåå ïîëíîé èíôîðìàöèåé î ïðîöåññàõ, ïðîèñõîäÿùèõ íà ïðåäïðèÿòèè è â îòðàñëè, à îòäåëüíûå ñîòðóäíèêè ñìîãóò àíàëèçèðîâàòü íåîáõîäèìûå îáúåìû çàêóïîê è ïðîäàæ.
5.1. Îáçîð è ïðåèìóùåñòâà
111
Òàêèì îáðàçîì, ñèñòåìû OLAP, Data Mining è Data Warehousing ìîãóò áûòü âåðòèêàëüíî èíòåãðèðîâàííûìè, à òàêæå èñïîëüçîâàòüñÿ íà ëþáîé ãîðèçîíòàëè ïðåäïðèÿòèÿ, ÷òî ïîëîæèòåëüíî ñêàçûâàåòñÿ íà èõ ïîâñåìåñòíîì ðàñïðîñòðàíåíèè. Èñïîëüçîâàíèå äàííûõ òåõíîëîãèé èìååò îäíî î÷åíü áîëüøîå ïðåèìóùåñòâî äëÿ áèçíåñà: òåõíîëîãèè OLAP, Data Mining è Data Warehousing ïîçâîëÿþò ïðåäîñòàâèòü íàèáîëåå àêòóàëüíóþ ïðîàíàëèçèðîâàííóþ èíôîðìàöèþ îá îïåðàöèÿõ íà ïðåäïðèÿòèè, ÷òî â êîíå÷íîì èòîãå ïîçâîëèò ïðèíèìàòü îáîñíîâàííûå ñòðàòåãè÷åñêèå ðåøåíèÿ.  ïîñëåäíèå ãîäû ðàçâèòèå ðûíêà BI øëî áûñòðåå, ÷åì ðàçâèòèå èíôîðìàöèîííîãî ðûíêà â öåëîì.  îñíîâíîì ýòî îáúÿñíÿëîñü òåì, ÷òî òåðìèí «BI» ÷àùå âñåãî îòîæäåñòâëÿëñÿ ñ òåðìèíîì «OLAP». Òåïåðü ïîíÿòèå «BI» îáîçíà÷àåò âñå òåõíîëîãèè, êîòîðûå èñïîëüçóþòñÿ íà ïðåäïðèÿòèè äëÿ ïîääåðæêè â ïðèíÿòèè ðåøåíèé. Ýòî îáîáùàþùèé òåðìèí äëÿ òàêèõ òåõíîëîãèé, êàê OLAP, Data Mining è Data Warehousing. Ðàçðàáîò÷èêè SQL Server 2005 ïûòàëèñü ìàêñèìàëüíî îõâàòèòü òåõíîëîãèè BI çà ñ÷åò íîâîé àðõèòåêòóðû ñåðâèñîâ àíàëèòèêè. Òåïåðü ïðèëîæåíèÿ ñåðâèñîâ àíàëèòèêè ìîãóò âêëþ÷àòü ýëåìåíòû ñåðâèñîâ èíòåãðàöèè è îò÷åòîâ, ÷òî ïîçâîëÿåò áîëåå òîíêî âñòðàèâàòü ïîäîáíûå ðåøåíèÿ â èíôðàñòðóêòóðó ïðåäïðèÿòèÿ, ïðåäîñòàâëÿòü ïîëüçîâàòåëÿì áîëüøèé íàáîð ñåðâèñîâ, à òàêæå ðåøàòü áîëåå ñëîæíûå çàäà÷è. Òåõíîëîãèè BI óäåëåíî îñîáîå âíèìàíèå â íîâîé âåðñèè SQL Server.  ñâÿçè ñ ýòèì ñåðâèñû àíàëèòèêè äîïîëíåíû íîâûìè óòèëèòàìè, àðõèòåêòóðà ñóùåñòâîâàâøèõ óòèëèò çíà÷èòåëüíî ïåðåñìîòðåíà.  äàííîé ãëàâå ìû ðàññìîòðèì, ÷òî ïðåäñòàâëÿåò ñîáîé òåõíîëîãèÿ OLAP è êàêèì îáðàçîì îíà çàäåéñòâîâàíà â ñåðâèñàõ àíàëèòèêè SQL Server 2005. Äàëåå ìû ïîñòàðàåìñÿ ðàçîáðàòüñÿ, êàê óñòðîåíî ÿäðî ñåðâèñîâ àíàëèòèêè è êàêèå ïðåèìóùåñòâà ïðåäñòàâëåíû â íîâîé âåðñèè. Ïîñëå ýòîãî ïåðåéäåì ê ðàññìîòðåíèþ Óíèôèöèðîâàííîé ìîäåëè èçìåðåíèé (UDM — Unified Dimensional Model). Ïîñëå ýòîãî ìû ðàññìîòðèì óòèëèòû, êîòîðûå ïîçâîëÿþò ñîçäàâàòü ïðèëîæåíèÿ è íàñòðàèâàòü ñåðâèñû àíàëèòèêè, ñõåìû îáåñïå÷åíèÿ áåçîïàñíîñòè è ðàçðàáîòêè ïðèëîæåíèé äëÿ ñåðâèñîâ àíàëèòèêè.
5.1. Îáçîð è ïðåèìóùåñòâà Ñåðâèñû àíàëèòèêè — ýòî ïîòîìêè OLAP-ñåðâèñîâ, êîòîðûå ñîçäàâàëèñü äëÿ îáðàáîòêè çàïðîñîâ ïîëüçîâàòåëåé è ïðåäîñòàâëåíèÿ îò÷åòîâ äëÿ äàííûõ, ñîäåðæàùèõñÿ â õðàíèëèùå àíàëèòè÷åñêîé èíôîðìàöèè. Èíôîðìàöèÿ, ðàñïîëàãàþùàÿñÿ â õðàíèëèùàõ äàííûõ, — ýòî íå ðåëÿöèîííûå äàííûå â ÷èñòîì ïîíèìàíèè, îäíàêî ñïîñîá åå õðàíåíèÿ èìååò ïðÿìîå ñõîäñòâî ñ ðåëÿöèîííûì. Õðàíåíèå èíôîðìàöèè ïðîèñõîäèò â âèäå ñõåìû, êîòîðàÿ îáåñïå÷èâàåò ìàêñèìàëüíóþ ãèáêîñòü è ñêîðîñòü ïîñòðîåíèÿ íåîáõîäèìûõ îò÷åòîâ è ñðåçîâ äàííûõ. Äàííûå â ñõåìàõ õðàíèëèù ðàñïîëàãàþòñÿ â âèäå çâåçäîïîäîáíîé ñòðóêòóðû èëè êðóãîâîé ñòðóêòóðû ñ ýëåìåíòàìè çâåçäû. Ýòî îçíà÷àåò, ÷òî ìåæäó äàííûìè ñóùåñòâóåò ñâÿçü ïî òèïó «ìíîãèå êî ìíîãèì», ÷òî ïîçâîëÿåò ñóùåñòâåííî ñîêðàòèòü âðåìÿ íà ñ÷èòûâàíèå äàííûõ è óñòàíîâêó ñâÿçè ìåæäó íèìè. Äëÿ ðàáîòû ñ òàêèìè
112
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
õðàíèëèùàìè èñïîëüçóåòñÿ òåõíîëîãèÿ OLAP.  îòëè÷èå îò òåõíîëîãèè ðàáîòû ñ ðåëÿöèîííûìè áàçàìè äàííûõ, â êîòîðûõ ÷òåíèå äàííûõ âûïîëíÿåòñÿ ïîñëåäîâàòåëüíî, ýòà òåõíîëîãèÿ ïîçâîëÿåò áûñòðîå ÷òåíèå âñåãî îáúåìà äàííûõ ñ öåëüþ áûñòðîãî âîçâðàùåíèÿ ðåçóëüòàòîâ. Âûñîêàÿ ñêîðîñòü ñ÷èòûâàíèÿ äàííûõ äîñòèãàåòñÿ çà ñ÷åò èñïîëüçîâàíèÿ ñïåöèàëüíûõ àëãîðèòìîâ è ñõåì õðàíåíèÿ äàííûõ. Íàïðèìåð, äëÿ òîãî ÷òîáû ïðîàíàëèçèðîâàòü öåíû íà òûñÿ÷è òîâàðîâ íà îäíîì ðûíêå äëÿ îïðåäåëåííîãî ðåãèîíà çà îïðåäåëåííûé ïðîìåæóòîê âðåìåíè, íåîáõîäèìî ñ÷èòàòü òûñÿ÷è, à ìîæåò áûòü, äàæå ìèëëèîíû ñòðîê òàáëèöû. Ïðîöåññ ñ÷èòûâàíèÿ òàêîãî ÷èñëà ñòðîê ìîæåò çàíÿòü äîñòàòî÷íî áîëüøîé ïðîìåæóòîê âðåìåíè. Äàííóþ ïðîáëåìó ìîæíî ðåøèòü çà ñ÷åò ñ÷èòûâàíèÿ îáîáùàþùåé èíôîðìàöèè î ñòðîêàõ òàáëèöû (ìåòàäàííûõ). Ñ÷èòûâàíèå äàííîé èíôîðìàöèè ìîæåò áûòü âûïîëíåíî çà äîëè ñåêóíäû, ïîñêîëüêó îíà õðàíèòñÿ â íåñêîëüêèõ ñòðîêàõ. Ýòî ïðèâîäèò ê ìíîãîêðàòíîìó óâåëè÷åíèþ ïðîèçâîäèòåëüíîñòè OLAP-ñåðâåðîâ.  îòëè÷èå îò òàáëèö ðåëÿöèîííûõ áàç äàííûõ, òåõíîëîãèÿ OLAP ðàáîòàåò ñ êóáàìè äàííûõ, èìåþùèìè íåñêîëüêî èçìåðåíèé, ÷òî ïîçâîëÿåò õðàíèòü ðàçíîðîäíóþ èíôîðìàöèþ, êîòîðàÿ õàðàêòåðèçóåòñÿ íåñêîëüêèìè ïàðàìåòðàìè. Íàïðèìåð, â êóáàõ ëåã÷å âûïîëíÿòü õðàíåíèå è ñ÷èòûâàíèå çíà÷åíèé ïðîäàæ îòäåëüíîãî òîâàðà çàäàííîãî ïîäðàçäåëåíèÿ êîìïàíèè çà îïðåäåëåííûé ïðîìåæóòîê âðåìåíè.  ýòîì ñëó÷àå çíà÷åíèå áàçû äàííûõ õàðàêòåðèçóåòñÿ òðåìÿ ïàðàìåòðàìè: · íàèìåíîâàíèå òîâàðà; · ïîäðàçäåëåíèå êîìïàíèè; · âðåìÿ ïðîäàæè òîâàðà. Ïîäîáíûå ïàðàìåòðû ÿâëÿþòñÿ èçìåðåíèÿìè òðåõìåðíîãî êóáà äëÿ õðàíåíèÿ äàííûõ î ïðîäàæàõ.  îáùåì ñëó÷àå êîëè÷åñòâî èçìåðåíèé êóáà ìîæåò áûòü íå îãðàíè÷åíî, îäíàêî â ñëó÷àå áîëüøèõ çíà÷åíèé ýòî óñëîæíÿåò ðàáîòó ñ òàêèìè êóáàìè, à òàêæå çàìåäëÿåò ðàáîòó OLAP-ñåðâåðà. Ïîäîáíûé ïîäõîä â õðàíåíèè äàííûõ ïîçâîëÿåò áîëåå áûñòðî âûïîëíÿòü ôèëüòðàöèþ äàííûõ, âûïîëíÿòü ïîäçàïðîñû è äåëàòü ðàçðåçû äàííûõ âäîëü îòäåëüíîãî èçìåðåíèÿ êóáà (ôèêñèðîâàòü îäíó èç ïåðåìåííûõ). Èññëåäîâàíèå âîçìîæíîãî ÷èñëà íåîáõîäèìûõ èçìåðåíèé, òðåáóþùèõñÿ â àíàëèòè÷åñêîé ìîäåëè, ïîêàçàëî, ÷òî îäíîâðåìåííî ìîæåò èñïîëüçîâàòüñÿ äî 19 èçìåðåíèé. Îáû÷íî áîëüøåå ÷èñëî èçìåðåíèé íà ïðàêòèêå íå èñïîëüçóåòñÿ. Êëþ÷åâûì â òåõíîëîãèè OLAP ÿâëÿåòñÿ ïîíÿòèå àãðåãàöèè. Àãðåãàöèÿìè íàçûâàþò ñãðóïïèðîâàííûå (àãðåãèðîâàííûå) ïî îïðåäåëåííûì óñëîâèÿì èñõîäíûå çíà÷åíèÿ ïîêàçàòåëåé. Îáû÷íî ïîä ñîçäàíèåì àãðåãàöèè ïîíèìàåòñÿ ëþáàÿ ïðîöåäóðà ôîðìèðîâàíèÿ ìåíüøåãî êîëè÷åñòâà çíà÷åíèé (àãðåãàòîâ) íà îñíîâàíèè áîëüøåãî êîëè÷åñòâà èñõîäíûõ çíà÷åíèé. Ïðè ýòîì àãðåãàòû àäåêâàòíî îòîáðàæàþò èñõîäíûå äàííûå.  äàëüíåéøåì ïîä òåðìèíàìè «àãðåãèðîâàíèå» è «àãðåãàöèÿ» ìû áóäåì ïîíèìàòü èñêëþ÷èòåëüíî ïðîöåññ îáúåäèíåíèÿ äàííûõ ïî îïðåäåëåííûì ïàðàìåòðàì. Ïðåäâàðèòåëüíîå ôîðìèðîâàíèå è ñîõðàíåíèå àãðåãàöèé ñ öåëüþ óìåíüøåíèÿ âðåìåíè îòêëèêà íà çàïðîñ ïîëüçîâàòåëÿ ÿâëÿåòñÿ îñíîâíûì ñâîéñòâîì ñèñòåì ïîääåðæêè îïåðàòèâíîãî àíàëèçà.
5.1. Îáçîð è ïðåèìóùåñòâà
113
5.1.1. Òèïû õðàíèëèù OLAP  òåõíîëîãèè OLAP âûäåëÿþò òðè îñíîâíûõ òèïà äëÿ õðàíåíèÿ ìíîãîìåðíûõ ìàññèâîâ äàííûõ, êàæäûé èç êîòîðûõ õàðàêòåðèçóåòñÿ ñïåöèàëüíûìè àëãîðèòìàìè õðàíåíèÿ äàííûõ è ñêîðîñòüþ îáðàáîòêè çàïðîñîâ ïîëüçîâàòåëåé. Âûäåëÿþò ñëåäóþùèå òðè òèïà õðàíèëèù ìíîãîìåðíûõ äàííûõ: · Multidimensional OLAP (MOLAP) — â îñíîâå ïðîäóêòà ëåæèò íåðåëÿöèîííàÿ ñòðóêòóðà äàííûõ, îáåñïå÷èâàþùàÿ ìíîãîìåðíîå õðàíåíèå, îáðàáîòêó è ïðåäñòàâëåíèå äàííûõ. Ñëåäîâàòåëüíî, áàçû äàííûõ òàêæå íàçûâàþò ìíîãîìåðíûìè. Äàííûå â ïðîöåññå àíàëèçà âûáèðàþòñÿ èñêëþ÷èòåëüíî èç ìíîãîìåðíîé ñòðóêòóðû. Äëÿ áûñòðîãî äîñòóïà ê äàííûì òàê æå, êàê è â ñëó÷àå ñ ðåëÿöèîííûìè áàçàìè äàííûõ, èñïîëüçóþòñÿ èíäåêñû. ßäðî MOLAP-ñèñòåìû îïòèìèçèðîâàíî äëÿ îáðàáîòêè çàïðîñîâ ê MOLAP-õðàíèëèùàì. Ñ ïîìîùüþ äàííîãî õðàíèëèùà ìîæíî íàìíîãî áûñòðåå îáðàáàòûâàòü çàïðîñû ïîëüçîâàòåëåé, ÷åì â ñëó÷àå ñ ROLAP. Ïîìèìî ýòîãî äëÿ ðàáîòû MOLAP òðåáóåòñÿ ìåíüøèé îáúåì õðàíèëèùà, îäíàêî òåõíîëîãèÿ MOLAP èìååò ñâîé íåäîñòàòîê, êîòîðûé ñèëüíî âëèÿåò íà èñïîëüçîâàíèå äàííîãî ðåøåíèÿ â äèíàìè÷íî ðàñòóùèõ êîìïàíèÿõ, — MOLAP ñëàáî ìàñøòàáèðóåìà. Äëÿ ìàñøòàáèðîâàíèÿ áàç äàííûõ íà îñíîâå MOLAP òðåáóþòñÿ äîïîëíèòåëüíûå ñåðâåðû. · Relational OLAP (ROLAP) — ðåëÿöèîííàÿ OLAP ïðåäñòàâëÿåò ñîáîé ìíîãîìåðíóþ ñòðóêòóðó, êîòîðàÿ ðåàëèçóåòñÿ çà ñ÷åò èñïîëüçîâàíèÿ ðåëÿöèîííûõ òàáëèö. Äàííûå â ïðîöåññå àíàëèçà âûáèðàþòñÿ èç ðåëÿöèîííîé áàçû äàííûõ ñ ïîìîùüþ ðàçëè÷íûõ àíàëèòè÷åñêèõ èíñòðóìåíòîâ. Îñíîâíûì ïðåèìóùåñòâîì äàííîãî òèïà õðàíèëèù OLAP ÿâëÿåòñÿ âîçìîæíîñòü èñïîëüçîâàíèÿ ñóùåñòâóþùåé èíôðàñòðóêòóðû äëÿ õðàíåíèÿ äàííûõ.  òîì ñëó÷àå, åñëè â êîìïàíèè ðàíåå áûëà ðàçâåðíóòà ðåëÿöèîííàÿ áàçà äàííûõ, îíà ìîæåò áûòü èñïîëüçîâàíà äëÿ ñèñòåì àíàëèçà îïåðàòèâíûõ äàííûõ. Ïîìèìî ýòîãî äàííàÿ òåõíîëîãèÿ õîðîøî ìàñøòàáèðóåòñÿ, îäíàêî äëÿ õðàíåíèÿ äàííûõ ROLAP îáû÷íî òðåáóåòñÿ áîëüøå äèñêîâîãî ïðîñòðàíñòâà, ÷åì ïðè èñïîëüçîâàíèè MOLAP. ROLAP èìååò ìåíüøóþ ñêîðîñòü îáðàáîòêè çàïðîñîâ ïîëüçîâàòåëåé ïî ñðàâíåíèþ ñ MOLAP. · Hybrid OLAP (HOLAP) — ãèáðèäíàÿ OLAP ÿâëÿåòñÿ ñóïåðïîçèöèåé òåõíîëîãèé MOLAP è ROLAP. Îò îáåèõ òåõíîëîãèé îíà áåðåò íàèëó÷øåå. Òàê æå êàê è ROLAP, HOLAP ðàçâåðòûâàåòñÿ íà îñíîâå ðåëÿöèîííûõ áàç äàííûõ, ïîäîáíî MOLAP äàííàÿ òåõíîëîãèÿ ïîçâîëÿåò âûïîëíÿòü õðàíåíèå àãðåãàöèé â õðàíèëèùå, îòëè÷íîì îò ïåðâè÷íîãî ðåëÿöèîííîãî õðàíèëèùà. Ýòà òåõíîëîãèÿ ïîçâîëÿåò ðàçâåðòûâàòü ãèáðèäíûå OLAP íà îñíîâå èìåþùåéñÿ ñòðóêòóðû ðåëÿöèîííûõ áàç äàííûõ è ïðè ýòîì ïîëüçîâàòüñÿ ïðåèìóùåñòâàìè, ïðåäîñòàâëÿåìûìè òåõíîëîãèåé MOLAP. Ïîñëå òîãî êàê ìû ðàçîáðàëèñü â îñíîâíûõ ïîíÿòèÿõ òåõíîëîãèè OLAP, ìîæíî ïåðåéòè ê ðàññìîòðåíèþ ñåðâèñîâ àíàëèòèêè SQL Server 2005.
114
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
5.1.2. Ïðåèìóùåñòâà ñåðâèñîâ àíàëèòèêè Îäíèì èç îñíîâíûõ ïðåèìóùåñòâ ñåðâèñîâ àíàëèòèêè SQL Server 2005 ÿâëÿþòñÿ èçìåíåíèÿ, âíåñåííûå â ÿäðî ñèñòåìû.  SQL Server 2005 óìåíüøåíû îãðàíè÷åíèÿ, êîòîðûå íàêëàäûâàëèñü íà ñèñòåìó â ïðåäûäóùèõ âåðñèÿõ ýòîãî ïðîäóêòà, à òàêæå äîáàâëåí ðÿä íîâûõ ôóíêöèé. Òåïåðü ñåðâèñû àíàëèòèêè ïîääåðæèâàþò êëàñòåðèçàöèþ è ðàáîòó íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server. Óëó÷øåíèÿ êîñíóëèñü èñïîëüçîâàíèÿ òðèããåðîâ è ñðåäñòâ òðàññèðîâêè, ëîêàëèçàöèè, óïðàâëåíèÿ òîìàìè, à òàêæå äðóãèõ êîìïîíåíòîâ ñåðâèñîâ àíàëèòèêè SQL Server 2005.  ñëåäóþùèõ ðàçäåëàõ ìû äåòàëüíî ðàññìîòðèì ïàðàìåòðû ñåðâèñîâ àíàëèòèêè, â êîòîðûõ ïðîèçîøëè èçìåíåíèÿ.
5.1.3. Ïîääåðæêà íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server  ïðåäûäóùåé âåðñèè SQL Server ñåðâèñû àíàëèòèêè íå ïîääåðæèâàëè èñïîëüçîâàíèå íåñêîëüêèõ ýêçåìïëÿðîâ, çà èñêëþ÷åíèåì ðåëÿöèîííîãî õðàíèëèùà, êîòîðîå ïîääåðæèâàëî äî 16 îäíîâðåìåííî ðàáîòàþùèõ ýêçåìïëÿðîâ. Ïîääåðæêà íåñêîëüêèõ ýêçåìïëÿðîâ SQL Server îáû÷íî èñïîëüçóåòñÿ êîìïàíèÿìè, ïðåäîñòàâëÿþùèìè íàáîð âåá-ñåðâèñîâ ñâîèì êëèåíòàì. Ê òàêèì êîìïàíèÿì ìîæíî îòíåñòè ASP-êîìïàíèè, êîëè÷åñòâî êîòîðûõ ìàëî íà ðûíêàõ èíôîðìàöèîííûõ òåõíîëîãèé ïîñòñîâåòñêîãî ïðîñòðàíñòâà. Òàêèå êîìïàíèè ìîãóò èìåòü íåñêîëüêî ñåðâåðîâ äëÿ ïðåäîñòàâëåíèÿ ñåðâèñîâ àíàëèòèêè ñòîðîííèì çàêàç÷èêàì. Òàêèì îáðàçîì, ðàçâåðòûâàÿ íåñêîëüêî ýêçåìïëÿðîâ SQL Server íà îòäåëüíîì êîìïüþòåðå, îíè ìîãóò çíà÷èòåëüíî ñîêðàòèòü ðàñõîäû íà àïïàðàòíîå îáåñïå÷åíèå.  íîâîé âåðñèè SQL Server ïðîáëåìà ðàçâåðòûâàíèÿ íåñêîëüêèõ ýêçåìïëÿðîâ ñåðâèñîâ àíàëèòèêè ñ óñïåõîì ðåøåíà. Òåïåðü íà îòäåëüíîì êîìïüþòåðå ìîæåò áûòü ðàçâåðíóòî äî 50 íåçàâèñèìûõ ýêçåìïëÿðîâ SQL Server, íà êîòîðûõ ìîãóò áûòü óñòàíîâëåíû ñåðâèñû àíàëèòèêè. Ïðè ýòîì íåêîòîðûå ýêçåìïëÿðû SQL Server ìîãóò áûòü íàñòðîåíû íà ðàáîòó ñ ïðåäûäóùåé âåðñèåé ñåðâèñîâ àíàëèòèêè, ÷òî ïîçâîëÿåò íå âûïîëíÿòü îáíîâëåíèå íàèáîëåå êðèòè÷íûõ ñåðâåðîâ äëÿ êîìïàíèè.
5.1.4. Òðèããåðû Åùå îäíèì çíà÷èòåëüíûì óëó÷øåíèåì ñåðâèñîâ àíàëèòèêè â SQL Server 2005 ÿâëÿåòñÿ ïîääåðæêà òðèããåðîâ. Òàê æå êàê â ðåëÿöèîííîé áàçå äàííûõ, òðèããåðû ñåðâèñîâ àíàëèòèêè ìîãóò èñïîëüçîâàòüñÿ äëÿ çàïóñêà õðàíèìûõ ïðîöåäóð ïîñëå ãåíåðàöèè ñèñòåìíîãî ñîáûòèÿ. Ïðè ýòîì çàïóñê òðèããåðîâ ìîæåò âûïîëíÿòüñÿ ñèíõðîííî. Ýòî îçíà÷àåò, ÷òî âûïîëíåíèå ñîáûòèÿ, ïåðåêëþ÷àþùåãî òðèããåð, áóäåò ïðèîñòàíîâëåíî, ïîêà âûïîëíåíèå õðàíèìîé ïðîöåäóðû, çàïóùåííîé ñîáûòèåì îäíîâðåìåííî ñ ïåðåêëþ÷åíèåì òðèããåðà, íå áóäåò çàâåðøåíî.
5.1.5. Òðàññèðîâêà Â SQL Server ïîÿâèëîñü åùå îäíî óëó÷øåíèå, êîòîðîå êîñíóëîñü ìåõàíèçìîâ òðàññèðîâêè ñåðâèñîâ àíàëèòèêè. Òðàññèðîâêà èñïîëüçóåòñÿ äëÿ çàïèñè logôàéëîâ ñ äåòàëüíûì îïèñàíèåì ñîáûòèé, ïðîèñõîäÿùèõ â ñèñòåìå, è äåéñòâèé, âûïîëíÿåìûõ ñåðâåðîì, ñòîðîííèìè ñèñòåìàìè èëè ïîëüçîâàòåëÿìè. Òðàññèðîâêà
5.1. Îáçîð è ïðåèìóùåñòâà
115
âûïîëíÿåòñÿ îäíîâðåìåííî ñ ðàáîòîé ñåðâåðà (ñèíõðîííî) è ïîçâîëÿåò âûïîëíÿòü ìîíèòîðèíã ïðîèçâîäèòåëüíîñòè ñèñòåì, âûÿâëÿòü è ëîêàëèçèðîâàòü îøèáêè, êîòîðûå âîçíèêàþò ïðè ðàáîòå ñåðâèñîâ àíàëèòèêè SQL Server 2005.
5.1.6. Óíèôèöèðîâàííàÿ ìîäåëü èçìåðåíèé Îäíèì èç îñíîâíûõ óëó÷øåíèé, êîòîðûå êîñíóëèñü ñåðâèñîâ àíàëèòèêè â SQL Server 2005, ÿâëÿåòñÿ ñîçäàíèå íîâîé Óíèôèöèðîâàííîé ìîäåëè èçìåðåíèé (UDM — Unified Dimensional Model). UDM ÿâëÿåòñÿ ðåçóëüòàòîì ýâîëþöèîííîãî ðàçâèòèÿ òåõíîëîãèè OLAP â îòíîøåíèè ðàáîòû ñ ìíîãîìåðíûìè êóáàìè äàííûõ. Ñ åå ïîìîùüþ ðåàëèçóåòñÿ âîçìîæíîñòü ñîçäàíèÿ óíèôèöèðîâàííîé ìîäåëè äàííûõ çà ñ÷åò èñïîëüçîâàíèÿ òåõíîëîãèé OLAP è ðåëÿöèîííûõ áàç äàííûõ.  ïðåäûäóùèõ âåðñèÿõ SQL Server áûëî äîñòàòî÷íî ñëîæíî ðåàëèçîâàòü íåêîòîðûå âèäû îò÷åòîâ. Íàïðèìåð, îò÷åòû îá îáðàáîòêå ñ÷åòîâ èëè çàêàçîâ ñëîæíî ðåàëèçîâûâàëèñü íà îñíîâå òåõíîëîãèè OLAP. Äëÿ ñîçäàíèÿ îò÷åòîâ ïîäîáíîãî òèïà èñïîëüçîâàëèñü ðåëÿöèîííûå áàçû äàííûõ.  òî æå âðåìÿ ïðîèçâîäèòåëüíîñòü ñèñòåì àíàëèòèêè ñ èñïîëüçîâàíèåì OLAP-ñõåìû íà ïîðÿäîê âûøå ïî ñðàâíåíèþ ñî ñõåìîé ðåëÿöèîííîé áàçû äàííûõ. Ýòè àðãóìåíòû îáúÿñíÿþò íåîáõîäèìîñòü ñîçäàíèÿ ðåøåíèÿ, êîòîðîå áóäåò ó÷èòûâàòü ïðåèìóùåñòâà êàê ðåëÿöèîííîé ìîäåëè äàííûõ, òàê è OLAP. Îáùèé âèä ñèñòåìû ñ UDM ïîêàçàí íà ðèñ. 5.1.
Ðèñ. 5.1. Îáùèé âèä ñõåìû ñèñòåìû, èñïîëüçóþùåé UDM
 SQL Server 2005 êóá ÿâëÿåòñÿ õðàíèëèùåì äàííûõ. Íåñìîòðÿ íà òî ÷òî â îñíîâå UDM-ìîäåëè òàêæå ëåæèò êóá, ìåõàíèçì äîñòóïà ê íåìó è ñ÷èòûâàíèÿ äàííûõ îòëè÷àåòñÿ îò àíàëîãè÷íîãî â OLAP-ìîäåëè.  UDM ïðåäóñìîòðåí íàáîð ìåòàäàííûõ, êîòîðûé ïðåäîñòàâëÿåò âîçìîæíîñòè, íå ðåàëèçóåìûå ñ ïîìîùüþ òåõíîëîãèé MOLAP, ROLAP èëè HOLAP.  SQL Server 2005 ïðèëîæåíèÿ OLAP óñòàíàâëèâàþò ñîåäèíåíèå ñ ñåðâèñîì àíàëèòèêè ñ ïîìîùüþ XMLA- è UDM-çàïðîñîâ, êîòîðûå ìîãóò áûòü ñîçäàíû äëÿ ñîåäèíåíèÿ êàê ñ àíàëèòè÷åñêèìè, òàê è ñ ðåëÿöèîííûìè áàçàìè äàííûõ.
5.1.7. Êýøèðîâàíèå Ñîãëàñíî òåõíîëîãèè UDM, ñåðâåð ìîæåò â àâòîìàòè÷åñêîì ðåæèìå âûïîëíÿòü êýøèðîâàíèå äàííûõ. Ýòî ïîçâîëÿåò ðåàëèçîâàòü òàêîé æå áûñòðûé äîñòóï ê äàííûì, êàê ýòî âîçìîæíî ïðè èñïîëüçîâàíèè òåõíîëîãèè MOLAP. Èñïîëüçóÿ
116
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
íàáîð óòèëèò, âû ìîæåòå íàñòðîèòü ïðîïóñêíóþ ñïîñîáíîñòü äëÿ äàííûõ ïðè èñïîëüçîâàíèè êýøà, à òàêæå åãî îáúåì. Åñëè äëÿ ïðîïóñêíîé ñïîñîáíîñòè óñòàíîâëåíî íóëåâîå çíà÷åíèå, òî âñå äàííûå áóäóò êýøèðîâàòüñÿ â âèäå äàííûõ MOLAP. Ñ ïîìîùüþ íàñòðîéêè ïðîäîëæèòåëüíîñòè õðàíåíèÿ äàííûõ âû ìîæåòå îïðåäåëèòü, êàêîé ïðîìåæóòîê âðåìåíè äàííûå áóäóò õðàíèòüñÿ â êýøå. Èíòåðâàë õðàíåíèÿ äàííûõ â êýøå ìîæåò áûòü êàê äîñòàòî÷íî äëèííûé, òàê è êîðîòêèé (îò ìèíóò äî íåñêîëüêèõ äíåé èëè äàæå íåäåëü). Ïðè ýòîì äîñòàòî÷íî ÷àñòî èñïîëüçóåòñÿ óïðåæäàþùå êýøèðîâàíèå, ÷òî ïîçâîëÿåò ïîìåñòèòü äàííûå â êýø ïåðåä òåì, êàê â íèõ ïîÿâèòñÿ íåîáõîäèìîñòü. Òåõíîëîãèÿ óïðåæäàþùåãî êýøèðîâàíèÿ èñïîëüçîâàëàñü â ïðåäûäóùåé âåðñèè SQL Server.  SQL Server 2005 ïåðåä òåì, êàê èñïîëüçîâàòü êýøèðîâàíèå äàííûõ, íåîáõîäèìî ñîçäàòü êóáû è âíåñòè â íèõ ñîîòâåòñòâóþùèå äàííûå. Äëÿ áîëüøèõ îáúåìîâ äàííûõ ýòî ìîæåò çàíÿòü îãðîìíûé ïðîìåæóòîê âðåìåíè.  ýòîì ñëó÷àå èñïîëüçóåòñÿ ïðåäâàðèòåëüíîå êýøèðîâàíèå, óñêîðÿþùåå ïðîöåññ âíåñåíèÿ èëè ÷òåíèÿ äàííûõ íà äàííîì ýòàïå ðàáîòû ñ êóáàìè äàííûõ.
5.1.8. Óïðàâëåíèå çàâèñøèìè ñòðîêàìè  ñåðâèñàõ àíàëèòèêè SQL Server 2005 ïîÿâèëèñü íîâûå ìåòîäû äëÿ ðàáîòû ñ çàâèñøèìè ñòðîêàìè.  ïðåäûäóùåé âåðñèè SQL Server àäìèíèñòðàòîðû íå ìîãëè ðåøàòü äàííûå ïðîáëåìû ñ ïîìîùüþ ñòàíäàðòíûõ ñðåäñòâ. Ýòî ïðèâîäèëî ê ñáîÿì â ðàáîòå ñåðâèñîâ è òðåáîâàëî ïîñòîÿííîãî óñòðàíåíèÿ íåïîëàäîê ïîäîáíîãî êëàññà â áàçàõ äàííûõ.  ñåðâèñàõ àíàëèòèêè SQL Server 2000 ïðè ïðîõîäå òàáëèö èãíîðèðîâàëèñü òå ñòðîêè, êîòîðûå èìåëè íåïðàâèëüíîå çíà÷åíèå èäåíòèôèêàòîðà èçìåðåíèÿ. Ýòî ïðèâîäèëî ê ïîÿâëåíèþ ïîãðåøíîñòè ïðè àíàëèçå äàííûõ â òîì ñëó÷àå, åñëè äàííûå ñðàâíèâàëèñü ñ äðóãèì èñòî÷íèêîì äàííûõ.  íîâîé âåðñèè SQL Server ïîçâîëÿåò îáðàáàòûâàòü îøèáêè, âîçíèêàþùèå ïðè îáðàáîòêå ïîäîáíûõ ñòðîê. Àäìèíèñòðàòîð ìîæåò âûáðàòü îäèí èç äâóõ ñïîñîáîâ îáðàáîòêè çàâèñøèõ ñòðîê: · èãíîðèðîâàòü ïîÿâëåíèå ïîäîáíûõ îøèáîê — àíàëîã ìåõàíèçìà, èñïîëüçóåìîãî â ñåðâèñàõ àíàëèòèêè SQL Server 2000; · ñîçäàòü íàáîð ýëåìåíòîâ ñ íåîïðåäåëåííûì èäåíòèôèêàòîðîì èçìåðåíèÿ — â ýòó òàáëèöó áóäóò çàíîñèòüñÿ ñòðîêè ñ íåîïðåäåëåííûìè èäåíòèôèêàòîðàìè èçìåðåíèé, ÷òî ïîçâîëèò îáðàáîòàòü èõ îòäåëüíî îò äðóãèõ.
5.1.9. Ïîääåðæêà êëàñòåðèçàöèè Êàê îïèñûâàëîñü â ïðåäûäóùèõ ðàçäåëàõ, SQL Server 2005 èìååò ðàñøèðåííóþ ïîääåðæêó ñõåìû êëàñòåðèçàöèè, ÷òî ïîçâîëÿåò îáåñïå÷èòü áåçîïàñíîñòü õðàíåíèÿ äàííûõ è ïðàêòè÷åñêè ñòîïðîöåíòíóþ îòêàçîóñòîé÷èâîñòü ñèñòåì õðàíåíèÿ äàííûõ.  ïðåäûäóùåé âåðñèè ñåðâèñîâ àíàëèòèêè íå ïîääåðæèâàëàñü ñõåìà êëàñòåðèçàöèè, ÷òî â íåêîòîðûõ ñëó÷àÿõ äëÿ êîìïàíèé ïðåâðàùàëîñü â ïîòåðè äàííûõ è ñáîè â ðàáîòå àíàëèòè÷åñêèõ ñèñòåì.  íîâóþ âåðñèþ ñåðâèñîâ àíàëèòèêè âñòðîåíà ïîääåðæêà ñõåìû êëàñòåðèçàöèè. Ïðè ýòîì âû ìîæåòå áåç äîïîëíèòåëüíîé ñëîæíîé íàñòðîéêè áûñòðî óñòàíîâèòü ñåðâèñû àíàëèòèêè â êëàñòåðå. Äëÿ ðàçâåðòûâàíèÿ ñåðâèñîâ àíàëèòèêè íåîáõîäèìî óñòàíîâèòü èõ â êàæäîì
5.1. Îáçîð è ïðåèìóùåñòâà
117
óçëå. Â ïîìîùü àäìèíèñòðàòîðó èìååòñÿ óòèëèòà óñòàíîâêè ñåðâèñà àíàëèòèêè, êîòîðàÿ ïîçâîëÿåò óñòàíîâèòü ñåðâèñ íà îòäåëüíûå óçëû êëàñòåðà.
5.1.10. Ñîçäàíèå îáúåêòîâ ñ ïîìîùüþ ñöåíàðèåâ  íîâîé âåðñèè ñåðâèñîâ àíàëèòèêè SQL Server ïîääåðæèâàåòñÿ ñîçäàíèå íîâûõ áàç äàííûõ è îáúåêòîâ ñ ïîìîùüþ ñöåíàðèåâ. Çà ñ÷åò ýòîãî óñêîðÿåòñÿ ïðîöåññ ñîçäàíèÿ è ðåôàêòîðèíãà êîäà, ÷òî ñêàçûâàåòñÿ íà ïðîèçâîäèòåëüíîñòè ðàáîòû ðàçðàáîò÷èêîâ. Äëÿ ñîçäàíèÿ îáúåêòîâ ñåðâèñîâ àíàëèòèêè èñïîëüçóåòñÿ íîâûé ÿçûê ODL (Object Definition Language), êîòîðûé ñîçäàí íà îñíîâå XML. Ñ åãî ïîìîùüþ ìîæíî ñîçäàâàòü, èçìåíÿòü, ðåäàêòèðîâàòü ñâîéñòâà è óäàëÿòü îáúåêòû. Ïîìèìî ýòîãî ñ ïîìîùüþ ODL ìîæíî âûïîëíÿòü îáðàáîòêó êóáîâ è ñðàâíåíèå âåðñèé áàç äàííûõ. Áîëåå äåòàëüíî ìû ðàññìîòðèì ODL äàëåå â äàííîé ãëàâå.
5.1.11. Èíôîðìàöèîííàÿ ïðîõîäêà Èíôîðìàöèîííàÿ ïðîõîäêà (Data Mining) ïîçâîëÿåò âûÿâëÿòü ñêðûòûå çàâèñèìîñòè â íàáîðàõ äàííûõ. Íà îñíîâå èíôîðìàöèè î çàâèñèìîñòÿõ, âëèÿþùèõ íà õîä ïðîöåññîâ, ìîæíî ïûòàòüñÿ ïðåäñêàçàòü, êàê ñîáûòèÿ áóäóò ðàçâèâàòüñÿ â áóäóùåì, åñëè äàííûå çàâèñèìîñòè ñîõðàíÿòñÿ.  SQL Server 2000 áûëè ðåàëèçîâàíû äâà íîâûõ àëãîðèòìà äëÿ âûÿâëåíèÿ ñêðûòûõ çàâèñèìîñòåé: · äåðåâüÿ ðåøåíèé (Decision Trees); · êëàñòåðèçàöèÿ (Clustering).  íîâîé âåðñèè SQL Server äàííûå àëãîðèòìû áûëè äîïîëíåíû íîâûìè.  SQL Server 2005 èñïîëüçóþòñÿ ñëåäóþùèå àëãîðèòìû äëÿ âûÿâëåíèÿ ñêðûòûõ çàâèñèìîñòåé â íàáîðàõ äàííûõ: · Decision Trees — äàííûé àëãîðèòì èñïîëüçóåòñÿ äëÿ ïðåäâàðèòåëüíîãî ïðåäñêàçàíèÿ õîäà ðàçâèòèÿ ñîáûòèé. Îí ìîæåò èñïîëüçîâàòüñÿ äëÿ ïðåäñêàçàíèÿ íåïðåðûâíûõ è äèñêðåòíûõ ïåðåìåííûõ; · Sequence Clustering — äàííûé àëãîðèòì èñïîëüçóåòñÿ äëÿ âûáîðà íàèëó÷øåé ìîäåëè, êîòîðàÿ áóäåò îïèñûâàòü íàáîð äàííûõ; · Native Bayes — àëãîðèòì äëÿ ïðåäñêàçàíèÿ ðàçâèòèÿ ìîäåëè. Èìååò äîñòàòî÷íî âûñîêóþ ïðîèçâîäèòåëüíîñòü ïðè ïðåäñêàçàíèè ðàçâèòèÿ ìîäåëè äàííûõ; · Time Series — ïîçâîëÿåò âíåñòè êîíöåïöèþ ïðîøëîãî, íàñòîÿùåãî è áóäóùåãî â ïîíÿòèå ïðåäñêàçàíèÿ õîäà ñîáûòèé. Èñïîëüçóÿ äàííûé àëãîðèòì, ìîæíî ïðåäñêàçûâàòü õîä ïîñëåäîâàòåëüíîñòè ÷èñåë è íà îñíîâå ýòîãî ñîçäàâàòü âðåìåííûå ñðåçû äëÿ ñîáûòèé â ïðîøëîì, íàñòîÿùåì è áóäóùåì äëÿ âûáðàííîé ìîäåëè äàííûõ. Ýòîò àëãîðèòì ìîæåò èñïîëüçîâàòüñÿ íå òîëüêî äëÿ âûáîðà íàèëó÷øåãî ïîñëåäîâàòåëüíîãî ÷èñëà â ñåðèè, íî è äëÿ îïðåäåëåíèÿ âðåìåííîãî ïðîìåæóòêà, â êîòîðûé ñòîèò îæèäàòü íàèáîëåå áëèçêîå çíà÷åíèå ê âûáðàííîìó ÷èñëó èëè êîãäà âëèÿíèå îïðåäåëåííîãî ôàêòîðà íà ðàçâèòèå ñîáûòèé áóäåò ìàêñèìàëüíûì; · Association Rules — èñïîëüçóåòñÿ äëÿ àíàëèçà òðàíçàêöèîííûõ äàííûõ. Ïîçâîëÿåò îòûñêèâàòü ãðóïïû ýëåìåíòîâ, êîòîðûå ïåðåäàþòñÿ âî âðåìÿ òðàíçàêöèè.
118
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
5.1.12. Ëîêàëèçàöèÿ Óëó÷øåíèÿ â íîâîé âåðñèè ñåðâèñîâ àíàëèòèêè SQL Server êîñíóëèñü òàêæå âîïðîñîâ ëîêàëèçàöèè. Íîâîå ÿäðî ñåðâèñîâ àíàëèòèêè èìååò ñðåäñòâà äëÿ õðàíåíèÿ èíôîðìàöèè íà ðàçíûõ ÿçûêàõ. Ìóëüòèÿçû÷íîñòü ñåðâèñîâ àíàëèòèêè ïîçâîëÿåò ïðèëîæåíèÿì îòîáðàæàòü ìåòàäàííûå êóáîâ è äàííûå, ñ÷èòàííûå èç áàçû äàííûõ, íà òîì ÿçûêå, êîòîðûé áîëüøå âñåãî ïîäõîäèò äëÿ äàííîãî ïîëüçîâàòåëÿ. Ïîìèìî ýòîãî ñåðâèñû àíàëèòèêè ïîääåðæèâàþò íàñòðîéêó èñïîëüçóåìîãî ïî óìîë÷àíèþ ÿçûêà äëÿ êëèåíòñêîãî ïðèëîæåíèÿ. Ýòî ïîçâîëÿåò àâòîìàòè÷åñêè âûáèðàòü ÿçûê ïðåäñòàâëåíèÿ äàííûõ äëÿ ìóëüòèÿçû÷íîãî ïðèëîæåíèÿ. Ïðè ýòîì ïîëüçîâàòåëü â äàëüíåéøåì ñìîæåò âûáðàòü îäèí èç ïðåäëîæåííûõ ÿçûêîâ äëÿ îòîáðàæåíèÿ äàííûõ.
5.1.13. Èíòåãðàöèÿ ñî ñðåäñòâàìè ðàçðàáîòêè .NET Framework ßäðî SQL Server 2005 èíòåãðèðîâàíî ñî ñðåäîé ðàçðàáîòêè .NET Framework. Ýòî ïîçâîëÿåò áûñòðî ðàçðàáàòûâàòü è âíåäðÿòü ïðîãðàììíûå ïðîäóêòû ñ èñïîëüçîâàíèåì ôóíêöèîíàëüíîñòè SQL Server, à òàêæå èñïîëüçîâàòü êëàññû îáúåêòîâ, êîòîðûå ñîçäàâàëèñü ðàçðàáîò÷èêàìè Microsoft. Ñåðâèñû àíàëèòèêè òàêæå èíòåãðèðîâàíû ñî ñðåäîé .NET Framework. Áëàãîäàðÿ ýòîé èíòåãðàöèè ñòàíîâèòñÿ âîçìîæíûì èñïîëüçîâàòü XML è SOAP (Simple Object Access Protocol) â ïðîãðàììíûõ ðåøåíèÿõ. Ïîìèìî ýòîãî ñòàíîâèòñÿ âîçìîæíûì èñïîëüçîâàíèå òðèããåðîâ â ïðèëîæåíèÿõ .NET, ÷òî óïðîùàåò ïðîöåññ ðàçðàáîòêè êëèåíò-ñåðâåðíûõ ïðèëîæåíèé.
5.2. Óïðàâëåíèå ñåðâèñàìè àíàëèòèêè  SQL Server 2005 áûë çíà÷èòåëüíî ïåðåñìîòðåí è ðàñøèðåí íàáîð èíñòðóìåíòîâ äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè. Ýòî âûçâàíî â îñíîâíîì òåì, ÷òî â íîâîé âåðñèè ñåðâèñîâ ïîÿâèëèñü äîïîëíèòåëüíûå ôóíêöèè, êîòîðûå òàêæå íåîáõîäèìî íàñòðàèâàòü. Äëÿ óïðàâëåíèÿ ñåðâèñàìè àíàëèòèêè SQL Server 2000 èñïîëüçîâàëñÿ êîìïîíåíò Analysis Manager.  íîâîé âåðñèè ñåðâèñîâ âû íå íàéäåòå ýòîãî ïðîãðàììíîãî ïðîäóêòà. Òåïåðü åãî çàìåíèëè äâà èíñòðóìåíòà — SQL Server Management Studio è SQL Server Configuration Manager, î êîòîðûõ ïîéäåò ðàçãîâîð â äàííîì ðàçäåëå.
5.2.1. SQL Server Management Studio Óòèëèòà SQL Server Management Studio — ýòî îäèí èç îñíîâíûõ èíñòðóìåíòîâ, êîòîðûé èñïîëüçóåòñÿ äëÿ óïðàâëåíèÿ SQL Server è ñåðâèñàìè àíàëèòèêè. Ñ åå ïîìîùüþ àäìèíèñòðàòîðû ìîãóò ðåøàòü ðàçëè÷íûå àäìèíèñòðàòèâíûå çàäà÷è, òàêèå êàê ñîçäàíèå áàç äàííûõ ñåðâèñîâ àíàëèòèêè, ñîçäàíèå ñöåíàðèåâ äëÿ âûïîëíåíèÿ ðàçëè÷íûõ çàäà÷, èõ íàñòðîéêà è ðåäàêòèðîâàíèå. Ñ ïîìîùüþ SQL Server Management Studio ìîæíî íàñòðîèòü óðîâíè äîñòóïà ê òåì èëè èíûì îáúåêòàì áàçû äàííûõ, íàñòðîèòü òðàññèðîâêó äîñòóïà ïîëüçîâàòåëåé â áàçû äàííûõ ñåðâèñîâ àíàëèòèêè, à òàêæå âûïîëíÿòü äðóãèå äåéñòâèÿ ïî àäìèíèñòðèðîâàíèþ ñåðâèñîâ àíàëèòèêè.
5.2. Óïðàâëåíèå ñåðâèñàìè àíàëèòèêè
119
 SQL Server Management Studio âñòðîåíà ïîääåðæêà ðåäàêòîðà Multidimensional Expression (MDX) Editor, êîòîðûé ïîçâîëÿåò ñîçäàâàòü, îòëàæèâàòü è âûïîëíÿòü çàïðîñû ê ìíîãîìåðíûì áàçàì äàííûõ, à òàêæå ñîçäàâàòü îáúåêòû ñåðâèñîâ àíàëèòèêè ñ ïîìîùüþ ñöåíàðèåâ. Îáùèé âèä ðåäàêòîðà MDX ïîêàçàí íà ðèñ. 5.2. Ðåäàêòîð MDX ïîçâîëÿåò âûïîëíÿòü âûäåëåíèå öâåòîì îòäåëüíûõ âñòàâîê êîäà, ÷òî óïðîùàåò è óñêîðÿåò ïðîöåññ ðàçðàáîòêè çàïðîñîâ è ñöåíàðèåâ.
Ðèñ. 5.2. Multidimensional Expression (MDX) Editor
Òàêæå â ðåäàêòîðå MDX èìååòñÿ èíòåãðèðîâàííûé áðàóçåð ìåòàäàííûõ, êîòîðûé ïîêàçàí â ëåâîé ÷àñòè ðèñ. 5.2. Áîëåå äåòàëüíî ôóíêöèè SQL Server Management Studio îáñóæäàëèñü â ðàçäåëå 3.1.2 «SQL Server Management Studio (SQL SMS)».
5.2.2. SQL Server Configuration Manager Óòèëèòà SQL Server Configuration Manager èñïîëüçóåòñÿ äëÿ çàïóñêà è îñòàíîâêè ñåðâèñîâ àíàëèòèêè. Äëÿ çàïóñêà ýòîé óòèëèòû ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà çíà÷êå My Computer è âûáåðèòå â êîíòåêñòíîì ìåíþ êîìàíäó Manage. Äëÿ çàïóñêà èëè îñòàíîâêè óñòàíîâëåííîãî ñåðâèñà àíàëèòèêè âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Ùåëêíèòå íàïðîòèâ êðåñòèêà ñ íàäïèñüþ Services, çàòåì íàïðîòèâ Applications è, íàêîíåö, SQL Server Configuration Manager. Îáùèé âèä êîíñîëè àäìèíèñòðèðîâàíèÿ ïîñëå âûïîëíåííûõ äåéñòâèé ïîêàçàí íà ðèñ. 5.3. 2. Ùåëêíèòå ïðàâîé êíîïêîé íà íàäïèñè Analysis Server (MSSQLSERVER), ðàñïîëîæåííîé â ïðàâîé ÷àñòè ýêðàíà, è âûáåðèòå â êîíòåêñòíîì ìåíþ îäíî èç çíà÷åíèé: start, stop, pause.
120
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
Áîëåå äåòàëüíîå îïèñàíèå SQL Server Configuration Manager ïðèâîäèòñÿ â ðàçäåëå 3.1.1 «Óòèëèòà SQL Server Configuration Manager».
Ðèñ. 5.3. Êîíñîëü àäìèíèñòðèðîâàíèÿ
5.2.3. Ïðèâèëåãèè  íîâîé âåðñèè SQL Server ïîÿâèëàñü âîçìîæíîñòü áîëåå òîíêî íàñòðàèâàòü ïàðàìåòðû äîñòóïà äëÿ àäìèíèñòðàòèâíûõ ó÷åòíûõ çàïèñåé. Äëÿ âûïîëíåíèÿ çàäà÷ àäìèíèñòðèðîâàíèÿ â SQL Server 2000 íåîáõîäèìî áûëî âõîäèòü â ñîñòàâ ãðóïïû OLAP Administrators. Ýòî ïîçâîëÿëî âûïîëíÿòü íàñòðîéêó è âíåñåíèå èçìåíåíèé â áàçû äàííûõ ñåðâèñîâ àíàëèòèêè. Èñïîëüçóÿ íîâûé íàáîð ñèñòåìíûõ ïðèâèëåãèé SQL Server 2005, ìîæíî ñîçäàâàòü íåñêîëüêî òèïîâ àäìèíèñòðàòîðîâ äëÿ ðàçëè÷íûõ áàç äàííûõ. Ýòî ïîçâîëèò áîëåå òîíêî ðàçãðàíè÷èâàòü óðîâåíü äîñòóïà îòäåëüíûõ àäìèíèñòðàòîðîâ ê òîé èëè èíîé ôóíêöèîíàëüíîñòè áàç äàííûõ ñåðâèñîâ àíàëèòèêè.  ñèñòåìå áåçîïàñíîñòè ñåðâèñîâ àíàëèòèêè SQL Server 2005 ïîÿâèëèñü ñëåäóþùèå óðîâíè äîñòóïà: · ðàáîòà ñ êóáàìè; · ïîäêëþ÷åíèå ó÷åòíûõ çàïèñåé; · ÷òåíèå ìåòàäàííûõ.
5.2.4. Ðåçåðâèðîâàíèå è âîññòàíîâëåíèå äàííûõ  ñåðâèñàõ àíàëèòèêè SQL Server 2005 ïåðåñìîòðåíû è óëó÷øåíû ïàðàìåòðû ðåçåðâíîãî êîïèðîâàíèÿ è âîññòàíîâëåíèÿ äàííûõ. Âî-ïåðâûõ, ýòî îòíîñèòñÿ ê ñíÿòèþ íåêîòîðûõ îãðàíè÷åíèé, êîòîðûå ñóùåñòâîâàëè â SQL Server 2000
5.2. Óïðàâëåíèå ñåðâèñàìè àíàëèòèêè
121
(ýòî îòíîñèòñÿ ê ñíÿòèþ îãðàíè÷åíèÿ íà ðàçìåð ôàéëà ðåçåðâíîé êîïèè â 2 Ãáàéò). Âî-âòîðûõ, òåïåðü ìîæíî áûñòðåå, íå îñòàíàâëèâàÿ SQL Server, âûïîëíÿòü âîññòàíîâëåíèå äàííûõ.  SQL Server 2000 ðàçìåð ôàéëà ðåçåðâíîé êîïèè áûë îãðàíè÷åí çíà÷åíèåì 2 Ãáàéò. Ýòî îãðàíè÷åíèå îòíîñèëîñü ê ñæàòîìó çàøèôðîâàííîìó ôàéëó.  íîâîé âåðñèè SQL Server äîïóñòèìûé ðàçìåð ôàéëà ðåçåðâíîé êîïèè çíà÷èòåëüíî óâåëè÷åí è èìååò çíà÷åíèå 16 Òáàéò. Ýòî òðåáîâàíèå çàäàåòñÿ ñêîðåå îãðàíè÷åíèåì, íàêëàäûâàåìûì íà ðàçìåð ôàéëà ñàìîé ôàéëîâîé ñèñòåìîé NTFS, ÷åì îãðàíè÷åíèÿìè SQL Server. Ôàéëû ðåçåðâíûõ êîïèé ñåðâèñîâ àíàëèòèêè ìîãóò áûòü îäíîâðåìåííî ñæàòû è çàøèôðîâàíû. Ýòà âîçìîæíîñòü óäëèíÿåò ïðîöåññ ñîçäàíèÿ ðåçåðâíîé êîïèè, ïîñêîëüêó ñåðâåðó íåîáõîäèìî íå òîëüêî ñæàòü ôàéë, íî è âûïîëíèòü åãî øèôðîâàíèå. Îäíàêî ýòè íåäîñòàòêè ñ ëèõâîé ïåðåêðûâàþòñÿ ïðåèìóùåñòâàìè, êîòîðûå ðåàëèçóþòñÿ ñ ïîìîùüþ îäíîâðåìåííîãî èñïîëüçîâàíèÿ äàííûõ ôóíêöèé: ôàéëû ðåçåðâíûõ êîïèé áóäóò ìåíüøåãî ðàçìåðà è äîñòóï ê äàííûì âíóòðè íèõ áóäåò îãðàíè÷åí â ðåçóëüòàòå èõ øèôðîâàíèÿ.  íîâîé âåðñèè SQL Server ïîääåðæèâàåòñÿ âîçìîæíîñòü áûñòðîãî âîññòàíîâëåíèÿ ðåçåðâíîé êîïèè íà ëþáîé ýêçåìïëÿð SQL Server. Ýòî îçíà÷àåò, ÷òî äàííûå ìîæíî äîñòàòî÷íî áûñòðî ñ ïîìîùüþ ñîçäàíèÿ ðåçåðâíîé êîïèè ïåðåíîñèòü íà äðóãèå ýêçåìïëÿðû SQL Server.
5.2.5. Øèôðîâàíèå Øèôðîâàíèå — ýòî åùå îäíî äîñòàòî÷íî âàæíîå óëó÷øåíèå, êîòîðîå êîñíóëîñü ñèñòåìû áåçîïàñíîñòè ñåðâèñîâ àíàëèòèêè SQL Server. Òåïåðü øèôðîâàíèå ìîæåò èñïîëüçîâàòüñÿ â íåñêîëüêèõ ïîòåíöèàëüíî óÿçâèìûõ ìåñòàõ ñèñòåìû: · êàíàë îáìåíà èíôîðìàöèåé ìåæäó êëèåíòñêèì ïðèëîæåíèåì è ñåðâåðîì ìîæåò èñïîëüçîâàòü ìåõàíèçì øèôðîâàíèÿ äëÿ îáåñïå÷åíèÿ áåçîïàñíîé ïåðåäà÷è äàííûõ; · êóáû íà ëîêàëüíûõ êîìïüþòåðàõ òàêæå ìîãóò áûòü çàøèôðîâàíû äëÿ îáåñïå÷åíèÿ íåîáõîäèìîãî óðîâíÿ áåçîïàñíîñòè; · äëÿ ôàéëîâ ðåçåðâíûõ êîïèé ñåðâèñîâ àíàëèòèêè òàêæå ìîãóò áûòü âûïîëíåíû ôóíêöèè øèôðîâàíèÿ, ÷òîáû îãðàíè÷èòü äîñòóï ê íèì ñî ñòîðîíû íåæåëàòåëüíûõ ïîëüçîâàòåëåé.
5.2.6. Áåçîïàñíîñòü Èçìåíåíèÿ â ñèñòåìå áåçîïàñíîñòè SQL Server òàêæå êîñíóëèñü ñåðâèñîâ àíàëèòèêè.  íîâîé âåðñèè èçìåíåíèþ ïîäâåðãëèñü áîëåå 100 ðàçëè÷íûõ ïàðàìåòðîâ è ìåõàíèçìîâ, êîòîðûå â ïðåäûäóùèõ âåðñèÿõ áûëè óÿçâèìûìè èëè ìîãëè ñòàòü óÿçâèìûìè ïðè îïðåäåëåííûõ äåéñòâèÿõ âçëîìùèêîâ. Áîëåå äåòàëüíî íåêîòîðûå èç ïîêàçàòåëåé, êîòîðûå ïîäâåðãëèñü óëó÷øåíèþ â îòíîøåíèè áåçîïàñíîñòè, ìû ðàññìîòðèì â ãëàâå 12 «Áåçîïàñíîñòü».
122
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
5.2.7. Áåçîïàñíîñòü ïî óìîë÷àíèþ Ñåðâèñû àíàëèòèêè ñîçäàâàëèñü òàêèì îáðàçîì, ÷òîáû îáåñïå÷èâàòü ìàêñèìàëüíûé óðîâåíü áåçîïàñíîñòè ñðàçó ïî çàâåðøåíèè èõ óñòàíîâêè è ðàçâåðòûâàíèÿ. Âî-ïåðâûõ, ïîñëå óñòàíîâêè ñåðâèñû àíàëèòèêè èìåþò ïî óìîë÷àíèþ íàèìåíüøèå ïðèâèëåãèè, ÷òî óìåíüøàåò âîçìîæíûå ïîòåðè äàííûõ ïðè íåïðàâèëüíîé ðàáîòå ñåðâèñîâ èëè îøèáêàõ â èõ íàñòðîéêå. Âî-âòîðûõ, ïîñëå óñòàíîâêè ïðîãðàììíîãî ïðîäóêòà âñå ïàðàìåòðû áåçîïàñíîñòè ïî óìîë÷àíèþ âêëþ÷åíû. Ýòî îçíà÷àåò, ÷òî óðîâåíü áåçîïàñíîñòè òîëüêî ÷òî óñòàíîâëåííîé ñèñòåìû ìàêñèìàëåí. Â-òðåòüèõ, âñå ïðîãðàììíûå ïðåèìóùåñòâà, êîòîðûå ìîãóò íåãàòèâíî ñêàçàòüñÿ íà îáùåé áåçîïàñíîñòè ñèñòåìû, îòêëþ÷åíû ïî óìîë÷àíèþ. Ýòî ïîäðàçóìåâàåò îòêëþ÷åíèå ñëåäóþùèõ ïàðàìåòðîâ: · àíîíèìíûé äîñòóï; · HTTP-äîñòóï; · çàïðîñû òèïà Openrowset; · õðàíèìûå ïðîöåäóðû. Ïî óìîë÷àíèþ ïåðå÷èñëåííûå ôóíêöèè îòêëþ÷åíû. Åñëè íåîáõîäèìî çàäåéñòâîâàòü îäíó èëè íåñêîëüêî ôóíêöèé, îòêëþ÷åííûõ ïî óìîë÷àíèþ (â ïåðâóþ î÷åðåäü ýòî ìîæåò îòíîñèòüñÿ ê õðàíèìûì ïðîöåäóðàì SQL Server), òî îíè äîëæíû áûòü âêëþ÷åíû àäìèíèñòðàòîðîì.
5.3. Ñðåäñòâà ðàçðàáîòêè Â íîâîé âåðñèè ñåðâèñîâ àíàëèòèêè ïðîèçîøëè êàðäèíàëüíûå èçìåíåíèÿ. Óòèëèòà Business Intelligence Development Studio çàìåíèëà îñíîâíîé èíñòðóìåíò äëÿ ñîçäàíèÿ è íàñòðîéêè ñåðâèñîâ àíàëèòèêè Analysis Manager. Ïîìèìî ýòîãî äîñòóï ê ñåðâèñàì àíàëèòèêè îñóùåñòâëÿåòñÿ ñ èñïîëüçîâàíèåì íîâîãî ïðîòîêîëà XML for Analysis (XMLA). Äëÿ ñåðâèñîâ àíàëèòèêè ïîÿâèëèñü äâå àáñîëþòíî íîâûå ñðåäû ðàçðàáîòêè: · Analysis Management Objects (AMO) — äëÿ óïðàâëåíèÿ ñåðâèñàìè àíàëèòèêè; · ADO MD.NET — äëÿ ñîçäàíèÿ ïðèëîæåíèé. Îáå ñðåäû ðàçðàáîòêè ñåðâèñîâ àíàëèòèêè èíòåãðèðîâàíû ñî ñðåäîé .NET Framework, ÷òî ïîçâîëÿåò óíèôèöèðîâàòü è óñêîðèòü ïðîöåññ ðàçðàáîòêè ïðèëîæåíèé íà îñíîâå ñåðâèñîâ àíàëèòèêè.
5.3.1. BI Development Studio Business Intelligence Development Studio — ýòî îäèí èç îñíîâíûõ èíñòðóìåíòîâ äëÿ ðàçðàáîòêè è íàñòðîéêè ïðèëîæåíèé ñåðâèñîâ àíàëèòèêè. BI Development Studio â îòëè÷èå îò SQL Server Management Studio èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ ïðèëîæåíèé ñåðâèñîâ àíàëèòèêè. Ïðè ýòîì SQL Server Management Studio èñïîëüçóåòñÿ äëÿ óïðàâëåíèÿ áàçàìè äàííûõ è îáúåêòàìè ñåðâèñîâ àíàëèòèêè.
5.3. Ñðåäñòâà ðàçðàáîòêè
123
Îáå óòèëèòû äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè ïîñòðîåíû íà îñíîâå ñðåäû ðàçðàáîòêè Visual Studio. Ýòî íå òðåáóåò äîïîëíèòåëüíûõ çàòðàò íà îáó÷åíèå ðàçðàáîò÷èêîâ è àäìèíèñòðàòîðîâ. Áîëåå äåòàëüíîå îïèñàíèå Business Intelligence Development Studio áûëî ïðèâåäåíî â ðàçäåëå 3.1.7 «Óòèëèòà Business Intelligence Development Studio (BIDS)».
5.3.2. Îíëàéíîâûé è îôëàéíîâûé ðåæèìû  ïðåäûäóùåé âåðñèè ñåðâèñîâ àíàëèòèêè óòèëèòà Analysis Manager ìîãëà èñïîëüçîâàòüñÿ òîëüêî â ïîäêëþ÷åííîì ñîñòîÿíèè. Ýòî îçíà÷àåò, ÷òî äëÿ ðàçðàáîòêè è íàñòðîéêè ïðèëîæåíèé ñåðâèñîâ àíàëèòèêè íåîáõîäèìî áûëî ñíà÷àëà óñòàíîâèòü ñâÿçü ñ áàçîé äàííûõ, à çàòåì ïðèñòóïàòü ê ñîçäàíèþ ïðèëîæåíèÿ. Íîâàÿ óòèëèòà Business Intelligence Development Studio ìîæåò èñïîëüçîâàòüñÿ êàê â îíëàéíîâîì, òàê è â îôëàéíîâîì ðåæèìàõ. Ýòî îçíà÷àåò, ÷òî äëÿ ñîçäàíèÿ ïðèëîæåíèé íåò íåîáõîäèìîñòè óñòàíàâëèâàòü ñîåäèíåíèÿ ñ ñåðâåðîì àíàëèòèêè.  áàçå äàííûõ ïðè èñïîëüçîâàíèè îôëàéíîâîãî ðåæèìà íå âûïîëíÿþòñÿ êàêèå-ëèáî èçìåíåíèÿ. Èõ ìîæíî âûïîëíèòü òîëüêî ïîñëå òîãî, êàê âû ðåøèòå óñòàíîâèòü ïðèëîæåíèå.  ðåçóëüòàòå óñòàíîâêè ïðèëîæåíèÿ Business Intelligence Development Studio ñîçäàåò è âûïîëíÿåò AMO-ñöåíàðèé äëÿ óñòàíîâêè äàííîãî ïðèëîæåíèÿ. Ìîæíî íàñòðîèòü òðàññèðîâêó âûïîëíåíèÿ äàííîãî ñöåíàðèÿ, ÷òî ïîçâîëèò âàì êîíòðîëèðîâàòü ïðîöåññ èíñòàëëÿöèè ïðèëîæåíèÿ. Äëÿ îòñëåæèâàíèÿ ïðîöåññà âûïîëíåíèÿ ñöåíàðèÿ òàêæå ìîæåò èñïîëüçîâàòüñÿ íèæíÿÿ ÷àñòü îêíà Business Intelligence Development Studio (ñì. ðèñ. 3.5).  îòëè÷èå îò îôëàéíîâîãî ðåæèìà â îíëàéíîâîì ñîçäàíèå è óñòàíîâêà ïðèëîæåíèÿ âûïîëíÿåòñÿ òàêèì æå îáðàçîì, êàê ýòî ïðîèñõîäèëî ñ ñåðâèñàìè àíàëèòèêè ñ èñïîëüçîâàíèåì Analysis Manager. Ïðè ýòîì èçìåíåíèÿ ïðèëîæåíèÿ ñðàçó ñîõðàíÿþòñÿ â áàçå äàííûõ. Äëÿ ïåðåêëþ÷åíèÿ ìåæäó îíëàéíîâûì è îôëàéíîâûì ðåæèìàìè âûáåðèòå â ìåíþ Business Intelligence Development Studio êîìàíäó File4Connect To Analysis Services Database.
5.3.3. Èñòî÷íèêè äàííûõ ïðåäñòàâëåíèÿ Îäíèì èç ïåðâûõ ýòàïîâ ñîçäàíèÿ ïðîåêòà ñåðâèñîâ àíàëèòèêè ÿâëÿåòñÿ âûáîð èñòî÷íèêà äàííûõ è ñîçäàíèå åãî ïðåäñòàâëåíèÿ. Òî÷íî òàê æå, êàê è â ðåëÿöèîííîé áàçå äàííûõ, â êà÷åñòâå èñòî÷íèêà äàííûõ ñåðâèñîâ àíàëèòèêè íåîáõîäèìî çàäàòü èìÿ ñåðâåðà, íà êîòîðîì ðàñïîëàãàþòñÿ äàííûå, à òàêæå ñõåìó, òàáëèöó è èíôîðìàöèþ äëÿ àóòåíòèôèêàöèè âî âðåìÿ äîñòóïà ê äàííûì. Äëÿ òîãî ÷òîáû îïðåäåëèòü ïàðàìåòðû èñòî÷íèêà äàííûõ ñåðâèñîâ àíàëèòèêè, âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà ýëåìåíòå Data Source â îêíå Solution Explorer è âûáåðèòå â êîíòåêñòíîì ìåíþ êîìàíäó New Data Source. Ðåçóëüòàòîì ýòîãî áóäåò çàïóñê óòèëèòû Data Source Wizard, êîòîðàÿ ïîçâîëèò âàì íàñòðîèòü ïàðàìåòðû èñòî÷íèêà äàííûõ çà íåñêîëüêî ýòàïîâ.  êà÷åñòâå èñòî÷íèêà äàííûõ ìîãóò âûñòóïàòü áàçû äàííûõ SQL Server, DB2, Oracle è äð.
124
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
2. Ïîñëå ñîçäàíèÿ èñòî÷íèêà äàííûõ ñîçäàéòå åãî ïðåäñòàâëåíèå. Ýòî ïîçâîëèò îïðåäåëèòü ïàðàìåòðû òàáëèö èçìåðåíèé â òîì ñëó÷àå, åñëè íåîáõîäèìî ñîçäàòü êóá äëÿ õðàíåíèÿ äàííûõ. Äëÿ ýòîãî ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà ýëåìåíòå Data Source View â îêíå Solution Explorer è âûáåðèòå â êîíòåêñòíîì ìåíþ êîìàíäó New Data Source View. Ðåçóëüòàòîì ýòîãî áóäåò çàïóñê óòèëèòû Data Source View Wizard, êîòîðàÿ ïîìîæåò ïîëüçîâàòåëþ âûïîëíèòü íàñòðîéêó ïàðàìåòðîâ ïðåäñòàâëåíèÿ èñòî÷íèêà äàííûõ, óñêîðèòü è óíèôèöèðîâàòü ïðîöåññ åãî ñîçäàíèÿ. 3. Íà ïåðâîì øàãå Data Source View Wizard âûáåðèòå ñîîòâåòñòâóþùèé èñòî÷íèê äàííûõ è íàæìèòå êíîïêó Next. 4. Íà âòîðîì øàãå Data Source View Wizard ñ ïîìîùüþ íàáîðà êíîïîê îïðåäåëèòå èçìåðåíèÿ êóáà (ðèñ. 5.4). Äàííîå îêíî ïîçâîëÿåò îïðåäåëèòü ñïèñîê áàç äàííûõ, òàáëèö è ïðåäñòàâëåíèé, êîòîðûå áóäóò îòîáðàæàòüñÿ â ïåðâóþ î÷åðåäü ïðè îáðàùåíèè ê âûáðàííîìó èñòî÷íèêó äàííûõ.
Ðèñ. 5.4. Íàñòðîéêà èçìåðåíèé êóáà èñòî÷íèêà äàííûõ
Ïîñëå çàâåðøåíèÿ ïðîöåññà ñîçäàíèÿ ïðåäñòàâëåíèÿ ñ ïîìîùüþ Data Source View Wizard âûïîëíèòñÿ àâòîìàòè÷åñêèé çàïóñê óòèëèòû Data Source View Designer (ðèñ. 5.5). Äàííàÿ óòèëèòà ïîçâîëÿåò ïðîñìîòðåòü ñâÿçè ìåæäó òàáëèöàìè è ïðåäñòàâëåíèÿìè. Ñ åå ïîìîùüþ âû ìîæåòå áîëåå òîíêî íàñòðîèòü ïàðàìåòðû ïðåäñòàâëåíèÿ, à òàêæå îïðåäåëèòü òå òàáëèöû è êîëîíêè, êîòîðûå âîéäóò â ñîñòàâ ïðåäñòàâëåíèÿ. Äëÿ íàñòðîéêè òàáëèö è êîëîíîê, êîòîðûå âîéäóò â ñîñòàâ
5.3. Ñðåäñòâà ðàçðàáîòêè
125
ïðåäñòàâëåíèÿ, èñïîëüçóåòñÿ íåñêîëüêî ìåòîäîâ. Íàïðèìåð, âû ìîæåòå èçìåíèòü è íàñòðîèòü ñâÿçè ìåæäó îòäåëüíûìè òàáëèöàìè, ñîçäàòü êîëîíêè ñ âû÷èñëÿåìûìè çíà÷åíèÿìè, âêëþ÷èòü â ñîñòàâ òàáëèöû íîâûå êîëîíêè è ïåðåèìåíîâàòü òàáëèöû. Äàííûå èçìåíåíèÿ áóäóò îòîáðàæàòüñÿ òîëüêî â ñîçäàííîì ïðåäñòàâëåíèè èñòî÷íèêà äàííûõ.
Ðèñ. 5.5. Data Source View Designer
5.3.4. Óòèëèòà Cube Wizard Äëÿ óïðîùåíèÿ ïðîöåññà ñîçäàíèÿ êóáîâ èñïîëüçóåòñÿ óòèëèòà Cube Wizard. Ïîñëå îïðåäåëåíèÿ èñòî÷íèêà äàííûõ è ñîçäàíèÿ åãî ïðåäñòàâëåíèÿ çàïóñòèòå óòèëèòó Cube Wizard. Äëÿ ýòîãî ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà ýëåìåíòå Cube â îêíå Solution Explorer è âûáåðèòå â êîíòåêñòíîì ìåíþ êîìàíäó New Cube. Ïîñëå ýòîãî áóäåò âûïîëíåí çàïóñê óòèëèòû Cube Wizard (ðèñ. 5.6). Íîâàÿ âåðñèÿ óòèëèòû Cube Wizard èìååò íàìíîãî áîëüøå âîçìîæíîñòåé, ÷åì ïðåäûäóùàÿ. Cube Wizard â âåðñèè SQL Server 2005 ïîçâîëÿåò ñîçäàâàòü êóáû ñ èñïîëüçîâàíèåì âîñõîäÿùåé ïðîõîäêè, âûáèðàÿ ïðåäñòàâëåíèå èñòî÷íèêà äàííûõ, êîòîðûé áûë ñîçäàí ðàíåå. Òàêæå ñîçäàíèå êóáîâ âîçìîæíî ñ èñïîëüçîâàíèåì íèñõîäÿùåé ïðîõîäêè, äëÿ ÷åãî îáû÷íî îïðåäåëÿþòñÿ ïàðàìåòðû êóáà è ìåòàäàííûå.  ñëó÷àå èñïîëüçîâàíèÿ ïåðâîãî ñöåíàðèÿ ñîçäàíèÿ êóáà ìîæåò áûòü çàäåéñòâîâàíà íîâàÿ òåõíîëîãèÿ IntelliCube, êîòîðàÿ âûïîëíèò àíàëèç òàáëèö è â àâòîìàòè÷åñêîì ðåæèìå îïðåäåëèò ðàçìåðíîñòü êóáà è àòðèáóòû, íåîáõîäèìûå äëÿ
126
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
åãî ïîñòðîåíèÿ. ×òî êàñàåòñÿ âòîðîãî ñöåíàðèÿ ñîçäàíèÿ êóáà, òî â äàííîì ñëó÷àå âû ìîæåòå ñîçäàòü êóá áåç èñòî÷íèêà äàííûõ. Ýòî îçíà÷àåò, ÷òî â ñëó÷àå ñîçäàíèÿ ïîäîáíîãî êóáà íåò íåîáõîäèìîñòè îïðåäåëÿòü èñòî÷íèê äàííûõ è åãî ïðåäñòàâëåíèå äëÿ ñ÷èòûâàíèÿ èçìåðåíèé. Âñå àòðèáóòû êóáà, ñîçäàâàåìîãî áåç èñòî÷íèêà äàííûõ, âû îïðåäåëèòå âðó÷íóþ.
Ðèñ. 5.6. Óòèëèòà Cube Wizard
Òåõíîëîãèþ IntelliCube ñòîèò ðàññìîòðåòü ïîäðîáíåå. Îíà ïîçâîëÿåò çíà÷èòåëüíî ñîêðàòèòü òðóäîâûå çàòðàòû ðàçðàáîò÷èêîâ íà îïðåäåëåíèå èçìåðåíèé êóáà. Îäíàêî àâòîìàòè÷åñêîå îïðåäåëåíèå ðàçìåðíîñòè êóáà íå âñåãäà âûïîëíÿåòñÿ ïðàâèëüíî, ïîýòîìó ëó÷øå ïðîâåðèòü â ðó÷íîì ðåæèìå ðåçóëüòàòû ðàáîòû IntelliCube, à ïðè íåîáõîäèìîñòè ñàìîñòîÿòåëüíî âíåñòè êîððåêòèðîâêè. Çàêîí÷èâ ïðîöåññ ïðîâåðêè òàáëèö, êîòîðûå áóäóò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ êóáà, âû ñìîæåòå ïåðåéòè ê ñëåäóþùåìó ýòàïó ðàáîòû ñ óòèëèòîé Cube Wizard. Íà ýòîì øàãå âû ñìîæåòå ïðîñìîòðåòü ðåçóëüòàòû ïðåäûäóùèõ äåéñòâèé (íàñòðîéêè ñâÿçåé êóáà) è çàâåðøèòü ñîçäàíèå êóáà.
5.3.5. Óòèëèòà Cube Editor Ïîñëå çàâåðøåíèÿ ðàáîòû óòèëèòû Cube Wizard âûïîëíÿåòñÿ çàïóñê Cube Editor. Äàííàÿ óòèëèòà ïðåòåðïåëà ðÿä çíà÷èòåëüíûõ èçìåíåíèé â íîâîé âåðñèè SQL Server. Òåïåðü ñ åå ïîìîùüþ ìîæíî íàñòðàèâàòü ïàðàìåòðû êóáîâ, ñîçäàâàòü è îòëà-
5.3. Ñðåäñòâà ðàçðàáîòêè
127
æèâàòü ïðèëîæåíèÿ, êîòîðûå â ñâîåé ðàáîòå èñïîëüçóþò êóáû. Îáùèé âèä ðåäàêòîðà êóáîâ ïîêàçàí íà ðèñ. 5.7.
Ðèñ. 5.7. Ðåäàêòîð êóáîâ
 ðåäàêòîðå êóáîâ ñåðâèñîâ àíàëèòèêè SQL Server 2005 ñóùåñòâóþò íåñêîëüêî âêëàäîê, êàæäàÿ èç êîòîðûõ èñïîëüçóåòñÿ äëÿ íàñòðîéêè îïðåäåëåííûõ ïàðàìåòðîâ êóáà. Îíè ðàñïîëàãàþòñÿ â âåðõíåé ÷àñòè îêíà Cube Editor: · Cube Builder — èñïîëüçóåòñÿ äëÿ ðàáîòû ñ ìàñøòàáîì êóáà; · Dimensions — èñïîëüçóåòñÿ äëÿ ðàáîòû ñ èçìåðåíèÿìè êóáà; · Calculations — ðàáîòàåò ñ âû÷èñëåíèÿìè â êóáå; · KPI — ïîçâîëÿåò íàñòðîèòü îñíîâíûå ïàðàìåòðû ïðîèçâîäèòåëüíîñòè (KPI — Key Performance Indicators) êóáà; · Actions — èñïîëüçóåòñÿ äëÿ íàñòðîéêè äåéñòâèé ñ êóáîì; · Partitions — íàñòðàèâàåò ðàçäåëû êóáà; · Perspectives — ïîçâîëÿåò íàñòðîèòü ïðåäñòàâëåíèÿ êóáà; · Translations — ïàðàìåòðû ïåðåäà÷è äàííûõ êóáà; · Browser — ïîçâîëÿåò ïðîñìàòðèâàòü ñîäåðæèìîå ðàçâåðíóòîãî â áàçå êóáà. Ïîñëå òîãî êàê êóá áóäåò íàñòðîåí ñ ïîìîùüþ Cube Wizard, à òàêæå â ðåäàêòîðå êóáà áóäóò îïðåäåëåíû åãî ïàðàìåòðû, âû ìîæåòå âûáðàòü â ìåíþ Cube Editor ïóíêò Build4Deploy Solution. Ýòî ïîçâîëèò ðàçâåðíóòü êóá íà âûáðàííîì ñåðâåðå àíàëèòèêè. Ïàðàìåòðû, êîòîðûå âû îïðåäåëèëè â ðåäàêòîðå êóáà, ìîãóò îïðåäåëÿòü íå òîëüêî ìåñòî õðàíåíèÿ êóáà, íî è ìåòîäû ðàáîòû ñ íèì è âðåìÿ äîñòóïà ê íåìó. Ïî óìîë÷àíèþ êóá ñòàíîâèòñÿ äîñòóïíûì äëÿ âíåñåíèÿ â íåãî äàííûõ è èõ ñ÷èòûâàíèÿ ñðàçó ïîñëå åãî ðàçâåðòûâàíèÿ â áàçå äàííûõ.
128
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
5.3.6. Óòèëèòà Cube Browser Ïîñëå ñîçäàíèÿ êóáà è íàñòðîéêè åãî ïàðàìåòðîâ âû ìîæåòå ïðèñòóïèòü ê åãî ïðîñìîòðó. Ïðîñìîòð ìîæåò ïîäðàçóìåâàòü êàê íàâèãàöèþ ìåæäó îòäåëüíûìè èçìåðåíèÿìè, òàê è èçó÷åíèå îïðåäåëåííûõ äàííûõ. Äëÿ ýòîãî èñïîëüçóåòñÿ áðàóçåð êóáîâ (Cube Browser). Áðàóçåð êóáîâ ïîääåðæèâàåò òåõíîëîãèþ OWC (Office Web Components), ÷òî ïîçâîëÿåò ïåðåòàñêèâàòü îòäåëüíûå èçìåðåíèÿ êóáîâ ñ ïîìîùüþ óêàçàòåëÿ ìûøè. Ïåðåòàñêèâàÿ èçìåðåíèÿ, âû ìîæåòå ïåðåìåùàòü èõ èç ñïèñêà àòðèáóòîâ, ðàñïîëîæåííîãî â ëåâîé ÷àñòè îêíà Cube Browser, â îáëàñòü ðàáîòû ñ êóáàìè, êîòîðàÿ ðàñïîëàãàåòñÿ â öåíòðå îêíà. Ïîñëå òîãî êàê âû âûáåðåòå íåîáõîäèìûå èçìåðåíèÿ äëÿ ïðîñìîòðà, Cube Browser âûïîëíèò çàïðîñ ê áàçå è îòîáðàçèò íà ýêðàíå ñîîòâåòñòâóþùèå íàáîðû äàííûõ. Òàêèì îáðàçîì, âû ìîæåòå ïðîñìàòðèâàòü íåîáõîäèìûå çíà÷åíèÿ, ïîìåùåííûå â ÿ÷åéêè âûáðàííîãî êóáà.
5.3.7. Óòèëèòà Profiler  íîâîé âåðñèè SQL Server ñåðâèñû àíàëèòèêè áîëüøå íå ïðåäñòàâëÿþò ñîáîé ÷åðíûé ÿùèê, êàê ýòî áûëî â ïðåäûäóùèõ âåðñèÿõ.  SQL Server 7.0 è 2000 àäìèíèñòðàòîð íå ìîã ïðîñìîòðåòü èíôîðìàöèþ î òîì, ÷åì çàíèìàåòñÿ ñåðâåð â äàííûé ìîìåíò âðåìåíè. Ýòî óñëîæíÿëî ïðîöåññ àäìèíèñòðèðîâàíèÿ, òàê êàê äëÿ òîãî, ÷òîáû óçíàòü, ÷åì çàíÿò ñåðâåð â äàííûé ìîìåíò, òðåáîâàëîñü âûïîëíèòü äîïîëíèòåëüíûå äåéñòâèÿ.  SQL Server 2005 ïîÿâèëàñü íîâàÿ óòèëèòà Profiler, êîòîðàÿ ïîçâîëÿåò âûïîëíÿòü òðàññèðîâêó ðàçëè÷íûõ ïàðàìåòðîâ ðàáîòû SQL Server. Äåéñòâèÿ Profiler àíàëîãè÷íû íàñòðîéêå ïàðàìåòðîâ òðàññèðîâêè, êîòîðàÿ âîçìîæíà äëÿ îáû÷íîé ðåëÿöèîííîé áàçû äàííûõ. Äëÿ çàïóñêà óòèëèòû âûáåðèòå â ìåíþ îïåðàöèîííîé ñèñòåìû êîìàíäó Start4All Programs4Microsoft SQL Server 20054 Profiler. Îáùèé âèä îêíà óòèëèòû ïîêàçàí íà ðèñ. 5.8.
Ðèñ. 5.8. Óòèëèòà SQL Profiler
5.3. Ñðåäñòâà ðàçðàáîòêè
129
Ïîìèìî íàñòðîéêè ïàðàìåòðîâ òðàññèðîâêè ïðîôàéëåð ïîçâîëÿåò áîëåå äåòàëüíî èçó÷èòü MDX. Òàêæå ñ åãî ïîìîùüþ ìîæíî îòëàâëèâàòü îøèáêè â ðàáîòå ñåðâåðà çà ñ÷åò òîòàëüíîãî êîíòðîëÿ âñåõ ôóíêöèé SQL Server. Íîâàÿ âåðñèÿ ïðîôàéëåðà òàêæå ïîçâîëÿåò îòëàâëèâàòü îïðåäåëåííûå ñîáûòèÿ â SQL Server è ïðè íåîáõîäèìîñòè âûïîëíÿòü èõ ïîâòîðíóþ îáðàáîòêó.
5.3.8. Îáúåêòû ñåðâèñîâ àíàëèòèêè (AMO) Íàáîð îáúåêòîâ ñåðâèñîâ àíàëèçà (AMO — Analysis Services Management Objects) — ýòî åùå îäèí êëàññ îáúåêòîâ, êîòîðûé ïîÿâèëñÿ â íîâîé âåðñèè SQL Server. AMO ÿâëÿåòñÿ íàñëåäíèêîì ðàíåå èñïîëüçîâàâøåéñÿ áèáëèîòåêè COM-îáúåêòîâ DSO (Decision Support Objects), êîòîðàÿ ïðèìåíÿëàñü â SQL Server 2000.  íîâîé âåðñèè SQL Server âû ìîæåòå èñïîëüçîâàòü îáúåêòû êàê ñòàðîé áèáëèîòåêè, òàê è íîâîé. Îáðàòíàÿ ñîâìåñòèìîñòü ïðèëîæåíèé íà óðîâíå îáúåêòîâ ïîçâîëèò ðàçðàáîò÷èêàì áîëåå ïëàâíî ïåðåõîäèòü íà íîâûå òåõíîëîãèè, èçâëåêàÿ íàèëó÷øåå èç èìåþùèõñÿ. Áèáëèîòåêà AMO ñîçäàâàëàñü ñ èñïîëüçîâàíèåì .NET Framework è ïîçâîëÿåò óïðàâëÿòü òîëüêî ñåðâèñàìè àíàëèòèêè. AMO èñïîëüçóåò XMLA äëÿ îáìåíà äàííûìè ìåæäó ïðèëîæåíèåì è ñåðâèñàìè àíàëèòèêè. Ñîçäàâàòü ïðèëîæåíèÿ ñ èñïîëüçîâàíèåì îáúåêòîâ íîâîé áèáëèîòåêè ìîæíî êàê â ïðîãðàììå Business Intelligence Development Studio, òàê è â SQL Server Management Studio. Îäíèì èç îñíîâíûõ ïðåèìóùåñòâ AMO ÿâëÿåòñÿ òî, ÷òî äàííûé íàáîð îáúåêòîâ ïîçâîëÿåò ðåàëèçîâàòü áåçîïàñíîå ñîåäèíåíèå ñ ñåðâèñàìè àíàëèòèêè SQL Server. Ïðè ýòîì ìîæåò èñïîëüçîâàòüñÿ êàê ìåõàíèçì àóòåíòèôèêàöèè SQL Server, òàê è çàøèôðîâàííîå âçàèìîäåéñòâèå ÷åðåç âûäåëåííûé êàíàë ñâÿçè ìåæäó êëèåíòñêèì ïðèëîæåíèåì è ñåðâåðîì. Ïîìèìî øèôðîâàíèÿ äàííûõ ïîääåðæèâàåòñÿ ìåõàíèçì ñæàòèÿ XML, ÷òî ïîçâîëÿåò ñîêðàòèòü îáúåì ïåðåäàâàåìîé ÷åðåç ñåòü èíôîðìàöèè è òåì ñàìûì ðàçãðóçèòü êàíàë ñâÿçè ìåæäó ñåðâåðîì è êëèåíòñêèì ïðèëîæåíèåì.  çàâåðøåíèå äàííîãî ðàçäåëà ïåðå÷èñëèì îñíîâíûå ïðåèìóùåñòâà AMO íàä DSO: 1. Íàáîð îáúåêòîâ AMO èìååò ðàñøèðåííûå ôóíêöèè (áîëüøå îáúåêòîâ), êîòîðûå ìîãóò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ áîëåå ñëîæíûõ ïðèëîæåíèé àíàëèòèêè. 2. AMO ïîçâîëÿåò âûïîëíÿòü ðåçåðâíîå êîïèðîâàíèå è âîññòàíîâëåíèå ñèñòåìû, ÷òî íåëüçÿ áûëî ñäåëàòü â DSO. 3.  ñëó÷àå ñ AMO âûïîëíÿåòñÿ ãèáêàÿ íóìåðàöèÿ îáúåêòîâ, êîòîðûå ñîçäàþòñÿ â ñèñòåìå. Ýòî ïîçâîëÿåò äîñòè÷ü íåêîòîðûõ óëó÷øåíèé â îòíîøåíèè ïðîèçâîäèòåëüíîñòè ñèñòåìû.
5.3.9. XML äëÿ àíàëèòèêè (XMLA) Ñåðâèñû àíàëèòèêè âîîðóæèëèñü íîâûì ïðîòîêîëîì XML for Analysis (XMLA) äëÿ ïåðåäà÷è äàííûõ, êîòîðûé áàçèðóåòñÿ íà òåõíîëîãèè XML. Ýòîò ïðîòîêîë ÿâëÿåòñÿ ïëàòôîðìåííî-íåçàâèñèìûì è ñîçäàí íà îñíîâå âåá-ñåðâèñîâ è SOAP. Ñåðâèñû àíàëèòèêè èñïîëüçóþò XMLA äëÿ îáðàáîòêè ïðàêòè÷åñêè âñåõ çàïðîñîâ,
130
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
ïîñòóïàþùèõ îò êëèåíòñêèõ ïðèëîæåíèé. Ýòî, â ïåðâóþ î÷åðåäü, îòíîñèòñÿ ê óòèëèòàì, êîòîðûå èñïîëüçóþòñÿ äëÿ óïðàâëåíèÿ ñåðâèñàìè àíàëèòèêè, òàêèìè êàê SQL Server Management Studio è Business Intelligence Development Studio. XMLA îïòèìèçèðîâàí äëÿ ïåðåäà÷è äàííûõ ÷åðåç Èíòåðíåò. Äëÿ áîëåå äåòàëüíîãî ïðåäñòàâëåíèÿ î òîì, â êàêèõ èìåííî ñëó÷àÿõ èñïîëüçóåòñÿ ïðîòîêîë XMLA, íà ñõåìå (ðèñ. 5.9) ïîêàçàí îáùèé âèä ïëàòôîðìû è ìåñòî, êîòîðîå çàíèìàåò ïðîòîêîë XMLA over HTTP. Ïðîòîêîëîì XMLA ïîääåðæèâàþòñÿ äâà òèïà çàïðîñîâ: çàïðîñ íà âûïîëíåíèå è çàïðîñ îïðåäåëåíèÿ ïàðàìåòðîâ. Ðàññìîòðèì äàííûå òèïû çàïðîñîâ áîëåå äåòàëüíî.
Ðèñ. 5.9. Îáùàÿ àðõèòåêòóðà èñïîëüçîâàíèÿ XMLA â ñåðâèñàõ àíàëèòèêè
Ñ ïîìîùüþ çàïðîñîâ íà âûïîëíåíèå ïðîèñõîäèò èñïîëíåíèå êàêîãî-ëèáî äåéñòâèÿ. Ïðèìåðîì òàêèõ äåéñòâèé ìîãóò ñëóæèòü èçìåíåíèå òåêóùåãî ñîñòîÿíèÿ îáúåêòà, ðàñïîëàãàþùåãîñÿ íà ñåðâåðå, ñîçäàíèå è óäàëåíèå êàê îòäåëüíûõ îáúåêòîâ áàçû äàííûõ, òàê è öåëûõ êóáîâ. Çàïðîñû îïðåäåëåíèÿ ïàðàìåòðîâ èñïîëüçóþòñÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè îïðåäåëåííîãî òèïà îá îáúåêòàõ áàçû äàííûõ. Èñïîëüçóÿ çàïðîñû äàííîãî òèïà, ìîæíî ïîëó÷àòü çíà÷åíèÿ ïàðàìåòðîâ ðàçäåëîâ, êóáîâ, òàáëèö è äðóãèõ îáúåêòîâ áàçû äàííûõ. Òàêæå ñ èõ ïîìîùüþ ìîæíî ïîëó÷èòü òàêèå õàðàêòåðèñòèêè ñåðâåðà áàç äàííûõ, êàê êîëè÷åñòâî òåêóùèõ ïîäêëþ÷åíèé ê ñåðâåðó è ïàðàìåòðû áåçîïàñíîñòè ñèñòåìû è äîñòóïà ê åå ðåñóðñàì.
5.3.10. ßçûê ODL Äëÿ ñîçäàíèÿ îáúåêòîâ ñåðâèñîâ àíàëèòèêè èñïîëüçóåòñÿ ÿçûê Object Definition Language (ODL). Ýòîò ÿçûê ïîçâîëÿåò ðåàëèçîâàòü âîçìîæíîñòè ñîçäàíèÿ ñöåíàðèåâ äëÿ îáðàáîòêè îñíîâíûõ îáúåêòîâ è ñâÿçåé ñåðâèñîâ àíàëèòèêè, êàê ýòî ðàíåå âûïîëíÿëîñü â ðåëÿöèîííûõ áàçàõ äàííûõ. ODL ïîçâîëÿåò ñîçäàâàòü ñöåíàðèè, êîòîðûå áóäóò â àâòîìàòè÷åñêîì ðåæèìå ñîçäàâàòü îáúåêòû ñåðâèñîâ àíàëèòèêè è íàñòðàèâàòü èõ ñâîéñòâà. Ïîìèìî ýòîãî ïîäîáíûå ñöåíàðèè ìîãóò èñïîëüçîâàòüñÿ äëÿ óïðàâëåíèÿ âåðñèÿìè îáúåêòîâ áàçû äàííûõ ñåðâèñîâ àíàëèòèêè.
5.3. Ñðåäñòâà ðàçðàáîòêè
131
ODL ÿâëÿåòñÿ îòêðûòîé ñïåöèôèêàöèåé, êîòîðàÿ ïîñòðîåíà íà îñíîâå ñòàíäàðòà XML for Analysis (XMLA). Áëàãîäàðÿ ýòîìó ñöåíàðèè ODL ìîãóò ñîçäàâàòüñÿ â ëþáîì XML-ðåäàêòîðå.
5.3.11. ßçûê çàïðîñîâ MDX MDX — ýòî ÿçûê çàïðîñîâ, êîòîðûé èñïîëüçóåòñÿ äëÿ ðàáîòû ñ áàçàìè äàííûõ ñåðâèñîâ àíàëèòèêè.  íîâîé âåðñèè SQL Server MDX ïîäâåðãñÿ íåêîòîðûì èçìåíåíèÿì: · Îáðàáîòêà ïðîïóùåííûõ ó÷àñòíèêîâ — îäíî èç ñàìûõ çíà÷èìûõ óëó÷øåíèé, êîñíóâøèõñÿ MDX.  SQL Server 2000 â òîì ñëó÷àå, åñëè îò÷åò è íàñòðîéêè åãî ïðîñìîòðà ñîçäàâàëèñü íåñêîëüêèìè ó÷àñòíèêàìè, ïîñëå ÷åãî ÷àñòü èç íèõ ïåðåñòàëè áûòü ïîëüçîâàòåëÿìè SQL Server, âîçíèêàëè îøèáêè. Îò÷åò íå ìîãëè ïðîñìîòðåòü äàæå òå ïîëüçîâàòåëè, êîòîðûå ñóùåñòâîâàëè â ñèñòåìå. Ïðîïóñê ó÷àñòíèêîâ òàêîãî îò÷åòà ìîã ïðîèçîéòè ïî íåñêîëüêèì ïðè÷èíàì. Íàïðèìåð, àäìèíèñòðàòîð ìîã äîïóñòèòü îøèáêó âî âðåìÿ ñîçäàíèÿ îò÷åòà èëè íå îòñëåäèë èçìåíåíèÿ â ñòðóêòóðå ïðåäïðèÿòèÿ, ïðîèçîøëè îïðåäåëåííûå èçìåíåíèÿ â ñòðóêòóðå êóáîâ èëè èçìåíåíèÿ â èçìåðåíèÿõ îïðåäåëåííûõ êóáîâ. Âñå ýòî ìîæåò ïðèâåñòè ê âîçíèêíîâåíèþ îøèáîê ïðè ïðîñìîòðå îò÷åòîâ.  íîâîé âåðñèè MDX ìîæíî âîñïîëüçîâàòüñÿ íîâûì ñâîéñòâîì MDXMissingMemberMode èçìåðåíèÿ, ÷òî ïîçâîëèò íàñòðîèòü ôóíêöèîíèðîâàíèå îò÷åòà äàæå â òîì ñëó÷àå, åñëè ó÷àñòíèêè áóäóò ïðîïóùåíû. · Àãðåãàöèè óäàëåííûõ ó÷àñòíèêîâ — äàííàÿ ôóíêöèîíàëüíîñòü íå áûëà ðåàëèçîâàíà â ïðåäûäóùåé âåðñèè SQL Server.  íîâîé âåðñèè ñòàëî âîçìîæíûì âûïîëíÿòü àãðåãèðîâàíèå óäàëåííûõ ó÷àñòíèêîâ, ÷òî ïîçâîëÿåò âûïîëíÿòü îäíîâðåìåííî íåñêîëüêî îïåðàöèé íàä öåëîé ãðóïïîé. · Àâòîìàòè÷åñêàÿ êîíâåðòàöèÿ òèïîâ — ñ ïîìîùüþ äàííîãî ìåõàíèçìà ìîæíî âûïîëíÿòü àâòîìàòè÷åñêóþ êîíâåðòàöèþ òèïîâ.  ïåðâóþ î÷åðåäü ýòî îòíîñèòñÿ ê âîçìîæíîñòè êîíâåðòàöèè ó÷àñòíèêîâ â íàáîð è íàîáîðîò. Ýòî îñâîáîæäàåò ðàçðàáîò÷èêîâ îò èñïîëüçîâàíèÿ ñêîáîê âî âðåìÿ èñïîëüçîâàíèÿ íàáîðîâ, ÷òî óïðîùàåò ïðîãðàììíûé êîä êàê â îòíîøåíèè ñîçäàíèÿ, òàê è â îòíîøåíèè ÷òåíèÿ. · Óïðîùåíèå ñèíòàêñèñà — â íîâîé âåðñèè MDX ìàêñèìàëüíî óïðîùåí ñèíòàêñèñ äëÿ íåêîòîðûõ êîìàíä. Óïðîùåíèå â ïåðâóþ î÷åðåäü êîñíóëîñü èäåíòèôèêàöèè ó÷àñòíèêîâ, êîãäà íå òðåáóåòñÿ ïîñòîÿííîãî îïðåäåëåíèÿ èçìåðåíèé êóáà ñ ïîìîùüþ íàáîðà êîìàíä. · Ñöåíàðèè MDX — â ýòîé ÷àñòè ÿçûê MDX ïðåòåðïåë íàèáîëüøèå èçìåíåíèÿ. Òåïåðü íåñêîëüêî êîìàíä ìîæíî ãðóïïèðîâàòü â îòäåëüíûé íàáîð è òàêèì îáðàçîì ñîçäàâàòü ôàéëû ñöåíàðèåâ, êîòîðûå ïîçâîëÿò áûñòðî âûïîëíÿòü ïîñëåäîâàòåëüíîñòü êîìàíä. Îòäåëüíàÿ êîìàíäà â ñöåíàðèè îòäåëÿåòñÿ îò äðóãèõ êîìàíä òî÷êîé ñ çàïÿòîé. · Íàáîðû è èñïîëüçîâàíèå êîìàíäû WHERE — èñïîëüçîâàíèå êîìàíäû WHERE ñòàëî àíàëîãè÷íûì èñïîëüçîâàíèþ êîìàíäû OR â íàáîðå SQL-êîìàíä. Òåïåðü ìîæíî ïðîñìàòðèâàòü ðåçóëüòàòû âûïîëíåíèÿ çàïðîñà äëÿ âñåõ ó÷àñòíèêîâ, êîòîðûå ïåðå÷èñëåíû â ïîëå WHERE.
132
Ãëàâà 5 • Ñåðâèñû àíàëèòèêè
5.3.12. Ïðîâàéäåð äàííûõ ADOMD.NET ADOMD.NET — ýòî íîâûé .NET-ïðîâàéäåð äàííûõ, êîòîðûé ñîçäàâàëñÿ ñïåöèàëüíî äëÿ äîñòóïà ê èñòî÷íèêàì ìíîãîìåðíûõ äàííûõ. ADOMD.NET ñîçäàâàëñÿ ñïåöèàëüíî äëÿ çàìåíû áèáëèîòåêè COM-îáúåêòîâ, êîòîðàÿ ðàíåå èñïîëüçîâàëàñü äëÿ äîñòóïà ê ìíîãîìåðíûì ìàññèâàì äàííûõ. Äàííàÿ áèáëèîòåêà õîðîøî ïðèæèëàñü ó ìíîãèõ ðàçðàáîò÷èêîâ, è ADOMD.NET áóäåò ñëîæíî âûòåñíèòü åå èç ñåìåéñòâà ïðîãðàììíûõ ïðîäóêòîâ, êîòîðûå èñïîëüçîâàëèñü äëÿ ñîçäàíèÿ ïðèëîæåíèé ñåðâèñîâ àíàëèòèêè. Îäíàêî ââåäåíèå íîâîãî ïðîâàéäåðà îáóñëîâëèâàåòñÿ íåñêîëüêèìè îáúåêòèâíûìè ïðè÷èíàìè. Îñíîâíîé ïðè÷èíîé ÿâëÿåòñÿ òî, ÷òî ñîâðåìåííûå ïðèëîæåíèÿ äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè âñå ÷àùå ñîçäàþòñÿ ñ èñïîëüçîâàíèåì òàêèõ .NET-îðèåíòèðîâàííûõ ÿçûêîâ ïðîãðàììèðîâàíèÿ, êàê Ñ++, C#, J# è Visual Basic. Òåïåðü èç ýòèõ ÿçûêîâ ïðîãðàììèðîâàíèÿ ñòàëî ïðîùå èñïîëüçîâàòü ïðîâàéäåð ADOMD.NET, ÷åì êàêèå-ëèáî äðóãèå. Ïðîâàéäåð ADOMD.NET èñïîëüçóåò íîâûé ïðîòîêîë XMLA äëÿ ðàáîòû ñ ñåðâèñàìè àíàëèòèêè, ÷òî ïîçâîëÿåò óíèôèöèðîâàòü ïðèëîæåíèÿ è âíåñòè â íèõ íîâóþ ôóíêöèîíàëüíîñòü. Ïðè ýòîì ñòîèò çàìåòèòü, ÷òî ñîåäèíåíèå ìåæäó ïðèëîæåíèÿìè è ñåðâèñàìè àíàëèòèêè âîçìîæíî ñ èñïîëüçîâàíèåì îäíîãî èç äâóõ âàðèàíòîâ: · XMLA over HTTP; · XMLA over TCP/IP.
Ñåðâèñû èíòåãðàöèè
6
Ñåðâèñû òðàíñôîðìàöèè äàííûõ (DTS — Data Transformation Services) îòíîñÿòñÿ ê îäíèì èç íàèáîëåå ÷àñòî èñïîëüçóåìûõ ïðèëîæåíèé SQL Server, íà÷èíàÿ ñ âåðñèè 7.0. DTS â ïåðâóþ î÷åðåäü èñïîëüçîâàëèñü â îïåðàöèÿõ èçâëå÷åíèÿ äàííûõ, èõ ïðåîáðàçîâàíèÿ è çàãðóçêè äëÿ õðàíèëèù OLAP-ñåðâèñîâ. Ñ ïîìîùüþ DTS òàêæå ðåàëèçîâàëèñü âîçìîæíîñòè èìïîðòà è ýêñïîðòà äàííûõ èç ðåëÿöèîííûõ áàç äàííûõ SQL Server. Äàííûå ñåðâèñû íàìíîãî óäîáíåå â èñïîëüçîâàíèè, ÷åì óòèëèòà ñ êîìàíäíîé ñòðîêîé BCP (Bulk Copy Program). Ïî ñðàâíåíèþ ñ óòèëèòîé BCP ñåðâèñû òðàíñôîðìàöèè äàííûõ èìåþò áîëüøèé íàáîð âîçìîæíîñòåé äëÿ èìïîðòà è ýêñïîðòà äàííûõ, à òàêæå ïåðåìåùåíèÿ èõ ìåæäó èñòî÷íèêàìè äàííûõ. DTS èìååò èíòåðôåéñ äëÿ âûïîëíåíèÿ ïðîñòåéøèõ îïåðàöèé ïî ïðåîáðàçîâàíèþ äàííûõ è ãðàôè÷åñêóþ ñðåäó ðàçðàáîòêè äëÿ áîëåå ñëîæíûõ îïåðàöèé. Ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ SQL Server 7.0 è 2000 ïîääåðæèâàëè áàçû äàííûõ OLE DB â êà÷åñòâå èñòî÷íèêà. Ýòî îçíà÷àåò, ÷òî õîòÿ DTS ÿâëÿþòñÿ ÷àñòüþ SQL Server, îíè òàêæå ìîãóò èñïîëüçîâàòüñÿ äëÿ ïåðåìåùåíèÿ äàííûõ ìåæäó ðàçëè÷íûìè èñòî÷íèêàìè äàííûõ OLE DB. Ïðè ýòîì â âûïîëíåíèè äàííûõ îïåðàöèé íå òðåáóåòñÿ ó÷àñòèÿ SQL Server. Íàïðèìåð, ïîìèìî ïåðåìåùåíèÿ äàííûõ ìåæäó îòäåëüíûìè ýêçåìïëÿðàìè SQL Server âû ìîæåòå â êà÷åñòâå èñòî÷íèêà äàííûõ èñïîëüçîâàòü òàêèå ïðîãðàììíûå ïðîäóêòû, êàê Oracle, Access è DB2.  ýòîì îòíîøåíèè ñåðâèñû òðàíñôîðìàöèè ìîãóò èñïîëüçîâàòüñÿ â êà÷åñòâå ìîùíîãî ìåõàíèçìà äëÿ ïåðåìåùåíèÿ äàííûõ ìåæäó ðàçëè÷íûìè áàçàìè äàííûõ. Íåñìîòðÿ íà îãðîìíîå êîëè÷åñòâî ïðåèìóùåñòâ, ñåðâèñû òðàíñôîðìàöèè äàííûõ äî ñèõ ïîð èìåþò äîñòàòî÷íî îãðàíè÷åíèé. Âî-ïåðâûõ, ýòî îòíîñèòñÿ ê ìàñøòàáèðîâàíèþ ñèñòåìû. Âî-âòîðûõ, ïàêåòû ñåðâèñîâ òðàíñôîðìàöèè äàííûõ äîëæíû áûòü áîëåå ïåðåíîñèìûìè ìåæäó îòäåëüíûìè ñèñòåìàìè. Èíûìè ñëîâàìè, DTS-ïàêåòû, êîòîðûå áûëè ñîçäàíû íà îäíîì SQL Server, äîëæíû ëåãêî ïåðåíîñèòüñÿ â äðóãóþ ñèñòåìó, ÷òî èìååò â äàííûé ìîìåíò íåêîòîðûå îãðàíè÷åíèÿ.
134
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
Ïîìèìî ïåðå÷èñëåííûõ îãðàíè÷åíèé ðàííèå âåðñèè ñåðâèñîâ òðàíñôîðìàöèè äàííûõ SQL Server èìåëè îãðàíè÷åíèÿ â ìåõàíèçìàõ îáðàáîòêè âîçíèêàþùèõ îøèáîê.  íîâîé âåðñèè DTS íåêîòîðûå èç ýòèõ îãðàíè÷åíèé ïðåîäîëåíû, ÷òî ïîçâîëèëî áîëåå òî÷íî îáðàáàòûâàòü âîçíèêàþùèå îøèáêè è çàêëàäûâàòü â ïðèëîæåíèÿ ýëåìåíòû èõ îáðàáîòêè.  íîâîé âåðñèè SQL Server òåõíîëîãèÿ òðàíñôîðìàöèè äàííûõ áûëà ïîëíîñòüþ ïåðåñìîòðåíà è ïåðåïèñàí ïðîãðàììíûé êîä ïðèëîæåíèé, îòíîñÿùèõñÿ ê DTS. Ýòî ïðèâåëî ê ñìåíå «èìèäæà» äàííîãî ñåðâèñà. Òåïåðü ñåðâèñû òðàíñôîðìàöèè äàííûõ ïåðåèìåíîâàíû â «ñåðâèñû èíòåãðàöèè», ÷òî áîëåå òî÷íî îòðàæàåò èõ ïðèðîäó. Ñåðâèñû èíòåãðàöèè ïîääåðæèâàþò òå æå òèïû áàç äàííûõ â êà÷åñòâå èñòî÷íèêîâ, ÷òî è DTS. Ýòî äîáàâëÿåò äîïîëíèòåëüíûé óðîâåíü íåçàâèñèìîñòè äëÿ äàííûõ ñåðâèñîâ è ïîçâîëÿåò óñòàíàâëèâàòü íåçàâèñèìûå îò SQL Server 2005 ñîåäèíåíèÿ ñ äðóãèìè èñòî÷íèêàìè äàííûõ.  äàííîé ãëàâå ìû ðàññìîòðèì áîëåå äåòàëüíî îáùóþ àðõèòåêòóðó ñåðâèñîâ èíòåãðàöèè, èçó÷èì íîâûå ïðåèìóùåñòâà, êîòîðûå ïîÿâèëèñü â ýòîì ïðîãðàììíîì ïðîäóêòå, à òàêæå ðàññìîòðèì íàáîð íîâûõ óòèëèò äëÿ ðàáîòû ñ ñåðâèñàìè èíòåãðàöèè è íàáîðîì íîâûõ êîìïîíåíòîâ, ñ êîòîðûìè âàì ïðèäåòñÿ âñòðåòèòüñÿ â ñâîåé ðàáîòå.
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè  îáùåì ñëó÷àå àðõèòåêòóðó ñåðâèñîâ èíòåãðàöèè ìîæíî ðàçäåëèòü íà äâå îñíîâíûå ÷àñòè: · Data Transformation Runtime (DTR); · Data Transformation Pipeline (DTP). Ðàçäåëåíèå ñåðâèñîâ èíòåãðàöèè íà äâå îòäåëüíûå ÷àñòè îáóñëîâëåíî, ñêîðåå âñåãî, íå ïðîãðàììíîé íåîáõîäèìîñòüþ, à òðåáîâàíèåì áèçíåñà ðàçáèòü ïîäîáíîå ÿäðî íà äâå íåçàâèñèìûå ÷àñòè, îäíà èç êîòîðûõ áóäåò îòâå÷àòü çà ïîòîêè äàííûõ, à äðóãàÿ çà áèçíåñ-ïðîöåññû.  ñåðâèñàõ òðàíñôîðìàöèè äàííûõ îáà ýòè ìîäóëÿ ïðèñóòñòâîâàëè, îäíàêî ìîäóëü îáðàáîòêè ïîòîêîâ äàííûõ áûë íàìíîãî áîëåå ðàçâèò, ÷åì ìîäóëü, îòâå÷àþùèé çà áèçíåñ-ïðîöåññû. Òåïåðü, ñ ðàñøèðåíèåì ôóíêöèé íîâîãî ñåðâèñà, ñòàëî ÿñíî, ÷òî ìîäóëü áèçíåñ-ïðîöåññîâ íåîáõîäèìî ñîâåðøåíñòâîâàòü, ñ òåì ÷òîáû íå òîëüêî ïðèáëèçèòüñÿ ïî óðîâíþ åãî ðàçâèòèÿ ê ìîäóëþ îáðàáîòêè ïîòîêîâ äàííûõ, íî è íà÷àòü êîíêóðèðîâàòü ñî ìíîãèìè ïðîãðàììíûìè ïðîäóêòàìè, ïðèñóòñòâóþùèìè íà ðûíêå. Íîâàÿ âåðñèÿ DTP áûëà äîðàáîòàíà è çàìåíèëà ñòàðóþ âåðñèþ, ÷òî ïîçâîëèëî ðåàëèçîâàòü íîâûé íàáîð îïåðàöèé ïî ðàáîòå ñ äàííûìè. Îñíîâíûå îáÿçàííîñòè äàííîãî ìîäóëÿ — ýòî îáðàáîòêà è óïðàâëåíèå ïîòîêàìè äàííûõ, êîòîðûå ïåðåäàþòñÿ ìåæäó èñòî÷íèêîì è ïîëó÷àòåëåì äàííûõ. DTR ïðèìåíÿåòñÿ, â ïåðâóþ î÷åðåäü, äëÿ îáðàáîòêè çàäàíèé, êîòîðûå èñïîëüçóþòñÿ äëÿ êîíòðîëÿ íàä áèçíåñ-ïðîöåññàìè. Êàæäûé èç ïîäîáíûõ ïðîöåññîâ (óïðàâëåíèå ïîòîêàìè äàííûõ è áèçíåñ-ïðîöåññàìè) ðåàëèçîâàí çà ñ÷åò ñâîåãî
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè
135
ñîáñòâåííîãî DLL-ôàéëà, à òàêæå íàáîðà ñâîèõ ñîáñòâåííûõ îáúåêòîâ. Îáùàÿ àðõèòåêòóðà ñåðâèñîâ èíòåãðàöèè SQL Server 2005 ïîêàçàíà íà ðèñ. 6.1.
Ðèñ. 6.1. Îáùàÿ àðõèòåêòóðà ñåðâèñîâ èíòåãðàöèè SQL Server 2005
Áîëåå äåòàëüíî DTP è DTR ìû ðàññìîòðèì â ñëåäóþùèõ ðàçäåëàõ.
6.1.1. Ìîäóëü DTP DTP (Data Transformation Pipeline) îáåñïå÷èâàåò ôóíêöèè îáðàáîòêè ïîòîêîâ äàííûõ, à òàêæå èõ òðàíñôîðìàöèè è ïåðåìåùåíèÿ ìåæäó èñòî÷íèêîì äàííûõ è ïîëó÷àòåëåì. Äëÿ ïîäêëþ÷åíèÿ ê èñòî÷íèêàì è ïîëó÷àòåëÿì ðàçëè÷íûõ òèïîâ â DTP èñïîëüçóåòñÿ íàáîð àäàïòåðîâ äàííûõ. Ýòî ïîçâîëÿåò ñîçäàòü ïðîìåæóòî÷íóþ ñðåäó äëÿ ïåðåäà÷è äàííûõ. Êàê ïîêàçàíî íà ðèñ. 6.1, äîñòóï ê DTP îðãàíèçóåòñÿ çà ñ÷åò èñïîëüçîâàíèÿ ñîîòâåòñòâóþùåé îáúåêòíîé ìîäåëè. Îáúåêòíàÿ ìîäåëü DTP ÿâëÿåòñÿ ñâîåîáðàçíûì API, êîòîðûé èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ êàê ïðåäîïðåäåëåííûõ ïðåîáðàçîâàíèé äàííûõ, òàê è îïðåäåëåííûõ ïîëüçîâàòåëåì. Ïðåîáðàçîâàíèå äàííûõ èñïîëüçóåòñÿ äëÿ îáðàáîòêè ñòðîê òàáëèö èñòî÷íèêîâ äàííûõ ñ öåëüþ ïðèâåñòè èõ ê òðåáóåìîìó ôîðìàòó. Ïîñëå ïîäîáíîãî ïåðåìåùåíèÿ äàííûå èç èñòî÷íèêà êîïèðóþòñÿ â áàçó äàííûõ ïîëó÷àòåëÿ â ñîîòâåòñòâèè ñ òðåáóåìûì ôîðìàòîì ïîëó÷àòåëÿ. Áîëåå äåòàëüíî àðõèòåêòóðà DTP ïîêàçàíà íà ðèñ. 6.2.
136
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
Êàê ãîâîðèëîñü ðàíåå, â DTP èñïîëüçóåòñÿ íàáîð àäàïòåðîâ äàííûõ, êîòîðûå ñëóæàò ñâîåîáðàçíîé ïðîñëîéêîé ìåæäó èñòî÷íèêîì è ïîëó÷àòåëåì äàííûõ. Àäàïòåð èñòî÷íèêà äàííûõ âûïîëíÿåò ñîåäèíåíèå ñ áàçîé äàííûõ è ÷òåíèå ñîîòâåòñòâóþùèõ òàáëèö. Ïîñëå ýòîãî ìîäóëü òðàíñôîðìàöèè äàííûõ ïðè íåîáõîäèìîñòè âûïîëíÿåò èõ ïðåîáðàçîâàíèå ñ öåëüþ ïîäãîòîâèòü äàííûå äëÿ èõ ââîäà â áàçó äàííûõ ïîëó÷àòåëÿ.
Ðèñ. 6.2. Àðõèòåêòóðà Data Transformation Pipeline (DTP)
Ïî çàâåðøåíèè ýòîé îïåðàöèè äàííûå ïåðåäàþòñÿ â áàçó äàííûõ ïîëó÷àòåëÿ è çàïèñûâàþòñÿ â íåå ñ ïîìîùüþ àäàïòåðà ïîëó÷àòåëÿ äàííûõ. Íîâàÿ âåðñèÿ SQL Server èìååò íàáîð âñòðîåííûõ àäàïòåðîâ äàííûõ, ÷òî óïðîùàåò ïðîöåññ ðàçðàáîòêè ãîòîâûõ ïðèëîæåíèé è ñîêðàùàåò ñêîðîñòü èõ âíåäðåíèÿ. Èìåþòñÿ â íàëè÷èè àäàïòåðû äëÿ ñëåäóþùèõ èñòî÷íèêîâ äàííûõ: òàêòîâûõ ôàéëîâ (CSV-ôàéëîâ), ñîâìåñòèìûõ ñ OLE DB áàç äàííûõ (òàêèõ, êàê Oracle è DB2) è ìíîãèõ äðóãèõ. Ïîëíûé ñïèñîê ïîääåðæèâàåìûõ àäàïòåðîâ SQL Server 2005 áóäåò ïðèâåäåí â ðàçäåëå 6.1.14 «Àäàïòåðû äàííûõ». Îñíîâíàÿ ôóíêöèÿ ìîäóëÿ òðàíñôîðìàöèè äàííûõ, êàê ãîâîðèò ñàìî íàçâàíèå, ýòî ïåðåìåùåíèå è ïðè íåîáõîäèìîñòè ïðåîáðàçîâàíèå äàííûõ â íåîáõîäèìûé ôîðìàò. Ñ ïîìîùüþ äàííîãî ìîäóëÿ ìîæíî ðåàëèçîâàòü êàê äîñòàòî÷íî ïðîñòûå ïðèëîæåíèÿ, â êîòîðûõ âûïîëíÿåòñÿ ïðîñòîå êîïèðîâàíèå äàííûõ èç êîëîíîê òàáëèöû èñòî÷íèêà â êîëîíêè òàáëèöû ïîëó÷àòåëÿ, òàê è äîñòàòî÷íî ñëîæíûå, â êîòîðûõ çíà÷åíèÿ êîëîíêè èñòî÷íèêà êîïèðóþòñÿ â íåñêîëüêî êîëîíîê òàáëèöû ïîëó÷àòåëÿ è ïðè ýòîì èçìåíÿåòñÿ òèï äàííûõ. Íàáîð îñíîâíûõ ïðåîáðàçîâàíèé, êîòîðûå ÷àùå âñåãî èñïîëüçóþòñÿ ðàçðàáîò÷èêàìè â ñâîèõ ïðèëîæåíèÿõ, ìû ðàññìîòðèì áîëåå äåòàëüíî â ðàçäåëå 6.1.16 «Ïðåîáðàçîâàíèå äàííûõ». Ïîìèìî ñóùåñòâóþùåãî íàáîðà ïðåîáðàçîâàíèé ðàçðàáîò÷èê ìîæåò ñîçäàâàòü ñâîè ñîáñòâåííûå, èñïîëüçóÿ îáúåêòíóþ ìîäåëü DTP.
6.1.2. Ìîäóëü DTR DTR (Data Transformation Runtime) ñîñòîèò èç ÿäðà è êîìïîíåíòîâ DTR. Êîìïîíåíòû DTR ïðåäñòàâëÿþò ñîáîé îòäåëüíûå îáúåêòû, êîòîðûå ïîçâîëÿþò îáðàáàòûâàòü èñêëþ÷åíèÿ ñåðâèñîâ èíòåãðàöèè. DTR-êîìïîíåíòû èñïîëüçóþòñÿ äëÿ ñîçäàíèÿ òåõíîëîãè÷åñêèõ ïðîöåññîâ, êîíòåéíåðîâ, íåîáõîäèìûõ äëÿ ñòðóêòóðèðîâàíèÿ ïðèëîæåíèÿ, çàäà÷ òðàíñôîðìàöèè è ïðåîáðàçîâàíèÿ äàííûõ, à òàêæå ñâÿçåé, êîíòðîëèðóþùèõ ïîñëåäîâàòåëüíîñòü âûïîëíåíèÿ ïàêåòîâ òåõíîëîãè÷åñêèõ ïðîöåññîâ. Îáùèé âèä àðõèòåêòóðû DTR ïðèâåäåí íà ðèñ. 6.3.
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè
137
Îñíîâíûìè DTR-êîìïîíåíòàìè ÿâëÿþòñÿ êîíòåéíåð è çàäà÷à. Çàäà÷à â DTR — ýòî íàáîð DTR-êîìïîíåíòîâ. Êàæäàÿ çàäà÷à èìååò ñâîé ñîáñòâåííûé èñòî÷íèê äàííûõ è íàáîð ïðåîáðàçîâàíèé. Êîíòåéíåð â DTR ïðåäñòàâëÿåò ñîáîé íàáîð ñãðóïïèðîâàííûõ ïî îïðåäåëåííîìó ïðèçíàêó çàäà÷. Íàáîð êîíòåéíåðîâ è çàäà÷, êîòîðûå îáúåäèíåíû ïî îïðåäåëåííîìó ïðèçíàêó, ïðåäñòàâëÿåò ñîáîé ïàêåò. DTR-ïàêåò — ýòî ôèçè÷åñêàÿ åäèíèöà, êîòîðàÿ èñïîëüçóåòñÿ äëÿ ãðóïïèðîâêè íàáîðà ôóíêöèé ïåðåäà÷è è ïðåîáðàçîâàíèÿ äàííûõ ìåæäó çàäàííûìè èñòî÷íèêîì è ïîëó÷àòåëåì. Ïåðåìåùåíèå ïðèëîæåíèé ñåðâèñîâ èíòåãðàöèè ïðîèñõîäèò ñ ïîìîùüþ ïåðåíîñà îòäåëüíîãî ïàêåòà íà äðóãîé êîìïüþòåð. Íà ýòîì êîìïüþòåðå ïàêåò ðàçâåðòûâàåòñÿ, è ôóíêöèè, îïðåäåëåííûå â íåì, ìîãóò áûòü èñïîëüçîâàíû äëÿ ïåðåíîñà äàííûõ â äðóãîé ñèñòåìå. Áîëåå äåòàëüíàÿ èíôîðìàöèÿ îá èñïîëüçîâàíèè êîìïîíåíòîâ DTR áóäåò ïðèâåäåíà äàëåå â ðàçäåëå 6.1.3 «Êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè».
Ðèñ. 6.3. Îáùèé âèä àðõèòåêòóðû Data Transformation Runtime (DTR)
Îñíîâíûì ïðåäíàçíà÷åíèåì ÿäðà DTR ÿâëÿåòñÿ êîíòðîëü âûïîëíåíèÿ ïàêåòîâ ñåðâèñîâ èíòåãðàöèè. Ñ åãî ïîìîùüþ êîíòðîëèðóåòñÿ âûïîëíåíèå òåõíîëîãè÷åñêèõ ïðîöåññîâ (ïîñëåäîâàòåëüíîñòè çàäà÷), êîòîðûå ñîäåðæàòñÿ â ïàêåòàõ, à òàêæå õðàíåíèå èíôîðìàöèè î ïàêåòàõ, èõ âûïîëíåíèå, íàñòðîéêà, îáðàáîòêà îøèáîê è âåäåíèå ïðîòîêîëîâ âûïîëíåíèÿ. Ñ ïîìîùüþ ôóíêöèé, ðåàëèçîâàííûõ â ÿäðå DTR, ðàçðàáîò÷èêè ìîãóò êîíòðîëèðîâàòü ïðîöåññ äîñòóïà è óñòàíîâêè ñîåäèíåíèé ñ ïàêåòàìè ñåðâèñîâ èíòåãðàöèè è ñ÷èòûâàíèÿ îòäåëüíûõ ïåðåìåííûõ. Äîñòóï ê DTR îðãàíèçîâàí ñ ïîìîùüþ íàáîðà îáúåêòîâ DTR. Äàííûé íàáîð îáúåêòîâ ïðåäñòàâëÿåò ñîáîé íå ÷òî èíîå, êàê ïðîãðàììíûé èíòåðôåéñ (API) äëÿ ïîääåðæêè ôóíêöèé, âñòðîåííûõ â Integration Services Import/Export Wizard è Integration Services Designer. Òàêæå îí ïîçâîëÿåò ðàñøèðèòü ôóíêöèè óòèëèòû DTEXEC, êîòîðàÿ âûïîëíÿåòñÿ ÷åðåç êîìàíäíóþ ñòðîêó. ßäðî DTR ñîçäàíî ñ èñïîëüçîâàíèåì ÿçûêà Ñ++, âñëåäñòâèå ÷åãî ïðîãðàììíûé èíòåðôåéñ DTR
138
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
ïîääåðæèâàåò íàáîð êîìàíä íà Ñ++, à òàêæå ñáîðêè .NET. Ïîñëåäíÿÿ ôóíêöèÿ ïðåäîñòàâëÿåò ðàçðàáîò÷èêàì âîçìîæíîñòü âñòðàèâàòü âûçîâû ôóíêöèé DTR èç ïðèëîæåíèé, íàïèñàííûõ íà îäíîì èç ÿçûêîâ ñðåäû .NET. Áëàãîäàðÿ ýòîìó ïðèëîæåíèÿ, êîòîðûå âûçûâàþò ôóíêöèè API DTR, ìîãóò ñîçäàâàòü íîâûå ïàêåòû DTR, íàñòðàèâàòü èõ ïàðàìåòðû è óäàëÿòü.
6.1.3. Êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè Ïàêåò ñåðâèñîâ èíòåãðàöèè — ýòî íå ÷òî èíîå, êàê êîëëåêöèÿ DTR- è DTP-êîìïîíåíòîâ. Äàííûé ïàêåò ïðåäñòàâëÿåò ñîáîé íàèìåíüøóþ ïðîãðàììíóþ åäèíèöó, êîòîðàÿ èñïîëüçóåòñÿ äëÿ ðàçâåðòûâàíèÿ ïðèëîæåíèé ñåðâèñîâ ïðåîáðàçîâàíèÿ äàííûõ. Èíûìè ñëîâàìè, äëÿ òîãî ÷òîáû ðåàëèçîâàòü íàáîð îïåðàöèé ïî ïåðåìåùåíèþ è ïðåîáðàçîâàíèÿ äàííûõ, ñíà÷àëà íåîáõîäèìî ñîçäàòü ïàêåò, ñîäåðæàùèé âñå íåîáõîäèìûå êîìïîíåíòû DTP, îïðåäåëèòü èñòî÷íèêè äàííûõ îòïðàâèòåëÿ è ïîëó÷àòåëÿ, à òàêæå ïðåîáðàçîâàíèå, êîòîðîå áóäåò âûïîëíÿòüñÿ íàä ïåðåìåùàåìûìè äàííûìè. Ïðè íåîáõîäèìîñòè ìîæíî òàêæå îïðåäåëèòü â äàííîì ïàêåòå íàáîð òåõíîëîãè÷åñêèõ ïðîöåññîâ èëè ïîñëåäîâàòåëüíîñòè çàäà÷, êîòîðûå áóäóò âûïîëíÿòüñÿ íàä äàííûìè. Ïîñëå ñîçäàíèÿ ïàêåòà íåîáõîäèìî åãî âûïîëíèòü, ÷òîáû îïèñàííûå îïåðàöèè áûëè âûïîëíåíû â ñèñòåìå. Ïðèìåð ïàêåòà ñåðâèñà èíòåãðàöèè ïðèâåäåí íà ðèñ. 6.4.
Ðèñ. 6.4. Ïðèìåð ïàêåòà ñåðâèñîâ èíòåãðàöèè
Ïàêåò ñåðâèñîâ èíòåãðàöèè ìîæåò áûòü ñîçäàí ñ ïîìîùüþ ïðîãðàììíûõ ñðåäñòâ, êîòîðûå èìåþòñÿ â SQL Server 2005, èëè ñ ïîìîùüþ ïðîãðàììíîãî èíòåðôåéñà DTR. Äëÿ õðàíåíèÿ ïàêåòîâ ñåðâèñîâ èíòåãðàöèè èñïîëüçóåòñÿ áàçà äàííûõ SQL Server èëè íàáîð XML-ôàéëîâ. Áîëåå äåòàëüíî ïàêåò ñåðâèñîâ èíòåãðàöèè è èíñòðóìåíòû äëÿ åãî ñîçäàíèÿ ìû ðàññìîòðèì â ðàçäåëå 6.3 «Èíñòðóìåíòû ðàáîòû ñ ïàêåòàìè».
6.1.4. Ïðåèìóùåñòâà ñåðâèñîâ èíòåãðàöèè  íîâîé âåðñèè ñåðâèñîâ àíàëèòèêè ïîÿâèëèñü íåñêîëüêî ïðåèìóùåñòâ ïî ñðàâíåíèþ ñ ñåðâèñàìè ïðåîáðàçîâàíèÿ äàííûõ, êîòîðûå ñóùåñòâîâàëè â SQL Server 7.0 è 2000.  ïåðâóþ î÷åðåäü ýòî êîñíóëîñü íîâûõ ìåõàíèçìîâ ïðåîáðàçîâàíèÿ äàííûõ. Íîâûé íàáîð ñåðâèñîâ èíòåãðàöèè íåëüçÿ íàçâàòü ìîùíîé ñèñòåìîé àâòîìàòèçàöèè äîêóìåíòîîáîðîòà è áèçíåñ-ïðîöåññîâ, íî êîëè÷åñòâî ôóíêöèé
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè
139
óïðàâëåíèÿ òåõíîëîãè÷åñêèìè ïðîöåññàìè çíà÷èòåëüíî óâåëè÷èëîñü. Ýòî ìîæåò ãîâîðèòü òîëüêî î òîì, ÷òî Microsoft âñå áîëåå àêòèâíî ïûòàåòñÿ ïðîäâèãàòü ñâîè ïðîãðàììíûå ïðîäóêòû íà êîðïîðàòèâíûé ðûíîê.  ñëåäóþùèõ ðàçäåëàõ ìû ðàññìîòðèì, êàêèå óëó÷øåíèÿ ïîÿâèëèñü â ñåðâèñàõ èíòåãðàöèè SQL Server 2005.
6.1.5. Íàñòðîéêà ñâîéñòâ ïàêåòîâ Îäíèì èç îñíîâíûõ îãðàíè÷åíèé, êîòîðîå ìåøàëî ñîçäàâàòü ãèáêèå ïðèëîæåíèÿ ñåðâèñîâ ïðåîáðàçîâàíèÿ äàííûõ, ÿâëÿëîñü îòñóòñòâèå ìåõàíèçìà äëÿ íàñòðîéêè èñòî÷íèêà è ïîëó÷àòåëÿ äàííûõ âûáðàííîãî ïàêåòà. Èñòî÷íèê è ïîëó÷àòåëü äàííûõ áûëè «çàøèòû» â ïðîãðàììíûé êîä, ÷òî óñëîæíÿëî ïðîöåññ ïåðåíîñà îòäåëüíûõ ïàêåòîâ â äðóãèå ïðîãðàììíûå ñèñòåìû. Ïåðåíîñ áûë ñëîæåí äàæå â òåõ ñëó÷àÿõ, êîãäà â ñèñòåìå èñïîëüçîâàëàñü áàçà äàííûõ àíàëîãè÷íîãî òèïà. ×òî êàñàåòñÿ ïåðåíîñà ïàêåòà â ñèñòåìû ñ áàçàìè äàííûõ äðóãîãî òèïà, òî â ýòîì ñëó÷àå ïàêåòû òðåáîâàëè äîïîëíèòåëüíîé äîðàáîòêè.  íåêîòîðûõ ñëó÷àÿõ ïîäîáíîå îãðàíè÷åíèå ìîæíî áûëî îáîéòè, èñïîëüçóÿ ãëîáàëüíûå ïåðåìåííûå, êîòîðûå ïîçâîëÿëè íàñòðîèòü ïàðàìåòðû èñòî÷íèêà è ïîëó÷àòåëÿ äàííûõ. Îäíàêî ãëîáàëüíûå ïåðåìåííûå íå âñåãäà ìîãëè áûòü èñïîëüçîâàíû äëÿ ðåøåíèÿ ïðîáëåì òàêîãî òèïà.  íîâîé âåðñèè ñåðâèñîâ èíòåãðàöèè SQL Server îäèí ïàêåò ìîæåò ïîääåðæèâàòü íåñêîëüêî èñòî÷íèêîâ äàííûõ è íåñêîëüêî ïîëó÷àòåëåé. Äëÿ íàñòðîéêè ïàðàìåòðîâ èñòî÷íèêîâ è ïîëó÷àòåëåé äàííûõ òåïåðü ìîæåò èñïîëüçîâàòüñÿ íåñêîëüêî ñïîñîáîâ: · ÷òåíèå êëþ÷åé ðååñòðà; · ÷òåíèå XML-ôàéëîâ; · ñ÷èòûâàíèå ïàðàìåòðîâ èç êîíôèãóðàöèîííûõ ôàéëîâ (INI- èëè CFGôàéëîâ).
6.1.6. Ïðîòîêîëèðîâàíèå Â ïðåäûäóùåé âåðñèè ñåðâèñîâ èíòåãðàöèè íå ïîääåðæèâàëñÿ ìåõàíèçì ïðîòîêîëèðîâàíèÿ, ÷òî óñëîæíÿëî ïðîöåññ îòñëåæèâàíèÿ âûïîëíåíèÿ ïðèëîæåíèÿ, îòëàâëèâàíèÿ îøèáîê è ïîñëåäîâàòåëüíîñòè âûïîëíåíèè îïåðàöèé. Â íîâîé âåðñèè ñåðâèñîâ èíòåãðàöèè èìååòñÿ âñòðîåííûé ìåõàíèçì ïðîòîêîëèðîâàíèÿ, ÷òî ïîçâîëÿåò ïðîòîêîëèðîâàòü âûïîëíåíèå çàäà÷, ïàêåòîâ è ïðåîáðàçîâàíèé. Ýòî ïîìîãàåò â îòñëåæèâàíèè îøèáîê, à òàêæå â ïðîöåññå àóäèòà ñèñòåìû.
6.1.7. Êîíòðîëüíûå òî÷êè Äàííîå óëó÷øåíèå êîñíóëîñü íåïîñðåäñòâåííî ïàêåòîâ. Òåïåðü â ïàêåòû ñåðâèñîâ èíòåãðàöèè ìîæíî âñòàâëÿòü êîíòðîëüíûå òî÷êè. Ýòîò ìåõàíèçì ïîçâîëÿåò èñïîëüçîâàòü íåñêîëüêî êîíòðîëüíûõ òî÷åê âíóòðè ïàêåòà è ñâÿçàòü êàæäóþ êîíòðîëüíóþ òî÷êó ñ îïðåäåëåííûì ýòàïîì âûïîëíåíèÿ ïàêåòà (íàïðèìåð, ñ çàâåðøåíèåì ýòàïîâ ÷òåíèÿ äàííûõ, ïðåîáðàçîâàíèÿ èëè çàïèñè â áàçó äàííûõ
140
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
ïîëó÷àòåëÿ). Èñïîëüçîâàíèå êîíòðîëüíûõ òî÷åê âíóòðè ïàêåòà äàåò ðàçðàáîò÷èêó åùå îäíî ïðåèìóùåñòâî: âî âðåìÿ îòëàäêè ïðèëîæåíèÿ åìó íåò íåîáõîäèìîñòè çàïóñêàòü ïðèëîæåíèå ñ ñàìîãî íà÷àëà, à ìîæíî âîñïîëüçîâàòüñÿ ðåçóëüòàòàìè, ïîëó÷åííûìè â ïîñëåäíåé êîíòðîëüíîé òî÷êå, äî êîòîðîé ïðèëîæåíèå âûïîëíÿëîñü ïî çàäàííîìó àëãîðèòìó. Òåïåðü ïðèëîæåíèå ìîæåò áûòü çàïóùåíî ñ òîé êîíòðîëüíîé òî÷êè, ïîñëå êîòîðîé âîçíèêëè îøèáêè. Äëÿ áîëüøèõ ïàêåòîâ ýòî îòëè÷íàÿ âîçìîæíîñòü óñòàíàâëèâàòü â ïðîöåññå îòëàäêè êîíòðîëüíûå òî÷êè, ÷òîáû îòñëåæèâàòü ïðîöåññ âûïîëíåíèÿ ïàêåòà.  êîìáèíàöèè ñ ìåõàíèçìîì îáðàáîòêè ñîáûòèé èñïîëüçîâàíèå êîíòðîëüíûõ òî÷åê ïîçâîëÿåò ñîçäàâàòü äîñòàòî÷íî ñëîæíûå ïðèëîæåíèÿ, êîòîðûå áóäóò â àâòîìàòè÷åñêîì ðåæèìå óñòðàíÿòü îøèáêè è ïðîäîëæàòü âûïîëíåíèå ïàêåòà.
6.1.8. Ïåðåìåííûå Ïîääåðæêà ïåðåìåííûõ — ýòî åùå îäíî óëó÷øåíèå, êîòîðîå êîñíóëîñü ñåðâèñîâ èíòåãðàöèè SQL Server 2005.  ïðåäûäóùèõ âåðñèÿõ ñåðâèñîâ èíòåãðàöèè ïîääåðæèâàëèñü ïåðåìåííûå òîëüêî äëÿ èñïîëüçîâàíèÿ â ñöåíàðèÿõ, îäíàêî ïîääåðæêè ïåðåìåííûõ äëÿ ïàêåòîâ íå áûëî. Ýòîò íåäîñòàòîê ïðèâåë ê óñëîæíåíèþ ïðîöåññà ïîâòîðíîãî èñïîëüçîâàíèÿ ïàêåòîâ, ïîñêîëüêó ïðè ïåðåíîñå ïàêåòîâ èçìåíÿþòñÿ íåêîòîðûå ïàðàìåòðû (íàïðèìåð, èñòî÷íèê è ïîëó÷àòåëü äàííûõ), äëÿ êîòîðûõ æåëàòåëüíî èñïîëüçîâàòü ïåðåìåííûå. Ïðè ïåðåíîñå òàêèõ ïàêåòîâ ïåðåìåííûå áóäóò ðåäàêòèðîâàòüñÿ, ÷òî óïðîñòèò ñàì ïðîöåññ ïåðåíîñà. Íåäîñòàòîê ïåðåìåííûõ ïàêåòà òàêæå ñêàçûâàåòñÿ â ñëó÷àå èñïîëüçîâàíèÿ íåñêîëüêèõ ñåðâåðîâ áàç äàííûõ, ïîñêîëüêó îäíî ïðèëîæåíèå ìîæåò â îïðåäåëåííûå ìîìåíòû âðåìåíè âûïîëíÿòü ñ÷èòûâàíèå äàííûõ èç îïåðàòèâíîé áàçû äàííûõ, à â äðóãèå — èç áàçû äàííûõ äëÿ àðõèâíîãî õðàíåíèÿ.  íîâîé âåðñèè SQL Server ïîääåðæèâàåòñÿ íàáîð ïåðåìåííûõ äëÿ íàñòðîéêè çàäà÷, ïàêåòîâ è ñîáûòèé. Ýòî äàåò äîïîëíèòåëüíóþ ãèáêîñòü ñîçäàâàåìûì ïàêåòàì, à ñëåäîâàòåëüíî, áóäåò âîñòðåáîâàíî ðàçðàáîò÷èêàìè íîâûõ ïàêåòîâ. Ïåðåìåííûå ïàêåòà — ýòî ñâîåãî ðîäà ãëîáàëüíûå ïåðåìåííûå äëÿ âñåãî ïàêåòà. Ýòî îçíà÷àåò, ÷òî çíà÷åíèÿ äàííûõ ïåðåìåííûõ ìîãóò áûòü ñ÷èòàíû ëþáûì èç êîìïîíåíòîâ, âõîäÿùèõ â ñîñòàâ ïàêåòà. ×òî êàñàåòñÿ ïåðåìåííûõ, îïðåäåëåííûõ äëÿ îòäåëüíûõ çàäà÷, ïàêåòîâ è ñîáûòèé, òî îíè áóäóò âèäíû òîëüêî âíóòðè òîãî êëàññà, ê êîòîðîìó îíè îòíîñÿòñÿ, è íå ìîãóò èñïîëüçîâàòüñÿ äðóãèìè êîìïîíåíòàìè. Ïðèìåðîì èñïîëüçîâàíèÿ ïåðåìåííîé ïàêåòà ìîæåò ñëóæèòü ïàêåò, â êîòîðîì â êà÷åñòâå ïåðåìåííîé èñïîëüçóåòñÿ èìÿ ñåðâåðà SQL, íà êîòîðîì óñòàíîâëåí ïàêåò. Èçìåíèâ çíà÷åíèå äàííîé ïåðåìåííîé, ìîæíî áûñòðî ïåðåíåñòè ýòîò ïàêåò íà äðóãóþ ñèñòåìó è çàïóñòèòü åãî ñ èñïîëüçîâàíèåì äðóãîãî ñåðâåðà SQL. Ïðàêòè÷åñêè âñå ïàêåòû ñåðâèñîâ èíòåãðàöèè èìåþò íàáîð âñòðîåííûõ ñèñòåìíûõ ïåðåìåííûõ, êîòîðûå èñïîëüçóþòñÿ êàê ñàìîé ñèñòåìîé, òàê è ðàçðàáîò÷èêàìè, ñîçäàþùèìè ïåðåíîñèìûå è íàñòðàèâàåìûå ïàêåòû.  òàáë. 6.1 ïðèâåäåí ñïèñîê ñèñòåìíûõ ïåðåìåííûõ, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ ïðè ðàçðàáîòêå ïðèëîæåíèé ñåðâèñîâ èíòåãðàöèè.
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè
141
Òàáëèöà 6.1. Ñèñòåìíûå ïåðåìåííûå ñåðâèñîâ èíòåãðàöèè Íàèìåíîâàíèå
Îïèñàíèå
BreakpointTargetDescription
Îïèñàíèå òî÷êè îñòàíîâà
Cancel
Ñîäåðæèò çíà÷åíèå, ãîâîðÿùåå î òîì, ìîæåò ëè âûïîëíåíèå ïàêåòà áûòü îñòàíîâëåíî
CountDone
Ñ÷åò÷èê ïðîãðåññà âûïîëíåíèÿ
ÑreationDate
Äàòà ñîçäàíèÿ ïàêåòà
CreatorComputerName
Èìÿ êîìïüþòåðà, íà êîòîðîì ñîçäàâàëñÿ ïàêåò
CreatorName
Èìÿ ïîëüçîâàòåëÿ, êîòîðûé ñîçäàâàë ïàêåò
CustomEventDescription
Îïèñàíèå ïîëüçîâàòåëüñêîãî ñîáûòèÿ
CustomEventlnfo
Èíôîðìàöèÿ ïîëüçîâàòåëüñêîãî ñîáûòèÿ
CustomEventName
Èìÿ ïîëüçîâàòåëüñêîãî ñîáûòèÿ
Custom EventValue
Çíà÷åíèå ïîëüçîâàòåëüñêîãî ñîáûòèÿ
CustomEventGUID
Îïèñàíèå ïîëüçîâàòåëüñêîãî ñîáûòèÿ GUID
ErrorCode
Êîä îøèáêè
ErrorDescription
Îïèñàíèå îøèáêè
Execution InstanceGuid
Çíà÷åíèå GUID äëÿ èäåíòèôèêàöèè òåêóùåãî ýêçåìïëÿðà ïàêåòà
ExecutionStatus
Ñòàòóñ èñïîëíåíèÿ ïàêåòà
LocalId
Èäåíòèôèêàöèîííûé êîä ëîêàëèçàöèè (êîä ÿçûêà)
MachineName
Èìÿ êîìïüþòåðà, íà êîòîðîì â äàííûé ìîìåíò âûïîëíÿåòñÿ ïàêåò
MaxCount
Ìàêñèìàëüíîå ÷èñëî ýêçåìïëÿðîâ äëÿ ïåðåäà÷è
Pockageld
Èäåíòèôèêàòîð òåêóùåãî ïàêåòà
PackageName
Òåêóùåå èìÿ ïàêåòà
PercentComplete
Òåêóùèé ñòàòóñ âûïîëíåíèÿ ïàêåòà
ProgressCountHigh
Ìàêñèìàëüíîå çíà÷åíèå ñòàòóñà âûïîëíåíèÿ ïàêåòà
ProgressCountLow
Ìèíèìàëüíîå çíà÷åíèå ñòàòóñà âûïîëíåíèÿ ïàêåòà
ProgressDescription
Îïèñàíèå õîäà âûïîëíåíèÿ ïàêåòà
ProgressEvent
Èäåíòèôèêàòîð ñîáûòèÿ
Propagate
Ïîêàçûâàåò, ìîæåò ëè ñîáûòèå ðàñïðîñòðàíÿòüñÿ ìåæäó äðóãèìè ïàêåòàìè
SourceDescription
Îïèñàíèå èñòî÷íèêà ñîáûòèé
SourceID
Èäåíòèôèêàòîð èñòî÷íèêà ñîáûòèé
SourceName
Èìÿ èñòî÷íèêà ñîáûòèé
StartTime
Âðåìÿ íà÷àëà âûïîëíåíèÿ ïàêåòà
TaskID
Èäåíòèôèêàòîð çàäà÷è
TaskName
Èìÿ çàäà÷è
UserName
Èìÿ ïîëüçîâàòåëÿ, êîòîðûé çàïóñòèë äàííûé ïàêåò
VersionBuild
Íîìåð âåðñèè ïàêåòà
VersionComment
Êðàòêîå îïèñàíèå ïàêåòà
VersionGUID
Èäåíòèôèêàòîð ïàêåòà
VersionMajor
Îñíîâíîé íîìåð âåðñèè ïàêåòà
VersionMinor
Âòîðè÷íûé íîìåð âåðñèè ïàêåòà
142
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
6.1.9. Çàäà÷è Çàäà÷è ñåðâèñîâ èíòåãðàöèè — ýòî îäèí èç îñíîâíûõ ýëåìåíòîâ, íà îñíîâå êîòîðîãî ñòðîèòñÿ ôóíêöèîíàëüíîñòü âñåãî ìîäóëÿ ñåðâèñîâ. Çàäà÷à ñåðâèñîâ èíòåãðàöèè èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ è îïèñàíèÿ äåéñòâèÿ, êîòîðîå áóäåò âûïîëíÿòüñÿ ïðèëîæåíèåì. Äàííûå äåéñòâèÿ ìîãóò áûòü êàê ïðîñòûìè (òàêèìè, êàê ÷òåíèå è êîäèðîâàíèå äàííûõ èñòî÷íèêà ïðè ïåðåñûëêå ïîëó÷àòåëþ äàííûõ), òàê è äîñòàòî÷íî ñëîæíûìè (íàïðèìåð, ïåðåäà÷à ôàéëà ÷åðåç FTP è çàïóñê ñöåíàðèÿ ActiveX). Äëÿ âûïîëíåíèÿ îïðåäåëåííûõ äåéñòâèé ñ íàáîðîì ñâÿçàííûõ çàäà÷ èñïîëüçóþòñÿ êîíòåéíåðû.  òàáë. 6.2 ïðèâåäåí ïîëíûé ñïèñîê çàäà÷, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ ïðè ðàçðàáîòêå ïàêåòîâ ñåðâèñîâ èíòåãðàöèè SQL Server 2005. Òàáëèöà 6.2. Çàäà÷è ñåðâèñîâ èíòåãðàöèè SQL Server 2005 Íàèìåíîâàíèå çàäà÷è
Îïèñàíèå
ActiveX Script Task
Âûïîëíÿåò ñöåíàðèé ActiveX, êîòîðûé â ñâîþ î÷åðåäü âûïîëíÿåò îïðåäåëåííîå äåéñòâèå â ñèñòåìå
Analysis Services Execute DDL Task
Èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ DDL-êîìàíäû
Analysis Services Processing Task
Èñïîëüçóåòñÿ äëÿ îáðàáîòêè îáúåêòà ñåðâèñà àíàëèòèêè
Bulk Insert Task
Âûïîëíÿåò âñòàâêó äàííûõ èç òåêñòîâîãî ôàéëà â òàáëèöó
Data Flow Task
Êîïèðóåò è ïðåîáðàçîâûâàåò äàííûå ìåæäó èñòî÷íèêîì äàííûõ è ïîëó÷àòåëåì
Data Mining Query Task
Âûïîëíÿåò çàïðîñû èíôîðìàöèîííîé ïðîõîäêè
Execute Package Task
Èñïîëüçóåòñÿ äëÿ çàïóñêà äðóãèõ ïàêåòîâ
Execute Process Task
Èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ ïðîãðàììû èëè ñöåíàðèÿ
Execute SQL Task
Èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ SQL-êîìàíäû
File System Task
Èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ îïðåäåëåííîãî äåéñòâèÿ â îïåðàöèîííîé ñèñòåìå
File Transfer Protocol Task
Âûïîëíÿåò ïåðåäà÷ó äàííûõ ñ èñïîëüçîâàíèåì ïðîòîêîëà FTP
Message Queue Task
Âûïîëíÿåò îòïðàâêó è ïîëó÷åíèå äàííûõ èç î÷åðåäè ñîîáùåíèé MSMQ (Microsoft Message Queue)
Script Task
Èñïîëüçóåòñÿ äëÿ âûïîëíåíèÿ ñöåíàðèÿ, êîòîðûé íàïèñàí íà ÿçûêå VB.NET
Send Mail Task
Âûïîëíÿåò îòïðàâêó ýëåêòðîííîãî ñîîáùåíèÿ
XML Task
Âûïîëíÿåò äîñòóï è ÷òåíèå äàííûõ èç XML-ôàéëà
6.1.10. Óïðàâëåíèå ïðîöåññàìè Ñåðâåðû èíòåãðàöèè SQL Server 2005 ïîääåðæèâàþò êîìïëåêñíîå óïðàâëåíèå ïðîöåññàìè. Ýòî îçíà÷àåò, ÷òî âíóòðè êàæäîãî ïàêåòà âû ìîæåòå îïðåäåëèòü äåéñòâèÿ, êîòîðûå áóäóò âûïîëíÿòüñÿ ïîñëå óñïåøíîãî çàâåðøåíèÿ âûïîëíåíèÿ ïàêåòà èëè ïðè âîçíèêíîâåíèè îøèáêè. Ïîñëå òîãî êàê îáðàáîòêà ïàêåòà áóäåò çàêîí÷åíà, ñåðâèñ ïåðåéäåò ê âûïîëíåíèþ òîãî äåéñòâèÿ, êîòîðîå âû îïðåäåëèëè. Íàïðèìåð, ïîñëå óñïåøíîãî çàâåðøåíèÿ âûïîëíåíèÿ ïàêåòà âû ìîæåòå çàäàòü ñåðâèñàì èíòåãðàöèè âûïîëíèòü åùå îäèí ïàêåò.  òîì ñëó÷àå, åñëè âîçíèêëà
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè
143
îøèáêà èëè âûïîëíåíèå ïàêåòà áûëî ïðèîñòàíîâëåíî ïî êàêèì-ëèáî ïðè÷èíàì, ìîæíî âûâåñòè ñîîòâåòñòâóþùåå ñîîáùåíèå íà ýêðàí êîìïüþòåðà èëè âûïîëíèòü îïðåäåëåííîå äåéñòâèå. Áîëåå äåòàëüíî ïðîöåññ îáðàáîòêè îøèáîê ìû ðàññìîòðèì â ðàçäåëå 6.1.17 «Îáðàáîò÷èêè ñîáûòèé». Óïðàâëåíèå âûïîëíåíèåì ïðîöåññîâ ìîæåò èñïîëüçîâàòüñÿ òàêæå äëÿ îáåñïå÷åíèÿ âûïîëíåíèÿ íåñêîëüêèõ îäíîâðåìåííûõ ïðîöåññîâ, ÷òî ñîêðàòèò íå òîëüêî âðåìÿ, íî è çàòðàòû òðóäà. Äëÿ ïîñëåäîâàòåëüíîãî âûïîëíåíèÿ ïàêåòîâ íåîáõîäèìî òîëüêî çàäàòü èõ ïîðÿäîê. Ïîñëå óñïåøíîãî îêîí÷àíèÿ âûïîëíåíèÿ îäíîãî ïàêåòà áóäåò çàïóùåíî âûïîëíåíèå ñëåäóþùåãî, è òàê äàëåå.  ñåðâèñàõ èíòåãðàöèè ïðåäóñìîòðåíî íàëè÷èå îòäåëüíîãî êîíòåéíåðà äëÿ ãðóïïèðîâàíèÿ ñâÿçàííûõ çàäà÷ ñåðâèñîâ èíòåãðàöèè. Êàæäûé êîíòåéíåð ìîæåò èìåòü âíóòðåííåå óïðàâëåíèå âûïîëíåíèåì ïðîöåññîâ, ÷òî ïîçâîëÿåò ñèíõðîíèçèðîâàòü âûïîëíåíèå çàäà÷, à òàêæå íàáîð âíóòðåííèõ ïåðåìåííûõ äëÿ íàñòðîéêè. Ïîìèìî ýòîãî èìååòñÿ öåëûé íàáîð ñðåäñòâ äëÿ íàñòðîéêè ïîâòîðÿþùèõñÿ ñîáûòèé. Ýòî ïîçâîëÿåò ìàêñèìàëüíî ïðèáëèçèòü ñîçäàíèå çàäà÷ ê ñòàíäàðòíûì ñðåäñòâàì ðàçðàáîòêè ïðîãðàììíûõ ïðèëîæåíèé. Äëÿ âûïîëíåíèÿ ïîâòîðíûõ îïåðàöèé èñïîëüçóåòñÿ êîíòåéíåð For Each Loop. Îí ïîçâîëÿåò âûïîëíÿòü îäèíàêîâûå äåéñòâèÿ äëÿ ãðóïïû îáúåêòîâ, êîòîðûå ñîäåðæàòñÿ âíóòðè íåãî. Ïîìèìî ýòîãî èìååòñÿ êîíòåéíåð For Loop, êîòîðûé ìîæåò âûïîëíÿòü ïîâòîðÿþùååñÿ äåéñòâèå äëÿ ãðóïïû îáúåêòîâ îïðåäåëåííîå ÷èñëî ðàç. Ïîëíûé ñïèñîê êîíòåéíåðîâ áóäåò ïðèâåäåí â ðàçäåëå 6.1.13 «Êîíòåéíåðû». Êàê ãîâîðèëîñü ðàíåå â ýòîì ðàçäåëå, ìîæíî íàñòðàèâàòü íå òîëüêî ïîñëåäîâàòåëüíîñòü äåéñòâèé, êîòîðûå áóäóò âûïîëíÿòüñÿ â ðåçóëüòàòå óñïåøíîãî âûïîëíåíèÿ ïàêåòà, íî è äåéñòâèÿ, âûïîëíÿåìûå ïðè âîçíèêíîâåíèè îøèáîê. Äàííàÿ ôóíêöèîíàëüíîñòü ïîçâîëÿåò äîáàâèòü îáðàáîòêó îøèáîê, êîòîðûå âîçíèêàþò â ïðîöåññå âûïîëíåíèÿ ïàêåòà. Ïðèìåðîì îáðàáîòêè îøèáîê, âîçíèêàþùèõ â ïðîöåññå ðàáîòû ñåðâèñà èíòåãðàöèè, ìîæåò ÿâëÿòüñÿ ñ÷èòûâàíèå îøèáî÷íûõ ñòðîê.  ïðåäûäóùèõ âåðñèÿõ ñåðâèñîâ èíòåãðàöèè ñòðîêè ñ îøèáî÷íûìè çíà÷åíèÿìè íå ìîãëè îáðàáàòûâàòüñÿ, ÷òî ïðèâîäèëî ê îñòàíîâêå â ðàáîòå ñåðâèñîâ.  íîâîé âåðñèè âîçìîæíà îáðàáîòêà âîçíèêàþùèõ îøèáîê áëàãîäàðÿ íàñòðîéêå ïðîöåññà îáðàáîòêè îøèáîê.
6.1.11. Ðåæèìû ðàáîòû  ñåðâèñàõ ïðåîáðàçîâàíèÿ äàííûõ SQL Server 2000 èìåëñÿ ìàñòåð äëÿ âûïîëíåíèÿ ïðîñòåéøèõ îïåðàöèé ïî èìïîðòó è ýêñïîðòó äàííûõ, à òàêæå äèçàéíåð DTS, êîòîðûé èñïîëüçîâàëñÿ äëÿ ðåøåíèÿ áîëåå ñëîæíûõ çàäà÷ èìïîðòà è ýêñïîðòà äàííûõ.  íîâîé âåðñèè SQL Server ñåðâèñû èíòåãðàöèè ïîääåðæèâàþò îáà ïåðå÷èñëåííûõ ðåæèìà ðàáîòû. Ïðè ýòîì ïåðâûé ðåæèì íîñèò íàçâàíèå «ïðÿìîé ìåòîä» (áûñòðîå âûïîëíåíèå çàïðîñîâ), à âòîðîé — «ïðîåêòíûé ðåæèì» (ñîçäàíèå ïðèëîæåíèÿ äëÿ ÷òåíèÿ, ïðåîáðàçîâàíèÿ è çàïèñè äàííûõ â áàçó äàííûõ). Äëÿ ñîçäàíèÿ íåáîëüøèõ ïðèëîæåíèé è áûñòðîãî âûïîëíåíèÿ îïåðàöèé ýêñïîðòà-èìïîðòà â ñåðâèñàõ èíòåãðàöèè SQL Server 2005 èñïîëüçóåòñÿ óòèëèòà Import/ Export Wizard. Îíà ïîçâîëÿåò ñîçäàâàòü, èñïîëíÿòü è ïðè íåîáõîäèìîñòè ñîõðàíÿòü
144
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
ïðîñòåéøèå çàïðîñû ê áàçå äàííûõ.  îòíîøåíèè äàííîé óòèëèòû íèêàêèõ êàðäèíàëüíûõ èçìåíåíèé íå íàáëþäàåòñÿ. Îíà ðàáîòàåò è èìååò âèä, àíàëîãè÷íûé ïîäîáíîé óòèëèòå â ñåðâèñàõ ïðåîáðàçîâàíèÿ äàííûõ SQL Server 2000. Ïðîåêòíûé ðåæèì ñåðâèñîâ èíòåãðàöèè SQL Server 2005 òàê æå, êàê è â ïðåäûäóùåé âåðñèè ñåðâåðà SQL, ìîæåò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ áîëåå ñëîæíûõ ïðèëîæåíèé. Äëÿ ñîçäàíèÿ òàêèõ ïðèëîæåíèé õîðîøî ïîäõîäèò Business Intelligence Development Studio — ýòî ïðèëîæåíèå, êîòîðîå ñîäåðæèò âñòðîåííóþ óòèëèòó Integration Services Designer è ìîæåò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ ñëîæíûõ ïðèëîæåíèé èìïîðòà, ýêñïîðòà è ïðåîáðàçîâàíèÿ äàííûõ. Íîâàÿ âåðñèÿ äèçàéíåðà ñåðâèñîâ èíòåãðàöèè ïîääåðæèâàåò íàáîð îáðàáîò÷èêîâ ñîáûòèé ïîòîêîâ äàííûõ, òåõíîëîãè÷åñêèõ ïðîöåññîâ è äð. Åùå îäíèì óëó÷øåíèåì äèçàéíåðà ñåðâèñîâ èíòåãðàöèè SQL Server ÿâëÿåòñÿ ñîçäàíèå íîâûõ èíñòðóìåíòîâ äëÿ íàëàäêè ðàáîòû ïàêåòîâ, ÷òî ïîçâîëÿåò âíåäðèòü ìåõàíèçìû òîòàëüíîãî êîíòðîëÿ â ïðîöåññ ðàçðàáîòêè ïàêåòîâ ñåðâèñîâ èíòåãðàöèè. Áîëåå äåòàëüíî äèçàéíåð ñåðâèñîâ èíòåãðàöèè SQL Server 2005 áóäåò ðàññìîòðåí íàìè â ðàçäåëå 6.2.2 «Äèçàéíåð ñåðâèñîâ èíòåãðàöèè».
6.1.12. Öèôðîâàÿ ïîäïèñü  íîâîé âåðñèè ñðåäû ðàçðàáîòêè Microsoft .NET Framework ïîÿâèëñÿ íîâûé ìåòîä äëÿ öèôðîâîé ïîäïèñè äîêóìåíòîâ, ïàêåòîâ, ñîîáùåíèé è äðóãèõ ýëåìåíòîâ, â êîòîðûå áóäåò âñòðîåí âûçîâ äàííîãî ìåòîäà. Áëàãîäàðÿ èíòåãðàöèè ñ íîâîé âåðñèåé Microsoft .NET äàííàÿ ôóíêöèîíàëüíîñòü ñòàëà äîñòóïíà â SQL Server 2005. Äëÿ ñåðâèñîâ èíòåãðàöèè ýòà ôóíêöèîíàëüíîñòü ñòàíîâèòñÿ îñîáåííî àêòóàëüíîé: ïàêåòû, ñîçäàííûå ñ èñïîëüçîâàíèåì íàáîðà èíñòðóìåíòîâ, ìîãóò èìåòü öèôðîâóþ ïîäïèñü. Ïðè ýòîì íà êîìïüþòåðå ïåðåä çàïóñêîì ïîäîáíîãî ïàêåòà áóäåò âûïîëíÿòüñÿ ïðîâåðêà öèôðîâîé ïîäïèñè.  ñëó÷àå åñëè îíà íå âûçûâàåò ñîìíåíèé, ïàêåò ìîæåò áûòü âûïîëíåí íà êîìïüþòåðå, â îáðàòíîì ñëó÷àå — áóäåò âûïîëíÿòüñÿ äåéñòâèå, êîòîðîå ðàçðåøåíî òåêóùèì óðîâíåì áåçîïàñíîñòè. Ïîäïèñü ïàêåòà âûïîëíÿåòñÿ â ïðîöåññå ñîçäàíèÿ íîâîãî ïàêåòà â äèçàéíåðå ñåðâèñîâ èíòåãðàöèè. Ïîñëå äîáàâëåíèÿ öèôðîâîé ïîäïèñè ïàêåò ñòàíîâèòñÿ äîñòóïíûì òîëüêî äëÿ ÷òåíèÿ è ðàçðàáîò÷èêè íå ìîãóò âíîñèòü â íåãî èçìåíåíèÿ, à ñëåäîâàòåëüíî, íå ìîãóò èçìåíÿòü öèôðîâóþ ïîäïèñü.
6.1.13. Êîíòåéíåðû Êîíòåéíåð — ýòî èçâåñòíàÿ ïðîãðàììíàÿ êîíñòðóêöèÿ, èñïîëüçîâàâøàÿñÿ ðàíåå ïðè ðàçðàáîòêå ïðîãðàììíûõ ðåøåíèé íà òàêèõ ÿçûêàõ, êàê Java è JSP (Java Server Pages). Òåïåðü äàííàÿ êîíñòðóêöèÿ òàêæå ïîÿâèëàñü â ïðîãðàììíûõ ðåøåíèÿõ Microsoft, è â ÷àñòíîñòè, ñåðâèñàõ èíòåãðàöèè SQL Server 2005. Îñíîâíîå íàçíà÷åíèå êîíòåéíåðîâ ñåðâèñîâ èíòåãðàöèè — ýòî äîáàâëåíèå äîïîëíèòåëüíîãî óðîâíÿ óïðàâëåíèÿ íàáîðîì çàäà÷ è ïàêåòîâ. Ñ ïîìîùüþ êîíòåéíåðîâ ðàçðàáîò÷èêè ìîãóò âûïîëíèòü ãðóïïèðîâêó ñâÿçàííûõ çàäà÷ ñ öåëüþ èõ ñîâìåñòíîãî âûïîëíåíèÿ (ïàðàëëåëüíîãî èëè ïîñëåäîâàòåëüíîãî). Òàêæå êîíòåéíåðû èñïîëüçóþòñÿ äëÿ òîãî, ÷òîáû îïðåäåëèòü ñïèñîê ñèñòåìíûõ ïåðåìåííûõ, êîòîðûå
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè
145
áóäóò âèäíû òîëüêî âíóòðè âûáðàííîãî êîíòåéíåðà. Ýòî óïðîùàåò ðàçðàáîòêó ñëîæíûõ ïàêåòîâ è ïîçâîëÿåò ñèíõðîíèçèðîâàòü âûïîëíåíèå îòäåëüíûõ çàäà÷.  SQL Server 2005 ñóùåñòâóåò íåñêîëüêî òèïîâ êîíòåéíåðîâ. Ïîìèìî ýòîãî ðàçðàáîò÷èêè ìîãóò ñîçäàâàòü ñâîè ñîáñòâåííûå êîíòåéíåðû èëè ðàñøèðÿòü ôóíêöèîíàëüíîñòü ñóùåñòâóþùèõ. Ïîëíûé ñïèñîê ñèñòåìíûõ êîíòåéíåðîâ è èõ îïèñàíèå ïðèâåäåíû â òàáë. 6.3. Òàáëèöà 6.3. Òèïû ñèñòåìíûõ êîíòåéíåðîâ ñåðâèñîâ èíòåãðàöèè SQL Server 2005 Òèï êîíòåéíåðà
Îïèñàíèå
Package Container
Êîëëåêöèÿ ýëåìåíòîâ ïàêåòà
Foreach Loop Container
Ïîçâîëÿåò ðåàëèçîâàòü ïðîñòåéøèé êîíòðîëü íàä ïîñëåäîâàòåëüíîñòüþ âûïîëíåíèÿ ïàêåòà
For Loop Container
Ïðåäîñòàâëÿåò âîçìîæíîñòè ðàáîòû ñ ïîâòîðÿþùèìèñÿ ñîáûòèÿìè è çàäà÷àìè â îòäåëüíîì ïàêåòå
Sequence Container
Èñïîëüçóåòñÿ äëÿ ãðóïïèðîâêè ñâÿçàííûõ çàäà÷ è êîíòåéíåðîâ â ïàêåò
TaskHost Container
Êîíòåéíåð, ñîäåðæàùèé çàäà÷è è ïðåäîñòàâëÿþùèé äëÿ çàäà÷ îïðåäåëåííûå ôóíêöèè
Container Properties
Ñîäåðæèò íàáîð îáùèõ äàííûõ äëÿ êîíòåéíåðà
Container Collections
Êîëëåêöèÿ êîíòåéíåðîâ
6.1.14. Àäàïòåðû äàííûõ  DTP èñïîëüçóþòñÿ àäàïòåðû äëÿ ñîåäèíåíèÿ ñ èñòî÷íèêàìè äàííûõ è ïîëó÷àòåëÿìè, êîòîðûå îðãàíèçóþò ïðîìåæóòî÷íûé óðîâåíü ïåðåäà÷è äàííûõ. Ïîìèìî ñóùåñòâóþùèõ àäàïòåðîâ äàííûõ ðàçðàáîò÷èêè ìîãóò ñîçäàâàòü ñâîè ñîáñòâåííûå, êîòîðûå áóäóò ó÷èòûâàòü îñîáåííîñòè òîãî èëè èíîãî èñòî÷íèêà äàííûõ. Ïîëíûé ñïèñîê âñòðîåííûõ àäàïòåðîâ, à òàêæå èõ îïèñàíèå ïðèâîäÿòñÿ â òàáë. 6.4. Òàáëèöà 6.4. Âñòðîåííûå àäàïòåðû äàííûõ Àäàïòåð äàííûõ
Îïèñàíèå
Flat File Destination Adapter
Ñèñòåìíûé àäàïòåð, êîòîðûé èñïîëüçóåòñÿ äëÿ çàïèñè òåêñòîâûõ äàííûõ â ôàéë
Flat File Source Adapter
Ñèñòåìíûé àäàïòåð, êîòîðûé èñïîëüçóåòñÿ äëÿ ÷òåíèÿ òåêñòîâûõ äàííûõ èç ôàéëà
OLE DB Destination Adapter
Ïðîâàéäåð OLE DB, êîòîðûé âûïîëíÿåò çàïèñü äàííûõ â OLEîáúåêò
OLE DB Source Adapter
Îáúåêò OLE DB, êîòîðûé âûïîëíÿåò ÷òåíèå äàííûõ èç ïðîâàéäåðà OLE DB
Raw File Destination Adapter
Ñèñòåìíûé àäàïòåð, âûïîëíÿþùèé çàïèñü äàííûõ â ôàéë
Raw File Source Adapter
Ñèñòåìíûé àäàïòåð, âûïîëíÿþùèé ÷òåíèå äàííûõ èç ôàéëà
SQL Server Destination Adapter
Àäàïòåð SQL Server, êîòîðûé èñïîëüçóåòñÿ äëÿ çàïèñè äàííûõ â òàáëèöó èëè ïðåäñòàâëåíèå
Web Service Source Adapter
Àäàïòåð, âûïîëíÿþùèé ÷òåíèå äàííûõ èç âåá-ñåðâèñà XML
146
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
6.1.15. Ïðîâàéäåðû ïðîòîêîëèðîâàíèÿ Êàê ìû ðàññìàòðèâàëè ðàíåå, äëÿ ñ÷èòûâàíèÿ è çàïèñè äàííûõ ñåðâèñàìè èíòåãðàöèè ìîãóò èñïîëüçîâàòüñÿ ñïåöèàëüíûå ïðîâàéäåðû. Ïîìèìî ýòîãî ñåðâèñû èíòåãðàöèè èìåþò äîïîëíèòåëüíûé ìåõàíèçì äëÿ ïðîòîêîëèðîâàíèÿ ñîáûòèé â ñèñòåìå. Äëÿ ýòîãî èñïîëüçóþòñÿ ïðîâàéäåðû ïðîòîêîëèðîâàíèÿ, ïîçâîëÿþùèå âåñòè ïðîòîêîëèðîâàíèå âûïîëíåíèÿ ïàêåòîâ, çàäà÷ è êîíòåéíåðîâ.  ñëó÷àå èñïîëüçîâàíèÿ ìåõàíèçìà ïðîòîêîëèðîâàíèÿ äëÿ âûäåëåííûõ îáúåêòîâ çàïèñûâàåòñÿ èíôîðìàöèÿ îá îøèáêàõ, âûïîëíåíèè (çàïóñêå, îñòàíîâêå) èëè èçìåíåíèè ïàðàìåòðîâ (íàïðèìåð, ïåðåìåííûõ). Ñåðâèñû èíòåãðàöèè SQL Server ñîäåðæàò ïÿòü ïðîâàéäåðîâ ïðîòîêîëèðîâàíèÿ. Èõ ïåðå÷åíü è îïèñàíèå ïðèâåäåíû â òàáë. 6.5. Òàáëèöà 6.5. Ïðîâàéäåðû ïðîòîêîëèðîâàíèÿ ñåðâèñîâ èíòåãðàöèè Íàèìåíîâàíèå ïðîâàéäåðà
Îïèñàíèå
Text File log
Âûïîëíÿåò çàïèñü log-ôàéëà â òåêñòîâûé ôàéë ôîðìàòà ASCII ñ èñïîëüçîâàíèåì çíà÷åíèé, ðàçäåëåííûõ çàïÿòûìè (CSV). Ïðè ýòîì èñïîëüçóåòñÿ ðàñøèðåíèå äàííîãî ôàéëà, êîòîðîå áûëî îïðåäåëåíî ïî óìîë÷àíèþ äëÿ ñèñòåìû
SQL Profiler log
Âûïîëíÿåò çàïèñü äàííûõ î òðàññèðîâêå SQL Server. Äëÿ ôàéëà èñïîëüçóåòñÿ ðàñøèðåíèå .trc
SQL Server log
Âûïîëíÿåò çàïèñü â òàáëèöó sys.dtslog áàçû äàííûõ SQL Server
Windows Event log
Âûïîëíÿåò çàïèñü log-ôàéëà â ïîðò ïðèëîæåíèÿ Win32
XML Rle log
Âûïîëíÿåò çàïèñü log-ôàéëà â XML-ôàéë. Ïðè ýòîì äëÿ ôàéëà èñïîëüçóåòñÿ ðàñøèðåíèå .xml
6.1.16. Ïðåîáðàçîâàíèå äàííûõ Ïðåîáðàçîâàíèå äàííûõ ÿâëÿåòñÿ îäíîé èç îñíîâíûõ ôóíêöèé, êîòîðûå òðåáóþòñÿ ïðè ïåðåíîñå äàííûõ ìåæäó èñòî÷íèêîì è ïîëó÷àòåëåì. Ñòîèò óïîìÿíóòü, ÷òî ðàíåå ñåðâèñû èíòåãðàöèè íîñèëè íàçâàíèå «ñåðâèñû ïðåîáðàçîâàíèÿ äàííûõ», ÷òî îòðàæàëî èõ îñíîâíóþ ïðèðîäó.  íîâîé âåðñèè SQL Server ñîäåðæèòñÿ îãðîìíîå êîëè÷åñòâî âñòðîåííûõ ïðåîáðàçîâàíèé (òàáë. 6.6). Îíè ïîçâîëÿþò âûïîëíÿòü ðàçëè÷íûå îïåðàöèè íàä äàííûìè, êîòîðûå ïîäàþòñÿ èì íà âõîä, è çàïèñûâàòü äàííûå â áàçû äàííûõ ïîëó÷àòåëÿ. Ïîìèìî ñóùåñòâóþùåãî íàáîðà ïðåîáðàçîâàíèé ìîæíî âîñïîëüçîâàòüñÿ API, êîòîðûé ïðåäîñòàâëåí îáúåêòíîé ìîäåëüþ DTP, ñ öåëüþ ñîçäàíèÿ ñâîåãî ñîáñòâåííîãî ïðåîáðàçîâàíèÿ. Òàáëèöà 6.6. Âñòðîåííûå ïðåîáðàçîâàíèÿ äàííûõ ñåðâèñîâ èíòåãðàöèè Íàèìåíîâàíèå ïðåîáðàçîâàíèÿ
Îïèñàíèå
Aggregate Transformation
Âûïîëíÿåò àãðåãèðîâàíèå
Allocation Transformation
Êîïèðóåò çíà÷åíèå ââîäèìîé êîëîíêè òàáëèöû âíóòðè íàáîðà çàäàííûõ òàáëèö
Character Map Transformation
Îáúåäèíÿåò îòäåëüíûå ñèìâîëû â ñòðîêè
Conditional Split Transformation
Ïåðåíàïðàâëÿåò ââîä äàííûõ
Copy/Map Transformation
Ñîçäàåò íîâóþ êîëîíêó äëÿ ââîäà ñ ïîìîùüþ îïåðàöèè êîïèðîâàíèÿ îïðåäåëåííîé êîëîíêè
6.1. Àðõèòåêòóðà è êîìïîíåíòû ñåðâèñîâ èíòåãðàöèè
147
Íàèìåíîâàíèå ïðåîáðàçîâàíèÿ
Îïèñàíèå
Data Mining Model Accuracy Transformation
Ïðîâåðÿåò ïðàâèëüíîñòü ñîñòàâëåíèÿ ìîäåëè èíôîðìàöèîííîé ïðîõîäêè
Data Mining Model Training Transformation
Òåñòèðóåò ìîäåëü èíôîðìàöèîííîé ïðîõîäêè
Data Mining Query Transformation
Çàïóñêàåò çàïðîñû èíôîðìàöèîííîé ïðîõîäêè
Data Conversion Transformation
Ïðåîáðàçóåò âõîäíûå äàííûå â ôîðìàò ïîëó÷àòåëÿ
Derived Column Transformation
Ñîçäàåò êîëîíêó â ñîîòâåòñòâèè ñ ïàðàìåòðàìè âõîäíîé
Dimension Processing Transformation
Îáðàáàòûâàåò èçìåðåíèå OLAP-êóáà
File Extractor Transformation
Âûïîëíÿåò ÷òåíèå äàííûõ èç ïîòîêà äàííûõ è çàïèñûâàåò èõ â ôàéë
File Injector Transformation
Âûïîëíÿåò ÷òåíèå äàííûõ èç ôàéëà è çàïèñûâàåò èõ â ïîòîê äàííûõ
Fuzzy Grouping Transformation
Âûïîëíÿåò ïðèâåäåíèå äàííûõ ê îäíîìó âèäó
Fuzzy Lookup Transformation
Âûïîëíÿåò ïîèñê çíà÷åíèé, èñïîëüçóÿ íåòî÷íîå ñîâïàäåíèå
Logged Lineage Transformation
Ïîçâîëÿåò ïåðåäàâàòü èíôîðìàöèþ îá îêðóæåíèè â ïàêåò ïîòîêà äàííûõ
Lookup Transformation
Âûïîëíÿåò ïîèñê çàäàííûõ çíà÷åíèé â òàáëèöå
Merge Transformation
Âûïîëíÿåò ñëèÿíèå äâóõ îòñîðòèðîâàííûõ òàáëèö
Merge Join Transformation
Âûïîëíÿåò ñëèÿíèå äâóõ íàáîðîâ äàííûõ, èñïîëüçóÿ ïàðàìåòðû îáúåäèíåíèÿ FULL, INNER èëè LEFT
Multicast Transformation
Ïåðåíàïðàâëÿåò äàííûå îò îäíîãî èñòî÷íèêà íåñêîëüêèì ïîëó÷àòåëÿì
Partition Processing Transformation
Âûïîëíÿåò îáðàáîòêó ðàçäåëîâ OLAP
Pivot Transformation
Âûïîëíÿåò ïðåîáðàçîâàíèå äàííûõ ñîãëàñíî çàäàííîé êîëîíêå, âûñòóïàþùåé â êà÷åñòâå îñè
Row Count Transformation
Âûïîëíÿåò ïîäñ÷åò êîëè÷åñòâà ñòðîê è ñîõðàíÿåò çíà÷åíèå â çàäàííîé ïåðåìåííîé
Sampling Transformation
Âûïîëíÿåò ïðåîáðàçîâàíèå äàííûõ
Script Transformation
Âûïîëíÿåò ñöåíàðèé ïðåîáðàçîâàíèÿ äàííûõ
Slowly Changing Dimension Transformation
Èñïîëüçóåòñÿ äëÿ îòñëåæèâàíèÿ ïðîöåññà îáíîâëåíèÿ è âñòàâêè ñòðîê â èçìåðåíèå OLAP-êóáà
Sort Transformation
Ñîðòèðóåò âõîäÿùèå äàííûå è êîïèðóåò îòñîðòèðîâàííûå äàííûå â áàçó äàííûõ ïîëó÷àòåëÿ
Surrogate Key Transformation
Ïðåäîñòàâëÿåò äîïîëíèòåëüíûå âîçìîæíîñòè äëÿ âûïîëíåíèÿ äåéñòâèé íàä äàííûìè
Union All Transformation
Îáúåäèíÿåò íåñêîëüêî íàáîðîâ äàííûõ
UnPivot Transformation
Âûïîëíÿåò îáðàòíîå ïðåîáðàçîâàíèå ñîãëàñíî çàäàííîé êîëîíêå
6.1.17. Îáðàáîò÷èêè ñîáûòèé Ñåðâèñû èíòåãðàöèè ìîãóò ñàìîñòîÿòåëüíî âûïîëíÿòü îáðàáîòêó ñîáûòèé. Îáðàáîòêà ñîáûòèé ïîçâîëÿåò ïðîãðàììíîìó ïðèëîæåíèþ àäåêâàòíî ðåàãèðîâàòü íà èçìåíåíèÿ â ñðåäå èëè íà âîçíèêíîâåíèå îøèáîê.  ðåçóëüòàòå îáðàáîòêè
148
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
ñîáûòèé ìîãóò çàïóñêàòüñÿ çàäà÷è èëè âûïîëíÿòüñÿ êîíòåéíåðû. Ñîáûòèÿ ìîãóò ãåíåðèðîâàòüñÿ íå òîëüêî ñðåäîé îêðóæåíèÿ, íî è ñàìèìè ñåðâèñàìè èíòåãðàöèè. Ïîäîáíûå ñîáûòèÿ ìîãóò âêëþ÷àòü èçìåíåíèå çàäàííûõ ïåðåêëþ÷àòåëåé, âîçíèêíîâåíèå îøèáîê â ñèñòåìå, çàïóñê è îñòàíîâêó çàäà÷, èçìåíåíèå çíà÷åíèé ïåðåìåííûõ, à òàêæå çàïóñê îòäåëüíûõ ïàêåòîâ èëè êîíòåéíåðîâ. Ïîëíûé ñïèñîê ñèñòåìíûõ ñîáûòèé, êîòîðûå ìîãóò îáðàáàòûâàòüñÿ ñðåäñòâàìè ñåðâèñîâ èíòåãðàöèè, à òàêæå èõ îïèñàíèå ïðèâåäåíû â òàáë. 6.7. Òàáëèöà 6.7. Îáðàáîò÷èêè ñîáûòèé ñåðâèñîâ èíòåãðàöèè Íàèìåíîâàíèå îáðàáîò÷èêà
Îïèñàíèå
OnCustomerEvent
Âûçûâàåòñÿ èç çàäà÷è èëè ïàêåòà
OnErrw
Âûçûâàåòñÿ èç çàäà÷è èëè ïàêåòà ïðè âîçíèêíîâåíèè îøèáêè
OnExecStatusChanged
Âûçûâàåòñÿ èç çàäà÷è èëè êîíòåéíåðà âî âðåìÿ èçìåíåíèÿ ñòàòóñà âûïîëíåíèÿ
OnPostExecute
Âûçûâàåòñÿ èç çàäà÷è èëè êîíòåéíåðà ñðàçó ïîñëå çàïóñêà
OnPostValidate
Âûçûâàåòñÿ èç çàäà÷è ïîñëå åå ïðîâåðêè
OnPreExecute
Âûçûâàåòñÿ èç çàäà÷è èëè êîíòåéíåðà ïåðåä çàïóñêîì
OnPreValidate
Âûçûâàåòñÿ èç çàäà÷è ïåðåä åå ïðîâåðêîé
OnProgress
Âûçûâàåòñÿ èç çàäà÷è èëè êîíòåéíåðà ïîñëå âûïîëíåíèÿ îïðåäåëåííûõ ðàçðàáîò÷èêîì óñëîâèé
OnQueryCancel
Âûçûâàåòñÿ èç çàäà÷è èëè êîíòåéíåðà äëÿ îïðåäåëåíèÿ, íåîáõîäèìà ëè èõ îñòàíîâêà
OnTask Failed
Âûçûâàåòñÿ èç çàäà÷è, åñëè âîçíèêàåò îøèáêà âûïîëíåíèÿ
OnVariableValueChanged
Âûçûâàåòñÿ èç ïåðåìåííîé, åñëè åå çíà÷åíèå èçìåíÿåòñÿ
OnWarning
Âûçûâàåòñÿ èç çàäà÷è èëè êîíòåéíåðà â ñëó÷àå ãåíåðàöèè ïðåäóïðåæäåíèÿ
6.2. Èíñòðóìåíòû ñåðâèñîâ èíòåãðàöèè Êàê âû ìîãëè îáðàòèòü âíèìàíèå â îïèñàíèè ñåðâèñîâ èíòåãðàöèè, ïðèâåäåííîì â ïðåäûäóùèõ ðàçäåëàõ, ñåðâèñû â íîâîé âåðñèè SQL Server ïðåòåðïåëè çíà÷èòåëüíûå èçìåíåíèÿ. Íå òîëüêî èçìåíèëàñü àðõèòåêòóðà ïðèëîæåíèÿ, íî è ïîÿâèëèñü íîâûå ñðåäñòâà äëÿ íàñòðîéêè è âûïîëíåíèÿ ñåðâèñîâ èíòåãðàöèè.  ñîîòâåòñòâèè ñ äàííûìè èçìåíåíèÿìè â SQL Server 2005 ïîÿâèëñÿ íîâûé íàáîð èíñòðóìåíòîâ äëÿ óïðàâëåíèÿ ñåðâèñàìè èíòåãðàöèè, à íåêîòîðûå èç ðàíåå ñóùåñòâîâàâøèõ èíñòðóìåíòîâ îáðåëè íîâóþ ôóíêöèîíàëüíîñòü. Íàïðèìåð, óòèëèòà Import/Export Wizard, êîòîðàÿ èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ ïðîñòåéøèõ ïðèëîæåíèé ïåðåíîñà è ïðåîáðàçîâàíèÿ äàííûõ, ïðàêòè÷åñêè íå ïðåòåðïåëà èçìåíåíèé. Ýòîãî íåëüçÿ ñêàçàòü îá óòèëèòå Service Designer. Îíà ïîëó÷èëà íå òîëüêî íîâûé èíòåðôåéñ, íî è ôóíêöèîíàëüíîñòü. Ìîæíî ñ óâåðåííîñòüþ ñêàçàòü, ÷òî íîâûå èíñòðóìåíòû òåïåðü áîëüøå ðàññ÷èòàíû íà ñëîæíûå è êîìïëåêñíûå ïðèëîæåíèÿ, ÷òî îáúÿñíÿåòñÿ òðåáîâàíèÿìè áèçíåñà. Äëÿ òîãî ÷òîáû ñîçäàâàòü êàê ïðîñòåéøèå, òàê è äîñòàòî÷íî ñëîæíûå ïðèëîæåíèÿ, âàì ïîòðåáóåòñÿ èçó÷èòü íîâûå
6.2. Èíñòðóìåíòû ñåðâèñîâ èíòåãðàöèè
149
èíñòðóìåíòû.  ýòîì ðàçäåëå ìû ðàññìîòðèì èçìåíåíèÿ, êîòîðûå ïîÿâèëèñü â ñóùåñòâîâàâøèõ ðàíåå èíñòðóìåíòàõ, à òàêæå èõ íîâûå ôóíêöèè.  ïîëå íàøåãî çðåíèÿ ïîïàäóò óòèëèòû Import/Export Wizard è Services Designer.  îáùåì ñëó÷àå âåñü ïåðå÷åíü èíñòðóìåíòîâ ñåðâèñîâ èíòåãðàöèè ìîæíî ðàçäåëèòü íà äâà áîëüøèõ êëàññà: ïåðâûé — èíñòðóìåíòû äëÿ ñîçäàíèÿ è âûïîëíåíèÿ ïàêåòîâ ñåðâèñîâ èíòåãðàöèè, âòîðîé — èíñòðóìåíòû äëÿ ðàáîòû ñ ñóùåñòâóþùèìè ïàêåòàìè. Ê ïåðâîìó êëàññó îòíîñÿòñÿ èíñòðóìåíòû Integration Services Import/Export Wizard è Services Designer, êîòîðûå ìû áóäåì ðàññìàòðèâàòü â äàííîì ðàçäåëå. Êàê âû ìîãëè çàìåòèòü ðàíåå, â ñåðâèñàõ èíòåãðàöèè ñóùåñòâóåò ÷åòêîå ðàçãðàíè÷åíèå ìåæäó ïîòîêàìè òåõíîëîãè÷åñêèõ ïðîöåññîâ è ïîòîêàìè äàííûõ. Äëÿ ðàáîòû ñ ïîòîêàìè ðàçëè÷íûõ òèïîâ èñïîëüçóþòñÿ ðàçíûå ïîäõîäû è óòèëèòû. Äëÿ ðàáîòû ñ òåõíîëîãè÷åñêèìè ïðîöåññàìè âíóòðè ïàêåòîâ ñåðâèñîâ èíòåãðàöèè èñïîëüçóåòñÿ äèçàéíåð ñåðâèñîâ. Ýòà óòèëèòà ïðåäîñòàâëÿåò ðàçðàáîò÷èêàì òàêèå ôóíêöèè, êàê êîíòðîëü íàä ïðîãðàììíûì êîäîì è ïîääåðæêà ìíîãîïîëüçîâàòåëüñêîé ñðåäû ðàçðàáîòêè ïðîãðàììíûõ ïðèëîæåíèé. Ïîìèìî ýòîãî â äàííîé óòèëèòå èìåþòñÿ ìîùíûå ñðåäñòâà äëÿ îòëàäêè ïàêåòîâ, óñòàíîâêè è èñïîëüçîâàíèÿ êîíòðîëüíûõ òî÷åê â ñèñòåìå è ðàçâåðòûâàíèÿ ïàêåòîâ. Äèçàéíåð ñåðâèñîâ ìîæåò èñïîëüçîâàòüñÿ è äëÿ ìîíèòîðèíãà ïðîöåññà âûïîëíåíèÿ ïàêåòîâ, íà÷èíàÿ îò ýòàïà çàïóñêà è çàêàí÷èâàÿ ïîñëåäîâàòåëüíîñòüþ âûïîëíåíèÿ çàäà÷ è ïðåîáðàçîâàíèÿ äàííûõ. ßðêèì ïðåäñòàâèòåëåì âòîðîãî êëàññà èíñòðóìåíòîâ äëÿ óïðàâëåíèÿ ñóùåñòâóþùèìè ïàêåòàìè ÿâëÿåòñÿ óòèëèòà Package Migration Wizard, êîòîðàÿ èñïîëüçóåòñÿ äëÿ ïåðåíîñà ïàêåòîâ èç SQL Server 7.0 è 2000 â SQL Server 2005. Ïîìèìî íåå èñïîëüçóåòñÿ óòèëèòà Integration Services Package Installer Wizard, êîòîðàÿ ïîçâîëÿåò ñîçäàâàòü çàïóñêàåìûå ôàéëû äëÿ èíñòàëëÿöèè ãîòîâûõ ïàêåòîâ ñåðâèñîâ èíòåãðàöèè. Ýòî ïðåäîñòàâëÿåò ðàçðàáîò÷èêàì îãðîìíîå êîëè÷åñòâî âîçìîæíîñòåé äëÿ ðàçâåðòûâàíèÿ è óäàëåíèÿ ïàêåòîâ èç ñèñòåìû. Ñåðâèñàìè èíòåãðàöèè ìîæåò èñïîëüçîâàòüñÿ òàêæå óòèëèòà Integration Services Package Execution, êîòîðàÿ ïîçâîëÿåò âûïîëíÿòü ïàêåòû èíòåãðàöèè èç êîìàíäíîé ñòðîêè. Ýòî óïðîùàåò ïðîöåññ òåñòèðîâàíèÿ ïàêåòà è ïîçâîëÿåò ñîçäàâàòü ñöåíàðèè äëÿ èõ çàïóñêà.  ýòîì ðàçäåëå ìû ïîäðîáíî ðàññìîòðèì ñðåäñòâà ñåðâèñîâ èíòåãðàöèè äëÿ ñîçäàíèÿ è ðàçâîðà÷èâàíèÿ ïàêåòîâ. Äàëåå ìû èçó÷èì ôóíêöèîíàëüíîñòü òàêèõ èíñòðóìåíòîâ, êàê: · Import/Export Wizard; · Services Designer.
6.2.1. Óòèëèòà Import/Export Wizard Óòèëèòà Import/Export Wizard — ýòî íàèáîëåå ïðîñòîå ñðåäñòâî ñîçäàíèÿ ýëåìåíòàðíûõ çàïðîñîâ äëÿ ÷òåíèÿ äàííûõ è ïðîñòåéøåé òðàíñôîðìàöèè. Îíà ïðàêòè÷åñêè íå ïðåòåðïåëà êàêèõ-ëèáî èçìåíåíèé ïî ñðàâíåíèþ ñî ñâîèì ïðåäøåñòâåííèêîì. Òàê æå êàê è óòèëèòà Import/Export Wizard ñåðâèñîâ èíòåãðàöèè SQL Server 7.0 è 2000, îíà ñîäåðæèò íåñêîëüêî äèàëîãîâûõ îêîí, êîòîðûå ïðåäëàãàþò ïîëüçîâàòåëþ ïîñëåäîâàòåëüíî âûáðàòü èñòî÷íèê äàííûõ, áàçó äàííûõ ïîëó÷àòåëÿ, îáúåêòû, êîòîðûå áóäóò ïåðåíîñèòüñÿ ìåæäó èñòî÷íèêîì è ïîëó÷àòåëåì,
150
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
è ýëåìåíòàðíûå îïåðàöèè ïî òðàíñôîðìàöèè äàííûõ. Ïðè íåîáõîäèìîñòè ïàêåò, ñîçäàííûé ñ ïîìîùüþ ìàñòåðà, ìîæåò áûòü ñîõðàíåí. Ýòîò ïàêåò ìîæíî áóäåò â äàëüíåéøåì èñïîëüçîâàòü äëÿ ïåðåíîñà äàííûõ ìåæäó äðóãèìè èñòî÷íèêàìè èëè äëÿ ðåäàêòèðîâàíèÿ è ñîçäàíèÿ íîâûõ ïàêåòîâ íà åãî îñíîâå. Äëÿ çàïóñêà óòèëèòû Import/Export Wizard ìîæíî âîñïîëüçîâàòüñÿ îäíèì èç ñëåäóþùèõ ñïîñîáîâ: · âûáðàòü â ìåíþ Windows êîìàíäó Start4Programs4SQL Server4Integration Services Import/Export Wizard; · ââåñòè â êîìàíäíîé ñòðîêå êîìàíäó dtswizard. Ðàçðàáîò÷èêè ïðåäïî÷èòàþò ñëåäóþùèé ñïîñîá ñîçäàíèÿ ïðèëîæåíèé ñåðâèñîâ èíòåãðàöèè: ñîçäàåòñÿ ýëåìåíòàðíûé ïàêåò ñ ïîìîùüþ óòèëèòû Import/Export Wizard, ïîñëå ýòîãî ýòîò ïàêåò ñîõðàíÿåòñÿ. Çàòåì îí îòêðûâàåòñÿ â äèçàéíåðå ñåðâèñîâ è äîðàáàòûâàåòñÿ ñ èñïîëüçîâàíèåì ðàñøèðåííîãî íàáîðà ôóíêöèé ýòîãî ïðèëîæåíèÿ. Ñ ïîìîùüþ äèçàéíåðà ñåðâèñîâ äàííûé ïàêåò ìîæåò áûòü ïðîòåñòèðîâàí è âíåäðåí â çàäàííîé ñèñòåìå. Îáùèé âèä óòèëèòû Import/Export Wizard ïðèâåäåí íà ðèñ. 6.5. Íà äàííîì ýòàïå ïîêàçàí ïåðâûé øàã ðàáîòû ñ ìàñòåðîì — âûáîð èñòî÷íèêà äàííûõ. Äëÿ âûáîðà èñòî÷íèêà äàííûõ â ðàñêðûâàþùåìñÿ ñïèñêå Data Source âûáåðèòå ïðîâàéäåðà, êîòîðûé áóäåò èñïîëüçîâàòüñÿ ñèñòåìîé. Âèä ñëåäóþùèõ îêîí ìàñòåðà áóäåò çàâèñåòü îò òîãî, ïðîâàéäåð êàêîãî òèïà âû âûáåðåòå.  ñëó÷àå âûáîðà ïðîâàéäåðà OLE DB äëÿ ðàáîòû ñ äàííûìè SQL Server îòîáðàçèòñÿ îêíî, ïîêàçàííîå íà ðèñ. 6.5.
Ðèñ. 6.5. Îáùèé âèä óòèëèòû Import/Export Wizard
6.2. Èíñòðóìåíòû ñåðâèñîâ èíòåãðàöèè
151
 íèæíåé ÷àñòè îêíà âàì íåîáõîäèìî áóäåò âûáðàòü ñåðâåð, ê êîòîðîìó áóäåò óñòàíîâëåíî ñîåäèíåíèå, à òàêæå òèï àóòåíòèôèêàöèè. Äîñòóïåí îäèí èç ñëåäóþùèõ òèïîâ àóòåíòèôèêàöèè: · àóòåíòèôèêàöèÿ Windows; · àóòåíòèôèêàöèÿ SQL Server. Ïðè âûáîðå àóòåíòèôèêàöèè SQL Server îò âàñ ïîòðåáóåòñÿ ââåñòè èìÿ ó÷åòíîé çàïèñè è ïàðîëü. Ïîñëå òîãî êàê ïàðàìåòðû ñåðâåðà áóäóò çàäàíû, íàæìèòå êíîïêó Next äëÿ ïåðåõîäà ê ýòàïó âûáîðà áàçû äàííûõ ïîëó÷àòåëÿ. Îáùèé âèä äèàëîãîâîãî îêíà áóäåò òàêèì æå, êàê è ïðè âûáîðå èñòî÷íèêà äàííûõ, çà òåì ëèøü èñêëþ÷åíèåì, ÷òî íàñòðîéêè âûïîëíÿþòñÿ íå äëÿ èñòî÷íèêà, à äëÿ ïîëó÷àòåëÿ äàííûõ. Ïîñëå òîãî êàê ïîëüçîâàòåëü âûáåðåò èñòî÷íèê è ïîëó÷àòåëÿ äàííûõ, ðàáîòà ìàñòåðà áóäåò ïðîäîëæåíà, è îí ïðåäëîæèò ñîõðàíèòü è âûïîëíèòü ñîçäàííûé ïàêåò äàííûõ. Äàëåå áóäåò çàïóùåí ñîçäàííûé ïàêåò, è ïîëüçîâàòåëü ñìîæåò íàáëþäàòü çà õîäîì åãî âûïîëíåíèÿ. Ýòàïû âûïîëíåíèÿ ïàêåòà áóäóò îòîáðàæåíû â îêíå DTS Import/Export Wizard. Ïîñëå óäà÷íîãî çàâåðøåíèÿ ïàêåòà áóäåò âûâåäåíî ñîîáùåíèå (ðèñ. 6.6).
Ðèñ. 6.6. Õîä âûïîëíåíèÿ ïàêåòà
6.2.2. Äèçàéíåð ñåðâèñîâ èíòåãðàöèè  ïðåäûäóùåì ðàçäåëå ìû ðàññìîòðåëè ïðèìåð ñîçäàíèÿ ýëåìåíòàðíîãî ïðèëîæåíèÿ äëÿ ïåðåíîñà äàííûõ ìåæäó ðàçëè÷íûìè èñòî÷íèêàìè. Åñëè ñ ïîìîùüþ ïðèëîæåíèÿ íåîáõîäèìî ðåøèòü ñëîæíóþ çàäà÷ó èëè ïðèëîæåíèå òðåáóåò
152
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
ñïåöèàëüíîé íàñòðîéêè, òî â ýòîì ñëó÷àå ñòîèò âîñïîëüçîâàòüñÿ äèçàéíåðîì ñåðâèñîâ. Äèçàéíåð ñåðâèñîâ ëó÷øå èñïîëüçîâàòü â òåõ ñëó÷àÿõ, êîãäà òðåáóåòñÿ âûïîëíÿòü èçâëå÷åíèå äàííûõ, èõ ïðåîáðàçîâàíèå è çàãðóçêó ñ èñïîëüçîâàíèåì çàäà÷. Ìåõàíèçì çàäà÷ äîñòàòî÷íî ñëîæåí è ïîçâîëÿåò îñóùåñòâèòü íå òîëüêî ïðîñòîé ïåðåíîñ äàííûõ ìåæäó èñòî÷íèêîì è ïîëó÷àòåëåì. Ñ åãî ïîìîùüþ ìîæíî èñïîëüçîâàòü èñòî÷íèêè äàííûõ ðàçëè÷íûõ òèïîâ, âûïîëíÿòü ñâÿçûâàíèå äàííûõ, èõ ïðåîáðàçîâàíèå, ïåðåíîñ èç îäíîé êîëîíêè â äðóãóþ, ñîçäàâàòü íîâûå êîëîíêè ñ âû÷èñëÿåìûìè çíà÷åíèÿìè, âûïîëíÿòü ïðîâåðêó äàííûõ è óäàëÿòü íåíóæíûå çíà÷åíèÿ. Èíûìè ñëîâàìè, çàäà÷è ðåàëèçóþò íàìíîãî áîëåå ñëîæíûé àëãîðèòì ìàíèïóëèðîâàíèÿ äàííûìè, à ñëåäîâàòåëüíî, èìåþò áîëüøóþ ôóíêöèîíàëüíîñòü è òðåáóþò áîëüøåãî âíèìàíèÿ ñî ñòîðîíû ðàçðàáîò÷èêîâ. Èìåííî â ýòîì ñëó÷àå è ñòàíîâèòñÿ íåîáõîäèìûì èñïîëüçîâàòü äèçàéíåð ñåðâèñîâ. Äèçàéíåð îò÷åòîâ — ýòî óòèëèòà ñ ãðàôè÷åñêèì èíòåðôåéñîì, êîòîðàÿ ïîçâîëÿåò ñîçäàâàòü, íàñòðàèâàòü, îòëàæèâàòü è âûïîëíÿòü ïàêåòû ñåðâèñîâ èíòåãðàöèè. Ïîìèìî ñîçäàíèÿ íîâûõ ïàêåòîâ â äèçàéíåðå ñåðâèñîâ ìîæíî îòêðûâàòü ðàíåå ñîçäàííûå ïàêåòû ñ ïîìîùüþ óòèëèòû Import/Export Wizard. Äëÿ ñîçäàíèÿ íîâîãî ïàêåòà â äèçàéíåðå ñåðâèñîâ âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Âûáåðèòå â ìåíþ Business Intelligence Development Studio êîìàíäó File4 New4Project.  ðåçóëüòàòå áóäåò îòêðûòî îêíî New Project. 2. Âûáåðèòå â ëåâîé ÷àñòè îêíà New Project çíà÷åíèå Business Intelligence Projects. 3. Âûáåðèòå ýëåìåíò Integration Services Project èç ñïèñêà øàáëîíîâ (ðèñ. 6.7).
Ðèñ. 6.7. Ñîçäàíèå íîâîãî ïàêåòà ñåðâèñîâ èíòåãðàöèè
6.2. Èíñòðóìåíòû ñåðâèñîâ èíòåãðàöèè
153
Ïîñëå ñîçäàíèÿ íîâîãî ïðîåêòà âû ñìîæåòå îòêðûòü äèçàéíåð ñåðâèñîâ, ùåëêíóâ ïðàâîé êíîïêîé ìûøè â îêíå Solution Explorer, êîòîðîå îòîáðàæàåòñÿ â ïðàâîé ÷àñòè ýêðàíà. Åñëè äèçàéíåð ñåðâèñîâ çàïóñêàåòñÿ âïåðâûå, ïåðåä âàìè îòêðîåòñÿ îêíî ðàçðàáîòêè. Îíî íè÷åì íå îòëè÷àåòñÿ îò ïîäîáíîãî îêíà â ïðåäûäóùåé âåðñèè SQL Server.  íîâîì äèçàéíåðå ñåðâèñîâ ìîæíî ñîçäàâàòü ïàêåòû íåñêîëüêèõ òèïîâ. Äëÿ ýòîãî èñïîëüçóþòñÿ ñëåäóþùèå äèçàéíåðû: · Äèçàéíåð òåõíîëîãè÷åñêèõ ïðîöåññîâ — äëÿ îòêðûòèÿ äàííîãî äèçàéíåðà îòêðîéòå âêëàäêó Control Flow, çàòåì ïàíåëü Control Flow Toolbox. Ïîñëå îòîáðàæåíèÿ íà ýêðàíå ïàíåëè èíñòðóìåíòîâ äèçàéíåðà òåõíîëîãè÷åñêèõ ïðîöåññîâ âûáåðèòå çàäà÷ó òèïà Data Flow è ñ ïîìîùüþ óêàçàòåëÿ ìûøè ïåðåòàùèòå åå íà ïîëå äëÿ ðàçðàáîòêè ïðèëîæåíèÿ. Ïîñëå ýòîãî ïåðåä âàìè îòêðîåòñÿ îáëàñòü ðàçðàáîòêè òåõíîëîãè÷åñêîãî ïðîöåññà, êàê ïîêàçàíî íà ðèñ. 6.8.  äàííîì ñëó÷àå ìû ðàññìîòðèì ýëåìåíòàðíûé ïðèìåð èñïîëüçîâàíèÿ ïàêåòà. Êàê ïîêàçàíî íà ðèñóíêå, îí ñîäåðæèò òîëüêî îäèí ýëåìåíò — çàäà÷ó óïðàâëåíèÿ ïàêåòîì äàííûõ. Îäíàêî ïðèëîæåíèå ìîæíî ñäåëàòü íàìíîãî áîëåå ñëîæíûì, äîáàâëÿÿ äðóãèå çàäà÷è â îáëàñòü ðàçðàáîòêè. Äëÿ äîáàâëåíèÿ äðóãèõ çàäà÷ âûáåðèòå èõ èç íàáîðà èíñòðóìåíòîâ äèçàéíåðà òåõíîëîãè÷åñêèõ ïðîöåññîâ, ïîìåñòèòå â îáëàñòü ðàçðàáîòêè è íàñòðîéòå ñâÿçè ìåæäó ñóùåñòâóþùèìè çàäà÷àìè. Ïðè íåîáõîäèìîñòè ìîæíî âîñïîëüçîâàòüñÿ êîíòåéíåðîì äëÿ ãðóïïèðîâêè ñâÿçàííûõ çàäà÷ ïî îïðåäåëåííîìó ïðèçíàêó. · Äèçàéíåð ïîòîêîâ äàííûõ — â ýòîì ñëó÷àå íåîáõîäèìî çàäàòü ïàêåòó ïàðàìåòðû, ñ ó÷åòîì êîòîðûõ îí áóäåò èñïîëüçîâàòüñÿ äëÿ âûïîëíåíèÿ îïåðàöèé ïî ïåðåíîñó è ïðåîáðàçîâàíèþ äàííûõ. Òàêæå íåîáõîäèìî îïðåäåëèòü èñòî÷íèê, îòêóäà äàííûå áóäóò ïåðåíîñèòüñÿ â áàçó-ïîëó÷àòåëü. Ïîñëå òîãî êàê âû äîáàâèòå çàäà÷è òèïà Data Flow, íåîáõîäèìî îïðåäåëèòü ïàðàìåòðû äëÿ ïîòîêà äàííûõ. Äëÿ ýòîãî ùåëêíèòå äâàæäû íà çíà÷êå çàäà÷è Data Flow. Ðåçóëüòàòîì áóäåò îòêðûòèå âêëàäêè Data Flow, êîòîðàÿ èçíà÷àëüíî äîëæíà áûòü ïóñòîé. Äëÿ äîáàâëåíèÿ èñòî÷íèêà è ïîëó÷àòåëÿ äàííûõ îòêðîéòå ïàíåëü ñ èíñòðóìåíòàìè äèçàéíåðà ïîòîêà äàííûõ, êîòîðàÿ ðàñïîëàãàåòñÿ â ëåâîé ÷àñòè îêíà, è ïåðåòàùèòå ñ ïîìîùüþ óêàçàòåëÿ ìûøè èñòî÷íèêè äàííûõ OLE DB Source è OLE DB Destination. Ïåðâûé áóäåò èñïîëüçîâàòüñÿ â êà÷åñòâå èñòî÷íèêà äàííûõ, à âòîðîé — â êà÷åñòâå ïîëó÷àòåëÿ. Òàêæå â íàøå ðåøåíèå ìîæíî äîáàâèòü îáúåêò Flat File Destination, êîòîðûé ïîçâîëèò âûïîëíÿòü âûâîä îøèáî÷íûõ ñòðîê â òåêñòîâûé log-ôàéë. Ïîñëå íàñòðîéêè ïàðàìåòðîâ èñòî÷íèêà è ïîëó÷àòåëÿ äàííûõ (â íàøåì ïðèìåðå â êà÷åñòâå èñòî÷íèêà è ïîëó÷àòåëÿ âûñòóïàþò áàçû äàííûõ òèïà OLE DB) íåîáõîäèìî îïðåäåëèòü ïàðàìåòðû ñîåäèíåíèÿ ñ èñòî÷íèêàìè. Òàêæå íåîáõîäèìî íàñòðîèòü ïàðàìåòðû ñîåäèíåíèÿ ñ òåêñòîâûì ôàéëîì, êîòîðûé áóäåò èñïîëüçîâàòüñÿ äëÿ âûâîäà îøèáî÷íûõ ñòðîê.
154
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
Ðèñ. 6.8. Äèçàéíåð òåõíîëîãè÷åñêèõ ïðîöåññîâ
Äëÿ êàæäîãî èñòî÷íèêà è ïîëó÷àòåëÿ íåîáõîäèìî îïðåäåëèòü ïàðàìåòðû ñîåäèíåíèÿ, ÷òî òðåáóåò çíàíèÿ ïàðàìåòðîâ èñòî÷íèêà è ïîëó÷àòåëÿ äàííûõ. Ïîñêîëüêó â äàííîì ïðèìåðå èñïîëüçóþòñÿ òðè îáúåêòà òèïà Data Flow, òî òðåáóåòñÿ îïðåäåëèòü ïàðàìåòðû òðåõ ñîåäèíåíèé: äâà — äëÿ áàç äàííûõ òèïà OLE DB è îäèí — äëÿ òåêñòîâîãî ôàéëà. Äëÿ òîãî ÷òîáû îïðåäåëèòü ïàðàìåòðû ñîåäèíåíèÿ, âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà ïàíåëè Connection, êîòîðàÿ îòîáðàæàåòñÿ â íèæíåé ÷àñòè äèçàéíåðà ñåðâèñîâ, è â êîíòåêñòíîì ìåíþ âûáåðèòå òèï ñîåäèíåíèÿ, êîòîðîå áóäåò ñîçäàíî. Ðåçóëüòàòîì áóäåò îòêðûòèå îêíà Connection Manager. 2. Âûáåðèòå òèï ñîåäèíåíèÿ OLE DB, à òàêæå çàäàéòå ïàðàìåòðû ïðîâàéäåðà OLE DB äëÿ ñîåäèíåíèÿ (ðèñ. 6.9). Ïîâòîðèòå îïèñàííûå äåéñòâèÿ äëÿ ñîçäàíèÿ ñîåäèíåíèÿ ñ èñòî÷íèêîì è ïîëó÷àòåëåì äàííûõ, à òàêæå òåêñòîâûì ôàéëîì, â êîòîðûé áóäóò çàïèñûâàòüñÿ îøèáî÷íûå ñòðîêè. Ïîñëå ñîçäàíèÿ ñîåäèíåíèÿ âàì íåîáõîäèìî óñòàíîâèòü ñâÿçü ìåæäó ñîçäàííûìè èñòî÷íèêàìè äàííûõ è îïðåäåëåííûìè ñîåäèíåíèÿìè. Äëÿ ýòîãî âûïîëíèòå ñëåäóþùèå äåéñòâèÿ: 1. Ùåëêíèòå ïðàâîé êíîïêîé ìûøè íà îáúåêòå Data Flow è â êîíòåêñòíîì ìåíþ âûáåðèòå îäèí èç ïàðàìåòðîâ — Edit èëè Advanced Edit. 2.  ðàñêðûâàþùåìñÿ ñïèñêå âûáåðèòå îäíî èç ðàíåå ñîçäàííûõ ñîåäèíåíèé.
6.2. Èíñòðóìåíòû ñåðâèñîâ èíòåãðàöèè
155
Ðèñ. 6.9. Ìåíåäæåð ñîåäèíåíèÿ
Ïîñëå ñîçäàíèÿ ñîåäèíåíèÿ âû îïðåäåëÿåòå ñâÿçü ìåæäó êîëîíêàìè òàáëèö è äðóãèå ïàðàìåòðû ïðåîáðàçîâàíèÿ äàííûõ (åñëè â íèõ åñòü íåîáõîäèìîñòü). Ïî çàâåðøåíèè äàííîãî ïðîöåññà âêëàäêà Data Flow äèçàéíåðà ñåðâèñîâ áóäåò èìåòü ñëåäóþùèé âèä (ðèñ. 6.10).  îáëàñòè ðàçðàáîòêè îòîáðàæåíû äâà èñòî÷íèêà äàííûõ (òèïîâ OLE DB Source è OLE DB Destination) è îäèí òåêñòîâûé ôàéë (òèïà Flat File Destination). Ìåæäó íèìè îòîáðàæàþòñÿ ñòðåëêè, ïîêàçûâàþùèå íàñòðîåííûå ñîåäèíåíèÿ ìåæäó èñòî÷íèêàìè äàííûõ è òåêñòîâûì ôàéëîì.  äàííîì ñëó÷àå çåëåíàÿ ñòðåëêà îçíà÷àåò ñîåäèíåíèå ìåæäó èñòî÷íèêîì è ïîëó÷àòåëåì äàííûõ, à êðàñíàÿ — îáðàáîò÷èê îøèáîê (â íàøåì ñëó÷àå — çàïèñü â òåêñòîâûé log-ôàéë). Ïàðàìåòðû ñîåäèíåíèÿ ìåæäó ïàðàìè îáúåêòîâ îòîáðàæàþòñÿ íà âêëàäêå Connections. Äàëåå ðàññìîòðèì íàáîð îêîí è ýëåìåíòîâ èíòåðôåéñà Business Intelligence Development Studio: · Ãðàôè÷åñêîå îòîáðàæåíèå âûïîëíåíèÿ ïàêåòà — ïîñëå òîãî êàê ïàêåò áóäåò ñîçäàí, òî åñòü âñå èñòî÷íèêè äàííûõ áóäóò îïðåäåëåíû, à òàêæå çàäàíû ïàðàìåòðû îáðàáîò÷èêîâ ñîáûòèé è íàñòðîåíû ïàðàìåòðû ñâÿçåé ìåæäó íèìè, ìîæíî ïåðåéòè ê çàïóñêó ïàêåòà. Äëÿ òîãî ÷òîáû çàïóñòèòü ïàêåò èç äèçàéíåðà, äîñòàòî÷íî ïðîñòî ùåëêíóòü íà çåëåíîé ñòðåëêå óêàçàòåëåì ìûøè èëè âûáðàòü ïóíêò Debug4Start â ìåíþ äèçàéíåðà ñåðâèñîâ. Ïåðåä
156
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
çàïóñêîì ïàêåòà æåëàòåëüíî îïðåäåëèòü òî÷êè îñòàíîâà. Ýòî ïîçâîëèò îòëàäèòü ñëîæíûå ïàêåòû è çàäàòü íàñòðîéêè äëÿ äîïîëíèòåëüíûõ îáðàáîò÷èêîâ ñîáûòèé. Äëÿ äîáàâëåíèÿ òî÷êè îñòàíîâà â ïàêåò âûáåðèòå â ìåíþ äèçàéíåðà ñåðâèñîâ ïóíêò Debug4New Breakpoint. Ïîñëå çàïóñêà ïàêåòà â àâòîìàòè÷åñêîì ðåæèìå îòîáðàæàþòñÿ îêíà Watch è Call Stack.
Ðèñ. 6.10. Äèçàéíåð ïîòîêîâ äàííûõ
· Îêíî Solution Explorer — åùå îäíî óëó÷øåíèå äèçàéíåðà îò÷åòîâ. Äàííûé èíñòðóìåíò ñîäåðæèò èåðàðõè÷åñêîå äåðåâî ïàêåòîâ ñåðâèñîâ èíòåãðàöèè, êîòîðûå îòêðûòû â äàííûé ìîìåíò â äèçàéíåðå. Îáùèé âèä îáîçðåâàòåëÿ ïàêåòîâ ïîêàçàí íà ðèñ. 6.11.  êà÷åñòâå êîðíÿ äåðåâà âûñòóïàåò èìÿ ïàêåòà, çàòåì ñëåäóåò êîìïîíåíò ïàêåòà. Ùåëêíóâ óêàçàòåëåì ìûøè íàïðîòèâ ïàêåòà, âû ñìîæåòå ïðîñìîòðåòü ñïèñîê êîìïîíåíòîâ, âõîäÿùèõ â åãî ñîñòàâ. Îáîçðåâàòåëü ïàêåòîâ ïîçâîëÿåò íå òîëüêî ïðîñìàòðèâàòü ñîäåðæèìîå ïàêåòà (ñïèñîê îáúåêòîâ, âõîäÿùèõ â åãî ñîñòàâ), íî è óäàëÿòü íåêîòîðûå èç íèõ èëè ðåäàêòèðîâàòü èõ ñâîéñòâà. Îäíàêî â îáîçðåâàòåëå ïàêåòîâ íåëüçÿ äîáàâèòü íîâûé îáúåêò. Äëÿ ýòîãî íåîáõîäèìî èñïîëüçîâàòü îáëàñòü ðàçðàáîòêè. · Îêíî Properties — äëÿ íàñòðîéêè ïàðàìåòðîâ ïàêåòà èñïîëüçóåòñÿ ñïåöèàëüíûé ìàñòåð Configuration Wizard. Ñ åãî ïîìîùüþ ìîæíî ëåãêî èçìåíÿòü îñíîâíûå ïàðàìåòðû ïàêåòà, ïðè÷åì âûïîëíÿòü ýòî ìîæíî äèíàìè÷åñêè. Ýòî îçíà÷àåò, ÷òî âûïîëíÿþùèéñÿ ïàêåò ìîæåò áûòü áûñòðî ïåðåíàñòðîåí ñ ïîìîùüþ ìàñòåðà êîíôèãóðàöèè è çàïóùåí â äðóãîé ñèñòåìå. Äëÿ ïåðåíîñà ïàêåòîâ ÷àñòî òðåáóåòñÿ èçìåíÿòü ïàðàìåòðû ñîåäèíåíèÿ, èñòî÷íèêà
6.3. Èíñòðóìåíòû ðàáîòû ñ ïàêåòàìè
157
è ïîëó÷àòåëÿ äàííûõ. Ýòî òðåáóåò íàñòðîéêè ïàðàìåòðîâ ïàêåòà, ÷òî ìîæåò áûòü ëåãêî è áûñòðî ñäåëàíî ñ ïîìîùüþ ìàñòåðà íàñòðîéêè. Ïîìèìî ýòîãî ñ ïîìîùüþ Configuration Wizard ìîæíî ñîçäàâàòü êîëëåêöèè íàñòðîåê, êîòîðûå â äàëüíåéøåì áóäóò ïðèìåíÿòüñÿ äëÿ äðóãèõ ïàêåòîâ, çàïóñêàåìûõ â ñèñòåìå. Äëÿ çàïóñêà Configuration Wizard âûáåðèòå â ìåíþ ïóíêò Configurations. Îòêðîåòñÿ îêíî Package Configurations Organization.  íåì íàæìèòå êíîïêó Add, ÷òî ïðèâåäåò ê çàïóñêó ìàñòåðà íàñòðîéêè.
Ðèñ. 6.11. Ïðîñìîòð ñîäåðæèìîãî ïàêåòà
6.3. Èíñòðóìåíòû ðàáîòû ñ ïàêåòàìè  ðàçäåëå 6.2 «Èíñòðóìåíòû ñåðâèñîâ èíòåãðàöèè» ìû ðàññìîòðåëè èíñòðóìåíòû äëÿ ñîçäàíèÿ ïðèëîæåíèé ñåðâèñîâ èíòåãðàöèè SQL Server 2005, èõ âíåäðåíèÿ è ïåðåíîñà íà äðóãèå ñèñòåìû.  äàííîì ðàçäåëå ìû îñòàíîâèìñÿ íà èíñòðóìåíòàõ ñåðâèñîâ èíòåãðàöèè, ïðåäíàçíà÷åííûõ äëÿ ðàáîòû ñ ðàíåå ñîçäàííûìè ïàêåòàìè. Âíà÷àëå ìû ðàññìîòðèì óòèëèòó Package Migration Wizard, êîòîðàÿ ïîçâîëÿåò êîíâåðòèðîâàòü ñóùåñòâóþùèå ïàêåòû, ñîçäàííûå â ïðåäûäóùèõ âåðñèÿõ SQL Server, â ïàêåòû SQL Server 2005. Äàííûé èíñòðóìåíò ïîçâîëèò ïåðåâåñòè âñå ðàíåå ñîçäàííûå ïàêåòû â íîâóþ ñðåäó è ïðè íåîáõîäèìîñòè äîáàâèòü äîïîëíèòåëüíóþ ôóíêöèîíàëüíîñòü ê ñóùåñòâóþùèì ïàêåòàì. Äàëåå ìû ðàññìîòðèì óòèëèòó Package Management. Îíà èñïîëüçóåòñÿ äëÿ ðàáîòû ñ ðàíåå ñîçäàííûìè ïàêåòàìè è ïðîñìîòðà èõ ïàðàìåòðîâ. È íàêîíåö, ìû ðàññìîòðèì íîâóþ óòèëèòó äëÿ âûïîëíåíèÿ ïàêåòîâ ñ èñïîëüçîâàíèåì êîìàíäíîé ñòðîêè. Ýòîò
158
Ãëàâà 6 • Ñåðâèñû èíòåãðàöèè
èíñòðóìåíò â çíà÷èòåëüíîé ìåðå óïðîùàåò ðàçâåðòûâàíèå ãîòîâûõ ðåøåíèé, òåñòèðîâàíèå ðàíåå ñîçäàííûõ ïàêåòîâ â íîâûõ ñèñòåìàõ, à â íåêîòîðûõ ñëó÷àÿõ èõ ýêñïëóàòàöèþ.
6.3.1. Ïåðåíîñ ïàêåòîâ  íîâîé âåðñèè SQL Server ïðîèçîøëè äîñòàòî÷íî áîëüøèå èçìåíåíèÿ. Ýòî êàñàåòñÿ êàê ìîäåëè äàííûõ, òàê è íîâûõ èíñòðóìåíòîâ è îáúåêòîâ. Ïîæàëóé, íàèáîëüøèå èçìåíåíèÿ êîñíóëèñü èíòåãðàöèè ñðåä ðàçðàáîòêè ïðîãðàììíûõ ïðèëîæåíèé SQL Server ñî ñðåäîé .NET Framework. Ýòî ïîçâîëèëî äîáàâèòü îãðîìíûé îáúåì ôóíêöèîíàëüíîñòè. Êàê ñëåäñòâèå ïîÿâëåíèÿ íîâûõ ôóíêöèé, ïîòðåáîâàëîñü ïåðåâîäèòü ðàíåå ñîçäàííûå ïðèëîæåíèÿ SQL Server 7.0 è 2000 â ñðåäû ðàçðàáîòêè SQL Server 2005. Íå ñòàë èñêëþ÷åíèåì ïåðåíîñ DTS-ïàêåòîâ â íîâóþ ñðåäó. Äëÿ óïðîùåíèÿ äàííîãî ïðîöåññà èñïîëüçóåòñÿ óòèëèòà Package Migration Wizard. Óòèëèòà Package Migration Wizard èñïîëüçóåòñÿ äëÿ ïåðåâîäà ïàêåòîâ ñåðâèñîâ èíòåãðàöèè, ñîçäàííûõ â ïðåäûäóùèõ âåðñèÿõ SQL Server, â íîâûé ôîðìàò SQL Server. Óòèëèòà êîíâåðòèðóåò òàêèå ýëåìåíòû ïàêåòà SQL Server 7.0 è 2000, êàê çàäà÷è, ïåðåìåííûå, ñîåäèíåíèÿ è ò. ä., â ñîîòâåòñòâóþùèå èì ýëåìåíòû ïàêåòà SQL Server 2005. Êîíâåðòèðîâàíèþ ìîãóò ïîäâåðãàòüñÿ âñå ýëåìåíòû DTSïàêåòà, çà èñêëþ÷åíèåì ïîëüçîâàòåëüñêèõ çàäà÷. Ïîëüçîâàòåëüñêèå çàäà÷è â íîâîé ñðåäå ðàçðàáîòêè SQL Server 2005 áóäóò èìåòü òó æå ñàìóþ ñòðóêòóðó, ÷òî è â SQL Server 2000. Ïðè ýòîì äëÿ ïîëüçîâàòåëüñêèõ çàäà÷ áóäóò ñîçäàíû âëîæåííûå ïàêåòû, ïðèâÿçàííûå ê ïàêåòó, êîòîðûé ïåðåíîñèòñÿ íà íîâóþ ñèñòåìó. Åùå îäíî íåïðèÿòíîå èñêëþ÷åíèå, ñ êîòîðûì íå ñïðàâëÿåòñÿ Package Migration Wizard, — ýòî ñöåíàðèè. Íåêîòîðûå èç ñöåíàðèåâ ìîãóò áûòü êîíâåðòèðîâàíû â çàäà÷è òèïà ActiveX Script, îäíàêî ñöåíàðèè, îòíîñÿùèåñÿ ê îáúåêòíîé ìîäåëè DTS, íå ìîãóò áûòü ïåðåíåñåíû â íîâóþ ñèñòåìó.
6.3.2. Óòèëèòà óïðàâëåíèÿ ïàêåòàìè ñåðâèñîâ èíòåãðàöèè Åùå îäíà óòèëèòà äëÿ ðàáîòû ñ ðàíåå ñîçäàííûìè ïàêåòàìè — ýòî Package Management Utility. Äëÿ çàïóñêà ýòîé óòèëèòû ââåäèòå â êîìàíäíîé ñòðîêå dtutil. Äàííàÿ óòèëèòà ïîçâîëÿåò ïðîñìàòðèâàòü ñîäåðæèìîå ïàêåòà, êîòîðûé õðàíèòñÿ â áàçå äàííûõ SQL Server. Îíà òàêæå ìîæåò èñïîëüçîâàòüñÿ äëÿ êîïèðîâàíèÿ, óäàëåíèÿ ñóùåñòâóþùåãî ïàêåòà è äëÿ äîáàâëåíèÿ öèôðîâîé ïîäïèñè.
6.3.3. Óòèëèòà èñïîëíåíèÿ ïàêåòîâ ñåðâèñîâ èíòåãðàöèè Äëÿ ðàáîòû ñ ãîòîâûìè ïàêåòàìè ñóùåñòâóþò äâå óòèëèòû: dtexec è dtexecui. Ïåðâàÿ èñïîëüçóåòñÿ äëÿ çàïóñêà ïàêåòà èç êîìàíäíîé ñòðîêè, à âòîðàÿ îòîáðàæàåò ïîëüçîâàòåëüñêèé èíòåðôåéñ ïðè çàïóñêå ïàêåòà. Îñîáåííîñòüþ óòèëèòû dtexec ÿâëÿåòñÿ òî, ÷òî îíà ìîæåò èñïîëüçîâàòüñÿ äëÿ îáåñïå÷åíèÿ íåîáõîäèìîãî óðîâíÿ áåçîïàñíîñòè è çàïóñêàòüñÿ ñ çàøèôðîâàííûìè àðãóìåíòàìè.  òî æå âðåìÿ óòèëèòà dtexecui ìîæåò èñïîëüçîâàòüñÿ äëÿ ãåíåðèðîâàíèÿ òåêñòîâûõ ôàéëîâ,
6.3. Èíñòðóìåíòû ðàáîòû ñ ïàêåòàìè
159
ñîäåðæàùèõ êîìàíäû è ïàðàìåòðû, êîòîðûå íåîáõîäèìû äëÿ íîðìàëüíîé ðàáîòû dtexec. Îáùèé âèä èíòåðôåéñà dtexecui ïîêàçàí íà ðèñ. 6.12.
Ðèñ. 6.12. Óòèëèòà äëÿ âûïîëíåíèÿ ïàêåòîâ
Ñåðâèñû íîòèôèêàöèè
7
Ñåðâèñû íîòèôèêàöèè âïåðâûå áûëè ïðåäñòàâëåíû âìåñòå ñ SQL Server 2000.  íîâîé âåðñèè SQL Server ñåðâèñû íîòèôèêàöèè îïðåäåëèëèñü â êà÷åñòâå îòäåëüíîãî ïðîãðàììíîãî ïðîäóêòà, ïîñòàâëÿåìîãî âìåñòå ñ ÿäðîì ñèñòåìû SQL Server 2005. ×òî ïðåäñòàâëÿåò ñîáîé äàííûé íàáîð ñåðâèñîâ? Ýòî ñðåäà, ïîçâîëÿþùàÿ ðàçðàáîò÷èêàì ñîçäàâàòü ïðèëîæåíèÿ äëÿ îáìåíà ñîîáùåíèÿìè íà îñíîâå ìåõàíèçìà ïîäïèñêè èëè ïðèíóäèòåëüíîé äîñòàâêè. Ñåðâèñû íîòèôèêàöèè èñïîëüçóþòñÿ âî ìíîãèõ êîìïàíèÿõ äëÿ äîñòàâêè ïåðñîíàëèçèðîâàííîé èíôîðìàöèè ïîäïèñ÷èêàì ðàçëè÷íûõ ñåðâèñîâ. Íàïðèìåð, â îäíîé èç ñëóæá Microsoft ñåðâèñû íîòèôèêàöèè èñïîëüçóþòñÿ äëÿ äîñòàâêè íîâîñòåé íà ìîáèëüíûå óñòðîéñòâà ðàçëè÷íûõ òèïîâ. Íà ñàéòå www.ESPN.com ñóùåñòâóåò ïîäïèñêà, êîòîðàÿ ïîçâîëÿåò èíôîðìèðîâàòü ïîäïèñ÷èêà î ñ÷åòå ðàçëè÷íûõ ñïîðòèâíûõ ìàò÷åé. Ýòà ïîäïèñêà òàêæå èñïîëüçóåò ñåðâèñû íîòèôèêàöèè îò êîìïàíèè Microsoft. Ìîæíî íàçâàòü åùå äîñòàòî÷íî ìíîãî ðàçëè÷íûõ êîìïàíèé, â êîòîðûõ èñïîëüçóþòñÿ ñåðâèñû íîòèôèêàöèè. Ñ ïîìîùüþ ýòîé ñðåäû ðàçðàáîòêè ìîæíî ñîçäàâàòü ïðèëîæåíèÿ, êîòîðûå áóäóò ðàññûëàòü ïåðñîíàëèçèðîâàííóþ èíôîðìàöèþ, õðàíÿùóþñÿ â áàçå äàííûõ Microsoft SQL Server, ïîäïèñ÷èêó íà îñíîâå îïðåäåëåííûõ èì ïðåäïî÷òåíèé.  ýòîé ãëàâå ìû ðàññìîòðèì ñòðóêòóðó ñåðâèñîâ íîòèôèêàöèè è ñäåëàåì îáùèé îáçîð âîçìîæíîñòåé ñåðâèñîâ. Ïîñëå ýòîãî ìû èçó÷èì âîçìîæíîñòè ñèñòåìû ïî ñîçäàíèþ ïðèëîæåíèé (ñåðâèñîâ íîòèôèêàöèè), à çàòåì ðàññìîòðèì íåñêîëüêî ïðèìåðîâ ïîäîáíûõ ïðèëîæåíèé.  õîäå ðàññìîòðåíèÿ âîçìîæíîñòåé ñèñòåìû ìû áóäåò îñòàíàâëèâàòüñÿ íà ïðèìåðàõ è ëèñòèíãàõ ïðîãðàììíîãî êîäà, ÷òî ïîçâîëèò áîëåå äåòàëüíî èçó÷èòü âîçìîæíîñòè ñåðâèñîâ íîòèôèêàöèè è ñîçäàòü ïðîñòåéøåå ïðèëîæåíèå.
7.1. Îáçîð è àðõèòåêòóðà ñåðâèñîâ íîòèôèêàöèè Ñåðâèñû íîòèôèêàöèè ïðåäñòàâëÿþò ñîáîé ïðîãðàììíûé ñëîé, êîòîðûé ðàñïîëàãàåòñÿ ìåæäó èñòî÷íèêîì äàííûõ (â ýòîì ñëó÷àå áàçîé äàííûõ íà îñíîâå SQL Server)
7.1. Îáçîð è àðõèòåêòóðà ñåðâèñîâ íîòèôèêàöèè
161
è ïîëó÷àòåëåì ýòèõ äàííûõ. Îáðàáîòêà äàííûõ ìîæåò âûïîëíÿòüñÿ êàê ñðåäñòâàìè SQL Server, òàê è ñðåäñòâàìè ñåðâèñîâ íîòèôèêàöèè. Ñåðâèñû íîòèôèêàöèè ìîãóò áûòü íàñòðîåíû òàêèì îáðàçîì, ÷òî îíè áóäóò âûïîëíÿòü ìîíèòîðèíã êàêèõ-ëèáî ñîáûòèé è íà îñíîâå ýòèõ ñîáûòèé âûïîëíÿòü ôèëüòðàöèþ è ïåðåñûëêó èíôîðìàöèè, îòíîñÿùåéñÿ ê äàííûì ñîáûòèÿì èëè íå èìåþùóþ ïðÿìîãî îòíîøåíèÿ ê íèì. Äëÿ îïðåäåëåíèÿ ïàðàìåòðîâ óñòðîéñòâà, íà êîòîðîå áóäåò âûïîëíÿòüñÿ äîñòàâêà ñîîáùåíèÿ, à òàêæå ñïîñîáà äîñòàâêè èñïîëüçóåòñÿ ðàñïèñàíèå.  ðàñïèñàíèè äîñòàâêè çàäàåòñÿ ôîðìàò è àäðåñ äîñòàâêè ñîîáùåíèÿ â îïðåäåëåííûå ïðîìåæóòêè âðåìåíè. Ñåðâèñû íîòèôèêàöèè ñîäåðæàò ñëåäóþùèå îñíîâíûå êîìïîíåíòû: · ÿäðî ñåðâèñà íîòèôèêàöèè; · ñîáûòèÿ; · ïîäïèñêà; · íîòèôèêàöèÿ.  ñëåäóþùèõ ðàçäåëàõ ìû áîëåå äåòàëüíî ðàññìîòðèì êàæäóþ èç ñîñòàâíûõ ÷àñòåé ñåðâèñîâ íîòèôèêàöèè. Íà ðèñ. 7.1 ïîêàçàíà îáùàÿ àðõèòåêòóðà ñåðâèñà íîòèôèêàöèè, ñîäåðæàùàÿ ïåðå÷åíü îñíîâíûõ êîìïîíåíòîâ.
Ðèñ. 7.1. Êîìïîíåíòû ñåðâèñà íîòèôèêàöèè
7.1.1. ßäðî ñåðâèñà íîòèôèêàöèè Îñíîâíûì ýëåìåíòîì ñåðâèñà íîòèôèêàöèè ÿâëÿåòñÿ ÿäðî íîòèôèêàöèè. ßäðî íîòèôèêàöèè — ýòî ïðèëîæåíèå, êîòîðîå çàíèìàåòñÿ ïîñòîÿííûì ìîíèòîðèíãîì ñîáûòèé è âûïîëíÿåò ñðàâíåíèå ïðîèçîøåäøèõ ñîáûòèé ñ ïàðàìåòðàìè ïîäïèñêè.  ñëó÷àå ñîâïàäåíèÿ ïîäïèñ÷èêó îòïðàâëÿåòñÿ íîòèôèêàöèîííîå ñîîáùåíèå â ôîðìàòå, îïðåäåëåííîì ðàçðàáîò÷èêîì èëè ïîëó÷àòåëåì ñîîáùåíèÿ. Ãèáêîñòü ñåðâèñà íîòèôèêàöèè çàâèñèò îò òîãî, êàêèå ïàðàìåòðû ñîáûòèÿ ñðàâíèâàþòñÿ ñ òåìè ïàðàìåòðàìè ñîáûòèÿ, êîòîðûå îïðåäåëåíû â ïîäïèñêå. ×åì èõ êîëè÷åñòâî áîëüøå, òåì áîëåå ãèáêèì ÿâëÿåòñÿ òîò èëè èíîé ñåðâèñ ïîäïèñêè. Ñïåöèàëèñòû Microsoft ðàçðàáàòûâàëè ïëàòôîðìó ñåðâèñîâ íîòèôèêàöèè SQL Server 2005 òàêèì îáðàçîì, ÷òîáû îíà ìîãëà îäíîâðåìåííî îáðàáàòûâàòü ìèëëèîíû ñîáûòèé, îòñëåæèâàòü òàêîå æå êîëè÷åñòâî ïîäïèñ÷èêîâ è îòïðàâëÿòü îäíîâðåìåííî íå ìåíüøåå êîëè÷åñòâî íîòèôèêàöèîííûõ ñîîáùåíèé. Äëÿ ýòîãî ñïåöèàëèñòàì Microsoft íåîáõîäèìî áûëî âîñïîëüçîâàòüñÿ ôóíêöèîíàëüíîñòüþ ÿäðà SQL Server 2005, ÷òî ïîçâîëèëî áûñòðî èçâëåêàòü ñòðîêè èç òàáëèöû ñîáûòèé, ñðàâíèâàòü èõ ñ ñîîòâåòñòâóþùèìè ñòðîêàìè òàáëèöû ïîäïèñêè è îòïðàâëÿòü íîòèôèêàöèîííûå ñîîáùåíèÿ â ñëó÷àå ñîâïàäåíèÿ ýòèõ ñòðîê.
162
Ãëàâà 7 • Ñåðâèñû íîòèôèêàöèè
7.1.2. Ñîáûòèÿ Ñîáûòèÿ ñåðâèñîâ íîòèôèêàöèè ïðåäñòàâëÿþò ñîáîé îäíî èëè íåñêîëüêî äåéñòâèé, êîòîðûå ïðîèñõîäÿò ñ ñèñòåìîé ïîä âîçäåéñòâèåì îêðóæàþùèõ ñèñòåì, äåéñòâèé ïîëüçîâàòåëåé èëè äåéñòâèé îïåðàöèîííîé ñèñòåìû.  êà÷åñòâå ïðèìåðà ñîáûòèÿ ñåðâèñà íîòèôèêàöèè ìîæíî ïðèâåñòè ðåãèñòðàöèþ íîâîãî ïîäïèñ÷èêà íà îïðåäåëåííóþ ïîäïèñêó èëè ñîâïàäåíèå ñèñòåìíîãî âðåìåíè ñ ïóíêòîì ðàñïèñàíèÿ äëÿ ðàññûëêè ýëåêòðîííûõ ñîîáùåíèé. Ñîáûòèÿ ñåðâèñà íîòèôèêàöèè õðàíÿòñÿ â âèäå îòäåëüíûõ ñòðîê â òàáëèöå. ×òåíèå è îáðàáîòêà äàííûõ ñòðîê ïîçâîëÿþò ðåàëèçîâàòü ïðîãðàììíîå ðåøåíèå äëÿ ðàññûëêè ñîîáùåíèé ïîäïèñ÷èêàì (áóäü òî ïîëüçîâàòåëü èëè ïðîãðàììíîå ðåøåíèå).
7.1.3. Ïîäïèñêà Ïîäïèñêà — ýòî ñïîñîá ñîîáùèòü ñåðâèñó íîòèôèêàöèè î òîì, êàêóþ èíôîðìàöèþ äîëæåí ïîëó÷àòü ïîäïèñ÷èê, â êàêîì ôîðìàòå è ñîãëàñíî êàêîìó ãðàôèêó. Ôîðìàò è ãðàôèê ïîëó÷åíèÿ ïîäïèñêè ìîãóò áûòü èçíà÷àëüíî îïðåäåëåíû â ñèñòåìå, òàêèì îáðàçîì, ïîäïèñ÷èê, îòïðàâëÿÿ ýëåêòðîííîå ñîîáùåíèå íà çàäàííûé àäðåñ, ñîãëàøàåòñÿ ñ îïðåäåëåííûìè óñëîâèÿìè ïîäïèñêè (íàïðèìåð, ýëåêòðîííûå ñîîáùåíèÿ áóäóò îòïðàâëÿòüñÿ îäèí ðàç â äåíü â 12:00). Êàæäûé ïîëüçîâàòåëü, êîòîðûé õîòÿ áû ðàç ïîëüçîâàëñÿ ñåðâèñàìè ïîäïèñêè, ïîíèìàåò, êàê ìîæíî âûïîëíèòü ïîäïèñêó íà òó èëè èíóþ ãðóïïó íîâîñòåé. Äëÿ õðàíåíèÿ ïîäïèñêè ïîëüçîâàòåëåé íà íîâîñòè èëè ñîáûòèÿ â ñåðâèñàõ íîòèôèêàöèè èñïîëüçóåòñÿ òàáëèöà, â êà÷åñòâå ñòðîê êîòîðîé õðàíÿòñÿ çàïèñè î ïîäïèñ÷èêàõ è èõ àäðåñàõ äëÿ äîñòàâêè íîòèôèêàöèîííîãî ñîîáùåíèÿ.
7.1.4. Íîòèôèêàöèÿ Íîòèôèêàöèÿ — ýòî ñîîáùåíèå, êîòîðîå áóäåò îòïðàâëåíî ïîëüçîâàòåëþ (ïîäïèñ÷èêó) ïðè íàñòóïëåíèè òîãî èëè èíîãî ñîáûòèÿ (âíåøíåãî èëè ñèñòåìíîãî). Íîòèôèêàöèÿ îòïðàâëÿåòñÿ ïîäïèñ÷èêó ñîãëàñíî ïàðàìåòðàì ïîäïèñêè. Îíà ìîæåò èìåòü íåñêîëüêî ôîðìàòîâ â ñîîòâåòñòâèè ñ òåìè ïàðàìåòðàìè, êîòîðûå çàäàë ðàçðàáîò÷èê âî âðåìÿ ñîçäàíèÿ ñèñòåìû èëè íàñòðîèë ïîäïèñ÷èê ñ ïîìîùüþ çàäàííîãî èíòåðôåéñà. Íàïðèìåð, â ñëó÷àå ïîäïèñêè íà íîâîñòíóþ êîëîíêó íà îäíîì èç ñàéòîâ ïîëüçîâàòåëü áóäåò ïîëó÷àòü íîòèôèêàöèîííûå ñîîáùåíèÿ ïî ýëåêòðîííîé ïî÷òå. Ôîðìàò äàííûõ ñîîáùåíèé íàñòðàèâàåòñÿ âî âðåìÿ óñòàíîâêè ñèñòåìû è ìîæåò ó÷èòûâàòü òèï óñòðîéñòâà, íà êîòîðîå áóäóò ïðèõîäèòü ýëåêòðîííûå ñîîáùåíèÿ (íàïðèìåð, îáû÷íûé êîìïüþòåð, PDA èëè ñìàðòôîí).
7.1.5. Àðõèòåêòóðà ñåðâèñîâ íîòèôèêàöèè Êàê ìû óïîìèíàëè ðàíåå, ñåðâèñû íîòèôèêàöèè ïðåäñòàâëÿþò ñîáîé ïëàòôîðìó äëÿ ñîçäàíèÿ ïðèëîæåíèé, êîòîðûå áóäóò îáðàáàòûâàòü ñîáûòèÿ è íà îñíîâå ýòèõ ñîáûòèé îòïðàâëÿòü îïîâåùåíèÿ ïîäïèñ÷èêàì. Ýòî ïëàòôîðìà, ïîçâîëÿþùàÿ ñîçäàâàòü è ðàçâåðòûâàòü ïðèëîæåíèÿ äëÿ ðàññûëêè óâåäîìëåíèé, ýëåêòðîííûõ ñîîáùåíèé è ñîîáùåíèé â äðóãèõ ôîðìàòàõ ïîäïèñ÷èêàì ñîãëàñíî îïðåäåëåí-
7.1. Îáçîð è àðõèòåêòóðà ñåðâèñîâ íîòèôèêàöèè
163
íûì èìè ïàðàìåòðàì ïîäïèñêè. Ïðèëîæåíèÿ ñåðâèñîâ íîòèôèêàöèè ñîçäàþòñÿ ñ èñïîëüçîâàíèåì T-SQL è XML. Èíòåãðàöèÿ ñ Microsoft .NET Framework ïîçâîëÿåò èñïîëüçîâàòü äðóãèå ðàñïðîñòðàíåííûå òåõíîëîãèè êîìïàíèè Microsoft äëÿ ñîçäàíèÿ ñåðâèñîâ íîòèôèêàöèè è ïðèëîæåíèé ðàññûëêè ñîîáùåíèé. Ïîääåðæèâàåòñÿ âîçìîæíîñòü ñîçäàíèÿ êàê 32-ðàçðÿäíûõ ïðèëîæåíèé, òàê è 64-ðàçðÿäíûõ. Îáùèé âèä àðõèòåêòóðû ñåðâèñîâ íîòèôèêàöèè ïðèâîäèòñÿ íà ðèñ. 7.2.
Ðèñ. 7.2. Àðõèòåêòóðà ñåðâèñà íîòèôèêàöèè
 âåðõíåé ÷àñòè äàííîé ñõåìû ðàñïîëàãàåòñÿ ïîëüçîâàòåëüñêîå ïðèëîæåíèå, êîòîðîå ñîçäàíî ðàçðàáîò÷èêîì äëÿ îòïðàâêè îïîâåùåíèé î òåõ èëè èíûõ ñîáûòèÿõ. Îíî òàêæå ïîçâîëÿåò äîáàâëÿòü èíôîðìàöèþ î ïîäïèñ÷èêå â ñîîòâåòñòâóþùóþ òàáëèöó ñåðâèñà íîòèôèêàöèè. Ïîäîáíîå ïðèëîæåíèå ìîæåò áûòü íàïèñàíî íà ASP.NET (ÿâëÿòüñÿ âåá-ïðèëîæåíèåì), íà îäíîì èç ÿçûêîâ îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ (Win32-ïðèëîæåíèå) èëè ìîæåò ÿâëÿòüñÿ ïðèëîæåíèåì ëþáîãî äðóãîãî äîñòóïíîãî òèïà, êîòîðîå ñìîæåò âûçûâàòü ôóíêöèè API, èñïîëüçóÿ íàáîð êëàññîâ .NET COM Interop.  ëåâîé ÷àñòè ðèñ. 7.2 îòîáðàæåíà ÷àñòü àðõèòåêòóðû ñåðâèñîâ íîòèôèêàöèè SQL Server 2005, êîòîðàÿ îòâå÷àåò çà ñîáûòèÿ, ãåíåðèðóåìûå âíåøíèìè èëè âíóòðåííèìè èñòî÷íèêàìè ñîáûòèé. Ñîáûòèÿ çàïèñûâàþòñÿ â ñîîòâåòñòâóþùèå òàáëèöû ñ ïîìîùüþ ïðîâàéäåðîâ ñîáûòèé. Ïðîâàéäåðû ñîáûòèé èñïîëüçóþòñÿ äëÿ ìîíèòîðèíãà âíåøíèõ èñòî÷íèêîâ äàííûõ íà ìîìåíò èõ èçìåíåíèÿ.  ñëó÷àå
164
Ãëàâà 7 • Ñåðâèñû íîòèôèêàöèè
âîçíèêíîâåíèÿ ñîáûòèÿ ïðîâàéäåð çàïèñûâàåò ñîîòâåòñòâóþùóþ èíôîðìàöèþ â òàáëèöó ñîáûòèé ñåðâèñà íîòèôèêàöèè.  SQL Server 2005 ðåàëèçîâàíû äâà òèïà ïðîâàéäåðîâ ñîáûòèé: · ñèñòåìíûé íàáëþäàòåëü — èñïîëüçóåòñÿ äëÿ ìîíèòîðèíãà èçìåíåíèé è ñîáûòèé íà óðîâíå îïåðàöèîííîé ñèñòåìû; · ïðîâàéäåð ñîáûòèé SQL Server — ïîçâîëÿåò âûïîëíÿòü ìîíèòîðèíã áàç äàííûõ SQL Server èëè ñåðâèñîâ àíàëèòèêè íà ïðåäìåò èçìåíåíèé èëè âîçíèêíîâåíèÿ êàêèõ-ëèáî ñîáûòèé. Ïàðàìåòðû ñåðâèñîâ íîòèôèêàöèè ìîãóò áûòü ðàñøèðåíû çà ñ÷åò ìîíèòîðèíãà âíåøíèõ èñòî÷íèêîâ äàííûõ ñ èñïîëüçîâàíèåì ïðîâàéäåðîâ ñîáûòèé. Êàê òîëüêî ïîëüçîâàòåëüñêèé ïðîâàéäåð ñîáûòèé çàôèêñèðóåò òî èëè èíîå ñîáûòèå, îí âûïîëíÿåò åãî çàïèñü â ñîîòâåòñòâóþùóþ òàáëèöó ñåðâèñîâ íîòèôèêàöèè.  öåíòðå ñõåìû íà ðèñ. 7.2 ðàñïîëàãàåòñÿ ÿäðî ñåðâèñà íîòèôèêàöèè (èëè ãåíåðàòîð). Îíî èñïîëüçóåòñÿ äëÿ ðàññûëêè íîòèôèêàöèîííûõ ñîîáùåíèé ñîãëàñíî ñîáûòèÿì, êîòîðûå áûëè çàôèêñèðîâàíû ñîîòâåòñòâóþùèìè ïðîâàéäåðàìè.  òîì ñëó÷àå, åñëè ïðîèçîøåäøåå ñîáûòèå ñîâïàäàåò ñ ïàðàìåòðàìè ñîáûòèÿ, êîòîðîå îïðåäåëåíî â ïîäïèñêå, ÿäðî ñåðâèñà íîòèôèêàöèè äîáàâëÿåò ñòðîêó, ñîäåðæàùóþ îïèñàíèå ñîáûòèÿ è èíôîðìàöèþ î ïîäïèñ÷èêå, â òàáëèöó íîòèôèêàöèè ñ öåëüþ äàëüíåéøåé ðàññûëêè ñîîòâåòñòâóþùåé èíôîðìàöèè ïîäïèñ÷èêó.  ïðàâîé ÷àñòè ñõåìû ñåðâèñîâ íîòèôèêàöèè ðàñïîëàãàåòñÿ áðîêåð. Áðîêåð âûïîëíÿåò ìîíèòîðèíã íîâûõ íîòèôèêàöèé, êîòîðûå çàíîñÿòñÿ â òàáëèöó ÿäðîì ñåðâèñà, è âûïîëíÿåò ðàññûëêó ñîîòâåòñòâóþùèõ ñîîáùåíèé. Êàê òîëüêî ãåíåðàòîð äîáàâëÿåò íîâóþ çàïèñü â òàáëèöó íîòèôèêàöèè, áðîêåð ïîëó÷àåò íîâîå âõîæäåíèå èç ýòîé òàáëèöû è ïðèñòóïàåò ê ôîðìèðîâàíèþ ñîîáùåíèÿ â òîì ôîðìàòå, â êîòîðîì îíî îïðåäåëåíî â ïîäïèñêå. Ñíà÷àëà ñîîáùåíèå ñòðîèòñÿ â ôîðìàòå XML ñ èñïîëüçîâàíèåì XSLT, îïðåäåëåííîãî ïî óìîë÷àíèþ. Ïîñëå ýòîãî îïðåäåëÿþòñÿ ïàðàìåòðû óñòðîéñòâà, íà êîòîðîå áóäåò ïåðåäàíî äàííîå ñîîáùåíèå.  êà÷åñòâå ïîäîáíûõ óñòðîéñòâ ìîãóò âûñòóïàòü ïî÷òîâûå êëèåíòû, «òîíêèå» è «òîëñòûå» êëèåíòû, à òàêæå äðóãèå ïîëüçîâàòåëüñêèå ïðèëîæåíèÿ, ñîçäàííûå ñïåöèàëüíî äëÿ ýòèõ öåëåé. Âíóòðè áðîêåðà ñóùåñòâóþò òðè ïðîâàéäåðà: · ïðîâàéäåð SMTP — èñïîëüçóåòñÿ äëÿ äîñòàâêè ýëåêòðîííûõ ñîîáùåíèé ÷åðåç ïî÷òîâûå ñåðâåðû, ïîääåðæèâàþùèå äàííûé ïðîòîêîë; · ïðîâàéäåð ôàéëîâ — èñïîëüçóåòñÿ äëÿ äîñòàâêè îòäåëüíûõ ôàéëîâ íà êëèåíòñêèå êîìïüþòåðû; · ïðîâàéäåð HTTP — èñïîëüçóåòñÿ äëÿ äîñòàâêè ñîîáùåíèé â ôîðìàòå HTML, à òàêæå â äðóãèõ ôîðìàòàõ, ïîääåðæèâàþùèõ ïðîòîêîë HTTP. Òàêæå äàííûé ïðîâàéäåð ìîæåò èñïîëüçîâàòüñÿ äëÿ ðàññûëêè SMS-ñîîáùåíèé, íîòèôèêàöèé òèïà .NET Alert è SOAP-íîòèôèêàöèé. Ïîìèìî ñóùåñòâóþùèõ ïðîâàéäåðîâ ðàçðàáîò÷èêè ìîãóò ñîçäàâàòü ñâîè ñîáñòâåííûå èëè èñïîëüçîâàòü íàðàáîòêè äðóãèõ ãðóïï â êà÷åñòâå ïîëüçîâàòåëüñêèõ ïðîâàéäåðîâ äëÿ äîñòàâêè ñîîáùåíèé â ñïåöèàëüíîì ôîðìàòå èëè íà ñïåöèàëüíûå óñòðîéñòâà, êîòîðûå ïîääåðæèâàþò íåñòàíäàðòíûå ïðîòîêîëû.
7.2. Ðàçðàáîòêà ñåðâèñîâ íîòèôèêàöèè
165
7.2. Ðàçðàáîòêà ñåðâèñîâ íîòèôèêàöèè  ïåðâîé ÷àñòè äàííîé ãëàâû ìû ðàññìàòðèâàëè àðõèòåêòóðó ñåðâèñîâ íîòèôèêàöèè SQL Server 2005. Äàëåå ìû ðàññìîòðèì âîçìîæíîñòè ñîçäàíèÿ ïðèëîæåíèé äëÿ ðàññûëêè íîòèôèêàöèè, à òàêæå ýòàïû èõ ðàçðàáîòêè. Ñíà÷àëà ìû ðàññìîòðèì ýòàïû ðàçðàáîòêè ïîäîáíûõ ïðèëîæåíèé, âêëþ÷àþùèå ñîçäàíèå ñõåì è ïðàâèë, è ïîñëåäóþùåå êîìïèëèðîâàíèå ïðèëîæåíèé. Ïîñëå ýòîãî ìû ïåðåéäåì ê ñîçäàíèþ ïðèëîæåíèÿ íà ïðèìåðå.
7.2.1. Ýòàïû ðàçðàáîòêè ñåðâèñîâ íîòèôèêàöèè Ïðîöåññ ðàçðàáîòêè ïðèëîæåíèÿ äëÿ ðàáîòû ñ ñåðâèñàìè íîòèôèêàöèè ïîäðàçóìåâàåò íåñêîëüêî ýòàïîâ: · Ñîçäàíèå ñõåìû è ïðàâèë, ïî êîòîðûì áóäåò ðàáîòàòü ïðèëîæåíèå. · Êîìïèëÿöèÿ ïðèëîæåíèÿ. · Ñîçäàíèå èíòåðôåéñà, êîòîðûé ïîçâîëèò ïîëüçîâàòåëþ âûïîëíÿòü ïîäïèñêó è íàñòðàèâàòü ïàðàìåòðû ïðèëîæåíèÿ. · Äîáàâëåíèå ïîëüçîâàòåëüñêîãî êîìïîíåíòà, êîòîðûé ìîæåò ïîòðåáîâàòüñÿ ñîãëàñíî ëîãèêå ðàáîòû ïðèëîæåíèÿ. Ðàññìîòðèì ïåðå÷èñëåííûå ýòàïû áîëåå äåòàëüíî.
7.2.2. Ñõåìû è ïðàâèëà Ðàçðàáîò÷èê ïðèëîæåíèÿ äëÿ ðàáîòû ñ ñåðâèñîì íîòèôèêàöèè èñïîëüçóåò êîìáèíàöèþ XML è T-SQL, ÷òîáû ñîçäàòü ñõåìó è îïðåäåëèòü óñëîâèÿ ðàáîòû ïðèëîæåíèÿ. Âî âðåìÿ ñîçäàíèÿ ñõåìû è ïðàâèë ðàçðàáîò÷èê íà ñàìîì äåëå îïèñûâàåò ñîáûòèÿ, äëÿ ìîíèòîðèíãà êîòîðûõ áóäåò èñïîëüçîâàòüñÿ ïðèëîæåíèå. Ïîìèìî ýòîãî ñõåìà è ïðàâèëà ïîçâîëÿþò îïðåäåëèòü ïàðàìåòðû ïîäïèñêè, íîòèôèêàöèè è ëîãèêó ðàáîòû ïðèëîæåíèÿ, îáðàáàòûâàþùåãî èíôîðìàöèþ, êîòîðóþ ââîäèò ïîëüçîâàòåëü. Äëÿ òîãî ÷òîáû îïðåäåëèòü ïàðàìåòðû ñõåìû è ïðàâèëà îáðàáîòêè, èñïîëüçóþòñÿ äâà êîíôèãóðàöèîííûõ ôàéëà: adf.xml è config.xml. Ñîçäàâàòü è ðåäàêòèðîâàòü äàííûå ôàéëû ìîæíî ñ ïîìîùüþ îáû÷íîãî òåêñòîâîãî ðåäàêòîðà èëè ðåäàêòîðà äëÿ ðàáîòû ñ XML-äîêóìåíòàìè, ÷òî çíà÷èòåëüíî óïðîñòèò è óñêîðèò ñîçäàíèå òàêîãî ïðèëîæåíèÿ. Áîëåå äåòàëüíî ñòðóêòóðó ïåðå÷èñëåííûõ êîíôèãóðàöèîííûõ ôàéëîâ ìû ðàññìîòðèì äàëåå â ðàçäåëå 7.2.7 «Ñîçäàíèå è èñïîëüçîâàíèå êîíôèãóðàöèîííûõ ôàéëîâ».
7.2.3. Êîìïèëèðîâàíèå ïðèëîæåíèÿ Ïîñëå òîãî êàê áóäóò ñîçäàíû ñõåìà è ïðàâèëà îáðàáîòêè, ìîæíî ïðèñòóïèòü ê ñîçäàíèþ ïðèëîæåíèÿ ñåðâèñîâ íîòèôèêàöèè è åãî êîìïèëÿöèè. Ïðè ýòîì íåîáõîäèìî âûïîëíèòü ðåãèñòðàöèþ ñåðâèñà, êîòîðûé áóäåò óïðàâëÿòü ðàáîòîé ñîçäàííîãî ïðèëîæåíèÿ. Äëÿ êîìïèëÿöèè ïðèëîæåíèÿ â SQL Server 2005 èñïîëüçóåòñÿ óòèëèòà ñ êîìàíäíîé ñòðîêîé, êîòîðàÿ ïîçâîëÿåò ñîçäàâàòü, ðåãèñòðèðîâàòü
166
Ãëàâà 7 • Ñåðâèñû íîòèôèêàöèè
è îáíîâëÿòü ïðèëîæåíèå ñåðâèñîâ íîòèôèêàöèè. Ïîìèìî ýòîãî ðàáîòàòü ñ ïðèëîæåíèåì ñåðâèñîâ íîòèôèêàöèè ìîæíî, èñïîëüçóÿ SQL Server Management Studio. SQL Server Management Studio ðåàëèçóåò ïîëíûé ñïåêòð âîçìîæíîñòåé äëÿ ñîçäàíèÿ, êîìïèëÿöèè, ðàçâåðòûâàíèÿ è óïðàâëåíèÿ ïðèëîæåíèåì ñåðâèñîâ íîòèôèêàöèè.
7.2.4. Íàñòðîéêà ïðèëîæåíèÿ Ïîìèìî ñîçäàíèÿ ñàìîãî ïðèëîæåíèÿ ñåðâèñà íîòèôèêàöèè, êîòîðîå áóäåò âûïîëíÿòü ðàññûëêó ñîîáùåíèé ñîãëàñíî çàäàííûì êðèòåðèÿì, íåîáõîäèìî ðåàëèçîâàòü èíòåðôåéñ äëÿ ïîëüçîâàòåëÿ. Ñ ïîìîùüþ äàííîãî èíòåðôåéñà ïîëüçîâàòåëü ñìîæåò îïðåäåëÿòü ïàðàìåòðû ðàññûëêè, íàñòðàèâàòü ãðàôèê, ôîðìàò ñîîáùåíèÿ è ÷àñòîòó ðàññûëêè. Ïðèëîæåíèå äëÿ ââîäà ïîëüçîâàòåëüñêîé èíôîðìàöèè ìîæåò áûòü ðàçíûõ òèïîâ. Îáû÷íî îíî ñîçäàåòñÿ äëÿ ðàáîòû ñ ïîìîùüþ «òîíêîãî» êëèåíòà èëè â êà÷åñòâå Win32-ïðèëîæåíèÿ. Äëÿ ñîçäàíèÿ ïðèëîæåíèÿ ïîä «òîíêèé» êëèåíò ìîãóò èñïîëüçîâàòüñÿ òåõíîëîãèè ASP.NET èëè HTML. Äëÿ ñîçäàíèÿ Win32-ïðèëîæåíèé ìîãóò èñïîëüçîâàòüñÿ êàê ÿçûêè ñðåäû ðàçðàáîòêè .NET, òàê è ñðåäû ðàçðàáîòêè îò ñòîðîííèõ ïðîèçâîäèòåëåé (òàêèõ, êàê Delphi).
7.2.5. Ïîëüçîâàòåëüñêèå êîìïîíåíòû Ïîñëåäíèì ýòàïîì ðàçðàáîòêè ïðèëîæåíèÿ äëÿ ñåðâèñîâ íîòèôèêàöèè ìîæåò ÿâëÿòüñÿ äîáàâëåíèå êàêîãî-ëèáî ïîëüçîâàòåëüñêîãî êîìïîíåíòà, êîòîðûé òðåáóåòñÿ â ëîãèêå ðàáîòû ïðèëîæåíèÿ. Ïîëüçîâàòåëüñêèé êîìïîíåíò — ýòî îòäåëüíûé ìîäóëü èëè öåëîå ïðèëîæåíèå, êîòîðîå ìîæåò ïðåäñòàâëÿòü ñîáîé îäíî èç ñëåäóþùèõ ðåøåíèé: · ïðîâàéäåð ñîáûòèé; · ìîäóëü ôîðìèðîâàíèÿ ñîîáùåíèé; · ïðîòîêîë äëÿ äîñòàâêè ãîòîâîãî ñîîáùåíèÿ èëè ëþáîé äðóãîé ìîäóëü.
7.2.6. Ïðèìåðû ñåðâèñîâ íîòèôèêàöèè  ñëåäóþùåì ðàçäåëå ìû ðàññìîòðèì ïðèìåð ñåðâèñà íîòèôèêàöèè. Îí áóäåò âûïîëíÿòü ìîíèòîðèíã îïðåäåëåííîé òàáëèöû Microsoft SQL Server. Êàê òîëüêî çíà÷åíèå îïðåäåëåííîé ÿ÷åéêè â ýòîé òàáëèöå ïðåâûñèò ïîðîãîâîå, ñåðâèñ îòïðàâèò ïîëüçîâàòåëþ ýëåêòðîííîå ñîîáùåíèå. Ýòîò ïðèìåð ïðåäñòàâëÿåò ñîáîé íå ÷òî èíîå, êàê óïðîùåííóþ âåðñèþ ñêëàäñêîé ïðîãðàììû, ðàíåå ïðåäñòàâëåííîé â íàáîðå ïðèìåðîâ ñåðâèñîâ íîòèôèêàöèè SQL Server 2000. Îí ïîçâîëÿë âûïîëíÿòü àíàëîãè÷íûå äåéñòâèÿ ëèøü ïðè óñëîâèè èñïîëüçîâàíèÿ ñðåäñòâ SQL Server 2000.  íîâîé âåðñèè äëÿ ïðîâåðêè ñîäåðæèìîãî òàáëèöû è îáðàáîòêè ñîáûòèÿ, âîçíèêàþùåãî â ñëó÷àå ïðåâûøåíèÿ ïîðîãîâîãî çíà÷åíèÿ, èñïîëüçóåòñÿ áðîêåð ñåðâèñîâ.  äàííîì ïðèëîæåíèè ïîìèìî îáðàáîò÷èêà ñîáûòèé íåîáõîäèìî ïðåäóñìîòðåòü âîçìîæíîñòü ïîäïèñêè ïîëüçîâàòåëÿ íà èçìåíåíèå òàáëèöû. Òàêæå íåîáõîäèìî ïðåäóñìîòðåòü âîçìîæíîñòü ìîäèôèêàöèè ïðàâèëà,
7.2. Ðàçðàáîòêà ñåðâèñîâ íîòèôèêàöèè
167
â ñîîòâåòñòâèè ñ êîòîðûì ïîëüçîâàòåëþ áóäåò îòïðàâëÿòüñÿ íîòèôèêàöèÿ.  êà÷åñòâå ñîîáùåíèÿ ñåðâèñ áóäåò îòïðàâëÿòü êîíå÷íîìó ïîëüçîâàòåëþ ñôîðìèðîâàííûé XML-ôàéë.
7.2.7. Ñîçäàíèå è èñïîëüçîâàíèå êîíôèãóðàöèîííûõ ôàéëîâ Ïðèëîæåíèå ñåðâèñà íîòèôèêàöèè â îáùåì ñëó÷àå ñîñòîèò èç äâóõ ôàéëîâ: îïèñàíèå ïðèëîæåíèÿ (ADF-ôàéë) è ôàéë êîíôèãóðàöèè ïðèëîæåíèÿ (ACF-ôàéëà). Îáà ýòè ôàéëà ïðåäñòàâëÿþò ñîáîé XML-ôàéëû, êîòîðûå äîëæíû áûòü ïîñòðîåíû ïî ñîîòâåòñòâóþùèì XSD-ñõåì. XSD-ñõåìû ïîçâîëÿþò ðàçðàáîò÷èêàì áûòü óâåðåííûìè, ÷òî â XML-ôàéëå áóäóò ñîäåðæàòüñÿ âñå íåîáõîäèìûå àòðèáóòû è ýëåìåíòû, êîòîðûå íåîáõîäèìû âî âðåìÿ ñîçäàíèÿ è íàñòðîéêè ïðèëîæåíèÿ. ADF-ôàéë ïðåäñòàâëÿåò ñîáîé ÿäðî ïðèëîæåíèÿ ñåðâèñà íîòèôèêàöèè.  äàííîì ôàéëå ñîäåðæèòñÿ çíà÷åíèå è îïèñàíèå ñëåäóþùèõ ýëåìåíòîâ: · ñòðóêòóðà ïðèëîæåíèÿ íîòèôèêàöèè, êîòîðîå áóäåò âûïîëíÿòü ðàññûëêó ñîîáùåíèé; · ñîáûòèÿ, ñîãëàñíî êîòîðûì áóäåò âûïîëíÿòüñÿ ðàññûëêà ñîîáùåíèé; · ïðàâèëà îáðàáîòêè ñîáûòèé.  ACF-ôàéëå ñîäåðæèòñÿ ñëåäóþùèé íàáîð àòðèáóòîâ: · èìÿ ýêçåìïëÿðà SQL Server 2005, ñ êîòîðûì âçàèìîäåéñòâóåò ïðèëîæåíèå; · íàèìåíîâàíèå òàáëèö, èç êîòîðûõ áóäóò ñ÷èòûâàòüñÿ çíà÷åíèÿ; · íàèìåíîâàíèå ñåðâèñà íîòèôèêàöèè; · ïàïêà, â êîòîðîé ðàñïîëàãàþòñÿ ôàéëû ïðèëîæåíèÿ, à òàêæå äðóãàÿ êîíôèãóðàöèîííàÿ è íàñòðîå÷íàÿ èíôîðìàöèÿ.  SQL Server 2000 íåîáõîäèìî áûëî ñîçäàâàòü îáà ôàéëà ïðàêòè÷åñêè «ñ íóëÿ».  SQL Server 2005 ðàçðàáîò÷èêè ïðèíÿëè ðåøåíèå àâòîìàòèçèðîâàòü äàííóþ ðàáîòó. Äëÿ ýòîãî áûëî ñîçäàíî ñïåöèàëüíîå ïðèëîæåíèå, êîòîðîå ïîçâîëÿåò â àâòîìàòè÷åñêîì ðåæèìå ñîçäàâàòü ACF- è ADF-ôàéëû. Êàê óïîìèíàëîñü ðàíåå, ñîçäàíèå ïðèëîæåíèÿ ñåðâèñà íîòèôèêàöèè íå îãðàíè÷èâàåòñÿ ñîçäàíèåì ýòèõ äâóõ ôàéëîâ — íåîáõîäèìî òàêæå ðàçðàáîòàòü ïðèëîæåíèå, êîòîðîå ïîçâîëèò ïîëüçîâàòåëÿì ïîäïèñûâàòüñÿ íà äàííûé ñåðâèñ. Ïîäîáíîå ïðèëîæåíèå ñîçäàåòñÿ ñ ïîìîùüþ ñðåäñòâ ãðàôè÷åñêîãî ïðîãðàììèðîâàíèÿ (íàïðèìåð, âõîäÿùèõ â ñîñòàâ .NET Framework). Íà îïèñàíèè ïðîöåññà ñîçäàíèÿ ïîäîáíûõ ïðèëîæåíèé â íàøåì ïðèìåðå ìû îñòàíàâëèâàòüñÿ íå áóäåì. Ðàññìîòðèì ñíà÷àëà ëèñòèíãè ACF- è ADF-ôàéëîâ, êîòîðûå ìîãóò èñïîëüçîâàòüñÿ â êà÷åñòâå ïðèìåðà.  ëèñòèíãå 7.1 ñîäåðæèòñÿ ACF-ôàéë. Ëèñòèíã 7.1. Ïðèìåð ïðîñòåéøåãî ACF-ôàéëà
i_SecondValue) i_SecondValue = (int)Value; if (Value < i_FirstValue) i_FirstValue = (int)Value; } public void Unite(MaxDeviation Group) { if (Group.HValue() > i_SecondValue) i_SecondValue = Group.HValue(); if (Group.LValue() < i_FirstValue) i_FirstValue = Group.LValue(); } public SQLInt32 Term () { return i_SecondValue - i_FirstValue; } public int LValue() { return i_FirstValue; } public int HValue() { return i_SecondValue; } }
10.1. Èíòåãðàöèÿ CLR
235
 íà÷àëå ëèñòèíãà èñïîëüçóåòñÿ àòðèáóò [Serializable], êîòîðûé íåîáõîäèìî âñòàâëÿòü â ïðîãðàììíûé êîä ñîçäàíèÿ ïîëüçîâàòåëüñêîãî ìíîæåñòâà. Ïîñëå ýòîãî ñîçäàåòñÿ êëàññ DifferenceValue.  íà÷àëå ñîçäàíèÿ êëàññà îïðåäåëÿþòñÿ äâå ïåðåìåííûå i_FirstValue è i_SecondValue, â êîòîðûõ áóäóò õðàíèòüñÿ íàèáîëüøåå è íàèìåíüøåå çíà÷åíèÿ ïîëüçîâàòåëüñêîé ãðóïïû. Ïîñëå ýòîãî â ìåòîäå SetValue() óñòàíàâëèâàåòñÿ íà÷àëüíîå çíà÷åíèå äëÿ äàííûõ ïåðåìåííûõ. Ìåòîä SetValue() âûçûâàåòñÿ òîëüêî îäèí ðàç äëÿ òîãî, ÷òîáû óñòàíîâèòü íà÷àëüíîå çíà÷åíèå äëÿ ïåðåìåííûõ. Ïîñëå ýòîãî âñòóïàåò â ðàáîòó ìåòîä CheckValue(SQLInt32 Value), êîòîðûé âûçûâàåòñÿ äëÿ êàæäîé ñòðîêè òàáëèöû.  äàííîì ïðèìåðå ìåòîä CheckValue âûïîëíÿåò ñðàâíåíèå çíà÷åíèÿ, êîòîðîå áûëî ñîõðàíåíî ðàíåå â ïåðåìåííûõ i_FirstValue è i_SecondValue.  ñëó÷àå åñëè çíà÷åíèå, ñ÷èòàííîå èç òàáëèöû, áîëüøå ÷åì i_SecondValue èëè ìåíüøå, ÷åì i_FirstValue, îíî ñîõðàíÿåòñÿ â ýòèõ ïåðåìåííûõ.  ïðîòèâíîì ñëó÷àå íèêàêèõ äåéñòâèé íå ïðåäïðèíèìàåòñÿ. Äàëåå ìåòîä Unite(MaxDeviation Group) èñïîëüçóåòñÿ äëÿ èìïîðòà òåêóùåãî çíà÷åíèÿ ìíîæåñòâà èç ñîñåäíåãî ýêçåìïëÿðà.  äàííîì ïðèìåðå äëÿ ýòîãî èñïîëüçóþòñÿ äâà ìåòîäà, êîòîðûå ñîõðàíÿþò çíà÷åíèÿ ïåðåìåííûõ i_FirstValue è i_SecondValue. Ìåòîä Term() âûçûâàåòñÿ ïîñëå òîãî, êàê âñå âõîäÿùèå çíà÷åíèÿ áóäóò îáðàáîòàíû.  äàííîì ñëó÷àå ìåòîä Term() ïðîñòî âûïîëíÿåò âû÷èòàíèå íàèìåíüøåãî çíà÷åíèÿ, íàéäåííîãî â íàáîðå äàííûõ, èç íàèáîëüøåãî, è âîçâðàùàåò ðàçíîñòü â êà÷åñòâå ðåçóëüòàòà. Äàííûé ìåòîä òàêæå ìîæíî èñïîëüçîâàòü äëÿ âûïîëíåíèÿ áîëåå ñëîæíûõ îïåðàöèé. Ïîñëå òîãî êàê êîä ïðîãðàììû áóäåò ñîçäàí, âûïîëíèòå åãî êîìïèëÿöèþ â DLLôàéë. Èìïîðòèðîâàòü ñáîðêó â áàçó äàííûõ SQL Server ìîæíî êàê ñ ïîìîùüþ ôóíêöèîíàëüíîñòè Visual Studio 2005, òàê è â ðó÷íîì ðåæèìå.  ñëó÷àå èñïîëüçîâàíèÿ ðó÷íîãî ðåæèìà âàì íåîáõîäèìî âîñïîëüçîâàòüñÿ êîìàíäîé CREATE ASSEMBLY ñ ïàðàìåòðîì CREATE AGGRAGATE. Ïðèìåð âûïîëíåíèÿ äàííîé êîìàíäû ïðèâåäåí äàëåå: CREATE AGGREGATE DifferenceValue(IntValue int) RETURNS int EXTERNAL NAME CLR_Assembly.DifferenceValue
 äàííîì ñëó÷àå ñîçäàåòñÿ ìíîæåñòâî ñ íàçâàíèåì DifferenceValue. Ìíîæåñòâî ìîæåò èñïîëüçîâàòüñÿ òîëüêî äëÿ ÷èñëîâûõ òèïîâ äàííûõ è âîçâðàùàåò ÷èñëîâîå çíà÷åíèå â êà÷åñòâå ðåçóëüòàòà. Êîìàíäà EXTERNAL NAME îïðåäåëÿåò èìÿ ñáîðêè è êëàññà, êîòîðûå áóäóò èñïîëüçîâàòüñÿ äëÿ ñîçäàíèÿ íîâîãî ìíîæåñòâà.  êà÷åñòâå èìåíè ñáîðêè âûñòóïàåò CLR_Assembly, à â êà÷åñòâå èìåíè êëàññà — DifferenceValue. Èìÿ ñáîðêè è èìÿ êëàññà ðàçäåëåíû ìåæäó ñîáîé òî÷êîé. Èñïîëüçîâàòü íîâîå ìíîæåñòâî ìîæíî ïîñëå òîãî, êàê SQL Server âûïîëíèò âñòðîåííûå ôóíêöèè. Ïåðåä èñïîëüçîâàíèåì ìíîæåñòâà íåîáõîäèìî óêàçàòü íàçâàíèå ñõåìû, ÷òî ïîçâîëèò SQL Server âûïîëíèòü áûñòðóþ èíèöèàëèçàöèþ âûáðàííîãî ìíîæåñòâà. Ïðèâåäåì ïðèìåð èñïîëüçîâàíèÿ ñîçäàííîãî íàìè òèïà: SELECT Schema1.DifferenceValue(Quantity) FROM Table1.Column1
236
Ãëàâà 10 • Ïðîãðàììèðîâàíèå äëÿ SQL Server
10.1.8. Áåçîïàñíîñòü íà óðîâíå îáúåêòîâ áàçû äàííûõ Ïîÿâëåíèå òàêèõ íîâûõ âîçìîæíîñòåé, êàê ñîçäàíèå òèïîâ, ïðîöåäóð, ôóíêöèé è ìíîæåñòâ, íå ìîãëî íå êîñíóòüñÿ óñèëåíèÿ îáùåé áåçîïàñíîñòè SQL Server. Ýòî îáúÿñíÿåòñÿ òåì, ÷òî ñîçäàíèå íîâûõ îáúåêòîâ áàçû äàííûõ ÷åðåç èìïîðòèðóåìûå DLL-ôàéëû ïðåäñòàâëÿåò ïîòåíöèàëüíóþ îïàñíîñòü äëÿ ðàáîòû ïðèëîæåíèé áàç äàííûõ è SQL Server â öåëîì. Ïðè èñïîëüçîâàíèè T-SQL âîçíèêàëè îïðåäåëåííûå òðóäíîñòè âî âðåìÿ äîñòóïà ê ïîñòîðîííèì èñòî÷íèêàì äàííûõ. Ïðàâèëüíåå áóäåò ñêàçàòü, ÷òî T-SQL âîîáùå íå èìååò ïîäîáíûõ âñòðîåííûõ ñðåäñòâ. ×òî êàñàåòñÿ ñáîðîê .NET, òî äàííûé ìåõàíèçì èçíà÷àëüíî ðàçðàáàòûâàëñÿ ñ ïðèöåëîì íà èñïîëüçîâàíèå âíåøíèõ èñòî÷íèêîâ è óïðîùåíèå ïðîöåññà îáìåíà è îáðàáîòêè äàííûõ èç ðàçëè÷íûõ èñòî÷íèêîâ. Ñáîðêè .NET èìåþò ðàçâèòûå âîçìîæíîñòè äîñòóïà êàê ê ñèñòåìíûì ðåñóðñàì, òàê è ê ñåòåâûì. Ýòî íàêëàäûâàåò ñâîé îòïå÷àòîê íà ñèñòåìó áåçîïàñíîñòè SQL Server.  SQL Server 2005 âïåðâûå áûë ðåàëèçîâàí ìåõàíèçì óïðàâëåíèÿ äîñòóïîì ïîëüçîâàòåëåé ñî âñòðîåííûì ìåõàíèçìîì áåçîïàñíîñòè CLR. Ñîãëàñíî äàííîé ìîäåëè, ïîëüçîâàòåëü ìîæåò ïîëó÷èòü äîñòóï òîëüêî ê îáúåêòàì áàçû äàííûõ, âêëþ÷àÿ îáúåêòû, ñîçäàííûå ñ ïîìîùüþ ñáîðîê .NET. Ïðè ýòîì SQL Server áóäåò âûïîëíÿòü ïðîâåðêó ïðàâ íà ýòè îáúåêòû.  ñëó÷àå åñëè ïîëüçîâàòåëü íå èìååò íåîáõîäèìîãî óðîâíÿ ïðàâ äëÿ äîñòóïà ê îáúåêòó, â ïîäîáíîì äîñòóïå åìó áóäåò îòêàçàíî. Ìîäåëü áåçîïàñíîñòè CLR òàêæå ïîäðàçóìåâàåò êîíòðîëü íàä èñïîëüçîâàíèåì ñèñòåìíûõ ðåñóðñîâ, ê êîòîðûì âîçìîæåí äîñòóï èç ïðîãðàììíîãî êîäà, âûïîëíÿåìîãî íà ñåðâåðå SQL. Óðîâåíü äîñòóïà CLR çàäàåòñÿ âî âðåìÿ ñîçäàíèÿ ñáîðêè. Äëÿ ýòîãî âìåñòå ñ êîìàíäîé CREATE ASSEMBLY èñïîëüçóåòñÿ êîìàíäà WITH PERMISSION_SET. Ïîìèìî ýòîãî ìîãóò èñïîëüçîâàòüñÿ êîìàíäû SAFE, UNSAFE è EXTERNAL_ ACCESS äëÿ îïðåäåëåíèÿ ïàðàìåòðîâ äîñòóïà, êîòîðûå ìîãóò áûòü ïðèìåíåíû ê îáúåêòàì áàçû äàííûõ. Îïèñàíèå äàííûõ êîìàíä ïðèâîäèòñÿ â òàáë. 10.2. Òàáëèöà 10.2. Óðîâíè áåçîïàñíîñòè Óðîâåíü áåçîïàñíîñòè
Äîñòóï ê âíåøíèì èñòî÷íèêàì
Âûçîâ ïðîãðàììíîãî êîäà
SAFE
Íåò äîñòóïà
Íå ðàçðåøåí
EXTERNAL_ACCESS
Äîñòóï ðàçðåøåí ÷åðåç API
Íå ðàçðåøåí
UNSAFE
Äîñòóï ðàçðåøåí
Ðàçðåøåí
Óðîâåíü áåçîïàñíîñòè SAFE çàïðåùàåò äîñòóï êàê ê âíåøíèì èñòî÷íèêàì äàííûõ, òàê è ê ïðîãðàììíîìó êîäó. Óðîâåíü äîñòóïà EXTERNAL_ACCESS ðàçðåøàåò îáðàùåíèå ê âíåøíèì èñòî÷íèêàì äàííûõ ñ èñïîëüçîâàíèåì ïðîãðàììíîãî èíòåðôåéñà. Ýòî ïîçâîëÿåò îïðåäåëèòü ïîëüçîâàòåëÿ, êîòîðûé ïîëó÷àåò äîñòóï ê âíåøíèì èñòî÷íèêàì. Äîñòóï ê ïðîãðàììíîìó êîäó â äàííîì ñëó÷àå çàïðåùåí. Óðîâåíü äîñòóïà UNSAFE ïîçâîëÿåò ïîëó÷àòü ïðÿìîé äîñòóï ê âíåøíèì èñòî÷íèêàì è âûïîëíÿòü âûçîâ ïðîãðàììíîãî êîäà. Îáúåêòû ñ óðîâíåì äîñòóïà UNSAFE ìîãóò ñîçäàâàòü òîëüêî ñèñòåìíûå àäìèíèñòðàòîðû.
10.2. Íîâîââåäåíèÿ
237
10.2. Íîâîââåäåíèÿ  ñâÿçè ñ ïîÿâëåíèåì â SQL Server 2005 íîâûõ èíñòðóìåíòîâ, êîòîðûå çíà÷èòåëüíî ðàñøèðÿþò âîçìîæíîñòè èñïîëüçîâàíèÿ äàííîãî ïðîãðàììíîãî ïðîäóêòà, à â íåêîòîðûõ ñëó÷àÿõ ïîëíîñòüþ çàìåíÿþò è ðàñøèðÿþò âîçìîæíîñòè T-SQL, âîçíèêàåò âîïðîñ: íå ñîáèðàåòñÿ ëè êîìïàíèÿ Microsoft îòêàçàòüñÿ îò ïîääåðæêè T-SQL â ëèíåéêå ñâîèõ ïðîãðàììíûõ ïðîäóêòîâ? T-SQL äî ñèõ ïîð ÿâëÿëñÿ îäíèì èç îñíîâíûõ èíñòðóìåíòîâ äîñòóïà ê áàçå äàííûõ, ðàáîòû ñ îáúåêòàìè è ìàíèïóëèðîâàíèÿ ñ íèìè. Ñ ïîìîùüþ T-SQL ìîæíî âûïîëíÿòü îãðîìíåéøèé íàáîð äåéñòâèé. Ïîìèìî ýòîãî îãðîìíàÿ àðìèÿ ðàçðàáîò÷èêîâ äàâíî èñïîëüçóåò äàííûé ÿçûê äëÿ ðàçðàáîòêè ïðèëîæåíèé. Ïðåäëîæåíèÿ, ñîçäàííûå çà ïîñëåäíèå ãîäû, â ñëó÷àå îòêàçà îò T-SQL íåîáõîäèìî áóäåò ïåðåâåñòè íà íîâóþ ïëàòôîðìó (ïðè îòñóòñòâèè îáðàòíîé ñîâìåñòèìîñòè ìåæäó íîâûì ñòàíäàðòîì è T-SQL). Êàê òîëüêî âû ïîçíàêîìèòåñü ñ îñíîâíûìè íîâîââåäåíèÿìè, êîòîðûå êîñíóëèñü T-SQL, âû ñðàçó ïîéìåòå, ÷òî ýòîò ñòàíäàðò ñ âûõîäîì íîâîé âåðñèè íå áóäåò îòâåðãíóò ðàçðàáîò÷èêàìè, à ñêîðåå, ïîëó÷èò íîâûé òîë÷îê äëÿ ðàçâèòèÿ.  ñëåäóþùåì ðàçäåëå ìû ðàññìîòðèì áîëåå äåòàëüíî íîâîââåäåíèÿ, êîòîðûå ïîÿâèëèñü â íîâîé âåðñèè SQL Server. Ñíà÷àëà ìû ðàññìîòðèì ïîääåðæêó CTE, çàòåì èçó÷èì èñïîëüçîâàíèå íîâûõ îïåðàòîðîâ PIVOT è UNPIVOT. Ïîñëå ýòîãî ìû èçó÷èì íîâîââåäåíèÿ è óëó÷øåíèÿ â ìåõàíèçìå DDL-òðèããåðîâ, íîâûé òèï varchar(max). Çàêîí÷èì äàííûé ðàçäåë ðàññìîòðåíèåì íîâûõ âîçìîæíîñòåé â èñïîëüçîâàíèè òðàíçàêöèé è îáðàáîòêè íåêîòîðûõ ñîáûòèé.
10.2.1. Ñ÷èòûâàíèå ñòðîê  SQL Server 2000 â ñëó÷àå èñïîëüçîâàíèÿ êîìàíäû TOP ïðèõîäèëîñü çàäàâàòü çíà÷åíèå êîíñòàíòû. Èíûìè ñëîâàìè, ìîæíî áûëî äåëàòü âûáîðêó òîëüêî îïðåäåëåííîãî ÷èñëà ñòðîê (íàïðèìåð, TOP 100). Èñïîëüçîâàíèå ïåðåìåííûõ â äàííîì ñëó÷àå íå äîïóñêàëîñü.  íîâîé âåðñèè SQL Server ñòàëî âîçìîæíûì èñïîëüçîâàòü ïåðåìåííûå è öåëûå âû÷èñëÿåìûå âûðàæåíèÿ âìåñòå ñ êîìàíäîé TOP. Ýòî ïîçâîëÿåò ðåàëèçîâàòü íîâûå âîçìîæíîñòè â ïðèëîæåíèÿõ, âûáèðàÿ ïðè ýòîì íå çàäàííîå êîëè÷åñòâî çíà÷åíèé èç èñòî÷íèêà äàííûõ, à âû÷èñëÿåìîå â ïðîöåññå ðàáîòû ïðèëîæåíèÿ. Êîìàíäà TOP ïîääåðæèâàåò êîìàíäû DELETE, SELECT, INSERT, UPDATE è äð., ÷òî ïîçâîëÿåò âûïîëíÿòü îïðåäåëåííûå äåéñòâèÿ íàä ïåðåìåííîé âåëè÷èíîé ñòðîê òàáëèöû. Ðàññìîòðèì èñïîëüçîâàíèå ïåðåìåííîé âåëè÷èíû êîëè÷åñòâà ñ÷èòûâàåìûõ èç òàáëèöû ñòðîê â ñëåäóþùåì ïðèìåðå: DECLARE @UserTop int SET @UserTop = 100 DELETE TOP (@UserTop) FROM Schema1.Table1
10.2.2. Òàáëè÷íûå ðàñøèðåíèÿ Åùå îäíî óëó÷øåíèå T-SQL êîñíóëîñü òàêîãî ìåõàíèçìà, êàê òàáëè÷íûå ðàñøèðåíèÿ (CTE — Common Table Expressions). Ìåõàíèçì òàáëè÷íûõ ðàñøèðåíèé î÷åíü ïîõîæ íà ìåõàíèçì ïðåäñòàâëåíèé çà òåì ëèøü èñêëþ÷åíèåì, ÷òî òàáëè÷íûå ðàñøèðåíèÿ ìîãóò âñòðàèâàòüñÿ â çàïðîñû. Ýòî ïîçâîëÿåò ðåàëèçîâàòü ñëîæíóþ
238
Ãëàâà 10 • Ïðîãðàììèðîâàíèå äëÿ SQL Server
çàäà÷ó ñîçäàíèÿ, âûçîâà è îáðàáîòêè ðåêóðñèâíûõ çàïðîñîâ.  ñëó÷àå èñïîëüçîâàíèÿ CTE ìîæíî ñîçäàâàòü çàïðîñû, êîòîðûå áóäóò ññûëàòüñÿ ñàìè íà ñåáÿ. Äëÿ òîãî ÷òîáû èçáåæàòü çàâèñàíèÿ ñèñòåìû â ñëó÷àå íåïðàâèëüíîãî ñîçäàíèÿ çàïðîñà èëè èñïîëüçîâàíèÿ ñëîæíîãî íàáîðà äàííûõ, â SQL Server ðåàëèçóåòñÿ ìåõàíèçì íàñòðîéêè ãëóáèíû óðîâíåé âûïîëíåíèÿ çàïðîñà. Èíûìè ñëîâàìè, çàïðîñ íå ìîæåò îáðàùàòüñÿ ñàì ê ñåáå áîëåå ÷åì îïðåäåëåííîå ÷èñëî ðàç (â ñëó÷àå èñïîëüçîâàíèÿ ïðÿìîé ðåêóðñèè). Ïî óìîë÷àíèþ äàííîå çíà÷åíèå óðîâíåé âëîæåíèÿ ðàâíÿåòñÿ 100. CTE ðåàëèçóåòñÿ ïóòåì ââåäåíèÿ ïàðàìåòðîâ êîìàíäû WITH, êîòîðàÿ ìîæåò èñïîëüçîâàòüñÿ ñ òàêèìè êîìàíäàìè, êàê INSERT, DELETE, SELECT è äð. Äëÿ ðåàëèçàöèè ðåêóðñèâíîãî çàïðîñà ñ ïîìîùüþ CTE íåîáõîäèìî èñïîëüçîâàòü ñèíòàêñèñ âûçîâà çàïðîñà, êàê ïîêàçàíî â ëèñòèíãå 10.6.  äàííîì ïðèìåðå âûïîëíÿåòñÿ ðåêóðñèâíûé çàïðîñ ê òàáëèöå Table1, êîòîðàÿ ðàñïîëàãàåòñÿ â áàçå äàííûõ DataBase1. Ëèñòèíã 10.6. Âûïîëíåíèå ðåêóðñèâíîãî çàïðîñà USE DataBase1. WITH ExampleChart (ExampleID, RelatedID, Title) AS SELECT (ExampleID, RelatedID, Title FROM Table1 WHERE ExampleID = 3 UNION ALL SELECT L2.ExampleID, L2.RelatedID, L2.Title FROM Table1 AS L2 JOIN ExampleChart ON RelatedID = ExampleChart.ExampleID) SELECT * from ExampleChart
 ñëó÷àå èñïîëüçîâàíèÿ CTE íåîáõîäèìî ïåðåä çàïðîñîì èñïîëüçîâàòü êîìàíäó WITH. Ïîñëå íåå íóæíî óêàçàòü èìÿ CTE è íàáîð êîëîíîê, êîòîðûå áóäóò èñïîëüçîâàòüñÿ âî âðåìÿ çàïðîñà. Ïåðâûé âûçîâ êîìàíäû SELECT íîñèò íàçâàíèå ÿêîðíîãî ýëåìåíòà. Îí íå äîëæåí ññûëàòüñÿ ñàì íà ñåáÿ.  äàííîì ñëó÷àå âûçîâ ÿêîðíîãî ýëåìåíòà âûáèðàåò çíà÷åíèÿ êîëîíîê ExampleID, RelatedID è Title èç òàáëèöû Table1. Ñëåäóþùèé ýëåìåíò — SELECT — ññûëàåòñÿ íà CTE è íîñèò íàçâàíèå ðåêóðñèâíîãî ýëåìåíòà.  äàííîì ñëó÷àå êîìàíäà SELECT ïðîèçâîäèò òàêèå æå äåéñòâèÿ, ÷òî ÿêîðíûé ýëåìåíò. Ñâÿçü ñ ÿêîðíûì ýëåìåíòîì âûïîëíÿåòñÿ ÷åðåç êîëîíêó RelatedID.
10.2.3. PIVOT è UNPIVOT Â íîâîé âåðñèè SQL Server ïîÿâèëèñü äâà îïåðàòîðà — PIVOT è UNPIVOT. Îáà ýòèõ îïåðàòîðà ñîçäàâàëèñü ñïåöèàëüíî äëÿ áàç äàííûõ OLAP, à òàêæå äëÿ ðàáîòû â ïðîãðàììàõ, â êîòîðûõ âûïîëíÿåòñÿ ìàíèïóëèðîâàíèå äàííûìè èç ôàéëîâ ñ ðàçäåëèòåëÿìè. Îïåðàòîð PIVOT èñïîëüçóåòñÿ äëÿ ïðåîáðàçîâàíèÿ íàáîðà ñòðîê â êîëîíêè. Êàê è ñëåäîâàëî îæèäàòü îò ñàìîãî íàçâàíèÿ, êîìàíäà UNPIVOT ïðåîáðàçóåò íàáîð êîëîíîê â ñòðîêè. Îäíàêî âûïîëíåíèå ýòîãî îïåðàòîðà çàâèñèò îò êîíòåêñòà.
10.2. Íîâîââåäåíèÿ
239
Íàèáîëåå âàæíîé îñîáåííîñòüþ îïåðàöèè UNPIVOT ÿâëÿåòñÿ òî, ÷òî îíà íå ìîæåò áûòü âûïîëíåíà äëÿ òàáëèöû â òîì ñëó÷àå, åñëè äëÿ òàáëèöû âûïîëíÿëàñü îïåðàöèÿ PIVOT. Òàêèì îáðàçîì, îïåðàöèÿ UNPIVOT íå ÿâëÿåòñÿ îáðàòíîé äëÿ îïåðàöèè PIVOT. Äëÿ òîãî ÷òîáû äåòàëüíî ðàçîáðàòüñÿ â ìåõàíèçìå äåéñòâèÿ êîìàíäû PIVOT, ðàññìîòðèì ñëåäóþùèé ïðèìåð.  äàííîì ïðèìåðå (òàáë. 10.3) ñîäåðæèòñÿ íàáîð äàííûõ î êëèåíòàõ, êàæäîìó èç êîòîðûõ ñîîòâåòñòâóåò ÷èñëî êóïëåííûõ òîâàðîâ. Ïîìèìî ýòîãî èñïîëüçóåòñÿ ñòîëáåö ñ èäåíòèôèêàöèîííûìè êîäàìè êëèåíòîâ è ìåñÿöåì ïîêóïêè òîâàðà. Òàáëèöà 10.3. Íàáîð äàííûõ ïåðåä âûïîëíåíèåì îïåðàöèè PIVOT CustomerID
Month
Quantity
1
January
10
2
January
20
3
February
25
4
February
31
5
February
40
5
February
43
6
March
55
7
March
23
8
April
12
9
May
1
Èñïîëüçóÿ îïåðàòîð PIVOT, ìîæíî ïðåîáðàçîâàòü äàííóþ òàáëèöó â òàáëèöó ñ êîëè÷åñòâîì òîâàðà, ðàñïîëàãàþùèìñÿ â âèäå ñòðîê. Ïðèìåð êîìàíäû ïðåîáðàçîâàíèÿ äàííûõ ïðèâåäåí äàëåå: SELECT * FROM Table1 PIVOT (COUNT(CustomerID) FOR Month IN ([January], [February], [March], [April], [May])) AS P
 äàííîì ñëó÷àå îïåðàöèÿ PIVOT âûïîëíÿåòñÿ âìåñòå ñ îïåðàöèåé SELECT.  ðåçóëüòàòå ýòîãî ñîçäàåòñÿ íîâûé íàáîð äàííûõ. Ïåðâûé îïåðàòîð âû÷èñëÿåò êîëè÷åñòâî êîëîíîê, êîòîðûå áóäóò èñïîëüçîâàòüñÿ äëÿ ïîñòðîåíèÿ íîâîé òàáëèöû. Ïîäñ÷åò âûïîëíÿåòñÿ ñ ïîìîùüþ îïåðàòîðà (COUNT(CustomerID)). Êîìàíäà FOR èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû îïðåäåëèòü çíà÷åíèÿ êîëîíêè Month, êîòîðûå âîéäóò â ðåçóëüòèðóþùóþ òàáëèöó.  äàííîì ñëó÷àå âûïîëíÿåòñÿ îáðàáîòêà ìåñÿöåâ. Çíà÷åíèÿ, ïåðå÷èñëåííûå ïîñëå êîìàíäû IN, áóäóò âûñòóïàòü â êà÷åñòâå çàãîëîâêîâ êîëîíîê. Ðåçóëüòàòû âûïîëíåíèÿ äàííîãî çàïðîñà ìîæíî îòîáðàçèòü â âèäå ñëåäóþùåé òàáëèöû (òàáë. 10.4). Òàáëèöà 10.4. Ðåçóëüòàò âûïîëíåíèÿ îïåðàöèè PIVOT January
February
March
April
May
30
139
78
12
1
240
Ãëàâà 10 • Ïðîãðàììèðîâàíèå äëÿ SQL Server
10.2.4. Òðèããåðû DDL  ïðåäûäóùèõ âåðñèÿõ SQL Server ìîæíî áûëî èñïîëüçîâàòü òðèããåðû òîëüêî ïðè âûïîëíåíèè îïðåäåëåííûõ îïåðàöèé íàä íàáîðàìè äàííûõ. Ê òàêèì îïåðàöèÿì ìîæíî îòíåñòè îïåðàöèè âñòàâêè äàííûõ â òàáëèöó èëè ðåäàêòèðîâàíèÿ çíà÷åíèé ñòðîêè.  íîâîé âåðñèè SQL Server âîçìîæíîñòè òðèããåðîâ ðàñøèðåíû. Òåïåðü îíè ìîãóò èñïîëüçîâàòüñÿ âî âðåìÿ îáðàáîòêè DDL-ñîáûòèé, òàêèõ êàê ñîçäàíèå è óäàëåíèå îáúåêòîâ áàç äàííûõ. Ê òàêèì îáúåêòàì îòíîñÿòñÿ òàáëèöû, õðàíèìûå ïðîöåäóðû, ïîëüçîâàòåëüñêèå ôóíêöèè, ïðåäñòàâëåíèÿ. Òðèããåðû DDL ìîãóò èñïîëüçîâàòüñÿ âî âðåìÿ âûïîëíåíèÿ îïåðàöèé ALTER, CREATE, DROP è äð. Ýòî ïîçâîëÿåò àäìèíèñòðàòîðàì è ðàçðàáîò÷èêàì ïðèëîæåíèé îãðàíè÷èâàòü äåéñòâèÿ ïîëüçîâàòåëÿ, îñíîâûâàÿñü íà DDL-îïåðàöèÿõ íàä äàííûìè â îïðåäåëåííîé áàçå äàííûõ. Òàêæå ìîæíî èñïîëüçîâàòü DDL-òðèããåðû äëÿ îòïðàâêè ñîîáùåíèé ñîãëàñíî èçìåíåíèÿì îïðåäåëåííûõ äàííûõ.  ñëåäóþùåì ïðèìåðå ìû ðàññìîòðèì èñïîëüçîâàíèå DDL-òðèããåðà âìåñòå ñ îïåðàöèÿìè ALTER è DROP: CREATE TRIGGER AlterDropNoAllowed ON DATABASE FOR ALTER_TABLE, DROP_TABLE AS PRINT 'Âû íå ìîæåòå âûïîëíÿòü îïåðàöèè ALTER è DROP' ROLLBACK
 ñëó÷àå âûïîëíåíèÿ îïåðàöèè ALTER èëè DROP ïîëüçîâàòåëþ âûâîäèòñÿ ñîîáùåíèå è âûïîëíÿåòñÿ îòêàò äî ïðåäûäóùåãî ñîñòîÿíèÿ òàáëèöû. Ñîîáùåíèå áóäåò èìåòü ïðèáëèçèòåëüíî ñëåäóþùèé âèä: 'Âû íå ìîæåòå âûïîëíÿòü îïåðàöèè ALTER è DROP' .Net SqlClient Data Provider: Msg 1201, Level 11, State 3, Line 1 Transaction ended in trigger. Batch has been aborted.
Åñëè âàì íåîáõîäèìî âûïîëíèòü îäíó èç ýòèõ îïåðàöèé (ALTER èëè DROP), òî ñíà÷àëà íåîáõîäèìî óäàëèòü DDL-òðèããåð, à çàòåì èçìåíèòü èëè óäàëèòü äàííûå.
10.2.5. Ïåðåíàïðàâëåíèå âûâîäà Åùå îäíèì ïðåèìóùåñòâîì T-SQL â íîâîé âåðñèè SQL Server ÿâëÿåòñÿ âîçìîæíîñòü âûâîäèòü ðåçóëüòàòû âûïîëíåíèÿ êîìàíä DELETE, INSERT è UPDATE. Íàïðèìåð, èñïîëüçóÿ êîìàíäó DELETE, ìîæíî óäàëèòü ñòðîêè òàáëèöû, êàê ïîêàçàíî â ëèñòèíãå 10.7, è ïåðåíàïðàâèòü óäàëåííûå ñòðîêè â ïåðåìåííóþ èëè äðóãóþ òàáëèöó. Ëèñòèíã 10.7. Âûâîä ðåçóëüòàòîâ âûïîëíåíèÿ êîìàíäû DELETE DECLARE @ExampleVar TABLE( ID int, ExampleYear int); DELETE FROM ExampleTable OUTPUT DELETED * INTO ExampleVar SELECT * FROM @ExampleVar
10.2. Íîâîââåäåíèÿ
241
Êîìàíäà OUTPUT DELETED èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû îïðåäåëèòü, êóäà áóäóò âûâîäèòüñÿ óäàëåííûå ñòðîêè. Â ïðåäûäóùèõ âåðñèÿõ SQL Server ìîæíî áûëî òîëüêî ïðîñìîòðåòü íîìåðà ñòðîê, íàä êîòîðûìè âûïîëíÿëèñü äåéñòâèÿ (óäàëåíèå, âñòàâêà èëè èçìåíåíèå). Â íîâîé âåðñèè ìîæíî ïðîñìîòðåòü íå òîëüêî íîìåðà ñòðîê, íî è èõ ñîäåðæèìîå, âûïîëíèâ ÷òåíèå ïåðåìåííîé èëè òàáëèöû, â êîòîðûå áûë ïåðåíàïðàâëåí âûâîä.
10.2.6. Êîìàíäà WAITFOR  íîâîé âåðñèè SQL Server ïðîèçîøëè íåêîòîðûå èçìåíåíèÿ â ñèíòàêñèñå êîìàíäû WAITFOR.  ïðåäûäóùèõ âåðñèÿõ ýòà êîìàíäà èñïîëüçîâàëàñü òîëüêî ñ ÷åòêî îïðåäåëåííûì âðåìåíåì. Èíûìè ñëîâàìè, àðãóìåíòîì êîìàíäû ìîãëà âûñòóïàòü òîëüêî êîíñòàíòà.  íîâîé âåðñèè SQL Server êîìàíäà WAITFOR ìîæåò îæèäàòü ðåçóëüòàòîâ âûïîëíåíèÿ êîìàíäû RECEIVE. Ýòî ñäåëàíî äëÿ òîãî, ÷òîáû íîâûé íàáîð êîìàíä ìîæíî áûëî èñïîëüçîâàòü äëÿ ðàáîòû ñ áðîêåðîì ñåðâèñîâ SQL Server 2005.  ñëåäóþùåì ïðèìåðå ðàññìàòðèâàåòñÿ, êàê êîìàíäà WAITFOR ìîæåò áûòü èñïîëüçîâàíà âìåñòå ñ êîìàíäîé RECEIVE: WAITFOR (RECEIVE TOP (2) * FROM Schema1.ServiceBrokerQueue)
10.2.7. Íîâûé òèï äàííûõ varchar Íîâûé òèï äàííûõ varchar(max) ñîçäàâàëñÿ êàê àëüòåðíàòèâà òèïàì õðàíåíèÿ òåêñòà è êàðòèíîê. Îí ÿâëÿåòñÿ ðàñøèðåíèåì òàêèõ òèïîâ, êàê nvarchar, varbinary, varchar, text, image è ntext. Îò ïîñëåäíèõ òðåõ îí âçÿë âîçìîæíîñòü õðàíåíèÿ áîëüøèõ îáúåìîâ äàííûõ (äî 2 Ãáàéò). Îäíàêî â îòëè÷èå îò ïåðå÷èñëåííûõ òèïîâ, òèï varchar(max) ìîæåò èñïîëüçîâàòüñÿ äëÿ õðàíåíèÿ êàê òåêñòîâîé èíôîðìàöèè, òàê è áèíàðíûõ âñòàâîê êîäà, òî åñòü îí ïîçâîëÿåò õðàíèòü òåêñò ñ êàðòèíêàìè. Íîâûé òèï varchar(max), òàê æå êàê è äðóãèå òèïû äàííûõ, îò êîòîðûõ îí óíàñëåäîâàí, èìååò íàáîð ôóíêöèé äëÿ ðàáîòû ñ äàííûìè. Ýòî ïîçâîëÿåò èñïîëüçîâàòü òàêîé æå ïîäõîä â ðàçðàáîòêå ïðîãðàììíûõ ïðèëîæåíèé, êàê ñ òèïàìè text, varchar, image è äð. Ïðè ýòîì íàáîð ôóíêöèé äëÿ ðàáîòû ñî ñòðîêàìè òàêæå ïðèìåíèì äëÿ ðàáîòû ñ òèïîì varchar(max). Âû ìîæåòå èñïîëüçîâàòü òàêèå ôóíêöèè, êàê SUBSTRING è ìíîãèå äðóãèå, ïðåäíàçíà÷åííûå äëÿ ðàáîòû ñî ñòðîêàìè òåêñòà. Ïîìèìî ýòîãî ñóùåñòâóåò âîçìîæíîñòü èñïîëüçîâàíèÿ òàêîé êîìàíäû, êàê UPDATE. Ñ åå ïîìîùüþ òåïåðü ìîæíî îáíîâëÿòü îòäåëüíûå ýëåìåíòû òèïà varchar(max). Èñïîëüçîâàíèå íîâîãî òèïà varchar(max) äîïóñêàåòñÿ òåïåðü òàêæå â òàáëèöàõ.  ñëåäóþùåì ïðèìåðå ðàññìàòðèâàåòñÿ êîä ñîçäàíèÿ òàáëèöû ñ êîëîíêîé òèïà varchar(max): CREATE TABLE Table1 ( DataID int, DataContainer varchar(max) )
242
Ãëàâà 10 • Ïðîãðàììèðîâàíèå äëÿ SQL Server
10.2.8. Ïðåðûâàíèå òðàíçàêöèé  íîâîé âåðñèè SQL Server óëó÷øåí ìåõàíèçì ïðåðûâàíèÿ òðàíçàêöèé. Òåïåðü äîáàâëåí íàáîð êîìàíä TRY/CATCH, êîòîðûå ïîçâîëÿþò âûïîëíÿòü ïðåðûâàíèå òðàíçàêöèè â ñëó÷àå âîçíèêíîâåíèÿ îøèáêè, ïåðåêëþ÷åíèÿ òðèããåðîâ èëè äðóãèõ ïðîãðàììíûõ ìîäåëåé. Ïðè âîçíèêíîâåíèè îøèáêè òðàíçàêöèÿ ïðåðûâàåòñÿ áåç ïîòåðè óñëîâèé åå âûïîëíåíèÿ. Ïîìèìî ýòîãî óñëîâèÿ âûïîëíåíèÿ òðàíçàêöèè ìîãóò áûòü ïîëíîñòüþ âîññòàíîâëåíû, ÷òî ïîçâîëÿåò ïîâòîðíî ñìîäåëèðîâàòü óñëîâèÿ âûïîëíåíèÿ ïðåäûäóùåé òðàíçàêöèè è ëîêàëèçîâàòü âîçíèêøèå îøèáêè. Âîññòàíîâèòü óñëîâèÿ âûïîëíåíèÿ òðàíçàêöèè â SQL Server 2000 áûëî íåëüçÿ.  íîâîé âåðñèè SQL Server íàáîð êîìàíä TRY/CATCH ïîçâîëÿåò ìîäåëèðîâàòü óñëîâèÿ âûïîëíåíèÿ òðàíçàêöèè, à òàêæå âîññòàíàâëèâàòü èõ. Ðàññìîòðèì ñèíòàêñèñ äàííîãî íàáîðà êîìàíä: BEGIN TRY
END TRY BEGIN CATCH TRAN_ABORT
END CATCH
 íà÷àëå âûïîëíåíèÿ òðàíçàêöèè àíàëèçàòîð ñíà÷àëà âûïîëíÿåò áëîê êîìàíä ìåæäó BEGIN TRY è END TRY.  ñëó÷àå âîçíèêíîâåíèÿ îøèáêè àíàëèçàòîð ïåðåõîäèò ê âûïîëíåíèþ áëîêà êîìàíä ìåæäó BEGIN CATCH è END CATCH. Âíóòðè äàííîãî áëîêà êîìàíä ìîæíî âñòàâèòü ïðîâåðêó, äëÿ òîãî ÷òîáû îïðåäåëèòü, ïî êàêîé ïðè÷èíå âîçíèêëà îøèáêà. Äëÿ ýòîãî íåîáõîäèìî ïðîâåðèòü ñîäåðæèìîå ïåðåìåííîé @@error.
10.3. Èíòåãðàöèÿ ñ ADO.NET Ïîìèìî óëó÷øåíèé, êîñíóâøèõñÿ T-SQL è CLR, â íîâîé âåðñèè SQL Server òàêæå óëó÷øåíà ðàáîòà íà ñòîðîíå êëèåíòà. Óëó÷øåíèÿ â ïåðâóþ î÷åðåäü çàòðîíóëè ìåõàíèçìû ðàáîòû ñ ADO.NET. Èíòåãðàöèÿ ñ ADO.NET ïîçâîëèëà çàêðûòü òå ïðîðåõè, êîòîðûå íàáëþäàëèñü âî âðåìÿ èñïîëüçîâàíèÿ ïðåäøåñòâåííèêà äàííîé òåõíîëîãèè ADO. Ñ ïîìîùüþ íîâîé òåõíîëîãèè ñòàëî âîçìîæíûì ðàçðàáàòûâàòü íîâûå ïðîãðàììíûå ðåøåíèÿ, âêëþ÷àþùèå íîâûå ïðåèìóùåñòâà è òåõíîëîãèè SQL Server 2005, à òàêæå ðàçðàáàòûâàòü áîëåå ñëîæíûå ïðîãðàììíûå ïðèëîæåíèÿ è ïðåäñòàâëåíèÿ äàííûõ. Ïîìèìî äðóãèõ ïðåèìóùåñòâ, â ADO.NET âñòðîåíà ïîääåðæêà íîâûõ òèïîâ äàííûõ varchar(max) è XML.  äàííîì ðàçäåëå ìû ðàññìîòðèì ìåõàíèçì èñïîëüçîâàíèÿ êóðñîðà íà ñòîðîíå ñåðâåðà, ïîääåðæêó àñèíõðîííîãî äîñòóïà ê òàáëèöàì äàííûõ è ïðåäñòàâëåíèÿì, ðàñøèðåííûå ôóíêöèè ïî ðàáîòå ñ íàáîðàìè ðåçóëüòàòîâ, à òàêæå äðóãèå ïðåèìóùåñòâà èíòåãðàöèè SQL Server 2005 ñ ADO.NET, êîòîðûå ïðèçâàíû óïðîñòèòü ðàçðàáîòêó ñëîæíûõ ïðèëîæåíèé.
10.3.1. Èñïîëüçîâàíèå êóðñîðà Â SQL Server 2005 âñòðîåíà ïîääåðæêà êóðñîðà íå òîëüêî íà ñòîðîíå êëèåíòà, íî è íà ñåðâåðíîé ñòîðîíå. Ýòî ïîçâîëèëî èçáàâèòüñÿ îò îñíîâíîãî íåäîñòàòêà
10.3. Èíòåãðàöèÿ ñ ADO.NET
243
ADO.NET ïî ñðàâíåíèþ ñ ADO.  ïðåäûäóùèõ âåðñèÿõ ADO.NET òðåáîâàëîñü îòñëåæèâàòü îáðàùåíèÿ ê áàçå äàííûõ íà êëèåíòñêîé ñòîðîíå ïðèëîæåíèÿ.  íåêîòîðûõ ñëó÷àÿõ ýòî äîñòàâëÿëî íåóäîáñòâà ïðè ðàçðàáîòêå ñëîæíûõ ïðèëîæåíèé, ðàáîòàþùèõ ñ áîëüøèì êîëè÷åñòâîì òàáëèö è íàáîðîâ äàííûõ. Òåïåðü îòñëåæèâàíèå êóðñîðîâ ìîæíî âîçëîæèòü íà ñåðâåðíóþ ÷àñòü ïðèëîæåíèÿ, ÷òî íå òîëüêî óïðîùàåò ñîçäàíèå ïðèëîæåíèÿ, íî è äåëàåò êëèåíòñêóþ ÷àñòü áîëåå «ëåãêîé». Äîáàâëåíèå ýòîé âîçìîæíîñòè â ïåðâóþ î÷åðåäü îáóñëîâëåíî ïîÿâëåíèåì íîâîãî ïðîâàéäåðà äàííûõ .NET Data Provider. Êðîìå òîãî, íåîáõîäèìîñòü áûñòðîãî ïðîõîäà ïî íàáîðó äàííûõ, êîòîðûå èìåþò äîñòàòî÷íî êîðîòêîå âðåìÿ æèçíè, òðåáóåò ïåðåíåñòè ôóíêöèîíàëüíîñòü óïðàâëåíèÿ êóðñîðîì íà ñåðâåðíóþ ñòîðîíó. Ïðè ýòîì â ïîäîáíûõ ïðèëîæåíèÿõ ëèáî íå òðåáóåòñÿ ó÷àñòèÿ ïîëüçîâàòåëÿ, ëèáî òðåáóåòñÿ åãî ìèíèìàëüíîå ó÷àñòèå.  êà÷åñòâå ïðèìåðà ïîäîáíîé ñèñòåìû ìîæíî ïðèâåñòè áèëëèíãîâóþ ñèñòåìó ìîáèëüíîãî îïåðàòîðà. Òàáëèöû âûïîëíåííûõ çâîíêîâ èëè î÷åðåäè ê àãåíòàì ñëóæáû ïîääåðæêè ïîñòîÿííî ïîïîëíÿþòñÿ, à àíàëèòèêà èõ ïîïîëíåíèÿ äîëæíà âûâîäèòü íà ýêðàíû â ðåàëüíîì ðåæèìå âðåìåíè. Äëÿ ýòîãî ïðîùå ðåàëèçîâàòü ïðèëîæåíèÿ ñ èñïîëüçîâàíèåì ñåðâåðíîãî êóðñîðà, ÷åì êóðñîðà íà ñòîðîíå êëèåíòà. Îäíàêî ïåðåíîñ êóðñîðà íà ñòîðîíó ñåðâåðà èìååò îäèí äîñòàòî÷íî áîëüøîé íåäîñòàòîê — ýòî óìåíüøåíèå ãèáêîñòè ìíîãèõ ïðèëîæåíèé.  ýòîì ñëó÷àå ðàçðàáîò÷èêàì íåîáõîäèìî âûáèðàòü ìåæäó ñêîðîñòüþ ðàáîòû è ãèáêîñòüþ ïðèëîæåíèÿ. Îáëàñòè äëÿ õðàíåíèÿ èíôîðìàöèè î ñåðâåðíûõ êóðñîðàõ System.Data.SqlServer è êóðñîðàõ íà ñòîðîíå êëèåíòà System.Data.SqlClient íå çàâèñÿò äðóã îò äðóãà, ÷òî ïîçâîëÿåò ðàçðàáàòûâàòü ñëîæíûå ïðèëîæåíèÿ, ñîäåðæàùèå êóðñîðû êàê íà êëèåíòñêîé, òàê è íà ñåðâåðíîé ñòîðîíå.  íîâîé âåðñèè ADO.NET äëÿ ðàáîòû ñ êóðñîðîì èñïîëüçóåòñÿ îáúåêò SqIResultSet. Îí ïîçâîëÿåò âñòðàèâàòü ìåõàíèçìû ðàáîòû ñ ñåðâåðíûìè êóðñîðàìè â êëèåíòñêèå ïðèëîæåíèÿ, âûïîëíÿòü äèíàìè÷åñêîå îáíîâëåíèå è èçìåíåíèå çíà÷åíèÿ êóðñîðà. Ñîçäàíèå ñåðâåðíûõ êóðñîðîâ âûïîëíÿåòñÿ ñ ïîìîùüþ âûçîâà ìåòîäà ExecuteResultSet, êîòîðûé ïðèíàäëåæèò îáúåêòó System.Data. SqlServer.SqlCommand.  ñëåäóþùåì ïðèìåðå (ëèñòèíã 10.8) ìû ðàññìîòðèì èñïîëüçîâàíèå îáúåêòà SqIResultSet. Ëèñòèíã 10.8. Èñïîëüçîâàíèå ôóíêöèîíàëüíîñòè îáúåêòà SqIResultSet using using using using using
System; System.Data; System.Data.Sql; System.Data.SqlServer; System.Data.SqlTypes;
public partial class ExampleProcedures { [SqlProcedure] public static void ExampleClass() { SqlPipe ExamplePipe = SqlContext.GetPipe(), ExamplePipe.Send("ExampleClass: îòêðûâàåì ñåðâåðíûé êóðñîð"); SqlCommand and = SqlContext.GetCommand(); cmd.CommandType = CommandType.Text;
ïðîäîëæåíèå
È
244
Ãëàâà 10 • Ïðîãðàììèðîâàíèå äëÿ SQL Server
Ëèñòèíã 10.8 (ïðîäîëæåíèå) and.CommandText = "SELECT ProductName FROM Table1 WHERE FlagID = 2"; SqIResultSet resultset = cmd.ExecuteResultSet (ResultSetOptions.Scrollable | ResultSetOptions.Updatable); if (resultset.HasRows = = true) { while {resultset.Read()) { ExamplePipe.Send(resultset.GetString(0)); } resultset.Close(); } ExamplePipe.Send("ExampleClass: çàêðûâàåì ñåðâåðíûé êóðñîð"); } };
 äàííîì ïðèìåðå ñîçäàåòñÿ íîâàÿ õðàíèìàÿ ïðîöåäóðà ExampleClass. Âî âðåìÿ ñîçäàíèÿ ïðîöåäóðû èñïîëüçóåòñÿ îáúåêò SqlPipe, êîòîðûé îòïðàâëÿåò ïîëüçîâàòåëþ ñîîáùåíèÿ î õîäå ñîçäàíèÿ íîâîãî êëàññà. Ïîñëå ýòîãî èíèöèàëèçèðóåòñÿ îáúåêò SqlCommand, êîòîðûé áóäåò â äàëüíåéøåì èñïîëüçîâàòüñÿ äëÿ ïîëó÷åíèÿ ñîäåðæèìîãî êîëîíêè ProductName èç òàáëèöû Table1 (ïðè ýòîì ïðîâåðÿåòñÿ óñëîâèå íà ðàâåíñòâî FlagID = 2). Ïîñëå ýòîãî ñîçäàåòñÿ îáúåêò SqlResultSet. Ïî îêîí÷àíèè ýòèõ äåéñòâèé ñîçäàåòñÿ ñåðâåðíûé êóðñîð ñ ïîìîùüþ ìåòîäà ExecuteResultSet.  äàííîì ñëó÷àå ñîçäàåòñÿ êóðñîð, êîòîðûé ìîæíî èñïîëüçîâàòü äëÿ ïåðåìåùåíèÿ ïî òàáëèöå è åå îáíîâëåíèÿ. Ïîñëå òîãî êàê íîâûé êóðñîð ñîçäàí, ïðèëîæåíèå ìîæåò ïåðåìåùàòü åãî ïî òàáëèöå è âûïîëíÿòü îáíîâëåíèå äàííûõ. Ïðè ýòîì ñåðâåðíûé êóðñîð áóäåò ñîõðàíÿòü çíà÷åíèå. Ïðè îòñóòñòâèè íåîáõîäèìîñòè â êóðñîðå âûïîëíÿåì åãî çàêðûòèå.
10.3.2. Ïîääåðæêà àñèíõðîííîñòè  SQL Server 2005 ïîääåðæèâàåòñÿ òàêæå íàáîð àñèíõðîííûõ çàïðîñîâ ADO.NET. Àñèíõðîííûå çàïðîñû ïðåäîñòàâëÿþò êëèåíòñêèì ïðèëîæåíèÿì âîçìîæíîñòü îòïðàâëÿòü çàïðîñû íà âûïîëíåíèå SQL Server áåç áëîêèðîâêè ïîëüçîâàòåëüñêîãî èíòåðôåéñà. Ïðè èñïîëüçîâàíèè ADO.NET ïðèëîæåíèå ðàçáèâàåò ïîäîáíûå çàïðîñû íà îòäåëüíûå ïîòîêè (threads). Ïðè ýòîì âûïîëíåíèå îòäåëüíîãî ïîòîêà íå áëîêèðóåò âûïîëíåíèå äðóãèõ ïîòîêîâ SQL Server. Çà ñ÷åò ïåðåíîñà ìåõàíèçìà îòñëåæèâàíèÿ àñèíõðîííîãî âûïîëíåíèÿ çàïðîñîâ íà ñòîðîíó ïðîìåæóòî÷íîãî ïðîãðàììíîãî îáåñïå÷åíèÿ ìîæíî äîáèòüñÿ òîãî, ÷òî äàííûé ìåõàíèçì áóäåò ðàáîòàòü äàæå íà ïðåäûäóùèõ âåðñèÿõ SQL Server.  SQL Server 2005 ïîääåðæèâàåòñÿ âûïîëíåíèå àñèíõðîííûõ çàïðîñîâ êàê äëÿ îòêðûòèÿ ñîåäèíåíèÿ, òàê è äëÿ âûïîëíåíèÿ íàáîðà êîìàíä. Ìåõàíèçìû ïîääåðæêè àñèíõðîííîãî âûïîëíåíèÿ êîìàíä òàêæå âñòðîåíû â .NET Framework. Äëÿ âûïîëíåíèÿ àñèíõðîííîé îïåðàöèè èñïîëüçóåòñÿ îáúåêòíûé ìåòîä BEGINxxx. Çàâåðøàåòñÿ âûïîëíåíèå àñèíõðîííîãî çàïðîñà ñ ïîìîùüþ ìåòîäà ENDxxx. Äëÿ ïðîâåðêè ðåçóëüòàòîâ âûïîëíåíèÿ êîìàíäû â ðåçóëüòàòå àñèíõðîííîãî çàïðîñà èñïîëüçóåòñÿ îáúåêò IAsyncResult (ëèñòèíã 10.9).
10.3. Èíòåãðàöèÿ ñ ADO.NET
245
Ëèñòèíã 10.9. Ïðèìåð èñïîëüçîâàíèÿ îáúåêòà IAsyncResult SqlConnection cn = new SqlConnection ("SERVER=Server1;INTEGRATED SECURITY=True;" + "DATABASE= DataBase1;async=True"); SqlCommand cmd = new SqlCommand("SELECT * FROM Table1", cn); CommandType = CommandType.Text; try { cn.Open(); IAsyncResult ExampleResult = cmd.BeginExecuteReader(); while (!ExampleResult.IsCompleted) { // Âûïîëíåíèå äðóãèõ îïåðàöèé } SqlDataReader rdr = cmd.EndExecuteReader(ExampleResult); rdr.Close(); } } catch (Exception exept1) { MessageBox.Show(exept1.Message); } finally { cn.Close(); }
 ïðîöåññå ðåàëèçàöèè àñèíõðîííîãî âûïîëíåíèÿ çàïðîñîâ èñïîëüçóåòñÿ ïðîñòðàíñòâî èìåí System.Data.SqlClient. Îáðàòèòå âíèìàíèå, ÷òî ïðèìåð ñîäåðæèò ñòðîêó äëÿ ñîåäèíåíèÿ ñ áàçîé äàííûõ. Äëÿ ïîääåðæêè àñèíõðîííîãî âûïîëíåíèÿ çàïðîñîâ ñòðîêà ñîåäèíåíèÿ äîëæíà ñîäåðæàòü êîìàíäó ASYNC=true, êàê ïîêàçàíî â ïðèìåðå. Ïîìèìî ýòîãî îáðàùåíèå ê îáúåêòó IAsynchResult ïðîèñõîäèò âíóòðè áëîêà TRY. Äëÿ âûïîëíåíèÿ àñèíõðîííûõ çàïðîñîâ èñïîëüçóåòñÿ ìåòîä BeginExecuteReader îáúåêòà SqlCommand. Ïðèëîæåíèå íå îæèäàåò îêîí÷àíèÿ âûïîëíåíèÿ çàïðîñà. Ïîñëå òîãî êàê çàïðîñ íà÷àë âûïîëíÿòüñÿ âíóòðè ñòðóêòóðû WHILE, ñðàçó ïðîâåðÿåòñÿ ñîñòîÿíèå îáúåêòà IAsyncResult. Ïîñëå çàâåðøåíèÿ âûïîëíåíèÿ êîìàíäû ñâîéñòâî IsCompleted áóäåò óñòàíîâëåíî â true.
10.3.3. Ïîääåðæêà MARS Åùå îäíèì ïðåèìóùåñòâîì, êîòîðîå ïîÿâèëîñü â ADO.NET, ÿâëÿåòñÿ ïîääåðæêà íåñêîëüêèõ íàáîðîâ àêòèâíûõ ðåçóëüòàòîâ (MARS — Multiple Active Result Sets).  ïðåäûäóùèõ âåðñèÿõ SQL Server ïðèëîæåíèÿ áûëè îãðàíè÷åíû òîëüêî îäíèì íàáîðîì àêòèâíûõ ðåçóëüòàòîâ.  ýòîì îòíîøåíèè ïðèëîæåíèÿ, èñïîëüçîâàâøèå òåõíîëîãèè ADO è OLE DB, ìîãëè äàòü ôîðó ADO.NET, ïîñêîëüêó îíè ìîãëè ðàáîòàòü îäíîâðåìåííî ñ íåñêîëüêèìè íàáîðàìè àêòèâíûõ ðåçóëüòàòîâ. Ïðè ýòîì äëÿ òîãî, ÷òîáû âûïîëíèòü äîïîëíèòåëüíóþ êîìàíäó, äîñòàòî÷íî áûëî óñòàíîâèòü äîïîëíèòåëüíîå ñîåäèíåíèå ñ áàçîé äàííûõ.
246
Ãëàâà 10 • Ïðîãðàììèðîâàíèå äëÿ SQL Server
 íîâîé âåðñèè SQL Server ôóíêöèè òåõíîëîãèè MARS çíà÷èòåëüíî ðàñøèðåíû. Òåïåðü ìîæíî âûïîëíÿòü íåñêîëüêî êîìàíä, èñïîëüçóÿ ïðè ýòîì îòäåëüíîå ñîåäèíåíèå. Ïðè èñïîëüçîâàíèè äàííîé ìîäåëè îòêðûâàåòñÿ ñîåäèíåíèå ñ áàçîé äàííûõ, çàòåì âûïîëíÿåòñÿ ïåðâàÿ êîìàíäà è îáðàáàòûâàþòñÿ ðåçóëüòàòû åå âûïîëíåíèÿ. Ïîñëå ýòîãî ìîæíî âûïîëíèòü âòîðóþ êîìàíäó è îáðàáîòàòü ðåçóëüòàòû åå âûïîëíåíèÿ. Äàëåå ìîæíî ïðîäîëæèòü âûïîëíåíèå ïåðâîé êîìàíäû è ñíîâà îáðàáîòàòü äîïîëíèòåëüíûé íàáîð ðåçóëüòàòîâ. Òàêîé ïîäõîä ïîçâîëÿåò ðåàëèçîâàòü ãèáêèå ïðèëîæåíèÿ, îáåñïå÷èâàþùèå ïàðàëëåëüíîå âûïîëíåíèå ïðîöåññîâ, â êîòîðûõ ó÷àñòâóþò äàííûå èç áàçû. Ïðè ýòîì ïåðåêëþ÷åíèå ìåæäó îòäåëüíûìè êîìàíäàìè è ðåçóëüòàòàìè èõ îáðàáîòêè ïðàêòè÷åñêè íå îãðàíè÷åíî. Âî âðåìÿ ïåðåêëþ÷åíèÿ ìåæäó êîìàíäàìè íå âûïîëíÿåòñÿ èõ áëîêèðîâêà, íåñêîëüêî êîìàíä ñîâìåñòíî èñïîëüçóþò îäíî ñîåäèíåíèå. Ðàññìîòðèì èñïîëüçîâàíèå MARS íà ñëåäóþùåì ïðèìåðå (ëèñòèíã 10.10). Ëèñòèíã 10.10. Ðàáîòà ñ íåñêîëüêèìè íàáîðàìè àêòèâíûõ ðåçóëüòàòîâ SqlConnection cn = new SqlConnection ("SERVER=Server1;INTEGRATED SECURITY=True;" + "DATABASE=DataBase1"); SqlCommand cmd1 = new SqlCommand("SELECT * FROM Table1", cn); cmdl.CommandType = CommandType.Text; try { cn.Open(); SqlDataReader rdr = cmdl.ExecuteReader(); while (rdr.Read()) { if (rdr["ProdID"].ToString() = = "100") { SqlCommand cmd2 = new SqlCommand ("SELECT * FROM Table2", cn); cmd2.CommandType = CommandType.Text; SqlDataReader rdr2 = cmd2.ExecuteReader(); while (rdr2.Read()) { // Îáðàáîòêà ðåçóëüòàòîâ } rdr2.Close(); } } rdr.Close(); } catch (Exception exept) { MessageBox.Show(exept.Message); } finally { cn.Close(); }
 äàííîì ñëó÷àå êîìàíäû cmd1 è cmd2 èñïîëüçóþò ñîåäèíåíèå ïîä íàçâàíèåì cn. Ïðè ýòîì ïåðâàÿ êîìàíäà èñïîëüçóåòñÿ äëÿ ÷òåíèÿ ñòðîê òàáëèöû Table1, à
10.3. Èíòåãðàöèÿ ñ ADO.NET
247
âòîðàÿ — äëÿ ÷òåíèÿ âñåõ ñòðîê òàáëèöû Table2. Êàê òîëüêî áóäåò âûïîëíåíî ÷òåíèå ñòðîêè ïåðâîé òàáëèöû ñ ProdID=100, íà÷íåòñÿ âûïîëíåíèå âòîðîé êîìàíäû cmd2. Îáðàòèòå âíèìàíèå, ÷òî îáå êîìàíäû ñîâìåñòíî èñïîëüçóþò îäíî ñîåäèíåíèå cn.
10.3.4. Ðàçáèâêà íà ñòðàíèöû Ðàçáèâêà íà ñòðàíèöû — ýòî åùå îäèí ìåõàíèçì, êîòîðûé ïîÿâèëñÿ â ïîñëåäíåé âåðñèè SQL Server. Ðàçáèâêà íà ñòðàíèöû âñåãäà âûçûâàëà ïðîáëåìû ó ðàçðàáîò÷èêîâ êëèåíòñêèõ ïðèëîæåíèé. Èìåííî ïîýòîìó â íîâóþ âåðñèþ ADO.NET âñòðîåí ìåõàíèçì ðàçáèâêè íàáîðà äàííûõ íà ñòðàíèöû. Òåïåðü ñ åãî ïîìîùüþ ìîæíî âûïîëíÿòü ëîãè÷åñêîå ñâÿçûâàíèå ñòðîê òàáëèöû â îïðåäåëåííûå íàáîðû (òàê íàçûâàåìûå ñòðàíèöû). Äëÿ ïðåäîñòàâëåíèÿ áîëüøåé ãèáêîñòè ðàçðàáàòûâàåìûì ïðèëîæåíèÿì ñâÿçûâàíèå íå ñîõðàíÿåòñÿ íà ñåðâåðå. Ýòî òàêæå îçíà÷àåò, ÷òî îïðåäåëåííûå ñòðîêè ìîæíî ñâÿçûâàòü ñ òîé èëè èíîé ñòðàíèöåé âî âðåìÿ âûïîëíåíèÿ ïðèëîæåíèÿ. Íîâûé ìåõàíèçì ñâÿçûâàíèÿ ñòðîê â ñòðàíèöû áîëüøå âñåãî ïîäõîäèò äëÿ ðàçðàáîòêè ïðèëîæåíèé, èñïîëüçóþùèõ ïîñòîÿííûå èëè ðåäêî èçìåíÿåìûå íàáîðû äàííûõ (íàïðèìåð, èíôîðìàöèþ î ñîòðóäíèêàõ êîìïàíèè). Äëÿ òîãî ÷òîáû âêëþ÷èòü îïðåäåëåííûå ñòðîêè â ñòðàíèöó, íåîáõîäèìî îïðåäåëèòü ïåðâóþ ñòðîêó, à òàêæå êîëè÷åñòâî ñòðîê òàáëèöû, êîòîðûå áóäóò âêëþ÷åíû â ñòðàíèöó. ×òåíèå ñòðîê âûïîëíÿåòñÿ ñ ïîìîùüþ ñòàíäàðòíîãî îáúåêòà DataReader.  ñëåäóþùåì ïðèìåðå ìû ðàññìîòðèì âîçìîæíîñòü ñâÿçûâàíèÿ íàáîðà ñòðîê â ñòðàíèöû ADO.NET (ëèñòèíã 10.11). Ëèñòèíã 10.11. Ïðèìåð èñïîëüçîâàíèÿ ìåõàíèçìà ðàçáèâêè íà ñòðàíèöû private SglDataReader TableToPages(int FirstRow, int Quantity) { SqlConnection cn = new SqlConnection ("SERVER=Server1;INTEGRATED SECURITY=True;" + "DATABASE=DataBase1"); SqlCommand cmd = new SqlCommand("SELECT * FROM Table1", cn); cmd.CommandType = CommandType.Text; cn.Open(); return cmd.ExecutePageReader(CommandBehavior.Default, FirstRow, Quantity); }
 äàííîì ïðèìåðå ðàññìàòðèâàåòñÿ èñïîëüçîâàíèå ìåòîäà TableToPages, â êà÷åñòâå ïàðàìåòðîâ êîòîðîìó ïåðåäàþòñÿ ïåðâàÿ ñòðîêà äëÿ ñîçäàíèÿ ñòðàíèöû (FirstRow) è êîëè÷åñòâî ñòðîê, êîòîðûå âîéäóò â ñîñòàâ äàííîé ñòðàíèöû (Quantity). Ìåòîä âîçâðàùàåò îáúåêò ADO.NET SqlDataReader.  ïðîöåññå ðàáîòû ìåòîäà ñîçäàþòñÿ äâà îáúåêòà SqlConnection è SqlCommand. Ïåðâûé èñïîëüçóåòñÿ äëÿ ñîçäàíèÿ ñîåäèíåíèÿ, à âòîðîé — äëÿ ðàáîòû ñ ìåòîäîì ExecutePageReader, êîòîðûé ïåðåäàñò èíôîðìàöèþ î ðåçóëüòàòàõ ðàçáèâêè íà ñòðàíèöû. Âî âðåìÿ âîçâðàùåíèÿ ðåçóëüòàòîâ ñ ïîìîùüþ ìåòîäà ExecutePageReader èñïîëüçóåòñÿ ñ÷åò÷èê CommandBehaviorDefault, êîòîðûé ïåðåäàåò îáúåêòó SqlCommand èíôîðìàöèþ î òîì, êàê íåîáõîäèìî óïðàâëÿòü ñîåäèíåíèåì ïîñëå çàâåðøåíèÿ îïåðàöèè ðàçáèâêè íà ñòðàíèöû. Ñëåäóþùèì ïàðàìåòðîì âûïîëíåíèÿ ìåòîäà
248
Ãëàâà 10 • Ïðîãðàììèðîâàíèå äëÿ SQL Server
ExecutePageReader ÿâëÿåòñÿ ñòðîêà òàáëèöû, ñ êîòîðîé áóäåò íà÷èíàòüñÿ ñòðàíèöà. È íàêîíåö, ïîñëåäíèì àðãóìåíòîì ÿâëÿåòñÿ êîëè÷åñòâî ñòðîê, âõîäÿùèõ â ñîñòàâ ñòðàíèöû. ×òåíèå ñîäåðæèìîãî ñòðàíèöû èëëþñòðèðóåò ñëåäóþùèé ïðèìåð: DataTable DataTable1 = new DataTable("Table1"); DataTable1.Load (TableToPages (1, 50));
 äàííîì ïðèìåðå ñîçäàåòñÿ îáúåêò DataTable, ïîñëå ÷åãî âûçûâàåòñÿ ìåòîä TableToPages, êîòîðûé ïîìåùàåò â òàáëèöó ñòðîêè ñ ïåðâîé ïî ïÿòèäåñÿòóþ.
10.3.5. Îáìåí îáúåêòàìè  ADO.NET 2.0 ïîÿâèëñÿ íîâûé îáúåêò SqlBulkCopy. Äàííûé îáúåêò ïðåäîñòàâëÿåò ðàçðàáîò÷èêàì âîçìîæíîñòü îáìåíà îáúåêòàìè ìåæäó îòäåëüíûìè áàçàìè äàííûõ èëè îòäåëüíûìè ñèñòåìàìè íà îñíîâå SQL Server 2005. Ïðè ýòîì ïåðåäà÷à âûïîëíÿåòñÿ äîñòàòî÷íî áûñòðî çà ñ÷åò óñîâåðøåíñòâîâàííîãî ìåõàíèçìà îáìåíà äàííûìè. Ðàññìîòðèì èñïîëüçîâàíèå íîâîãî îáúåêòà íà ïðèìåðå (ëèñòèíã 10.12). Ëèñòèíã 10.12. Ïðèìåð èñïîëüçîâàíèÿ îáúåêòà SqlBulkCopy SqlConnection cn1 = new SqlConnection ("SERVER=Server1;INTEGRATED SECURITY=True;" + "DATABASE=DataBase1"); SqlConnection cn2 = new SqlConnection ("SERVER=Server2;INTEGRATED SECURITY=True;" + "DATABASE= DataBase2"); cn1.Open(); cn2.Open(); sqlCommand cmd = new SqlCommand ("SELECT * FROM Table1", cn1); SglDataReader rdr = cmd. ExecuteReader(); SqlBulkCopy BD = new SqlBulkCopy(cn2); boulkData.DestinationTableName = "table2"; BD.WriteToServer (rdr); BD.Close(); cn1.Close(); cn2.Close ();
 äàííîì ïðèìåðå ñíà÷àëà ñîçäàþòñÿ äâà ñîåäèíåíèÿ cn1 è cn2. Ïðè ýòîì îäíî ñîåäèíåíèå ññûëàåòñÿ íà áàçó äàííûõ DataBase1 ñåðâåðà Server1, à âòîðîå — íà áàçó DataBase2 ñåðâåðà Server2. Îáà ñîåäèíåíèÿ îòêðûâàþòñÿ äëÿ îáìåíà äàííûìè. Ïîñëå ýòîãî ñîçäàåòñÿ è èñïîëüçóåòñÿ îáúåêò SqlDataReader äëÿ ÷òåíèÿ äàííûõ èç ïåðâîé òàáëèöû. Äàëåå ñîçäàåòñÿ îáúåêò SqlBulkCopy, êîòîðûé ñâÿçûâàåòñÿ ñ òàáëèöåé Table2 â áàçå äàííûõ DataBase2. Çàòåì âûçûâàåòñÿ ìåòîä WriteToServer, êîòîðûé êîïèðóåò äàííûå èç èñòî÷íèêà (òàáëèöû Table1) â òàáëèöó-ïîëó÷àòåëü Table2. Ïðè íåîáõîäèìîñòè ìîæíî âîñïîëüçîâàòüñÿ äðóãèìè ìåòîäàìè îáúåêòà SqlBulkCopy äëÿ òîãî, ÷òîáû âûïîëíèòü ïðåîáðàçîâàíèå äàííûõ.
10.3. Èíòåãðàöèÿ ñ ADO.NET
249
10.3.6. Îáùàÿ ìîäåëü ñîåäèíåíèÿ Îäíîé èç îñíîâíûõ ïðîáëåì ïðåäûäóùåé âåðñèè ADO.NET ÿâëÿåòñÿ òî, ÷òî äëÿ óñòàíîâëåíèÿ ñîåäèíåíèÿ îïðåäåëåííîãî òèïà èñïîëüçîâàëñÿ ñîáñòâåííûé ïðîâàéäåð. Ýòî óñëîæíÿëî ñîçäàíèå ñëîæíûõ ïðèëîæåíèé, â êîòîðûõ èñïîëüçîâàëèñü ñîåäèíåíèÿ ðàçëè÷íûõ òèïîâ. Ñòàíäàðòèçàöèÿ ïðîâàéäåðîâ ìîãëà áû çíà÷èòåëüíî óïðîñòèòü ðàçðàáîòêó ïîäîáíûõ ïðèëîæåíèé. Íàïðèìåð, â ïðåäûäóùèõ âåðñèÿõ ADO.NET ñîåäèíåíèå ñ ñèñòåìàìè íà îñíîâå SQL Server îñóùåñòâëÿëîñü ñ ïîìîùüþ ïðîâàéäåðà SqlClient. Ýòîò ïðîâàéäåð íå ìîã èñïîëüçîâàòüñÿ äëÿ ÷òåíèÿ äàííûõ èç áàç äàííûõ Access èëè Oracle. Äëÿ ñîåäèíåíèÿ ñ áàçàìè íà îñíîâå Oracle áûë ïðåäíàçíà÷åí ïðîâàéäåð OracleClient, êîòîðûé ìîã ðàáîòàòü òîëüêî äëÿ ñîåäèíåíèÿ ñ áàçàìè äàííûõ íà îñíîâå Oracle è íèêàêèìè äðóãèìè.  íîâîé âåðñèè ADO.NET âñòðîåíà íîâàÿ âîçìîæíîñòü ðàáîòû ñ íàáîðîì ïðîâàéäåðîâ Provider Factory. Ýòî îçíà÷àåò, ÷òî âî âðåìÿ ñîåäèíåíèÿ ñ âíåøíèì èñòî÷íèêîì äàííûõ â àâòîìàòè÷åñêîì ðåæèìå ïîäáèðàåòñÿ ïðîâàéäåð, ïðåäíàçíà÷åííûé èìåííî äëÿ äàííîãî ñîåäèíåíèÿ. Ðàññìîòðèì èñïîëüçîâàíèå íàáîðà ïðîâàéäåðîâ ñîåäèíåíèé íà ïðèìåðå (ëèñòèíã 10.13). Ëèñòèíã 10.13. Àâòîìàòè÷åñêîå èñïîëüçîâàíèå ïðîâàéäåðà äàííûõ DbDataReader rdr; DbProviderFactory provider = DbProviderFactories.GetFactory("System.Data.SqlClient"); using (DbDisconnection cn = provider.CreateConnection()) { using (DbCommand cmd = provider.CreateCommand()) { cmd.CommandText = "SELECT * FROM Table1"; cmd.Connection = cn; cn.ConnectionString = ("SERVER=Server1;INTEGRATED SECURITY=True;" + "DATABASE=DataBase1"); cn.Open(); rdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); DataTable DataTable1 = new DataTable("DataTable1"); DataTable1.Load(rdr); } }
 äàííîì ïðèìåðå èñïîëüçóåòñÿ ìåòîä GetFactory, êîòîðûé ñîçäàåò îòäåëüíûé ýêçåìïëÿð ïðîâàéäåðà System.Data.SqlClient âî âðåìÿ óñòàíîâëåíèÿ ñîåäèíåíèÿ. Ïîñëå ýòîãî èñïîëüçóåòñÿ îáúåêò DbCommand äëÿ ñ÷èòûâàíèÿ äàííûõ èç òàáëèöû Table1.  êîíöå âûïîëíÿåòñÿ çàãðóçêà ðåçóëüòàòîâ â DataTable.
ßçûê XML è SQL Server
11
ßçûê XML (eXtensible Markup Language) â íàñòîÿùèé ìîìåíò ÿâëÿåòñÿ îäíèì èç íàèáîëåå ÷àñòî èñïîëüçóåìûõ ÿçûêîâ ðàçðàáîòêè âåá-ïðèëîæåíèé äëÿ Èíòåðíåòà. Îäíàêî åãî èñïîëüçîâàíèå íå îãðàíè÷èâàåòñÿ ñîçäàíèåì ïðèëîæåíèé òîëüêî äëÿ Èíòåðíåòà. XML èñïîëüçóåòñÿ äëÿ ðåøåíèÿ äðóãèõ âàæíûõ çàäà÷ âî ìíîãèõ îáëàñòÿõ, â êîòîðûõ âûïîëíÿåòñÿ ìàíèïóëèðîâàíèå äàííûìè, ñîõðàíåíèå ïîëüçîâàòåëüñêèõ íàñòðîåê è ñòðóêòóðèðîâàíèå ðàçíîðîäíîé èíôîðìàöèè. Áëàãîäàðÿ ñâîåé ñòðóêòóðå XML âñå ÷àùå èñïîëüçóåòñÿ äëÿ õðàíåíèÿ äàííûõ, èõ êàòåãîðèçàöèè è êàòàëîãèçàöèè.  ïðåäûäóùèõ âåðñèÿõ SQL Server ìîæíî áûëî õðàíèòü XML-ôàéëû â áàçå äàííûõ, îäíàêî äëÿ ýòîãî íå ñóùåñòâîâàëî ñïåöèàëüíîãî ìåõàíèçìà.  íîâîé âåðñèè SQL Server ðàáîòà ñ XML çíà÷èòåëüíî óñèëåíà çà ñ÷åò ïîÿâëåíèÿ íîâîãî òèïà äàííûõ, êîòîðûé íîñèò íàçâàíèå XML. Êàê è ðàíåå, XML èñïîëüçóåòñÿ â SQL Server äëÿ ðåøåíèÿ ðàçëè÷íûõ çàäà÷, íà÷èíàÿ îò ïåðåäà÷è äàííûõ è äîêóìåíòîâ è çàêàí÷èâàÿ ðîëüþ ïðîìåæóòî÷íîé ñðåäû ïåðåäà÷è äàííûõ ïî ïðîòîêîëó SOAP (Simple Object Access Protocol). Îäíàêî íîâûå ìåõàíèçìû, âñòðîåííûå â SQL Server 2005, äîëæíû ïðåäîñòàâëÿòü ðàçðàáîò÷èêàì, â ïåðâóþ î÷åðåäü, íîâûå âîçìîæíîñòè îáðàáîòêè è õðàíåíèÿ äàííûõ â SQL Server 2005 ñ èñïîëüçîâàíèåì íîâîãî òèïà. Ïîääåðæêà XML âïåðâûå ïîÿâèëàñü â SQL Server 2000.  ýòîì ïðîãðàììíîì ïðîäóêòå âïåðâûå ïîÿâèëàñü êîìàíäà FOR XML, êîòîðàÿ èñïîëüçîâàëàñü âìåñòå ñ êîìàíäîé SELECT. Òàêæå â SQL Server 2000 âïåðâûå ïîÿâèëñÿ íàáîð ôóíêöèé äëÿ ðàáîòû ñ XML-äîêóìåíòàìè è ìàíèïóëèðîâàíèÿ äàííûìè â ôîðìàòå XML. Ñ ðàçâèòèåì ñòàíäàðòà è åãî âñåîáùèì èñïîëüçîâàíèåì äëÿ ñîçäàíèÿ ïðèëîæåíèé, õðàíåíèÿ äàííûõ è èõ îáìåíà ïîÿâèëàñü íåîáõîäèìîñòü óñèëèòü ôóíêöèîíàëüíîñòü SQL Server â îòíîøåíèè ðàáîòû ñ XML. Äëÿ ýòîãî Microsoft ðàíåå âûïóñòèëà ïðèëîæåíèÿ äëÿ óëó÷øåíèÿ âîçìîæíîñòåé SQL Server 2000 â îòíîøåíèè ìàíèïóëèðîâàíèÿ äàííûìè XML. Äðóã çà äðóãîì âûøëè âåðñèè SQLXML. Ñ èõ âûõîäîì SQL Server 2000 ïîëó÷èë íîâûå âîçìîæíîñòè ìàíèïóëèðîâàíèÿ øàáëîíàìè â ôîðìàòàõ XML, îáìåíà XML-äàííûìè ìåæäó ðàçëè÷íûìè áàçàìè
11.1. Òèï äàííûõ XML
251
è òàáëèöàìè. Òàêæå äîáàâèëèñü âîçìîæíîñòè ñîçäàíèÿ XML-ïðåäñòàâëåíèé è ïåðåäà÷è äàííûõ ñ èñïîëüçîâàíèåì ïðîòîêîëà SOAP. Íåñìîòðÿ íà òî ÷òî áëàãîäàðÿ âûõîäó ïðîäóêòîâ ñ ïîääåðæêîé XML âîçìîæíîñòè SQL Server 2000 â îòíîøåíèè ðàáîòû ñ XML çàìåòíî óëó÷øèëèñü, îíè âñå åùå èìåëè çíà÷èòåëüíûå îãðàíè÷åíèÿ.  SQL Server 2000 õðàíåíèå XML-ôàéëîâ îñóùåñòâëÿëîñü ñ ïîìîùüþ òàêèõ òèïîâ, êàê image è text, ÷òî çíà÷èòåëüíî îãðàíè÷èâàëî âîçìîæíîñòè èñïîëüçîâàíèÿ äàííûõ XML-ôîðìàòà â ïðèëîæåíèÿõ. Ïðèìåðîì òàêîãî îãðàíè÷åíèÿ ìîæåò ÿâëÿòüñÿ îòñóòñòâèå âîçìîæíîñòè îòñëåæèâàíèÿ èåðàðõèè ñòðîåíèÿ XML-äîêóìåíòà áåç ïîìîùè T-SQL èëè äðóãèõ ïðîãðàìì, ñîçäàííûõ ñïåöèàëüíî äëÿ àíàëèçà õðàíèìûõ â SQL Server XML-ôàéëîâ.  íîâîé âåðñèè SQL Server ðàçðàáîò÷èêè ïîñòàðàëèñü ó÷åñòü âñå íåäîñòàòêè èñïîëüçîâàíèÿ äàííîé òåõíîëîãèè â SQL Server 2000 è çíà÷èòåëüíî ðàñøèðèëè ôóíêöèîíàëüíîñòü ýòîãî ïðîãðàììíîãî ïðîäóêòà. Òàêæå â SQL Server 2005 ïîÿâèëîñü íåñêîëüêî íîâûõ ìåõàíèçìîâ äëÿ ïîääåðæêè XML. Ê íèì â ïåðâóþ î÷åðåäü ñòîèò îòíåñòè íîâûé óðîâåíü õðàíåíèÿ XML è ðåëÿöèîííûõ äàííûõ. Ïîìèìî ýòîãî â SQL Server ïîÿâèëñÿ íîâûé òèï äàííûõ XML, êîòîðûé ïîääåðæèâàåò êàê XML-çàïðîñû, òàê è òèïèçàöèþ äàííûõ ñîãëàñíî ñâÿçàííîé ñõåìå XSD. Äëÿ äàííûõ â ôîðìàòå XML ïîääåðæèâàåòñÿ äâóíàïðàâëåííîå ñâÿçûâàíèå ìåæäó ðåëÿöèîííûìè äàííûìè è äàííûìè â ôîðìàòå XML. Ê íîâîââåäåíèì SQL Server 2005 ìîæíî îòíåñòè òàêæå âîçìîæíîñòü ñîçäàíèÿ è èñïîëüçîâàíèÿ XML-òðèããåðîâ. Òàêæå óëó÷øåíû âîçìîæíîñòè îáìåíà äàííûìè ìåæäó îòäåëüíûìè áàçàìè äàííûõ è òàáëèöàìè â ôîðìàòå XML.  äàííîé ãëàâå ìû áîëåå äåòàëüíî ðàññìîòðèì âîçìîæíîñòè íîâîé âåðñèè SQL Server â îòíîøåíèè ðàáîòû ñ XML-äàííûìè, ðàññìîòðèì íîâîââåäåíèÿ è óëó÷øåíèÿ, êîñíóâøèåñÿ ÿäðà è ìåõàíèçìîâ SQL Server 2005. Âíà÷àëå ìû ðàññìîòðèì íîâûé òèï äàííûõ XML è íîâûå ìåòîäû, ïîÿâèâøèåñÿ âìåñòå ñ íîâûì òèïîì. Êðîìå òîãî, â ýòîé ãëàâå áóäóò ðàññìîòðåíû óëó÷øåíèÿ, çàòðîíóâøèå êîìàíäû FOR XML è OPENXML, à òàêæå óëó÷øåíèÿ ïîääåðæêè ïðîòîêîëîâ SOAP, XMLA è íîâûõ çàïðîñîâ XQuery.
11.1. Òèï äàííûõ XML Íàèáîëåå âàæíûì óëó÷øåíèåì SQL Server â îòíîøåíèè ðàáîòû ñ XML-äàííûìè ÿâëÿåòñÿ ñîçäàíèå è ïîääåðæêà íà óðîâíå ÿäðà íîâîãî òèïà äàííûõ XML. Ýòîò òèï äàííûõ ìîæåò èñïîëüçîâàòüñÿ ïîäîáíî äðóãèì òèïàì äàííûõ, ïîääåðæêà êîòîðûõ âñòðîåíà â ÿäðî SQL Server. Èñïîëüçóÿ òèï XML, ìîæíî ñîçäàâàòü êîëîíêè, ïàðàìåòðû õðàíèìûõ ïðîöåäóð, ïîëüçîâàòåëüñêèõ ìåòîäîâ è ôóíêöèé, à òàêæå îïðåäåëÿòü ïåðåìåííûå ýòîãî ôîðìàòà. Òèï XML ìîæåò èñïîëüçîâàòüñÿ äëÿ õðàíåíèÿ êàê òèïèçèðîâàííûõ, òàê è íåòèïèçèðîâàííûõ äàííûõ. Ïîíÿòèå òèïèçèðîâàííûõ äàííûõ XML ïëîòíî ñâÿçàíî ñ èñïîëüçîâàíèåì XSD-ñõåì. Åñëè êîëîíêà ñ äàííûìè â ôîðìàòå XML íå ñâÿçàíà ñ îïðåäåëåííîé XSD-ñõåìîé, òî äàííûå, õðàíÿùèåñÿ â ýòîé êîëîíêå, íîñÿò íàçâàíèå íåòèïèçèðîâàííûõ.  ñëó÷àå ñóùåñòâîâàíèÿ ñâÿçè ìåæäó êîëîíêîé è XSD-ñõåìîé äàííûå ÿâëÿþòñÿ òèïèçèðîâàííûìè.
252
Ãëàâà 11 • ßçûê XML è SQL Server
Èíûìè ñëîâàìè, â ñëó÷àå ñóùåñòâîâàíèÿ XSD-ñõåìû SQL Server ìîæåò âûïîëíèòü ïðîâåðêó XML-ôàéëà íà åãî öåëîñòíîñòü ñîãëàñíî XSD-ñõåìå. SQL Server 2005 àâòîìàòè÷åñêè ïðîâåðÿåò ïðàâèëüíîñòü ôîðìèðîâàíèÿ XML-ôàéëà ïåðåä òåì, êàê ñîõðàíèòü åãî â áàçå äàííûõ. Åñëè XML-ôàéë ñôîðìèðîâàí ñ îøèáêàìè, òî áóäåò âûâåäåíî ñîîòâåòñòâóþùåå ñîîáùåíèå îá îøèáêå è äàííûå íå áóäóò ñîõðàíåíû â áàçå äàííûõ. Ìàêñèìàëüíûé îáúåì äàííûõ íå ìîæåò ïðåâûøàòü, êàê è â ñëó÷àå ñ òèïîì varbinary(max), 2 Ãáàéò. Ðàññìîòðèì ïðèìåð èñïîëüçîâàíèÿ íîâîãî òèïà äàííûõ XML ïðè ñîçäàíèè êîëîíêè òàáëèöû: CREATE TABLE ExampleXMLTable (CompanyID int, XmlCol xml)
 äàííîì ñëó÷àå ìû ñîçäàåì òàáëèöó, ñîäåðæàùóþ äâå êîëîíêè: CompanyID è XmlCol. Ïðè ýòîì ïåðâàÿ êîëîíêà èìååò òèï int, à âòîðàÿ — xml. Äëÿ òîãî ÷òîáû ñîõðàíèòü äàííûå â ïîäîáíîé òàáëèöå, ìîæíî èñïîëüçîâàòü ñòàíäàðòíûé îïåðàòîð INSERT. Ðàññìîòðèì ïðîöåññ âíåñåíèÿ äàííûõ â ïîäîáíóþ òàáëèöó ñ èñïîëüçîâàíèåì îïåðàòîðà INSERT: INSERT INTO ExampleXMLTable Values 100 (' l Brain Inc. l 000 000 Ukraine ')
11.1.1. Ñòàíäàðòíûé XML Ïîääåðæêà ñòàíäàðòíîãî XML ïîäðàçóìåâàåò, ÷òî äàííûå, êîòîðûå ñîõðàíÿþòñÿ â êîëîíêàõ XML-òèïà, ïðè ôîðìèðîâàíèè XML-ôàéëà áóäóò ïðîâåðåíû íà ïðàâèëüíîñòü. Îäíàêî ïðîâåðêà ìîæåò òàêæå âûïîëíÿòüñÿ ïî çàäàííîé XSD-ñõåìå, ÷òî ïîçâîëÿåò ïðîâåðèòü íå òîëüêî ñèíòàêñèñ XML-ôàéëà, íî è âûïîëíèòü åãî ëîãè÷åñêóþ ïðîâåðêó.  òîì ñëó÷àå, åñëè êîëîíêå ñ òèïîì XML ñîïîñòàâëåíà XSD-ñõåìà, SQL Server âî âðåìÿ âíåñåíèÿ äàííûõ àâòîìàòè÷åñêè ïðîâåðèò, ñîîòâåòñòâóþò ëè äàííûå XML-äîêóìåíòà òåì îïðåäåëåíèÿì, êîòîðûå îïèñàíû â XSD-ñõåìå. Ðàññìîòðèì XSD-ñõåìó, êîòîðàÿ èñïîëüçóåòñÿ äëÿ ôîðìèðîâàíèÿ XML-äîêóìåíòà, ðàññìîòðåííîãî íàìè â ïðåäûäóùåì ïðèìåðå (ëèñòèíã 11.1). Ëèñòèíã 11.1. XSD-ñõåìà äëÿ ôîðìèðîâàíèÿ XML-ôàéëà
11.1. Òèï äàííûõ XML
253
 äàííîì ñëó÷àå äëÿ ñõåìû îïðåäåëåíî èìÿ ExampleXMLSchema. Ñõåìà èñïîëüçóåòñÿ äëÿ îïèñàíèÿ ïàðàìåòðîâ äîêóìåíòà ñ èìåíåì ExampleXML. XSD-ñõåìà îïèñûâàåò ÷åòûðå òåãà XML-äîêóìåíòà.  êà÷åñòâå èìåí òåãîâ èñïîëüçóþòñÿ õàðàêòåðèñòèêè ãèïîòåòè÷åñêîé êîìïàíèè: CompanyID, CompanyName, CompanyIncome, CompanyCountry. Âñå ýëåìåíòû îòíîñÿòñÿ ê òåêñòîâîìó òèïó, íà ÷òî óêàçûâàåò äèðåêòèâà XSD-ôàéëà type="xs:string". Ïåðåä òåì êàê ïåðåéòè ê ñîçäàíèþ òèïèçèðîâàííîé ïåðåìåííîé èëè êîëîíêè òàáëèöû áàçû äàííûõ SQL Server, íåîáõîäèìî çàðåãèñòðèðîâàòü XSD-ñõåìó. Äëÿ ðåãèñòðàöèè XSD-ñõåìû èñïîëüçóåòñÿ êîìàíäà CREATE XML SCHEMA. Ðàññìîòðèì ñîçäàíèå XSD-ñõåìû íà ïðèìåðå (ëèñòèíã 11.2). Ëèñòèíã 11.2. Ïðèìåð èñïîëüçîâàíèÿ êîìàíäû CREATE XML SCHEMA CREATE XML SCHEMA COLLECTION ExampleXMLSchema AS '
'
 äàííîì ïðèìåðå ðàññìàòðèâàåòñÿ èñïîëüçîâàíèå DDL-êîìàíäû CREATE XML SCHEMA. Ïîñëå âûçîâà ýòîé êîìàíäû óêàçûâàåòñÿ íàèìåíîâàíèå ñõåìû.  äàííîì ñëó÷àå îíà íîñèò íàçâàíèå ExampleXMLSchema. Ïîñëå íàèìåíîâàíèÿ XSD-ñõåìû èñïîëüçóåòñÿ êîìàíäà AS, çà êîòîðîé ñëåäóåò òåêñò XSD-ôàéëà, çàêëþ÷åííûé â îäèíàðíûå êàâû÷êè. Ýòî ïîçâîëÿåò àíàëèçàòîðó ðàñïîçíàòü íà÷àëî è êîíåö ñõåìû. Åñëè ñõåìà ñîäåðæèò îøèáêè, òî â ïðîöåññå âûïîëíåíèÿ êîìàíäû CREATE XML SCHEMA áóäåò âûâåäåíî ñîîòâåòñòâóþùåå ñîîáùåíèå. Îáðàòèòå âíèìàíèå íà òî, ÷òî ñõåìà ìîæåò èñïîëüçîâàòüñÿ òîëüêî äëÿ òîé áàçû äàííûõ, äëÿ êîòîðîé îíà áûëà çàðåãèñòðèðîâàíà.  ñëó÷àå íåîáõîäèìîñòè ïåðåíåñòè ñõåìó â äðóãóþ ñèñòåìó âûïîëíèòå åå ïîâòîðíóþ ðåãèñòðàöèþ. Ïîñëå ðåãèñòðàöèè XSD-ñõåìû â áàçå äàííûõ SQL Server ìîæíî ïåðåéòè ê ýòàïó ñâÿçûâàíèÿ ðàíåå ñîçäàííûõ ïåðåìåííûõ è êîëîíîê, èìåþùèõ òèï XML, ñ çàðåãèñòðèðîâàííîé ñõåìîé. Ñâÿçûâàíèå ïåðåìåííûõ è êîëîíîê ñ XSD-ñõåìîé ïîçâîëÿåò çàäàòü ÷åòêîå ñîîòâåòñòâèå òåãîâ XML-äîêóìåíòà ñîîòâåòñòâóþùåé ñõåìå.
254
Ãëàâà 11 • ßçûê XML è SQL Server
Ðàññìîòðèì ïðèìåð ñîçäàíèÿ êîëîíêè òàáëèöû ñ òèïîì XML, ÷òîáû ðàçîáðàòüñÿ, êàê ðàáîòàåò ñâÿçûâàíèå ñ XSD-ñõåìîé: CREATE TABLE ExampleXMLTable (ColumnID int, ExampleXML xml(ExampleXMLSchema))
 äàííîì ïðèìåðå ñîçäàåòñÿ òàáëèöà ExampleXMLTable, êîòîðàÿ ñîäåðæèò äâå êîëîíêè. Ïåðâàÿ èìååò íàçâàíèå ColumnID è òèï INT, à âòîðàÿ èìååò ðàíåå îïðåäåëåííîå íàìè èìÿ ExampleXML è òèï XML. Äëÿ äàííîé êîëîíêè òèïà XML óñòàíîâëåíà ñâÿçü ñ çàðåãèñòðèðîâàííîé ñõåìîé ExampleXMLSchema. Îáðàòèòå âíèìàíèå íà òî, ÷òî èìÿ ðàíåå çàðåãèñòðèðîâàííîé ñõåìû ñîâïàäàåò ñ àðãóìåíòîì, çàäàííûì â êðóãëûõ ñêîáêàõ ñðàçó ïîñëå óêàçàíèÿ òèïà êîëîíêè ExampleXML. Ïîñëå óñòàíîâêè ñâÿçè ìåæäó êîëîíêîé ExampleXML è ðàíåå çàðåãèñòðèðîâàííîé ñõåìîé ExampleXMLSchema SQL Server áóäåò àâòîìàòè÷åñêè ïðîâåðÿòü ïðàâèëüíîñòü âñåõ äàííûõ, êîòîðûå áóäóò âíîñèòüñÿ â êîëîíêó òèïà XML. Äëÿ òîãî ÷òîáû âíåñòè «îøèáî÷íûå» äàííûå â òàêóþ êîëîíêó, íåîáõîäèìî ëèáî èçìåíèòü ñõåìó è çàíîâî åå çàðåãèñòðèðîâàòü, ëèáî ðàçîðâàòü ñâÿçü ìåæäó êîëîíêîé òèïà XML è ñîîòâåòñòâóþùåé åé XSD-ñõåìîé.  èíûõ ñëó÷àÿõ ïîëüçîâàòåëü íå ñìîæåò âíåñòè â ïîäîáíóþ êîëîíêó îøèáî÷íûå äàííûå. Ðàññìîòðèì â ñëåäóþùåì ïðèìåðå (ëèñòèíã 11.3) âñòàâêó ñòðîêè â òàáëèöó, èìåþùóþ êîëîíêó òèïà XML. Ëèñòèíã 11.3. Âñòàâêà êîëîíêè â òàáëèöó ñ òèïîì XML INSERT INTO ExampleXMLTable VALUES (' 3 Technocratic Source l 000 London ')
 äàííîì ïðèìåðå ðàññìàòðèâàåòñÿ âñòàâêà äàííûõ â ðàíåå ñîçäàííóþ òàáëèöó ExampleXMLTable. Ïðè ýòîì äëÿ ïðîâåðêè ïðàâèëüíîñòè ââîäèìîãî òåêñòà èñïîëüçóåòñÿ ñõåìà ExampleXMLSchema. Äàííûå, ââîäèìûå â êîëîíêó, äîëæíû ñîäåðæàòü ýëåìåíò ExampleXML, êîòîðûé â ñâîþ î÷åðåäü äîëæåí ñîäåðæàòü â ñâîåì ñîñòàâå ýëåìåíòû CompanyID, CompanyName, CompanyIncome è CompanyCountry.  ñëó÷àå ïîïûòêè âñòàâèòü â òàáëèöó äàííûå, èìåþùèå äðóãîé ôîðìàò, ïîëüçîâàòåëþ áóäåò âûâåäåíî ñîîáùåíèå îá îøèáêå. Ñîîáùåíèå îá îøèáêå áóäåò èìåòü ïðèìåðíî ñëåäóþùèé âèä: XML Validation: Invalid content, expected element(s): ExampleXMLSchema: CompanyIncome where element 'ExampleXMLSchema:Do' was specified
Îäíîé èç îñíîâíûõ îñîáåííîñòåé õðàíåíèÿ XSD-ñõåì ÿâëÿåòñÿ òî, ÷òî ïîñëå ðåãèñòðàöèè îíè ñîõðàíÿþòñÿ â âèäå ìåòàäàííûõ SQL Server. Ýòî ïîçâîëÿåò ïðîñìàòðèâàòü ìåòàäàííûå, íå îáðàùàÿñü ê äàííûì â òàáëèöàõ, è ïðè íåîáõîäèìîñòè âûïîëíÿòü áûñòðî, íà ëåòó, ôîðìàòèðîâàíèå è ðåãèñòðàöèþ íîâûõ XSD-ñõåì. Âñÿ èíôîðìàöèÿ î ñõåìàõ õðàíèòñÿ â ñèñòåìíîì ïðåäñòàâëåíèè sys.xml_ namespaces. Äëÿ ïðîñìîòðà åãî ñîäåðæèìîãî ìîæíî âîñïîëüçîâàòüñÿ ñëåäóþùèì çàïðîñîì: SELECT * FROM sys.xml_namespaces
11.1. Òèï äàííûõ XML
255
Âûïîëíåíèå ýòîãî çàïðîñà âûâåäåò èíôîðìàöèþ î çàðåãèñòðèðîâàííûõ â ñèñòåìå XSD-ñõåìàõ. Äàííàÿ èíôîðìàöèÿ áóäåò ñîäåðæàòü èìÿ XML-êîëëåêöèè, à òàêæå èìÿ ñõåìû. Äëÿ ïîëó÷åíèÿ áîëåå äåòàëüíîé èíôîðìàöèè âîñïîëüçóéòåñü âûçîâîì ôóíêöèè XML_SCHEMA_NAMESPACE. Âûçîâ äàííîé ôóíêöèè ïîçâîëèò ïðîñìîòðåòü ñïèñîê êîëîíîê, èìåþùèõ òèï XML, äëÿ ïðîâåðêè êîòîðûõ èñïîëüçîâàëàñü XSD-ñõåìà.
11.1.2. Ìåòîäû XML  íîâîé âåðñèè SQL Server ïîÿâèëîñü íåñêîëüêî âñòðîåííûõ ìåòîäîâ, êîòîðûå ïðåäîñòàâëÿþò ðàçðàáîò÷èêàì è àäìèíèñòðàòîðàì íîâûå âîçìîæíîñòè äëÿ ðàáîòû ñ äàííûìè òèïà XML. Ýòè ìåòîäû ïîçâîëÿþò âûïîëíÿòü ñèíòàêñè÷åñêèé àíàëèç ñîäåðæèìîãî ïåðåìåííûõ è êîëîíîê XML-òèïà, âûïîëíÿòü ïðîâåðêó XML-äîêóìåíòîâ è ìíîãèå äðóãèå äåéñòâèÿ, êîòîðûå íåîáõîäèìû ïðè ðàáîòå ñ äàííûìè â ýòîì ôîðìàòå. Èñïîëüçîâàíèå ýòèõ ìåòîäîâ ïîçâîëÿåò ðåàëèçîâàòü ïîääåðæêó òèïà XML íà óðîâíå ÿäðà SQL Server, ÷òî íå ìîæåò íå ñêàçàòüñÿ ïîëîæèòåëüíî íà óïðîùåíèè ðàáîòû ñ òàáëèöàìè, ñîäåðæàùèìè êîëîíêè íîâîãî òèïà.  íîâîé âåðñèè SQL Server ïîÿâèëèñü ñëåäóþùèå ìåòîäû äëÿ ðàáîòû ñ òèïîì XML: · Exists; · Modify; · Query; · Value; Ðàññìîòðèì èñïîëüçîâàíèå êàæäîãî ìåòîäà áîëåå äåòàëüíî. Ìåòîä Exists èñïîëüçóåòñÿ äëÿ ïðîâåðêè ñîäåðæèìîãî XML-äîêóìåíòà íà èñïîëüçîâàíèå âíóòðè íåãî îïðåäåëåííûõ äîêóìåíòîâ èëè àòðèáóòîâ. Äëÿ ýòîãî èñïîëüçóåòñÿ ìåõàíèçì XQuery. Âûçîâ äàííîãî ìåòîäà èìååò ñëåäóþùèé ñèíòàêñèñ: Exists(XQuery, [node ref])
ãäå XQuery — ýòî ýëåìåíò, ïîèñê êîòîðîãî âûïîëíÿåòñÿ â XML-äîêóìåíòå, à node ref — ýòî ññûëêà íà óçåë XML-äîêóìåíòà. Ðàññìîòðèì èñïîëüçîâàíèå äàííîãî ìåòîäà íà ïðèìåðå ïîèñêà ýëåìåíòà òåêñòà âíóòðè XML-äîêóìåíòà: SELECT * FROM ExampleXMLTable WHERE ExampleXML.exists('declare namespace xd=http://ExampleXMLSchema /xd:ExampleXML[xd:CompanyIncome eq "1000"]') = 1 000
 äàííîì ïðèìåðå âûïîëíÿåòñÿ ïîèñê ñòðîê äîêóìåíòà ExampleXML, â êîòîðîì ýëåìåíò CompanyIncome áóäåò ðàâåí 1000. Ìåòîä ìîæåò âåðíóòü îäíî èç òðåõ çíà÷åíèé: · True — åñëè â XML-äîêóìåíòå íàéäåíî õîòÿ áû îäíî âõîæäåíèå; · False — åñëè â XML-äîêóìåíòå íå èìååòñÿ íè îäíîãî âõîæäåíèÿ; · Null — âîçâðàùàåòñÿ â òîì ñëó÷àå, åñëè â êîëîíêó áàçû äàííûõ XML-òèïà íå âíåñåíû çíà÷åíèÿ. Ìåòîä Modify èñïîëüçóåòñÿ äëÿ èçìåíåíèÿ XML-äîêóìåíòà, êîòîðûé ðàíåå áûë ñîõðàíåí â êîëîíêå XML-òèïà èëè â ñîîòâåòñòâóþùåé ïåðåìåííîé. Ñ ïîìîùüþ
256
Ãëàâà 11 • ßçûê XML è SQL Server
äàííîãî ìåòîäà ìîæíî âûïîëíÿòü ðåäàêòèðîâàíèå êàê öåëîãî äîêóìåíòà, òàê è åãî ÷àñòè. Ïåðåä òåì ðåäàêòèðîâàíèåì ÷àñòè äîêóìåíòà íåîáõîäèìî çàäàòü îáëàñòü (èëè óçåë), ïîäâåðãàþùóþñÿ ðåäàêòèðîâàíèþ. Îáùèé âèä ñèíòàêñèñà âûçîâà ìåòîäà ïðèâåäåí äàëåå: Modify(DML)
ãäå DML — ýòî íàáîð êîìàíä äëÿ çàìåíû îäíîãî óçëà íà äðóãîé èëè îäíîé ÷àñòè äîêóìåíòà íà äðóãóþ. Ñ ïîìîùüþ ìåòîäà Modify ìîæíî ìîäèôèöèðîâàòü XML-äîêóìåíòû, â êîòîðûå ðàíåå áûëè âíåñåíû êàêèå-ëèáî äàííûå. Ýòî ïîçâîëèò çàäàòü óñëîâèÿ ìîäèôèêàöèè è îïðåäåëèòü èçìåíÿåìóþ ÷àñòü äîêóìåíòà. Ðàññìîòðèì èçìåíåíèå ÷àñòè äîêóìåíòà íà ñëåäóþùåì ïðèìåðå: UPDATE ExampleXMLs SET ExampleXML.modify('declare namespace xd=http://ExampleXMLSchema replace value of (/xd:ExampleXML/xd:CompanyName) [1] with "Technocratic Inc"') WHERE CompanyID = 3
 äàííîì ïðèìåðå äëÿ ìîäèôèêàöèè XML-äîêóìåíòà èñïîëüçóåòñÿ DML — ÿçûê ìîäèôèêàöèè äàííûõ XML (XML DML — XML Data Modification Language). ßçûê DML ÿâëÿåòñÿ ðàñøèðåíèåì ÿçûêà XQuery è ïîçâîëÿåò âíîñèòü îïðåäåëåííûå èçìåíåíèÿ â XML-äîêóìåíòû.  äàííîì ïðèìåðå ìû èñïîëüçóåì êîìàíäó replace value, êîòîðàÿ çàìåíÿåò îäèí ôðàãìåíò òåêñòà íà äðóãîé. Ïîñêîëüêó â äàííîì ñëó÷àå èñïîëüçóåòñÿ òèïèçèðîâàííûé XML-äîêóìåíò, òî, êàê è â ïðåäûäóùèõ ïðèìåðàõ, íåîáõîäèìî âî âðåìÿ îáðàùåíèÿ ê XML-äîêóìåíòó óêàçàòü XSD-ñõåìó. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà declare namespace xd=http:// ExampleXMLSchema. Ïîñëå ýòîãî âûïîëíÿåòñÿ âûçîâ êîìàíäû replace value ñ óêàçàíèåì òåãà, çíà÷åíèå êîòîðîãî áóäåò çàìåíåíî. Ïðè ýòîì óñòàíîâëåíî óñëîâèå CompanyID=1. Èíûìè ñëîâàìè, äàííûå áóäóò çàìåíåíû â òåõ ñòðîêàõ, äëÿ êîòîðûõ âûïîëíÿåòñÿ çàäàííîå óñëîâèå. Âî âðåìÿ çàìåíû çíà÷åíèÿ íåîáõîäèìî îïðåäåëÿòü òîëüêî îäíó ñòðîêó, èíà÷å áóäåò âûâåäåíî ñîîáùåíèå îá îøèáêå. Ìåòîä Query èñïîëüçóåòñÿ äëÿ èçâëå÷åíèÿ îïðåäåëåííîãî ñîäåðæèìîãî èç XML-äîêóìåíòà èëè åãî ÷àñòè. Ñèíòàêñèñ âûçîâà äàííîãî ìåòîäà âûãëÿäèò ñëåäóþùèì îáðàçîì: Query(XQuery, [node ref])
ãäå XQuery — ýòî êîìàíäà èçâëå÷åíèÿ îïðåäåëåííîé ÷àñòè äîêóìåíòà èëè ôðàãìåíòà ñîäåðæèìîãî äîêóìåíòà, íàïèñàííàÿ íà ÿçûêå XQuery, à node ref — ýòî ññûëêà íà îïðåäåëåííûé óçåë XML-äîêóìåíòà. Ðàññìîòðèì èñïîëüçîâàíèå äàííîãî ìåòîäà íà ïðèìåðå: SELECT ColumnID, ExampleXML.query('declare namespace xd=http://ExampleXMLSchema /xd:ExampleXML/xd:CompanyName') AS Name FROM ExampleXMLTable
 äàííîì ñëó÷àå èç òàáëèöû ExampleXMLTable èçâëåêàþòñÿ çíà÷åíèÿ ýëåìåíòîâ ColumnID è CompanyName. Äëÿ ýòîãî ïîñëå êîìàíäû çàäàåòñÿ ñíà÷àëà èäåíòèôèêàöèîííûé êîä ñòðîêè òàáëèöû (ColumnID), à çàòåì ïîëå CompanyName. Äëÿ èçâëå÷åíèÿ
11.2. Èíäåêñû XML
257
ñíîâà íåîáõîäèìî îïðåäåëèòü XSD-ñõåìó, ïîñêîëüêó íàìè èñïîëüçóåòñÿ òèïèçèðîâàííûé XML-äîêóìåíò. Äëÿ êîëîíêè CompanyName ñ èçâëå÷åííûìè èç òàáëèöû äàííûìè áóäåò èñïîëüçîâàòüñÿ äðóãîå èìÿ — Name. Ýòî îáúÿñíÿåòñÿ òåì, ÷òî çíà÷åíèå êîëîíêè ColumnID èçâëåêàåòñÿ èç ðåëÿöèîííîé áàçû äàííûõ, à CompanyName — èç òèïèçèðîâàííîãî XML-äîêóìåíòà. Ìåòîä Value èñïîëüçóåòñÿ äëÿ èçâëå÷åíèÿ ñêàëÿðíûõ äàííûõ èç êîëîíîê è ïåðåìåííûõ òèïà XML. Äëÿ âûçîâà ìåòîäà èñïîëüçóåòñÿ ñëåäóþùèé ñèíòàêñèñ: Value(XQuery, [node ref])
ãäå XQuery — çàïðîñ äëÿ èçâëå÷åíèÿ äàííûõ. Ïðè ýòîì èñïîëüçóåòñÿ ÿçûê XQuery. node ref — íåîáÿçàòåëüíûé ïàðàìåòð, êîòîðûé óêàçûâàåò íà óçåë XML-äîêóìåíòà. Ðàññìîòðèì èñïîëüçîâàíèå äàííîãî ìåòîäà íà ïðèìåðå: SELECT ExampleXML.value('declare namespace xd=http://ExampleXMLSchema (/xd:ExampleXML/xd:CompanyID)[1]', 'int') AS CID FROM ExampleXMLTable
Ïîäîáíî âûçîâó äðóãèõ ìåòîäîâ XML, âî âðåìÿ âûçîâà ìåòîäà Value òðåáóåòñÿ îïðåäåëèòü äâà ïàðàìåòðà. Ïåðâûé ïàðàìåòð ÿâëÿåòñÿ êîìàíäîé XQuery, êîòîðàÿ èçâëåêàåò äàííûå èç XML-äîêóìåíòà. Âòîðîé ïàðàìåòð èñïîëüçóåòñÿ äëÿ òîãî, ÷òîáû îïðåäåëèòü òèï äëÿ èçâëåêàåìûõ äàííûõ.  äàííîì ñëó÷àå âñå äàííûå áóäóò èìåòü òèï int. Ïîìèìî ýòîãî íåîáõîäèìî îïðåäåëèòü èìÿ ïåðåìåííîé, êîòîðàÿ áóäåò ñîäåðæàòü èçâëå÷åííûå èç XML-äîêóìåíòà äàííûå.  ðàññìîòðåííîì íàìè ïðèìåðå äëÿ äàííûõ, èçâëåêàåìûõ èç ïîëÿ CompanyID XML-äîêóìåíòà, èñïîëüçóåòñÿ èìÿ CID.
11.2. Èíäåêñû XML Êàê óïîìèíàëîñü ðàíåå, ðàçìåð ïåðåìåííûõ è êîëîíîê ñ äàííûìè òèïà XML íå ìîæåò ïðåâûøàòü 2 Ãáàéò. Ýòî äîñòàòî÷íî áîëüøîé îáúåì äëÿ õðàíåíèÿ äàííûõ ïîäîáíîãî ôîðìàòà, îäíàêî èñïîëüçîâàíèå òàêèõ îáúåìîâ äàííûõ ìîæåò ñêàçàòüñÿ íà îáùåé ïðîèçâîäèòåëüíîñòè ñèñòåìû. Äëÿ òîãî ÷òîáû íå âîçíèêàëî ïðîáëåì ñ ïðîèçâîäèòåëüíîñòüþ, ðåêîìåíäóåòñÿ â ïåðâóþ î÷åðåäü îãðàíè÷èâàòü îáúåì äàííûõ, õðàíèìûõ â îòäåëüíîé êîëîíêå èëè òàáëèöå. Äëÿ ðåøåíèÿ áîëåå ñëîæíûõ çàäà÷ è óâåëè÷åíèÿ îáùåé ïðîèçâîäèòåëüíîñòè ñèñòåìû èñïîëüçóþòñÿ òàáëèöû èíäåêñîâ. Äàííûé ìåõàíèçì ÿâëÿåòñÿ áàçîâûì äëÿ âñåõ ñèñòåì, ïðåäñòàâëåííûõ íà ðûíêå, îäíàêî íå êàæäàÿ èç íèõ èìååò âñòðîåííûå ñðåäñòâà äëÿ èíäåêñèðîâàíèÿ êîëîíîê ñ òèïîì XML.  íîâîé âåðñèè SQL Server èìååòñÿ âîçìîæíîñòü ñîçäàâàòü èíäåêñû äëÿ êîëîíîê òèïà XML. Ïðè ýòîì ïîääåðæèâàåòñÿ êàê ñîçäàíèå ïåðâè÷íûõ èíäåêñîâ, òàê è âòîðè÷íûõ. Îá ýòîì è ïîéäåò ðàçãîâîð â äàííîì ðàçäåëå.
11.2.1. Ïåðâè÷íûå èíäåêñû XML Ïåðåä òåì êàê ïðèñòóïèòü ê ñîçäàíèþ èíäåêñà XML äëÿ êîëîíêè äàííîãî òèïà, íåîáõîäèìî ñîçäàòü ïåðâè÷íûé êëþ÷ â áàçå äàííûõ. Åñëè ïåðâè÷íûé êëþ÷ ðàíåå áûë ñîçäàí äëÿ äàííîé òàáëèöû è åãî íåîáõîäèìî óäàëèòü, òî ñíà÷àëà ñëåäóåò óäàëèòü XML-èíäåêñ, ÷òî ïîçâîëèò âàì èçìåíèòü ïàðàìåòðû ïåðâè÷íîãî êëþ÷à. Ñîçäàíèå XML-èíäåêñà ïîäðàçóìåâàåò èíäåêñèðîâàíèå âñåõ ýëåìåíòîâ
258
Ãëàâà 11 • ßçûê XML è SQL Server
XML-äîêóìåíòà. Ïðè ýòîì ñòîèò óòî÷íèòü, ÷òî äëÿ îäíîé êîëîíêè òèïà XML äîïóñêàåòñÿ èñïîëüçîâàíèå òîëüêî îäíîãî èíäåêñà. Ïîñêîëüêó XML-èíäåêñû è îáû÷íûå èíäåêñû SQL Server èñïîëüçóþò îäíè è òå æå îáëàñòè èìåí äëÿ õðàíåíèÿ íàçâàíèé, XML-èíäåêñû íå ìîãóò èìåòü òàêèå æå íàçâàíèÿ, ÷òî è îáû÷íûå. Ñîçäàíèå XML-èíäåêñîâ äîïóñêàåòñÿ òîëüêî äëÿ êîëîíîê, èìåþùèõ òèï XML. Íå äîïóñêàåòñÿ ñîçäàíèå XML-èíäåêñîâ äëÿ ïðåäñòàâëåíèé èëè ïåðåìåííûõ òèïà XML. Ïåðâè÷íûé èíäåêñ XML ñîäåðæèò ãðóáîå ïðåäñòàâëåíèå äàííûõ, êîòîðûå õðàíÿòñÿ â êîëîíêå òèïà XML. Äëÿ ñîçäàíèÿ ïåðâè÷íîãî èíäåêñà èñïîëüçóåòñÿ êîìàíäà CREATE PRIMARY XML INDEX. Ðàññìîòðèì åå èñïîëüçîâàíèå íà ïðèìåðå: CREATE PRIMARY XML INDEX ExampleXMLTableIndx ON ExampleXMLTable(ExampleXML)
 äàííîì ïðèìåðå ñîçäàåòñÿ èíäåêñ ïîä íàçâàíèåì ExampleXMLTableIndx. Äàííûé èíäåêñ ñîçäàåòñÿ äëÿ êîëîíêè ExampleXML òàáëèöû ExampleXMLTable.  ðàññìîòðåííûõ íàìè ðàíåå ïðèìåðàõ ìû ñîçäàëè êîëîíêó òèïà XML â òàáëèöå ExampleXMLTable. Äëÿ ïðîñìîòðà ñîäåðæèìîãî XML-èíäåêñà ìîæíî âîñïîëüçîâàòüñÿ êîìàíäîé SELECT, êàê äëÿ îáû÷íûõ èíäåêñîâ. Äëÿ ýòîãî íåîáõîäèìî èçâëå÷ü äàííûå èç ñèñòåìíîãî ïðåäñòàâëåíèÿ sys.indexes, êàê ïîêàçàíî â ñëåäóþùåì ïðèìåðå: SELECT * FROM sys.indexes WHERE name = 'ExampleXMLTableIndx'
11.2.2. Âòîðè÷íûå èíäåêñû XML Ïîìèìî ïåðâè÷íûõ èíäåêñîâ â ñèñòåìå äîïóñêàåòñÿ ñîçäàíèå âòîðè÷íûõ XMLèíäåêñîâ. Âòîðè÷íûå èíäåêñû XML ìîãóò áûòü ñîçäàíû äëÿ ñëåäóþùèõ àòðèáóòîâ: · çíà÷åíèå — äëÿ ïîñòðîåíèÿ èíäåêñà èñïîëüçóåòñÿ ñîäåðæèìîå äîêóìåíòà. Èíäåêñ äàííîãî òèïà ñîçäàåòñÿ êîìàíäîé FOR VALUE; · ïóòü — äëÿ ïîñòðîåíèÿ èíäåêñà èñïîëüçóåòñÿ ïóòü äîêóìåíòà. Èíäåêñ äàííîãî òèïà ñîçäàåòñÿ êîìàíäîé FOR PATH; · ñâîéñòâà — äëÿ ïîñòðîåíèÿ èíäåêñà èñïîëüçóþòñÿ ñâîéñòâà äîêóìåíòà. Èíäåêñ äàííîãî òèïà ñîçäàåòñÿ êîìàíäîé FOR PROPERTIES. Âòîðè÷íûå èíäåêñû ñîçäàþòñÿ è õðàíÿòñÿ òàê æå, êàê è ïåðâè÷íûå, çà òåì ëèøü èñêëþ÷åíèåì, ÷òî äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà CREATE XML INDEX. Ðàññìîòðèì ñîçäàíèå âòîðè÷íîãî èíäåêñà íà ïðèìåðå: CREATE XML INDEX SecondaryExampleXMLIndx ON ExampleXMLTable(ExampleXML) USING XML INDEX ExampleXMLTabaleIndx FOR PATH
11.3. Íîâûå âîçìîæíîñòè XML Óëó÷øåíèÿ, êîñíóâøèåñÿ èñïîëüçîâàíèÿ XML â íîâîé âåðñèè SQL Server, íå îãðàíè÷èâàþòñÿ ñîçäàíèåì íîâîãî òèïà è óëó÷øåííûìè ìåõàíèçìàìè èíäåêñèðîâàíèÿ.  SQL Server 2005 ïîÿâèëîñü íåñêîëüêî óëó÷øåíèé, êîòîðûå âî ìíîãîì ðàñøèðÿþò âîçìîæíîñòè èñïîëüçîâàíèÿ ÿçûêà XML äëÿ õðàíåíèÿ äàííûõ
11.3. Íîâûå âîçìîæíîñòè XML
259
è îáìåíà èìè. Âî-ïåðâûõ, ýòî îòíîñèòñÿ ê ïîääåðæêå íîâûõ ïðîòîêîëîâ îáìåíà äàííûìè SOAP è XMLA. Âî-âòîðûõ, â íîâîé âåðñèè SQL Server ïîääåðæèâàåòñÿ öåëûé íàáîð íîâûõ êîìàíä äëÿ ðàáîòû ñ XML, òàêèõ êàê FOR XML, OPENXML è äð. Îá ýòîì, à òàêæå î äðóãèõ óëó÷øåíèÿõ XML íîâîé âåðñèè SQL Server ïîéäåò ðå÷ü â äàííîì ðàçäåëå.
11.3.1. Êîìàíäà FOR XML Êîìàíäà FOR âïåðâûå ïîÿâèëàñü êàê äîïîëíåíèå êîìàíäû SELECT â SQL Server 2000.  íîâîé âåðñèè SQL Server âîçìîæíîñòè äàííîé êîìàíäû óâåëè÷åíû. Òåïåðü ïàðàëëåëüíî êîìàíäå FOR òàêæå ìîæåò èñïîëüçîâàòüñÿ êîìàíäà FOR XML, êîòîðàÿ äàåò ðàçðàáîò÷èêàì íîâûå ïðåèìóùåñòâà. Íîâàÿ êîìàíäà, êàê ìîæíî äîãàäàòüñÿ èç íàçâàíèÿ, îáëàäàåò ïîääåðæêîé òèïîâ XML, timestamp è òåêñòîâûõ. Ïîìèìî ýòîãî óëó÷øåíèÿ òàêæå ïðîÿâëÿþòñÿ â ïîääåðæêå íîâîé êîìàíäû TYPE, âëîæåííûõ çàïðîñîâ ñ êîìàíäîé FOR XML è ãåíåðàöèè XSD-ñõåì.  ñëåäóþùèõ ðàçäåëàõ ìû ðàññìîòðèì íîâûå âîçìîæíîñòè, ïðåäîñòàâëÿåìûå êîìàíäîé FOR XML. Ê òàêèì âîçìîæíîñòÿì îòíîñÿòñÿ: èñïîëüçîâàíèå òèïèçèðîâàííûõ äèðåêòèâ, âëîæåííûõ çàïðîñîâ FOR XML, èñïîëüçîâàíèå XSD-ñõåì è äðóãèå óëó÷øåíèÿ, êîñíóâøèåñÿ êîìàíäû SELECT è FOR XML.
11.3.2. Òèïèçèðîâàííûå äèðåêòèâû  ñëó÷àå èñïîëüçîâàíèÿ êîìàíäû FOR XML ñ òèïèçèðîâàííûìè äèðåêòèâàìè âûâîä äàííûõ âûïîëíÿåòñÿ íå ïîñëåäîâàòåëüíî, à ïàðàëëåëüíî. Ïðè ýòîì âûâîä ðåçóëüòàòîâ âûïîëíÿåòñÿ â ôîðìàòå XML. Äëÿ áîëåå äåòàëüíîãî ïîÿñíåíèÿ äàííîãî óòâåðæäåíèÿ ïðèâåäåì ïðèìåð: SELECT ColumnID, ExampleXML FROM ExampleXMLTable WHERE CompanyID=1 FOR XML AUTO, TYPE
 äàííîì ñëó÷àå âûïîëíÿåòñÿ çàïðîñ íà ïîëó÷åíèå äàííûõ èç ðàíåå ñîçäàííîé íàìè òàáëèöû ExampleXMLTable. Çàïðîñ âûïîëíÿåòñÿ íà âûâîä ðåëÿöèîííûõ äàííûõ èç êîëîíêè ColumnID, à òàêæå äàííûõ èç êîëîíêè ExampleXML òèïà XML. Äëÿ âûâîäà èíôîðìàöèè â ôîðìàòå XML èñïîëüçóåòñÿ êîìàíäà FOR XML AUTO. Ïðè ýòîì âûâîä áóäåò âûïîëíåí â òîì ôîðìàòå, â êîòîðîì äàííûå õðàíÿòñÿ â ÿ÷åéêå òàáëèöû. Äëÿ ýòîãî èñïîëüçóåòñÿ êîìàíäà TYPE. Ðåçóëüòàòû âûïîëíåíèÿ äàííîé êîìàíäû áóäóò âûãëÿäåòü ïðèáëèçèòåëüíî ñëåäóþùèì îáðàçîì (ëèñòèíã 11.4). Ëèñòèíã 11.4. Ðåçóëüòàòû âûïîëíåíèÿ çàïðîñà ñ êîìàíäîé FOR XML AUTO
l Brain Inc. l 000 000 Ukraine
260
Ãëàâà 11 • ßçûê XML è SQL Server
 äàííîì ñëó÷àå ðåçóëüòàòû âûâåäåíû íà ýêðàí â òîì ôîðìàòå XML-ôàéëà, â êîòîðîì îíè áûëè âíåñåíû â òàáëèöó.
11.3.3. XSD-ñõåìû è êîìàíäà FOR XML Åùå îäíèì óëó÷øåíèåì êîìàíäû FOR XML, ÿâëÿåòñÿ âîçìîæíîñòü àâòîìàòè÷åñêîé ãåíåðàöèè XSD-ñõåìû âî âðåìÿ âûïîëíåíèÿ çàïðîñà. Äëÿ ýòîãî âìåñòå ñ êîìàíäîé FOR XML èñïîëüçóåòñÿ êîìàíäà XMLSCHEMA. Ðàññìîòðèì èñïîëüçîâàíèå êîìàíäû XMLSCHEMA íà ïðèìåðå: SELECT ExampleXML FROM ExampleXMLTable WHERE ColumnID=l FOR XML AUTO, XMLSCHEMA
 äàííîì ïðèìåðå êîìàíäà XMLSCHEMA èñïîëüçóåòñÿ âìåñòå ñ êîìàíäîé FOR XML. Ýòî îçíà÷àåò, ÷òî âî âðåìÿ âûïîëíåíèÿ äàííîãî çàïðîñà áóäåò âûâåäåíà òàêæå XSD-ñõåìà, êîòîðàÿ ìàêñèìàëüíî òî÷íî îïèñûâàåò õðàíÿùèéñÿ â êîëîíêå XML-äîêóìåíò. Îáðàòèòå âíèìàíèå íà òî, ÷òî êîìàíäà XMLSCHEMA ìîæåò èñïîëüçîâàòüñÿ òîëüêî ñ êîìàíäàìè FOR XML AUTO è FOR XML RAW è íå ìîæåò èñïîëüçîâàòüñÿ ñ êîìàíäîé FOR XML EXPLICIT. Ýòî îáúÿñíÿåòñÿ îñîáåííîñòüþ ñâÿçûâàíèÿ ñõåìû ñ âûáðàííîé êîëîíêîé òàáëèöû SQL Server. Åùå îäíî îãðàíè÷åíèå íà ðàáîòó ñ äàííîé êîìàíäîé îòíîñèòñÿ ê îáëàñòè èñïîëüçîâàíèÿ âëîæåííûõ çàïðîñîâ. Êîìàíäà XMLSCHEMA ìîæåò èñïîëüçîâàòüñÿ äëÿ âëîæåííûõ çàïðîñîâ òîëüêî â òîì ñëó÷àå, åñëè çàïðîñ âåðõíåãî óðîâíÿ íå áóäåò ñîäåðæàòü äàííóþ êîìàíäó. Ðåçóëüòàò âûïîëíåíèÿ êîìàíäû XMLSCHEMA áóäåò ÿâëÿòüñÿ XSD-ñõåìîé, êîòîðàÿ èñïîëüçîâàëàñü äëÿ ñâÿçûâàíèÿ ñ êîëîíêîé ExampleXML (ëèñòèíã 11.5). Ëèñòèíã 11.5. Ïðèìåð àâòîìàòè÷åñêîé ãåíåðàöèè ñõåì
< /xsd: element>
l Brain Inc.
11.3. Íîâûå âîçìîæíîñòè XML
261
l 000 000 Ukraine
Âûçîâ êîìàíäû ìîæåò âåðíóòü íåñêîëüêî ñõåì, îäíàêî â ëþáîì ñëó÷àå èõ áóäåò íå ìåíåå äâóõ. Ýòî îáúÿñíÿåòñÿ òåì, ÷òî îäíà ñõåìà âîçâðàùàåòñÿ äëÿ ïðîñòðàíñòâà èìåí SqlTypes, à äðóãàÿ ÿâëÿåòñÿ ðåçóëüòàòîì âûïîëíåíèÿ çàïðîñà FOR XML.  äàííîì ïðèìåðå âíà÷àëå âûâåäåíà ñõåìà, êîòîðàÿ áûëà ñîõðàíåíà â ïðîñòðàíñòâå èìåí SqlTypes (íà÷èíàåòñÿ ñî ñòðîêè è çàêàí÷èâàåòñÿ ñòðîêîé ), à çàòåì — ñõåìà, êîòîðàÿ ÿâëÿåòñÿ ðåçóëüòàòîì âûïîëíåíèÿ çàïðîñà FOR XML (íà÷èíàåòñÿ ñî ñòðîêè è çàêàí÷èâàåòñÿ ñòðîêîé ).
11.3.4. Âëîæåííûå çàïðîñû FOR XML  ñëó÷àå èñïîëüçîâàíèÿ êîìàíäû FOR XML â ïðåäûäóùåé âåðñèè SQL Server åå âîçìîæíîñòè áûëè çíà÷èòåëüíî îãðàíè÷åíû îòñóòñòâèåì ïîääåðæêè âëîæåííûõ çàïðîñîâ.  SQL Server 2000 íåëüçÿ áûëî èñïîëüçîâàòü ïîäçàïðîñû â òîì ñëó÷àå, åñëè â çàïðîñå èìåëàñü êîìàíäà FOR XML.  íîâîé âåðñèè SQL Server ïîäîáíûå îãðàíè÷åíèÿ ñíÿòû, è òåïåðü ïîäçàïðîñû ìîæíî ñîçäàâàòü è äëÿ êîìàíäû FOR XML.  äàííîì ñëó÷àå âëîæåííûå ïîäçàïðîñû èñïîëüçóþòñÿ àíàëîãè÷íî ïîäîáíîìó ìåõàíèçìó â çàïðîñàõ áåç êîìàíäû FOR XML. Îíè âîçâðàùàþò íàáîð äàííûõ, êîòîðûé áóäåò â äàëüíåéøåì èñïîëüçîâàòüñÿ äëÿ ïîñòðîåíèÿ îñíîâíîãî çàïðîñà. Ðàññìîòðèì èñïîëüçîâàíèå âëîæåííîãî ïîäçàïðîñà íà ñëåäóþùåì ïðèìåðå: SELECT ColumnID, ExampleXML, (SELECT ExampleXML FROM ExampleXMLTable2 WHERE ExampleXMLTable2.ColumnID = ExampleXMLTable.ColumnID FOR XML AUTO, TYPE) FROM ExampleXMLTable Where ColumnID = 1 FOR XML AUTO, TYPE
 äàííîì ñëó÷àå èñïîëüçóþòñÿ äâà çàïðîñà. Ïåðâûé (çàïðîñ âåðõíåãî óðîâíÿ) ïðèìåíÿåòñÿ ê òàáëèöå ExampleXMLTable, à âòîðîé (âëîæåííûé) — ê òàáëèöå ExampleXMLTable2, êîòîðàÿ ÿâëÿåòñÿ ñòðóêòóðíîé êîïèåé ïåðâîé òàáëèöû, íî ñîäåðæèò äàííûå â îáùåì ñëó÷àå îòëè÷íûå îò ïåðâîé òàáëèöû. Îáðàòèòå âíèìàíèå íà òî, ÷òî êàê â çàïðîñå âåðõíåãî óðîâíÿ, òàê è âî âëîæåííîì çàïðîñå èñïîëüçóåòñÿ êîìàíäà FOR XML.  îáîèõ çàïðîñàõ èñïîëüçóåòñÿ äèðåêòèâà TYPE äëÿ âûâîäà äàííûõ â òîì ôîðìàòå, â êîòîðîì îíè ðàñïîëàãàþòñÿ â êîëîíêàõ ExampleXML.  ñëó÷àå îòñóòñòâèÿ äèðåêòèâû òèïèçèðîâàííîãî çàïðîñà äàííûå áóäóò âîçâðàùåíû â ôîðìàòå nvarchar è ñòðóêòóðà äàííûõ XML áóäåò óòðà÷åíà. Ðåçóëüòàò âûïîëíåíèÿ äàííîãî çàïðîñà áóäåò âûãëÿäåòü ïðèáëèçèòåëüíî ñëåäóþùèì îáðàçîì (ëèñòèíã 11.6).
262
Ãëàâà 11 • ßçûê XML è SQL Server
Ëèñòèíã 11.6. Ðåçóëüòàò âûïîëíåíèÿ âëîæåííîãî çàïðîñà
l Brain Inc. l 000 000 Ukraine
11.3.5. Çàãðóçêà XML SQL Server â îòíîøåíèè íîâîãî ôîðìàòà XML áóäåò ïðèìåíÿòüñÿ äëÿ õðàíåíèÿ äàííûõ. Äëÿ ýòîãî ìîãóò èñïîëüçîâàòüñÿ êàê ñòàðûå ìåòîäû õðàíåíèÿ òåêñòà XML-ôàéëà â êîëîíêàõ òåêñòîâîãî òèïà, òàê è ñïåöèàëèçèðîâàííûå êîëîíêè òèïà XML, êîòîðûå ïîÿâèëèñü â íîâîé âåðñèè SQL Server. Ïåðâîå, ÷òî ïîòðåáóåòñÿ ñäåëàòü â äàííîì ñëó÷àå, — ýòî çàãðóçèòü XML-äîêóìåíòû, êîòîðûå áûëè ñîçäàíû ðàíåå è õðàíèëèñü íà ëîêàëüíîì äèñêå êîìïüþòåðà, â áàçó äàííûõ SQL Server. Äëÿ óñêîðåíèÿ âûïîëíåíèÿ äàííîé ïðîöåäóðû ìîæíî âîñïîëüçîâàòüñÿ íîâîé êîìàíäîé ââîäà äàííûõ â êîëîíêó èëè ïåðåìåííóþ òèïà XML ïðÿìî èç ôàéëà, ðàñïîëîæåííîãî íà ëîêàëüíîì äèñêå êîìïüþòåðà. Äëÿ çàãðóçêè ôàéëà â ïåðåìåííóþ èëè êîëîíêó òèïà XML èñïîëüçóåòñÿ êîìàíäà FROM OPENROWSET: INSERT INTO ExampleXMLTable(ExampleXML) SELECT * FROM OPENROWSET (Bulk 'd:\ExampleXML.xml', SINGLE_CLOB) as X
 äàííîì ñëó÷àå èñïîëüçóåòñÿ êîìàíäà INSERT INTO, êîòîðàÿ âñòàâëÿåò äàííûå â òàáëèöó ExampleXMLTable.  òàáëèöó âñòàâëÿþòñÿ äàííûå, êîòîðûå ÿâëÿþòñÿ ðåçóëüòàòîì âûïîëíåíèÿ çàïðîñà ê XML-ôàéëó. Ôóíêöèÿ OPENROWSET èñïîëüçóåò ïðîâàéäåð äàííûõ Bulk, êîòîðûé ñ÷èòûâàåò äàííûå èç XML-ôàéëà. Îáðàòèòå âíèìàíèå íà òî, ÷òî ìû èñïîëüçóåì òèïèçèðîâàííûé XML-äîêóìåíò, à ñëåäîâàòåëüíî, ôàéë d:\ExampleXML.xml äîëæåí áûòü ñôîðìèðîâàí ñîãëàñíî äàííîé ñõåìå, èíà÷å áóäåò âûâåäåíà îøèáêà. Ðàññìîòðèì ïðèìåð ïîäîáíîãî ôàéëà (ëèñòèíã 11.7). Ëèñòèíã 11.7. Ïðèìåð XML-ôàéëà
5 JSC Zab 5 000 000 USA
Åñëè ïðèìåíèòü êîìàíäó INSERT INTO, êàê áûëî îïèñàíî âûøå, ê ïðèâåäåííîìó ïðèìåðó XML-ôàéëà, îí áóäåò çàãðóæåí â ðàíåå ñîçäàííóþ êîëîíêó XML-òèïà. Îáðàòèòå âíèìàíèå íà òî, ÷òî âûïîëíåíèå êîìàíäû áóäåò ïðîèçâîäèòüñÿ â ñèñòåìå, â êîòîðîé óñòàíîâëåí SQL Server, ïîýòîìó íåîáõîäèìî ëèáî ïåðåíåñòè ëîêàëüíûå ôàéëû (ñ âàøåãî êîìïüþòåðà) íà ýòîò ñåðâåð, ëèáî çàäàòü äëÿ íèõ ïðÿìîé ñåòåâîé àäðåñ è ðàçðåøèòü äîñòóï èç ñèñòåìû ñ SQL Server 2005. Êîìàíäà
11.3. Íîâûå âîçìîæíîñòè XML
263
SINGLE_CLOB, êîòîðàÿ èñïîëüçóåòñÿ â êà÷åñòâå ïàðàìåòðà ïðîöåäóðû OPENROWSET, ïðè-
ìåíÿåòñÿ äëÿ òîãî, ÷òîáû óêàçàòü SQL Server, ÷òî äàíûå èç ôàéëà áóäóò âñòàâëåíû â îòäåëüíóþ ñòðîêó òàáëèöû.  ñëó÷àå îòñóòñòâèÿ ýòîãî ïàðàìåòðà äàííûå áóäóò âñòàâëåíû âî ñòîëüêî ñòðîê òàáëèöû, ñêîëüêî ñòðîê ñ àòðèáóòàìè ïðèñóòñòâóåò â XML-ôàéëå (â äàííîì ñëó÷àå — ÷åòûðå). Ïî óìîë÷àíèþ ôàéë ðàçäåëÿåòñÿ íà ñòðîêè (ïðè îòñóòñòâèè ïàðàìåòðà SINGLE_CLOB). Ïðè íåîáõîäèìîñòè ìîæíî çàäàòü ðàçäåëèòåëü äëÿ XML-ôàéëà. Äëÿ ýòîãî èñïîëüçóþòñÿ ïàðàìåòðû FIELDTERMINATOR è ROWTERMINATOR ïðîöåäóðû OPENROWSET.
11.3.6. Ïîääåðæêà XQuery Ðàíåå ìû ðàññìîòðåëè íåñêîëüêî êîìàíä XQuery, êîòîðûå èñïîëüçîâàëèñü äëÿ èçâëå÷åíèÿ äàííûõ è îòäåëüíûõ ôðàãìåíòîâ XML-äîêóìåíòîâ. Ïîäîøëî âðåìÿ ðàññìîòðåòü áîëåå äåòàëüíî, ÷òî ïðåäñòàâëÿåò ñîáîé ÿçûê XQuery. XQuery áàçèðóåòñÿ íà îáùåïðèçíàííîì ñòàíäàðòå XPath, êîòîðûé áûë ñîçäàí êîíñîðöèóìîì W3C (World Wide Web Consortium) äëÿ âûïîëíåíèÿ çàïðîñîâ íà èçâëå÷åíèå äàííûõ èç XML-äîêóìåíòîâ. ßçûê XQuery çíà÷èòåëüíî ðàñøèðÿåò âîçìîæíîñòè XPath, ïðåäîñòàâëÿÿ ðàçðàáîò÷èêàì ìîùíûå èíñòðóìåíòû äëÿ èçâëå÷åíèÿ è îáíîâëåíèÿ äàííûõ XML-äîêóìåíòîâ. Ïîìèìî ýòîãî XQuery ïîääåðæèâàåò âîçìîæíîñòè äâóíàïðàâëåííîãî âçàèìîäåéñòâèÿ ñ XML-äîêóìåíòàìè è ñîðòèðîâêó ðåçóëüòàòîâ, êîòîðûå áûëè ïîëó÷åíû ïîñëå âûïîëíåíèÿ çàïðîñà ê XML-äîêóìåíòó. Îïèñàíèå äàííîãî ÿçûêà ïðîãðàììèðîâàíèÿ íå ÿâëÿåòñÿ öåëüþ ýòîé êíèãè. Ïðè íåîáõîäèìîñòè âû ìîæåòe îáðàòèòüñÿ ê ïåðâîèñòî÷íèêó è ïî÷åðïíóòü íåîáõîäèìóþ èíôîðìàöèþ ñ ñàéòà http://www.w3.org/XML/Query.
11.3.7. Êîìàíäà OPENXML Âîçìîæíîñòè êîìàíäû FOR XML çíà÷èòåëüíî ðàñøèðÿþòñÿ â ñëó÷àå èñïîëüçîâàíèÿ âìåñòå ñ íåé êîìàíäû OPENXML. Íà ñàìîì äåëå âî âðåìÿ èñïîëüçîâàíèÿ êîìàíäû FOR XML ðåçóëüòàò âûïîëíåíèÿ çàïðîñà âîçâðàùàåòñÿ â ôîðìàòå XML. Èíûìè ñëîâàìè, âûïîëíåíèå çàïðîñà ïðèâîäèò ê ñîçäàíèþ îòäåëüíîãî XML-äîêóìåíòà, ñóùåñòâóþùåãî âíå òàáëèöû áàçû äàííûõ.  ñëó÷àå èñïîëüçîâàíèÿ êîìàíäû OPENXML âìåñòå ñ êîìàíäîé FOR XML âûâîä áóäåò âûïîëíåí íå â âèäå XML-äîêóìåíòà, à â âèäå íàáîðà ñòðîê, êàê ýòî ïðîèñõîäèò äëÿ çàïðîñà ê òàáëèöàì, ñîäåðæàùèì äðóãèå òèïû äàííûõ. Äëÿ òîãî ÷òîáû âîñïîëüçîâàòüñÿ âîçìîæíîñòÿìè êîìàíäû OPENXML, íåîáõîäèìî ñíà÷àëà âûçâàòü õðàíèìóþ ïðîöåäóðó sp_xml_preparedocument. Îíà èñïîëüçóåòñÿ äëÿ ñèíòàêñè÷åñêîãî àíàëèçà (ïàðñèíãà) XML-äîêóìåíòà. Âî âðåìÿ ñèíòàêñè÷åñêîãî àíàëèçà èñïîëüçóåòñÿ îáúåêòíàÿ ìîäåëü XML DOM (XML Document Object Model), êîòîðàÿ ïåðåäàåò îáðàáîòàííóþ èíôîðìàöèþ êîìàíäå OPENXML. Äàëåå âûïîëíåíèå êîìàíäû OPENXML ïðèâîäèò ê îòîáðàæåíèþ äàííûõ, ïîëó÷åííûõ ïîñëå ñèíòàêñè÷åñêîãî àíàëèçà, â âèäå ñòðîê êîäà. Ïîñëå òîãî êàê ñèíòàêñè÷åñêèé àíàëèç XML-äîêóìåíòà çàêîí÷åí, íåîáõîäèìî ïåðåäàòü õðàíèìîé ïðîöåäóðå sp_xml_removedocument èíôîðìàöèþ î òîì, ÷òî ñèñòåìíûå ðåñóðñû, çàäåéñòâîâàííûå âî âðåìÿ ñèíòàêñè÷åñêîãî àíàëèçà, íåîáõîäèìî îñâîáîäèòü. Îáùàÿ ñõåìà ïðîöåññà ïîêàçàíà íà ðèñ. 11.1.
264
Ãëàâà 11 • ßçûê XML è SQL Server
Ðèñ. 11.1. Ñõåìà èñïîëüçîâàíèÿ êîìàíäû OPENXML
 íîâîé âåðñèè SQL Server âîçìîæíîñòè êîìàíäû OPENXML çíà÷èòåëüíî ðàñøèðåíû â ñâÿçè ñ ïîÿâëåíèåì íîâîãî òèïà XML, à òàêæå íîâûõ ïîëüçîâàòåëüñêèõ òèïîâ, êîòîðûå ìîãóò âêëþ÷àòü ýëåìåíòû XML.  íåêîòîðûõ ñëó÷àÿõ èñïîëüçîâàíèå êîìàíäû OPENXML âìåñòå ñ äðóãèìè êîìàíäàìè äàåò ðàçðàáîò÷èêàì ìîùíûé ìåõàíèçì ñèíòàêñè÷åñêîãî àíàëèçà äîêóìåíòîâ. Ðàññìîòðèì ýëåìåíòàðíûé ïðèìåð èñïîëüçîâàíèÿ êîìàíäû OPENXML âìåñòå ñ êîìàíäîé WITH (ëèñòèíã 11.8). Ëèñòèíã 11.8. Ïðèìåð èñïîëüçîâàíèÿ êîìàíäû OPENXML DECLARE @DocumentID int DECLARE @XML2Doc varchar(1000) SET @XML2Doc =' l Brain Inc. l 000 000 Ukraine ' EXEC sp_xml_preparedocument @DocumentID OUTPUT, @XML2Doc SELECT * FROM OPENXML (@DocumentID, '/ExampleXML', 1) WITH (CompanyID varchar(4), CompanyName varchar(50), CompanyIncome(10), CompanyCountry(20)) EXEC sp_xml_removedocument @DocumentID
 íà÷àëå äàííîãî ñöåíàðèÿ ñîçäàþòñÿ äâå ïåðåìåííûå — @DocumentID è @XML2Doc. Ïåðåìåííàÿ @DocumentID èñïîëüçóåòñÿ äëÿ õðàíåíèÿ ññûëêè íà XML-äîêóìåíò, êîòîðóþ âîçâðàòèò ïðîöåäóðà sp_xml_preparedocument, à ïåðåìåííàÿ @XML2Doc áóäåò õðàíèòü òåëî XML-äîêóìåíòà. Ïîñëå âûïîëíåíèÿ õðàíèìîé ïðîöåäóðû sp_xml_preparedocument îáå ïåðåìåííûå áóäóò èìåòü íåíóëåâîå çíà÷åíèå. Ýòè äàííûå ïåðåäàþòñÿ XML DOM äëÿ èõ ñèíòàêñè÷åñêîãî àíàëèçà. Ïîñëå âûïîëíåíèÿ ñèíòàêñè÷åñêîãî àíàëèçà ññûëêà íà äîêóìåíò õðàíèòñÿ â ïåðåìåííîé @DocumentID. Îíà èñïîëüçóåòñÿ äëÿ îòêðûòèÿ äîêóìåíòà âî âðåìÿ âûçîâà êîìàíäû OPENXML. Ïåðâûì ïàðàìåòðîì êîìàíäû OPENXML ÿâëÿåòñÿ ññûëêà íà äîêóìåíò, êîòîðàÿ õðàíèòñÿ â ïåðåìåííîé @DocumentID. Âòîðûì ïàðàìåòðîì ÿâëÿåòñÿ ïàðàìåòð òèïà XPath, èñïîëüçóåìûé äëÿ îïðåäåëåíèÿ óçëà, îò êîòîðîãî áóäåò âûïîëíÿòüñÿ ñèíòàêñè÷åñêèé àíàëèç äîêóìåíòà. È íàêîíåö, òðåòèé ïàðàìåòð ïðåäñòàâëÿåò ñîáîé íå ÷òî èíîå, êàê òèï ñâÿçûâàíèÿ ìåæäó ïðîàíàëèçèðîâàííûì XML-äîêóìåíòîì è ñòðîêàìè, êîòîðûå áóäóò âûâåäåíû íà ýêðàí ïîëüçîâàòåëÿ. Åäèíèöà íà äàííîì ìåñòå îçíà÷àåò, ÷òî áóäåò èñïîëüçîâàíî àòðèáóòèâíîå ñâÿçûâàíèå ñîäåðæèìîãî XML-äîêóìåíòà è ðåçóëüòàòîâ. Êîìàíäà WITH çàäàåò ïàðàìåòðû ñòðîê, êîòîðûå âûâîäÿòñÿ íà ýêðàí ïîëüçîâàòåëÿ.  äàííîì ñëó÷àå íà ýêðàí áóäåò âûâåäåíà òàáëèöà, ñîäåðæàùàÿ ÷åòûðå êîëîíêè ñ òåêñòîâûìè äàííûìè. Êî-
11.3. Íîâûå âîçìîæíîñòè XML
265
ëîíêè áóäóò èìåíîâàíû ñëåäóþùèì îáðàçîì (â ïîðÿäêå îòîáðàæåíèÿ): CompanyID, CompanyName, CompanyIncome, CompanyCountry. Ïî çàâåðøåíèè âûïîëíåíèÿ ñèíòàêñè÷åñêîãî àíàëèçà XML-äîêóìåíòà è îòîáðàæåíèÿ ðåçóëüòàòîâ íà ýêðàíå ïîëüçîâàòåëÿ â âèäå ñòðîê ñ îïðåäåëåííûì òèïîì è íàçâàíèåì êîëîíîê íåîáõîäèìî âûçâàòü õðàíèìóþ ïðîöåäóðó sp_xml_removedocument äëÿ îñâîáîæäåíèÿ ñèñòåìíûõ ðåñóðñîâ.
11.3.8. XML for Analysis Services Èçìåíåíèÿ, êîòîðûå êîñíóëèñü SQL Server â îòíîøåíèè ðàáîòû ñ XML, çàòðîíóëè òàêæå ñåðâèñû àíàëèòèêè. Âî-ïåðâûõ, îíè êîñíóëîñü îáùèõ ìåõàíèçìîâ ðàáîòû ñåðâèñîâ àíàëèòèêè ñ XML. Òåïåðü îáîáùåííî äàííàÿ ôóíêöèîíàëüíîñòü íîñèò íàçâàíèå XMLA (XML for Analysis Services). XML for Analysis Services ïðåäñòàâëÿåò ñîáîé ïðîãðàììíûé èíòåðôåéñ (API), êîòîðûé ïîçâîëÿåò âûïîëíÿòü äîñòóï ñåðâèñîâ àíàëèòèêè ê èñòî÷íèêàì äàííûõ, ðàñïîëîæåííûõ â Èíòåðíåòå. Ìåõàíèçì XMLA ñîçäàâàëñÿ ïîñëå ðàçðàáîòêè OLE DB, ïîýòîìó îí èìååò óíèâåðñàëüíûå ñðåäñòâà äëÿ äîñòóïà ê äàííûì è äîïóñêàåò èñïîëüçîâàíèå ëþáûõ ìíîãîìåðíûõ èñòî÷íèêîâ äàííûõ. Îäíàêî â îòëè÷èå îò OLE DB, XMLA ñîçäàâàëñÿ íà îñíîâå ïðîòîêîëà SOAP, ÷òî ñêàçàëîñü íà îñíîâíûõ ïðåèìóùåñòâàõ äàííîãî ìåõàíèçìà ïî ñðàâíåíèþ ñî ñâîèì ïðåäøåñòâåííèêîì. XMLA ïðåäîñòàâëÿåò ðàçðàáîò÷èêàì äâà íîâûõ ìåòîäà: · Discover — èñïîëüçóåòñÿ äëÿ ïîëó÷åíèÿ èíôîðìàöèè è äàííûõ èç èñòî÷íèêà äàííûõ. Òàêæå ïîçâîëÿåò ïðîñìàòðèâàòü èíôîðìàöèþ îá èñòî÷íèêàõ äàííûõ, ïðîâàéäåðàõ äàííûõ è ìåòàäàííûõ, êîòîðûå äîñòóïíû â ìîìåíò åãî âûçîâà; · Execute — ïîçâîëÿåò âûïîëíÿòü êîìàíäû äëÿ ðàáîòû ñ èñòî÷íèêàìè äàííûõ.
11.3.9. Äîñòóï XML SOAP Åùå îäíèì ïðåèìóùåñòâîì SQL Server 2005 â îòíîøåíèè ðàáîòû ñ XML ÿâëÿåòñÿ ïîääåðæêà ïðîòîêîëà SOAP. Ïîääåðæêà äàííîãî ìåõàíèçìà ïîçâîëÿåò îòïðàâëÿòü îòâåòû íà çàïðîñû òèïà HTTP/SOAP, êîòîðûå èñïîëüçóþòñÿ âåá-ñåðâèñàìè äëÿ îáìåíà äàííûìè è ñëóæåáíîé èíôîðìàöèåé. Îòïðàâêà îòâåòà íà HTTP/ SOAP-çàïðîñû íå òðåáóåò óñòàíîâêè IIS (Internet Information Server), ÷òî çíà÷èòåëüíî óïðîùàåò àäìèíèñòðèðîâàíèå ñèñòåìû. Áîëåå òîãî, ïîääåðæêà äàííîãî ñòàíäàðòà ïîçâîëÿåò ðàçðàáîò÷èêàì ñàìîñòîÿòåëüíî ñîçäàâàòü âåá-ñåðâèñû íà îñíîâå SQL Server èëè âõîäÿùèõ â ñîñòàâ ïîñòàâêè ñåðâèñîâ. Äàííûå ñåðâèñû ñìîãóò èìåòü âñå âñòðîåííûå ìåõàíèçìû, êîòîðûå ïðèñóùè ìîäåëè SQL Server (õðàíèìûå ïðîöåäóðû, ïîëüçîâàòåëüñêèå ôóíêöèè è òèïû). Îáðàòèòå âíèìàíèå íà òî, ÷òî â öåëÿõ áåçîïàñíîñòè ïîääåðæêà çàïðîñîâ HTTP ïîñëå óñòàíîâêè SQL Server 2005 îòêëþ÷åíà. Îäíàêî ïðè íåîáõîäèìîñòè äàííóþ ôóíêöèþ ìîæíî âêëþ÷èòü â SQL Server, ñîçäàâ òî÷êó ïîäêëþ÷åíèÿ HTTP. Äëÿ ñîçäàíèÿ òî÷êè ïîäêëþ÷åíèÿ HTTP âîñïîëüçóéòåñü êîìàíäîé CREATE ENDPOINT, êàê ýòî ïîêàçàíî â ñëåäóþùåì ïðèìåðå (ëèñòèíã 11.9).
266
Ãëàâà 11 • ßçûê XML è SQL Server
Ëèñòèíã 11.9. Ïðèìåð ñîçäàíèÿ òî÷êè ïîäêëþ÷åíèÿ HTTP CREATE ENDPOINT ExampleHTTPEndpoint STATE = STARTED AS HTTP( PATH = '/sqlserver2005', AUTHENTICATION = (INTEGRATED), PORTS = (CLEAR), SITE = 'ExampleSite' ( FOR SOAP ( WEBMETHOD 'http://services.ua/'.'ExampleMethod' (name= 'ExampleDB.ExampleSchema.ExampleMethod', schema=STANDARD ), BATCHES = ENABLED, WSDL = DEFAULT, DATABASE = 'ExampleDB', NAMESPACE = 'http://ExampleDB/' )
 äàííîì ïðèìåðå ðàññìîòðåíà âîçìîæíîñòü ñîçäàíèÿ òî÷êè ïîäêëþ÷åíèÿ HTTP. Òî÷êà èìååò íàçâàíèå ExampleHTTPEndpoint è ñîçäàíà äëÿ õðàíèìîé ïðîöåäóðû ExampleMethod, êîòîðàÿ ðàñïîëàãàåòñÿ â áàçå ExampleDB. Ïîñëå ñîçäàíèÿ êîíå÷íîé òî÷êè ïîäêëþ÷åíèÿ HTTP ê íåé ìîæíî îðãàíèçîâàòü äîñòóï, êàê ýòî äåëàåòñÿ ñ äðóãèìè ñåðâèñàìè ñ ïîìîùüþ ïðîòîêîëà SOAP. Òàêæå âî âðåìÿ èñïîëüçîâàíèÿ òî÷êè ïîäêëþ÷åíèÿ ìîæíî âûïîëíÿòü êîìàíäû ALTER ENDPOINT è DROP ENDPOINT, êîòîðûå ïîçâîëÿþò îáíîâëÿòü ïàðàìåòðû êîíå÷íîé òî÷êè è óäàëÿòü åå â òîì ñëó÷àå, åñëè â íåé íåò áîëüøå íåîáõîäèìîñòè.  öåëÿõ îáåñïå÷åíèÿ áåçîïàñíîñòè ìîæíî âîñïîëüçîâàòüñÿ ïðîòîêîëîì SSL (Secure Socket Layer). Äëÿ ïðîñìîòðà ñïèñêà òî÷åê ïîäêëþ÷åíèÿ, êîòîðûå ðàíåå áûëè ñîçäàíû â ñèñòåìå, èñïîëüçóåòñÿ ñèñòåìíîå ïðåäñòàâëåíèå sys.http_endpoints. Äëÿ ïðîñìîòðà èíôîðìàöèè ýòîãî ïðåäñòàâëåíèÿ âûïîëíèòå ñëåäóþùèé çàïðîñ: SELECT * FROM sys.http_endpoints
Áåçîïàñíîñòü
12
Èçìåíåíèÿ â ñèñòåìå áåçîïàñíîñòè Microsoft SQL Server â ïåðâóþ î÷åðåäü îòíîñÿòñÿ ê ïîâûøåíèþ áåçîïàñíîñòè èñïîëüçîâàíèÿ äàííîãî ïðîãðàììíîãî ðåøåíèÿ.  êîíå÷íîì ñ÷åòå ýòî âûðàæàåòñÿ â áîëåå áåçîïàñíîì àäìèíèñòðèðîâàíèè ñèñòåì íà îñíîâå SQL Server 2003 è ðàçðàáîòêå ðåøåíèé, èñïîëüçîâàíèå êîòîðûõ ãàðàíòèðóåò ñîõðàííîñòü äàííûõ. Íîâûå òðåáîâàíèÿ ê áåçîïàñíîñòè ïðèëîæåíèÿ âîçíèêàþò, êîãäà êîä .NET èñïîëüçóåòñÿ âíóòðè SQL Server. Íàáîð ñðåäñòâ áåçîïàñíîñòè SQL Server ðàñøèðåí ìåõàíèçìîì îòäåëåíèÿ ïîëüçîâàòåëåé îò ñõåì, à òàêæå èíòåãðàöèåé ïðîâåðêè ïàðîëÿ äîñòóïà ñ ñåðâèñîì àóòåíòèôèêàöèè Microsoft Windows Server 2003. Ïîìèìî ýòîãî áîëüøèíñòâî äîïîëíèòåëüíûõ âîçìîæíîñòåé ñåðâåðà ïî óìîë÷àíèþ îòêëþ÷åíû, ÷òî òàêæå ïîëîæèòåëüíî ñêàçûâàåòñÿ íà îáùåé áåçîïàñíîñòè ñèñòåìû.
12.1. Èçìåíåíèÿ è ïðåèìóùåñòâà SQL Server 2005 Íåêîòîðûå ïðåèìóùåñòâà íîâîé âåðñèè SQL Server ïðèçâàíû óïðîñòèòü æèçíü àäìèíèñòðàòîðó. Ñèñòåìà ñòàëà áîëåå ïðîñòà â ïîíèìàíèè, ÷òî ïîëîæèòåëüíî ñêàçûâàåòñÿ íà âðåìåíè åå ðàçâåðòûâàíèÿ è íàñòðîéêè. Òàêæå óïðîùåíèå êîñíóëîñü äåÿòåëüíîñòè ðàçðàáîò÷èêîâ. Òåïåðü ñòàëî âîçìîæíûì ðàçðàáàòûâàòü ïðîãðàììíûå ðåøåíèÿ è âûïîëíÿòü èõ ñ ñîîòâåòñòâóþùèìè ïðèâèëåãèÿìè, íå áåñïîêîÿñü î òîì, ÷òî ïîëüçîâàòåëü ïîëó÷èò ïðàâà íà âûïîëíåíèå òåõ èëè èíûõ äåñòðóêòèâíûõ äåéñòâèé. Äàâàéòå áîëåå äåòàëüíî ðàññìîòðèì ïðåèìóùåñòâà äëÿ àäìèíèñòðàòîðîâ è ðàçðàáîò÷èêîâ, êîòîðûå áûëè ðåàëèçîâàíû â SQL Server 2005: · Óðîâíè äîñòóïà äëÿ âûïîëíåíèÿ êîäà .NET — àäìèíèñòðèðîâàíèå è âûïîëíåíèå êîäà .NET óïðàâëÿåòñÿ ñ ïîìîùüþ êîìáèíàöèè óðîâíåé äîñòóïà SQL Server, Windows, à òàêæå ñèñòåìû áåçîïàñíîñòè .NET. Ñ ïîìîùüþ ýòèõ òðåõ óðîâíåé äîñòóïà îïðåäåëÿåòñÿ, ÷òî äàííûé êîä ìîæåò äåëàòü âíóòðè SQL Server, à êàêèå äåéñòâèÿ äëÿ íåãî íåäîñòóïíû.
268
Ãëàâà 12 • Áåçîïàñíîñòü
· Ïîëèòèêè áåçîïàñíîñòè äëÿ ïîëüçîâàòåëåé SQL Server — â òîì ñëó÷àå, åñëè SQL Server 2005 óñòàíîâëåí íà êîìïüþòåðå ñ Windows Server 2003, ïîëüçîâàòåëè ìîãóò èñïîëüçîâàòü ïîëèòèêè áåçîïàñíîñòè îïåðàöèîííîé ñèñòåìû. · Èñïîëüçîâàíèå ìåõàíèçìà ìàíäàòîâ Windows Server — ïîëüçîâàòåëè SQL Server ìîãóò èñïîëüçîâàòü ìåõàíèçì ìàíäàòîâ Windows Server 2003 âî âðåìÿ äîñòóïà ê âíåøíèì èñòî÷íèêàì äàííûõ. · Ðàçäåëåíèå ïîëüçîâàòåëåé è ñõåì. Ñõåìû SQL Server — ýòî íàáîð îáúåêòîâ ïåðâîãî óðîâíÿ. Âëàäåëüöàìè äàííûõ îáúåêòîâ ìîãóò ÿâëÿòüñÿ ðîëè, îòäåëüíûå ïîëüçîâàòåëè èëè äàæå ãðóïïû ïîëüçîâàòåëåé. Âîçìîæíîñòü ñîçäàíèÿ è èñïîëüçîâàíèÿ ñèíîíèìîâ äëÿ ðàçëè÷íûõ îáúåêòîâ ïîçâîëÿåò äîáèòüñÿ áîëåå ãèáêîãî àäìèíèñòðèðîâàíèÿ ñèñòåì íà îñíîâå SQL Server. · Ïðåäîñòàâëåíèå ïðàâ äîñòóïà — òåïåðü äëÿ ïîëüçîâàòåëåé íåò íåîáõîäèìîñòè âõîäèòü â ñîñòàâ îïðåäåëåííûõ ðîëåé äëÿ òîãî, ÷òîáû èìåòü ïðàâà íà âûïîëíåíèå òåõ èëè èíûõ äåéñòâèé â ñèñòåìå. Àáñîëþòíî âñå ïðàâà ìîãóò áûòü íàçíà÷åíû ñ ïîìîùüþ êîìàíä GRANT, DENY è REVOKE. · Áåçîïàñíîñòü ìåòàäàííûõ SQL — â íîâîé âåðñèè SQL Server íå äîïóñêàåòñÿ ïðÿìîå îáíîâëåíèå ïðåäñòàâëåíèé ìåòàäàííûõ. Ïîëüçîâàòåëè ìîãóò ïðîñìàòðèâàòü ìåòàäàííûå òîëüêî â îòíîøåíèè òåõ îáúåêòîâ, äîñòóï ê êîòîðûì îíè èìåþò. Ïîìèìî ýòîãî ðàçðàáîò÷èêè ìîãóò íàñòðàèâàòü äîñòóï ê ìåòàäàííûì ñ ïîìîùüþ óðîâíÿ äîñòóïà VIEW DEFINITION. Îá ýòîì óðîâíå äîñòóïà áîëåå äåòàëüíî ìû ïîãîâîðèì â ðàçäåëå 12.1.2 «Äîñòóï ê ìåòàäàííûì». · Âûïîëíåíèå ïðîöåäóð îò èìåíè îïðåäåëåííîãî ïîëüçîâàòåëÿ — õðàíèìûå ïðîöåäóðû è ïîëüçîâàòåëüñêèå ôóíêöèè ìîãóò âûïîëíÿòüñÿ îò èìåíè îïðåäåëåííûõ ïîëüçîâàòåëåé. Äëÿ ýòîãî ïðåäóñìîòðåíà êîìàíäà EXECUTE AS, ïîçâîëÿþùàÿ ñìåíèòü äàííîãî ïîëüçîâàòåëÿ íà îïðåäåëåííîãî ðàçðàáîò÷èêîì. · Ñåðòèôèêàòû è êëþ÷è — áðîêåð ñåðâèñîâ ìîæåò èñïîëüçîâàòü ýëåêòðîííûå ñåðòèôèêàòû è êëþ÷è äëÿ øèôðîâàíèÿ äàííûõ. Ýòî ïîçâîëÿåò ðåàëèçîâàòü áåçîïàñíîñòü íà óðîâíå SSL, âûïîëíÿòü ïðîâåðêó è øèôðîâàíèå èñïîëíÿåìîãî êîäà, à òàêæå îáåñïå÷èâàòü áåçîïàñíîñòü õðàíåíèÿ äàííûõ. Íåêîòîðûå èç óïîìÿíóòûõ â äàííîì ïåðå÷íå ôóíêöèé SQL Server ìû íå áóäåì ðàññìàòðèâàòü â ýòîé êíèãå, îäíàêî ïîñòàðàåìñÿ èçó÷èòü áîëüøóþ ÷àñòü èç íèõ. Îäíî èç îñíîâíûõ ïðåèìóùåñòâ íîâîé âåðñèè SQL Server — ýòî âîçìîæíîñòü âûïîëíåíèÿ îòëè÷íîãî îò T-SQL êîäà âíóòðè ñåðâåðà.  ïåðâóþ î÷åðåäü ýòî îòíîñèòñÿ ê êîäó .NET.  ýòîì ñëó÷àå ñèñòåìû ïðåäúÿâëÿþò íîâûå òðåáîâàíèÿ ê óðîâíþ áåçîïàñíîñòè Microsoft SQL Server 2005, ïîñêîëüêó êîä .NET ïðåäîñòàâëÿåò áîëüøóþ ãèáêîñòü, à ñëåäîâàòåëüíî, áîëüøóþ ïîòåíöèàëüíóþ îïàñíîñòü äëÿ öåëîñòíîñòè ñèñòåìû. Èìåííî ïîýòîìó ìû ïîñòàðàåìñÿ îñòàíîâèòüñÿ íà ðàññìîòðåíèè âîïðîñîâ áåçîïàñíîñòè, êîòîðûå îòíîñÿòñÿ ê èñïîëüçîâàíèþ .NET-êîäà âíóòðè SQL Server 2005.  ñëåäóþùèõ ðàçäåëàõ ìû áîëåå äåòàëüíî ðàññìîòðèì âîïðîñû àâòîðèçàöèè, äîñòóïà è àóòåíòèôèêàöèè ïîëüçîâàòåëåé ñ ïîìîùüþ âñòðîåííûõ ñðåäñòâ Microsoft SQL Server. Ïîñëå ýòîãî ìû èçó÷èì âîïðîñû õðàíåíèÿ ïàðîëåé, èñïîëüçîâàíèå íàáîðîâ äîñòóïà, àãðåãàöèé â îòíîøåíèè íîâûõ îáúåêòîâ áàçû äàííûõ. Äàííóþ
12.1. Èçìåíåíèÿ è ïðåèìóùåñòâà SQL Server 2005
269
ãëàâó ìû çàêîí÷èì ðàññìîòðåíèåì âîïðîñîâ èñïîëüçîâàíèÿ .NET-êîäà âíóòðè SQL Server, ÷òî âêëþ÷àåò íàçíà÷åíèå óðîâíåé áåçîïàñíîñòè, îðãàíèçàöèþ äîñòóïà ê õðàíèìûì ïðîöåäóðàì è ïîëüçîâàòåëüñêèì ôóíêöèÿì, à òàêæå ðàáîòó ñ àãðåãàöèÿìè .NET.
12.1.1. Ïðåèìóùåñòâà SQL Server èìååò áîãàòûé íàáîð ôóíêöèé. Ñ âûõîäîì íîâûõ âåðñèé ïðîãðàììíîãî ïðîäóêòà ðàíåå ñîçäàííûå ìåõàíèçìû ïåðåñìàòðèâàþòñÿ, äîðàáàòûâàþòñÿ è óëó÷øàþòñÿ, à òàêæå ïîÿâëÿþòñÿ íîâûå âîçìîæíîñòè. Ïîäîáíûå íîâûå ôóíêöèè â ðàííèõ âåðñèÿõ áûëè âêëþ÷åíû ïî óìîë÷àíèþ, ÷òî ïîâûøàëî òðåáîâàíèÿ ê ñèñòåìíûì àäìèíèñòðàòîðàì îðãàíèçàöèè, ïîñêîëüêó â ñëó÷àå èñïîëüçîâàíèÿ íîâîé âåðñèè ïðîãðàììíîãî ïðîäóêòà â ñèñòåìå áåçîïàñíîñòè ìîãëè ïîÿâèòüñÿ óÿçâèìûå ìåñòà. Ïîäîáíûìè óÿçâèìîñòÿìè ìîãóò âîñïîëüçîâàòüñÿ õàêåðû, ÷òî â êîíå÷íîì èòîãå ìîæåò ïðèâåñòè ê ýêîíîìè÷åñêèì ïîòåðÿì. Ïðèìåðàìè ïîäîáíûõ äåñòðóêòèâíûõ äåéñòâèé ïåñòðèò èñòîðèÿ. Ñ ïîìîùüþ çàäåéñòâîâàííûõ ïî óìîë÷àíèþ ñðåäñòâ SQL Server 2000 õàêåðû äîáèâàëèñü óäàëåííîãî âûçîâà COM-êëàññîâ (sp_ OACreate), çàïóñêà ïðîãðàììíîãî êîäà ñ ïîìîùüþ êîìàíäíîé ñòðîêè (xp_cmdshell), à òàêæå îòïðàâêè ïî÷òîâûõ ñîîáùåíèé (xp_sendmail). Áîëüøèíñòâî ïîäîáíûõ ôóíêöèé, ïðîöåäóð è ñåðâèñîâ èñïîëíÿþòñÿ îò èìåíè ïîëüçîâàòåëåé ñèñòåìû, ÷òî óñëîæíÿåò ïðîöåññ èõ èäåíòèôèêàöèè è âûÿâëåíèÿ íà ðàííåì ýòàïå äåéñòâèÿ õàêåðà â ñèñòåìå. Áîëåå òîãî, ÷àùå âñåãî çàïóñê ôóíêöèé è ñåðâèñîâ âûïîëíÿåòñÿ îò èìåíè ñóïåðïîëüçîâàòåëÿ, èìåþùåãî íàèáîëüøèå ïðàâà è ïðèâèëåãèè â ñèñòåìå. Íåêîòîðûå àäìèíèñòðàòîðû èñïîëüçîâàëè ñìåøàííûå óðîâíè áåçîïàñíîñòè ñèñòåìû, íå çàäàâàÿ ïðè ýòîì ïàðîëü ñèñòåìíîãî àäìèíèñòðàòîðà. Ýòî ïðèâîäèëî ê òîìó, ÷òî ñèñòåìû ñòàíîâèëèñü ïîëíîñòüþ îòêðûòûìè ê àòàêàì èçâíå. Ïîäîáíàÿ íåîñòîðîæíîñòü ïðèâîäèëà ê óòå÷êå êðèòè÷íûõ äëÿ áèçíåñà äàííûõ, èõ óíè÷òîæåíèþ èëè âûõîäó èç ñòðîÿ íåêîòîðûõ ñèñòåì íà îñíîâå Microsoft SQL Server.  íîâîé âåðñèè ïðîäóêòà íå äîïóñêàåòñÿ èñïîëüçîâàíèå ïî óìîë÷àíèþ ñìåøàííîãî óðîâíÿ áåçîïàñíîñòè, à òàêæå ïóñòîãî ïàðîëÿ ñèñòåìíîãî àäìèíèñòðàòîðà áàçû äàííûõ. Áîëåå òîãî, â ñèñòåìå íå ïðèâåòñòâóåòñÿ èñïîëüçîâàíèå ïóñòûõ ïàðîëåé äëÿ çàïóñêà ïðîãðàììíûõ ïðîäóêòîâ è óòèëèò. Ðàçðàáîò÷èêè SQL Server â íîâîé âåðñèè ñêîíöåíòðèðîâàëèñü íà óñèëåíèè òàê íàçûâàåìîé ïîòåíöèàëüíî îïàñíîé çîíû ñåðâåðà. Ê ýòîé çîíå îòíîñÿòñÿ ïàðîëè ïîëüçîâàòåëåé ñåðâåðà (è â ïåðâóþ î÷åðåäü ñèñòåìíîãî àäìèíèñòðàòîðà), à òàêæå ôóíêöèè, èñïîëüçóåìûå ïî óìîë÷àíèþ. Áîëüøèíñòâî èç íèõ îòêëþ÷åíû äî òåõ ïîð, ïîêà àäìèíèñòðàòîðû íå çàäåéñòâóþò èõ â îòäåëüíî âçÿòîé ñèñòåìå. Äàëåå ìû ðàññìîòðèì âîçìîæíîñòü áåçîïàñíîãî èñïîëüçîâàíèÿ ó÷åòíûõ çàïèñåé è ïàðîëåé, à òàêæå HTTP ENDPOINT è SQLCLR. Ïðîàíàëèçèðóåì äâå ïîñëåäíèå ôóíêöèè SQL Server áîëåå äåòàëüíî: · HTTP ENDPOINT — ãðàíèöà, ïîçâîëÿþùàÿ SQL Server âûïîëíÿòü õðàíèìûå ïðîöåäóðû â êà÷åñòâå âåá-ñåðâèñà. Ïî óìîë÷àíèþ äàííàÿ ôóíêöèÿ îòêëþ÷åíà. Ïåðåä åå èñïîëüçîâàíèåì ïîëüçîâàòåëü ñ ñîîòâåòñòâóþùèì ðàñøèðåííûì íàáîðîì ïðèâèëåãèé äîëæåí ÿâíî âûïîëíèòü êîìàíäó CREATE ENDPOINT. Ïîñëå óñòàíîâêè ñåðâåðà íè îäíîé ãðàíè÷íîé òî÷êè íå ñîçäàåòñÿ,
270
Ãëàâà 12 • Áåçîïàñíîñòü
÷òî óëó÷øàåò áåçîïàñíîñòü ñèñòåìû. Êîìàíäà ENDPOINT ïðåäïîëàãàåò èñïîëüçîâàíèå òîëüêî áåçîïàñíîñòè íà óðîâíå Microsoft Windows (áåçîïàñíîñòü íà óðîâíå Windows ïîäðàçóìåâàåò, ÷òî ïàðîëè íèêîãäà íå îòïðàâëÿþòñÿ ÷åðåç ñåòü, äàæå â çàøèôðîâàííîì âèäå, ïîêà ïîëüçîâàòåëü íå áóäåò èñïîëüçîâàòü SSL). Îäíàêî íå ñòîèò çàáûâàòü, ÷òî SSL (Secure Socket Layer) íå íàñòîëüêî óñòîé÷èâûé ìåõàíèçì øèôðîâàíèÿ, êàê óðîâíè áåçîïàñíîñòè Windows (NTLM èëè Kerberos), â îòíîøåíèè àóòåíòèôèêàöèè. SSL ïîçâîëÿåò âûïîëíÿòü øèôðîâàíèå ñåòåâîãî òðàôèêà äëÿ îïðåäåëåííîãî ñîåäèíåíèÿ è íè÷åãî áîëåå. Ïîäîáíîå øèôðîâàíèå èñïîëüçóåòñÿ âî âðåìÿ ïåðåñûëêè íîìåðîâ êðåäèòíûõ êàðò èëè ïðè ïîêóïêå êàêîãî-ëèáî òîâàðà ÷åðåç Èíòåðíåò.  òî âðåìÿ, êîãäà ðàçðàáîò÷èê îïðåäåëÿåò ãðàíèöó ENDPOINT, îíà íå èñïîëüçóåòñÿ ïî óìîë÷àíèþ. Ýòî îçíà÷àåò, ÷òî ðàçðàáîò÷èêó íåîáõîäèìî ÿâíî âêëþ÷èòü åå, èñïîëüçóÿ îäèí èç ïàðàìåòðîâ êîìàíäû ENDPOINT: ENABLED èëè ALTER. Òàêæå íåîáõîäèìî ïîìíèòü, ÷òî ïðè óñòàíîâêå SQL Server 2005 íè âåáñåðâèñû, íè ïàêåòíûé ðåæèì äîñòóïà íå èñïîëüçóþòñÿ ïî óìîë÷àíèþ. Àäìèíèñòðàòîðó èëè ðàçðàáîò÷èêó íåîáõîäèìî ÿâíî âêëþ÷èòü äàííûå ôóíêöèè. · SQLCLR — âîçìîæíîñòü âûïîëíÿòü êîä .NET âíóòðè SQL Server 2005. Äàííûé ïàðàìåòð ìîæåò áûòü âêëþ÷åí èëè âûêëþ÷åí â çàâèñèìîñòè îò ïàðàìåòðîâ, âûáðàííûõ ïðè óñòàíîâêå ñåðâåðà. Äëÿ âêëþ÷åíèÿ SQLCLR âîñïîëüçóéòåñü ñëåäóþùåé êîìàíäîé: sp_configure 'clr enabled', 1
Ïî óìîë÷àíèþ äàííûé ïàðàìåòð SQL Server 2005 îòêëþ÷åí.
12.1.2. Äîñòóï ê ìåòàäàííûì Îäèí èç ñïîñîáîâ ïîëó÷åíèÿ èíôîðìàöèè î áàçå äàííûõ SQL Server — ýòî âûïîëíåíèå ïîèñêà ñðåäè ïðåäñòàâëåíèé ìåòàäàííûõ.  ïðåäûäóùèõ âåðñèÿõ Microsoft SQL Server ðàçðàáîò÷èê ñ ïîìîùüþ ïðîñòåéøåãî ïðîãðàììíîãî êîäà ìîã èçâëåêàòü èíôîðìàöèþ èç ìåòàäàííûõ ïîëüçîâàòåëüñêèõ îáúåêòîâ áàçû äàííûõ, âëàäåëüöåì êîòîðûõ îí íå ÿâëÿëñÿ èëè äîñòóïà ê êîòîðûì îí íå èìåë.  íîâîé âåðñèè SQL Server äàííàÿ ñèòóàöèÿ áûëà êàðäèíàëüíî ïåðåñìîòðåíà. Äëÿ ýòîãî áûë äîáàâëåí åùå îäèí óðîâåíü äîñòóïà, íàçûâàåìûé VIEW DEFINITION. Ñ ïîìîùüþ äàííîãî óðîâíÿ äîñòóïà ðàçðàáîò÷èêè ìîãóò ðàçðåøàòü èëè çàïðåùàòü äîñòóï ê ìåòàäàííûì áàçû äàííûõ. Ýòîò óðîâåíü äîñòóïà ìîæåò èñïîëüçîâàòüñÿ êàê â îòíîøåíèè îòäåëüíûõ îáúåêòîâ, òàê è äëÿ ïîëüçîâàòåëüñêèõ ñõåì.  òîì ñëó÷àå, åñëè êàêîé-ëèáî ïîëüçîâàòåëü íå èìååò óðîâíÿ äîñòóïà VIEW DEFINITION äëÿ îïðåäåëåííûõ îáúåêòîâ, ñèñòåìíûå ïðåäñòàâëåíèÿ è õðàíèìûå ïðîöåäóðû íå áóäóò îòîáðàæàòü ìåòàäàííûå èëè èíôîðìàöèþ î äàííûõ îáúåêòàõ. Ïîìèìî ýòîãî â íîâîé âåðñèè èçìåíåí ôîðìàò ñîîáùåíèÿ îá îøèáêàõ. Òåïåðü â ñîîáùåíèÿõ íå ñîäåðæèòñÿ èíôîðìàöèè îá îáúåêòàõ, äîñòóïà ê êîòîðûì íå èìååò ïîëüçîâàòåëü. Èíûìè ñëîâàìè, îò ïîëüçîâàòåëÿ ïîëíîñòüþ ñêðûâàåòñÿ ñóùåñòâîâàíèå îáúåêòîâ, äîñòóïà ê êîòîðûì îí íå èìååò. Íàïðèìåð, òåïåðü âû íå ñìîæåòå âñòðåòèòü ñîîáùåíèÿ ñëåäóþùåãî èëè ïîäîáíîãî ñîäåðæàíèÿ: Cannot drop the object 'obj1' because it does not exist or you do not have permission.
12.2. Îáçîð ñðåäñòâ áåçîïàñíîñòè SQL Server 2005
271
12.2. Îáçîð ñðåäñòâ áåçîïàñíîñòè SQL Server 2005 Ñèñòåìà áåçîïàñíîñòè â SQL Server 2005 áûëà äîðàáîòàíà òàêèì îáðàçîì, ÷òîáû âûïîëíÿòü îáðàáîòêó çàïðîñîâ òðàíñëÿöèé .NET, à ïðè íåîáõîäèìîñòè âûçûâàòü èõ. Âî âðåìÿ ðàáîòû ñ òðàíñëÿöèÿìè .NET íåîáõîäèìî çàáîòèòüñÿ î ïðàâèëüíîì èñïîëüçîâàíèè âíóòðåííèõ âûçîâîâ (âûçîâû äðóãèõ òðàíñëÿöèé èëè îáû÷íûé äîñòóï ê õðàíèìûì ïðîöåäóðàì è òàáëèöàì), à òàêæå âíåøíèõ âûçîâîâ (âûçîâû èç òðàíñëÿöèé .NET ïðîãðàììíîãî êîäà, êîòîðûé íàõîäèòñÿ âíå SQL Server). Íå ñòîèò áåñïîêîèòüñÿ î òîì, ÷òî íîâàÿ ñèñòåìà áåçîïàñíîñòè SQL Server çíà÷èòåëüíî îòëè÷àåòñÿ îò ïðåäûäóùåé âåðñèè.  íîâîé âåðñèè ïîÿâèëîñü ìíîãî íîâîââåäåíèé, îäíàêî âñå îíè ÿâëÿþòñÿ ëîãè÷åñêèì ðàçâèòèåì ñèñòåìû áåçîïàñíîñòè SQL Server 2000. Äëÿ òåõ, êòî ñ õîäó íå ñìîæåò ðàçîáðàòüñÿ ñ ñèñòåìîé áåçîïàñíîñòè íîâîãî ïðîãðàììíîãî ïðîäóêòà, âî âðåìÿ çàïóñêà ïîÿâëÿåòñÿ íåáîëüøîé îáçîð ñèñòåìû áåçîïàñíîñòè.
12.2.1. Àóòåíòèôèêàöèÿ è àâòîðèçàöèÿ Áîëüøèíñòâî ñèñòåì áåçîïàñíîñòè áàçèðóþòñÿ íà äâóõ ðàñïðîñòðàíåííûõ ìåõàíèçìàõ: àâòîðèçàöèè è àóòåíòèôèêàöèè. Àóòåíòèôèêàöèÿ — ýòî ïðîöåññ èäåíòèôèêàöèè ïîëüçîâàòåëÿ, èìåþùåãî ó÷åòíóþ çàïèñü (àêêàóíò) â ñèñòåìå. Àâòîðèçàöèÿ — ýòî îïðåäåëåíèå íàáîðà äîïóñòèìûõ îïåðàöèé äëÿ äàííîãî ïîëüçîâàòåëÿ.  Microsoft SQL Server, êàê è âî ìíîãèõ äðóãèõ ïîäîáíûõ ñèñòåìàõ, êàæäûé ïîëüçîâàòåëü èìååò ó÷åòíóþ çàïèñü. Íà îñíîâå äàííîé ó÷åòíîé çàïèñè ñåðâåð âûïîëíÿåò àâòîðèçàöèþ ïîëüçîâàòåëÿ è îïðåäåëåíèå äîñòóïíûõ äëÿ íåãî äåéñòâèé. Äëÿ òîãî ÷òîáû íà÷àòü ðàáîòàòü â ñèñòåìå, ïîëüçîâàòåëü äîëæåí âîéòè â íåå, ââåäÿ èìÿ ó÷åòíîé çàïèñè è ïàðîëü. Ïîñëå âõîäà â ñèñòåìó ñåðâåð ñîçäàñò ïîëüçîâàòåëüñêóþ ñåññèþ, äëÿ êîòîðîé áóäóò îïðåäåëåíû ñîîòâåòñòâóþùèå ïðàâà äîñòóïà. Ýòî îçíà÷àåò, ÷òî ïîëüçîâàòåëü, íàïðèìåð, ñìîæåò ñîçäàâàòü òàáëèöû, âíîñèòü â íèõ çíà÷åíèÿ èëè óäàëÿòü â ñîîòâåòñòâèè ñ ïðàâàìè, îïðåäåëåííûìè äëÿ äàííîé ñåññèè. Ïðîöåññ ñåðâåðà SQL íàçûâàåòñÿ ýêçåìïëÿðîì, íàïðèìåð: «ýêçåìïëÿð ïðîöåññà sqlservr.exe». Íà îäíîì êîìïüþòåðå ïîä óïðàâëåíèåì îïåðàöèîííîé ñèñòåìû ìîãóò áûòü çàïóùåíû îäèí èëè áîëåå ýêçåìïëÿðîâ ïðîöåññîâ. Äëÿ êàæäîãî ýêçåìïëÿðà ïðîöåññà íåîáõîäèìî âûïîëíÿòü àóòåíòèôèêàöèþ. Èíôîðìàöèÿ îá ó÷åòíûõ çàïèñÿõ õðàíèòñÿ â ñèñòåìíîé òàáëèöå syslogins. Àóòåíòèôèêàöèÿ äëÿ êàæäîãî ýêçåìïëÿðà ïðîöåññà âûïîëíÿåòñÿ ñ èñïîëüçîâàíèåì DDL. Èíôîðìàöèÿ, õðàíèìàÿ â òàáëèöå syslogins, íå çàùèùåíà ñ ïîìîùüþ sys.server_principals è sys.sql_logins. Íåîáõîäèìî ñäåëàòü îäíî äîïîëíåíèå: â êà÷åñòâå ó÷åòíûõ çàïèñåé ñåðâåðà SQL ìîãóò èñïîëüçîâàòüñÿ êàê ó÷åòíûå çàïèñè Windows, òàê è ó÷åòíûå çàïèñè SQL Server. Ðàçðàáîò÷èêè ðåêîìåíäóþò èñïîëüçîâàòü ó÷åòíûå çàïèñè Windows äëÿ âõîäà â ñèñòåìó.  ýòîì ñëó÷àå âûäåëÿþò äâà òèïà ó÷åòíûõ çàïèñåé: 1. Ó÷åòíûå çàïèñè ëîêàëüíîãî êîìïüþòåðà, íà êîòîðîì óñòàíîâëåí SQL Server. 2. Ó÷åòíûå çàïèñè ñåðâåðà Active Directory, âõîäÿùåãî â ñîñòàâ ëîêàëüíîé ñåòè ïðåäïðèÿòèÿ.  äàííóþ ñåòü òàêæå âõîäèò SQL Server.
272
Ãëàâà 12 • Áåçîïàñíîñòü
 ïðåäûäóùåé âåðñèè SQL Server àäìèíèñòðàòîðàì ïðèõîäèëîñü îïðåäåëÿòü ñïèñîê ó÷åòíûõ çàïèñåé Windows, êîòîðûå èìåëè òàêæå äîñòóï ê SQL Server ñ ïîìîùüþ õðàíèìîé ïðîöåäóðû sp_grantlogin. Äëÿ ó÷åòíûõ çàïèñåé, ñîçäàííûõ ñ ïîìîùüþ SQL Server, èñïîëüçîâàëàñü õðàíèìàÿ ïðîöåäóðà sp_addlogin. Äàííûå ïðîöåäóðû òàêæå ìîãóò èñïîëüçîâàòüñÿ â íîâîé âåðñèè SQL Server, îäíàêî èõ ðîëü çíà÷èòåëüíî óìåíüøåíà. Âìåñòî äàííûõ ïðîöåäóð â SQL Server 2005 ìîæíî èñïîëüçîâàòü îïåðàòîð CREATE LOGIN DDL. Ïîñëå ñîçäàíèÿ ó÷åòíûõ çàïèñåé èõ íåîáõîäèìî ñâÿçàòü ñ ïîëüçîâàòåëåì â ñîîòâåòñòâóþùåì ýêçåìïëÿðå áàçû äàííûõ. Êàæäàÿ ó÷åòíàÿ çàïèñü ìîæåò èìåòü áàçó äàííûõ, çàäàííóþ ïî óìîë÷àíèþ. Âî âðåìÿ âõîäà ïîëüçîâàòåëÿ â ñèñòåìó îí áóäåò èìåòü âîçìîæíîñòü ðàáîòàòü ñ îïðåäåëåííîé áàçîé äàííûõ. Äëÿ ó÷åòíîé çàïèñè òàêæå ìîæíî îïðåäåëèòü íàáîð äðóãèõ áàç äàííûõ, äîñòóï ê êîòîðûì îíà èìååò.  ýòîì ñëó÷àå ïîëüçîâàòåëü, èñïîëüçóÿ ó÷åòíóþ çàïèñü, ìîæåò ïåðåìåùàòüñÿ ìåæäó ýêçåìïëÿðàìè áàç äàííûõ, äîñòóï ê êîòîðûì îí èìååò.  SQL Server ïîíÿòèå «ïîëüçîâàòåëü» («user») ñâÿçàíî ñ ïîíÿòèåì «ó÷åòíàÿ çàïèñü» («login»). Ñâÿçü ìåæäó ïîëüçîâàòåëåì è ó÷åòíîé çàïèñüþ îïðåäåëÿåòñÿ àäìèíèñòðàòîðîì.  çàâèñèìîñòè îò òîãî, êàê ñâÿçàíû äàííûå ïîíÿòèÿ äëÿ îïðåäåëåííîãî ýêçåìïëÿðà áàçû äàííûõ, ìîãóò ðàçëè÷àòüñÿ ID ïîëüçîâàòåëÿ è ID ó÷åòíîé çàïèñè. Îáû÷íî ïîäîáíîå íåñîîòâåòñòâèå èñïîëüçóåòñÿ àäìèíèñòðàòîðàìè â èñêëþ÷èòåëüíûõ ñëó÷àÿõ. Ðàññìîòðèì ïðèìåð ñîçäàíèÿ ó÷åòíîé çàïèñè è ïîëüçîâàòåëÿ, èìåíà êîòîðûõ áóäóò îòëè÷àòüñÿ äðóã îò äðóãà (ëèñòèíã 12.1). Ëèñòèíã 12.1. Ñîçäàíèå ïîëüçîâàòåëÿ è ó÷åòíîé çàïèñè CREATE LOGIN Alice WITH PASSWORD='qwerty7' GO USE PUBS GO CREATE USER Alicepubs FOR LOGIN Alice GO
 äàííîì ïðèìåðå ñíà÷àëà ñîçäàåòñÿ ó÷åòíàÿ çàïèñü Alice ñ ïàðîëåì 'qwerty7', ïîñëå ýòîãî äëÿ äàííîé ó÷åòíîé çàïèñè ñîçäàåòñÿ ïîëüçîâàòåëü. Îáðàòèòå âíèìàíèå: íè÷òî íå ïîìåøàåò ïîñëå ýòîãî ñîçäàòü åùå îäíîãî ïîëüçîâàòåëÿ äëÿ ó÷åòíîé çàïèñè Alice ñ ïîìîùüþ ñëåäóþùåé êîìàíäû: CREATE USER Aliceother FOR LOGIN Alice
Ñâÿçü ìåæäó ó÷åòíûìè çàïèñÿìè è ïîëüçîâàòåëÿìè ïîêàçàíà íà ðèñ. 12.1. Çäåñü ïîêàçàí ýêçåìïëÿð áàçû äàííûõ, â êîòîðîì ñîçäàíû äâå ó÷åòíûå çàïèñè Alice è Bob. Ó÷åòíàÿ çàïèñü Alice ñâÿçàíà ñ ïîëüçîâàòåëåì Alice â áàçå äàííûõ DataBase1.  êà÷åñòâå áàçû äàííûõ ïî óìîë÷àíèþ ïîëüçîâàòåëþ Alice íàçíà÷åíà DataBase1. Òàêèì îáðàçîì, ïîëüçîâàòåëü Alice ïî óìîë÷àíèþ áóäåò ïîäêëþ÷åí ê áàçå DataBase1. Ó÷åòíàÿ çàïèñü Bob ñâÿçàíà ñ ïîëüçîâàòåëåì BobA â áàçå äàííûõ DataBase1, îäíàêî áàçîé, èñïîëüçóåìîé ïî óìîë÷àíèþ äëÿ ýòîé ó÷åòíîé çàïèñè, ÿâëÿåòñÿ DataBase2. Îáðàòèòå âíèìàíèå íà òî, ÷òî íàèìåíîâàíèå ó÷åòíîé çàïèñè îòëè÷àåòñÿ îò èìåíè ïîëüçîâàòåëÿ â áàçå äàííûõ DataBase1. Äëÿ äîñòóïà â áàçó äàííûõ DataBase2 ó÷åòíàÿ çàïèñü èñïîëüçóåò èìÿ ïîëüçîâàòåëÿ Bob. Ïîñëå ââîäà èìåíè
12.2. Îáçîð ñðåäñòâ áåçîïàñíîñòè SQL Server 2005
273
ó÷åòíîé çàïèñè è ñîîòâåòñòâóþùåãî ïàðîëÿ ïîëüçîâàòåëü ïîïàäåò â áàçó DataBase2, ÿâëÿþùóþñÿ äëÿ ó÷åòíîé çàïèñè Bob èñïîëüçóåìîé ïî óìîë÷àíèþ. Òàêæå îáðàòèòå âíèìàíèå íà òî, ÷òî èìåíà ïîëüçîâàòåëåé â áàçàõ äàííûõ DataBase1 è DataBase2 äëÿ ó÷åòíîé çàïèñè Bob îòëè÷àþòñÿ äðóã îò äðóãà.  òîì ñëó÷àå, åñëè ïîëüçîâàòåëþ ïðåäîñòàâëåíû ïðàâà äîñòóïà â áàçó äàííûõ, íî íå óñòàíîâëåíà ñâÿçü ìåæäó ó÷åòíîé çàïèñüþ è ïîëüçîâàòåëåì, îí ïîëó÷èò äîñòóï â áàçó äàííûõ íà óðîâíå «ãîñòü».
Ðèñ. 12.1. Ñâÿçûâàíèå ïîëüçîâàòåëåé áàçû äàííûõ è ó÷åòíûõ çàïèñåé SQL Server
Ïîëüçîâàòåëü ñåðâåðà SQL â îïðåäåëåííîé áàçå äàííûõ ìîæåò âûïîëíÿòü íàáîðû DDL- è DML-îïåðàöèé, ñëåäîâàòåëüíî, áàçà äàííûõ â SQL Server îáû÷íî èìååò äîïîëíèòåëüíûé ìåõàíèçì äëÿ àâòîðèçàöèè ïîëüçîâàòåëåé. Äëÿ äîñòóïà â áàçó äàííûõ ïîëüçîâàòåëÿì íàçíà÷àþòñÿ ïðèâèëåãèè ñ ïîìîùüþ êîìàíäû GRANT, íàïðèìåð: GRANT SELECT ON schemaDB1.tableDB1 TO Alice
ãäå schemaDB1.tableDB1 — òàáëèöà, ê êîòîðîé ïîëüçîâàòåëþ ïðåäîñòàâëÿåòñÿ äîñòóï, à Alice — ñîîòâåòñòâóþùèé ïîëüçîâàòåëü.  Microsoft SQL Server 2005 äîñòóï ìîæåò áûòü ïðåäîñòàâëåí íà óðîâíå îáúåêòîâ ýêçåìïëÿðà áàçû äàííûõ èëè íà óðîâíå îïðåäåëåííûõ êîìàíä (íàïðèìåð, òàêèõ êàê SHUTDOWN). Äîñòóï ê òàáëèöàì, õðàíèìûì ïðîöåäóðàì, ïðåäñòàâëåíèÿì è äðóãèì îáúåêòàì áàçû äàííûõ ïðåäîñòàâëÿåòñÿ âëàäåëüöåì îáúåêòà. Ïðàâà äîñòóïà ìîãóò áûòü ïðåäîñòàâëåíû ëþáîìó ïîëüçîâàòåëþ, êîòîðûé ñîçäàí â áàçå äàííûõ. Ïîìèìî ýòîãî â SQL Server, êàê è âî ìíîãèõ äðóãèõ ïðîãðàììíûõ ðåøåíèÿõ, äëÿ îòäåëüíûõ ïîëüçîâàòåëåé ìîæåò áûòü çàäàíà ãðóïïèðîâêà ñ ïîìîùüþ ðîëåé. Êîëè÷åñòâî ðîëåé, à òàêæå èõ èìåíà çàäàþòñÿ àäìèíèñòðàòîðîì ñèñòåìû.  SQL Server ñóùåñòâóåò íåñêîëüêî ñèñòåìíûõ ðîëåé, êîòîðûå îáû÷íî èñïîëüçóþòñÿ äëÿ ñëóæåáíûõ öåëåé. Ìû îñòàíîâèìñÿ â äàííîì ðàçäåëå òîëüêî íà äâóõ òàêèõ ñèñòåìíûõ ðîëÿõ, îäíàêî â ñèñòåìå ñóùåñòâóåò åùå íåñêîëüêî, êîòîðûå
274
Ãëàâà 12 • Áåçîïàñíîñòü
îòëè÷àþòñÿ îò ðàññìîòðåííûõ íàìè íàáîðîì ïðàâ äîñòóïà. Ïåðâàÿ ñèñòåìíàÿ ðîëü, êîòîðóþ ìû ðàññìîòðèì, — ýòî ðîëü DBO (Data Base Owner).  äàííóþ ðîëü îáû÷íî âêëþ÷àþò òåõ ïîëüçîâàòåëåé, êîòîðûå äîëæíû èìåòü íåîãðàíè÷åííûå ïðàâà âíóòðè áàçû äàííûõ.  òîì ñëó÷àå, åñëè ïîëüçîâàòåëü âêëþ÷åí â äàííóþ ðîëü, îí ìîæåò âûïîëíÿòü ëþáûå äåéñòâèÿ ñ îáúåêòàìè áàçû äàííûõ (óäàëÿòü èõ, íàçíà÷àòü ïðàâà äîñòóïà, ñîçäàâàòü íîâûå îáúåêòû è ìíîãîå äðóãîå). Ïîìèìî âñåãî ïðî÷åãî ïîäîáíûé ïîëüçîâàòåëü ìîæåò âêëþ÷àòü äðóãèõ ïîëüçîâàòåëåé â ñîñòàâ ðîëè DBO. Äðóãîé ïðèìåð ðîëè — ýòî ðîëü, äîñòóïíàÿ äëÿ îáùåãî èñïîëüçîâàíèÿ (public). Ïîëüçîâàòåëè, âêëþ÷åííûå â äàííóþ ðîëü, èìåþò íàèìåíüøèé óðîâåíü äîñòóïà â áàçó äàííûõ. Îíè ìîãóò ïðîñìàòðèâàòü íåêîòîðûå îáúåêòû, îäíàêî èõ äåéñòâèÿ â áàçå äàííûõ ìàêñèìàëüíî îãðàíè÷åíû. Ïîìèìî óðîâíåé äîñòóïà è ðîëåé àâòîðèçàöèÿ SQL Server èìååò ìåõàíèçì äëÿ ñâÿçè ïîëüçîâàòåëåé ñåðâåðà ñ ãðóïïàìè ïîëüçîâàòåëåé Windows, èíûìè ñëîâàìè, ïîëüçîâàòåëè áàçû äàííûõ íàñëåäóþòñÿ îò ðåãèñòðàöèîííîãî èìåíè ïîëüçîâàòåëÿ Windows. Êàê óïîìèíàëîñü ðàíåå, SQL Server èìååò ìåõàíèçì äëÿ óïðàâëåíèÿ äîñòóïîì ê îáúåêòàì íà óðîâíå ïðèëîæåíèé. Àäìèíèñòðàòîðû èëè ïðîãðàììèñòû ìîãóò â ñâîèõ ïðèëîæåíèÿõ óñòàíàâëèâàòü ïðàâà äîñòóïà ê òîìó èëè èíîìó îáúåêòó ñèñòåìû. Äëÿ ýòèõ öåëåé ðàçðàáîò÷èêàìè ìîãóò ñîçäàâàòüñÿ ïðîãðàììíûå ðîëè. Ïðàâà äîñòóïà è ãðàíèöû ïðèìåíåíèÿ ïîäîáíûõ ðîëåé îïðåäåëÿþòñÿ ðàçðàáîò÷èêàìè è àäìèíèñòðàòîðàìè áàçû äàííûõ.  îòëè÷èå îò ñèñòåìíûõ ðîëåé, ïðîãðàììíûå ìîãóò áûòü ïóñòûìè (òî åñòü â èõ ñîñòàâ ìîæåò íå âõîäèòü íè îäèí ïîëüçîâàòåëü). Íåñìîòðÿ íà ýòî ïðîãðàììíûå ðîëè îáû÷íî èìåþò â ñâîåì ñîñòàâå îäíîãî èëè íåñêîëüêèõ ïîëüçîâàòåëåé. Äëÿ íàçíà÷åíèÿ ïðîãðàììíîé ðîëè ïîëüçîâàòåëþ ìîæíî âîñïîëüçîâàòüñÿ ñëåäóþùèì íàáîðîì êîìàíä: SP_SETAPPROLE @role='roleDB1', @password= {Encrypt N 'password'}, 'Odbc'
Ïðè íàçíà÷åíèè ïîëüçîâàòåëþ òîé èëè èíîé ðîëè îí ïîëó÷àåò ïðàâà äîñòóïà ê áàçå äàííûõ, îïðåäåëåííûå äàííîé ðîëüþ. Ðàññìîòðèì áîëåå äåòàëüíî ïðàâà äîñòóïà íà óðîâíå îáúåêòîâ, êîòîðûå ìîãëè áûòü óñòàíîâëåíû äëÿ ïîëüçîâàòåëÿ, ðîëè, ïðîãðàììíîé ðîëè èëè ãðóïïû ïîëüçîâàòåëåé Windows â SQL Server 2000: · SELECT · UPDATE · DELETE · INSERT · EXECUTE · REFERENCES Ïåðâûå ÷åòûðå óðîâíÿ äîñòóïà (SELECT, INSERT, UPDATE è DELETE) â Microsoft SQL Server 2000 îïðåäåëÿþò äîñòóï ê òàáëèöàì è ïðåäñòàâëåíèÿì. Óðîâåíü äîñòóïà EXECUTE óñòàíàâëèâàåòñÿ äëÿ õðàíèìûõ ïðîöåäóð èëè ïîëüçîâàòåëüñêèõ ôóíêöèé. Ïîñëåäíèé óðîâåíü äîñòóïà (REFERENCES) ïîçâîëÿåò ïîëüçîâàòåëÿì, ÿâëÿþùèìñÿ âëàäåëüöàìè áàçû äàííûõ DataBase1, ñîçäàâàòü âíåøíèé êëþ÷ ê òàáëèöå DataBase2 (îòíîñèòåëüíî êîòîðîé îí èìååò ïðàâà íà óðîâíå REFERENCES). Îáðàòèòå
12.2. Îáçîð ñðåäñòâ áåçîïàñíîñòè SQL Server 2005
275
âíèìàíèå íà òî, ÷òî ïîëüçîâàòåëü ìîæåò íå ÿâëÿòüñÿ âëàäåëüöåì áàçû äàííûõ DataBase2. Äëÿ íåãî äîñòàòî÷íî èìåòü ïðàâà íà áàçó äàííûõ íà óðîâíå REFERENCES. Ïîìèìî ñîçäàíèÿ âíåøíèõ êëþ÷åé äàííûé óðîâåíü äîñòóïà ïîçâîëÿåò îïðåäåëÿòü ïðåäñòàâëåíèå èëè UDF, èñïîëüçóÿ SQL-çàïðîñ ñ ïàðàìåòðîì WITH SCHEMABINDING, â òîì ñëó÷àå, åñëè ïîëüçîâàòåëü ñ ïîìîùüþ êîìàíä VIEW èëè UDF ïîëó÷àåò äîñòóï ê òàáëèöå, âëàäåëüöåì êîòîðîé ÿâëÿåòñÿ äðóãîé ïîëüçîâàòåëü. Òàêæå ìîæíî èñïîëüçîâàòü êîìàíäó GRANT äëÿ òîãî, ÷òîáû óñòàíîâèòü îïðåäåëåííûå ïðàâà äîñòóïà äëÿ äàííîãî ïîëüçîâàòåëÿ.  Microsoft SQL Server 2005 äîáàâëåíî íåñêîëüêî äîïîëíèòåëüíûõ óðîâíåé äîñòóïà äëÿ ðàáîòû ñ îáúåêòàìè: · ALTER; · CONTROL; · RECEIVE (â îòíîøåíèè î÷åðåäè áðîêåðà ñåðâèñîâ); · TAKE OWNERSHIP; · VIEW DEFINITION.  òîì ñëó÷àå, åñëè ïîëüçîâàòåëü èìååò ïðàâà äëÿ ñîçäàíèÿ òàêèõ îáúåêòîâ, êàê òàáëèöû, ïðåäñòàâëåíèÿ è õðàíèìûå ïðîöåäóðû ñ ïîìîùüþ êîìàíäû CREATE, ïîñëå ñîçäàíèÿ ïîäîáíûõ îáúåêòîâ îí àâòîìàòè÷åñêè ñòàíîâèòñÿ èõ âëàäåëüöåì. Âëàäåëüöû îáúåêòîâ èìåþò íåîãðàíè÷åííûå ïðàâà â îòíîøåíèè ñîçäàííûõ îáúåêòîâ, âêëþ÷àÿ èõ óäàëåíèå è îïðåäåëåíèå óðîâíÿ äîñòóïà ê íèì äëÿ äðóãèõ ïîëüçîâàòåëåé. Îäíàêî â ïîäîáíîì äåéñòâèè åñòü íåáîëüøîé íþàíñ: åñëè îáúåêò ñîçäàë ïîëüçîâàòåëü, âõîäÿùèé â ñîñòàâ ðîëè DBO, òî âëàäåëüöåì îáúåêòà áóäåò ÿâëÿòüñÿ äàííàÿ ðîëü. Ïîñêîëüêó ðàçëè÷íûå ïîëüçîâàòåëè ìîãóò ñîçäàòü òàáëèöû ñ îäèíàêîâûìè èìåíàìè, íàïðèìåð ALICE.ONETABLE è BOB.ONETABLE, òî ïðåäïî÷òèòåëüíî ñîçäàâàòü âñå îáúåêòû â ñèñòåìå îò èìåíè ïîëüçîâàòåëÿ, âõîäÿùåãî â ñîñòàâ ðîëè DBO. Äëÿ âûïîëíåíèÿ ïîäîáíîãî äåéñòâèÿ â SQL Server ââîäèòñÿ ïîíÿòèå ñõåìû. Ñ ïîìîùüþ ñõåì óïðîùàåòñÿ ïðîöåññ îïðåäåëåíèÿ óðîâíÿ äîñòóïà äëÿ äàííîãî îáúåêòà (÷òî ìîæåò â íåêîòîðûõ ñëó÷àÿõ îêàçàòüñÿ íåòðèâèàëüíîé çàäà÷åé). Ïðèìåð ðàáîòû ñî ñõåìàìè ìû ðàññìîòðèì äàëåå â äàííîì ðàçäåëå. Âî âðåìÿ âõîäà â SQL Server â êà÷åñòâå ñèñòåìíîãî àäìèíèñòðàòîðà ñåðâåðà èëè îïåðàöèîííîé ñèñòåìû Windows (êîòîðûé íîñèò íàèìåíîâàíèå sa) ïîëüçîâàòåëü àâòîìàòè÷åñêè ïîëó÷àåò ïî óìîë÷àíèþ äëÿ êàæäîé áàçû äàííûõ ïðàâà, îïðåäåëåííûå â ðîëè DBO. Îäíàêî ïðîãðàììèñòàì íåîáõîäèìî âñåãäà âûïîëíÿòü òåñòèðîâàíèå ðàáîòû ñâîèõ ïðèëîæåíèé îò èìåíè ïîëüçîâàòåëåé, êîòîðûå íå âõîäÿò â ðîëü àäìèíèñòðàòîðà áàçû äàííûõ. Ýòî ïîçâîëèò èçáåæàòü îãðîìíîãî êîëè÷åñòâà ïðîáëåì íà ýòàïå ðàçâåðòûâàíèÿ è âíåäðåíèÿ ñèñòåì. Î÷åâèäíî, ÷òî ðàçëè÷íûå óðîâíè äîñòóïà äëÿ ðàçëè÷íûõ ïîëüçîâàòåëåé ïðèâîäÿò ê ðàçëè÷íûì ðåçóëüòàòàì äåéñòâèÿ DML-êîìàíä. Èíûìè ñëîâàìè, ïðîãðàììà, âûïîëíÿåìàÿ â SQL Server, çàâèñèò îò ïðèâèëåãèé ïîëüçîâàòåëÿ, îò èìåíè êîòîðîãî îíà âûïîëíÿåòñÿ.  òàêèõ ñëó÷àÿõ ëó÷øå âñåãî äëÿ êàæäîãî ïðèëîæåíèÿ íà ñåðâåðå ïðèëîæåíèé îïðåäåëèòü ïîëüçîâàòåëÿ, à òàêæå îïðåäåëèòü äëÿ íåãî áàçó äàííûõ, èñïîëüçóåìóþ ïî óìîë÷àíèþ. Äàííûé ïîëüçîâàòåëü ñìîæåò âûïîëíÿòü ïðèëîæåíèå â ñîîòâåòñòâóþùåé áàçå äàííûõ. Ïîäîáíûé ïîäõîä íåñåò íåêîòîðûå îãðàíè÷åíèÿ äëÿ ïîëüçîâàòåëåé. Íàïðèìåð, åñëè ïîëüçîâàòåëÿ íåîáõîäèìî èäåíòèôèöèðîâàòü
276
Ãëàâà 12 • Áåçîïàñíîñòü
óäàëåííî äëÿ àóäèòà, òàêàÿ îïåðàöèÿ íå ìîæåò áûòü âûïîëíåíà. Îäíàêî íåñìîòðÿ íà ýòî ðåêîìåíäóåòñÿ âñå æå èñïîëüçîâàòü îòäåëüíûõ ïîëüçîâàòåëåé äëÿ âûïîëíåíèÿ ñîîòâåòñòâóþùèõ ïðèëîæåíèé. Ïðè ýòîì íå ñëåäóåò çàáûâàòü çàäàâàòü äëÿ ïîäîáíûõ ïîëüçîâàòåëåé áàçó äàííûõ, èñïîëüçóåìóþ ïî óìîë÷àíèþ.  êà÷åñòâå òàêîé áàçû äàííûõ ëó÷øå âñåãî âûáðàòü òó, ñ äàííûìè êîòîðîé ÷àùå âñåãî ðàáîòàåò ïîëüçîâàòåëü (èëè ïðèëîæåíèå ÷åðåç äàííîãî ïîëüçîâàòåëÿ).
12.2.2. Èñïîëíåíèå â çàâèñèìîñòè îò îêðóæåíèÿ è öåïî÷êè âëàäåëüöåâ Âî âðåìÿ âûïîëíåíèÿ õðàíèìîé ïðîöåäóðû, ïîëüçîâàòåëüñêîé ôóíêöèè, äîñòóïà ê îáúåêòàì èç õðàíèìîé ïðîöåäóðû èëè ïðîñìîòðà ïðåäñòàâëåíèÿ ïðîèñõîäèò ïðîâåðêà ïðàâ ïîëüçîâàòåëÿ, âûïîëíÿþùåãî äàííîå äåéñòâèå. Îäíàêî ïðàâà ïðîâåðÿþòñÿ òîëüêî â òîì ñëó÷àå, åñëè èìÿ ïîëüçîâàòåëÿ, âûïîëíÿþùåãî õðàíèìóþ ïðîöåäóðó, îòëè÷àåòñÿ îò èìåíè ïîëüçîâàòåëÿ — âëàäåëüöà îáúåêòà, äîñòóï ê êîòîðîìó âûïîëíÿåòñÿ èç äàííîé ïðîöåäóðû. Ñëåäîâàòåëüíî, â èäåàëüíîì ñëó÷àå âëàäåëüöåì îáúåêòîâ, äîñòóï ê êîòîðîì âûïîëíÿåòñÿ èç õðàíèìîé ïðîöåäóðû, äîëæåí áûòü ïîëüçîâàòåëü, âûïîëíÿþùèé ïðîöåäóðó. Èíà÷å âî âðåìÿ äîñòóïà ê îáúåêòó ïðîâåðÿþòñÿ ïðàâà äîñòóïà, ÷òî â êîíå÷íîì èòîãå âåäåò ê çàìåäëåíèþ âûïîëíåíèÿ õðàíèìûõ ïðîöåäóð è ïîëüçîâàòåëüñêèõ ôóíêöèé. Îáû÷íî ïðîáëåìà äîñòóïà ê òåì èëè èíûì îáúåêòàì, âëàäåëüöåì êîòîðûõ íå ÿâëÿåòñÿ ïîëüçîâàòåëü, èç õðàíèìûõ ïðîöåäóð è ïîëüçîâàòåëüñêèõ ôóíêöèé ðåøàåòñÿ ñëåäóþùèì îáðàçîì: ïåðåä ïîëó÷åíèåì äîñòóïà ê îáúåêòó ïîëüçîâàòåëþ ïðåäîñòàâëÿþòñÿ ïðàâà. Ïîñëå äîñòóïà ê îáúåêòàì ó ïîëüçîâàòåëÿ îòáèðàþòñÿ ïðåäîñòàâëåííûå åìó ðàíåå ïðàâà. Ïðîäåìîíñòðèðóåì îïèñàííûå íàìè äåéñòâèÿ íà ïðèìåðå (ëèñòèíã 12.2). Ïóñòü ïîëüçîâàòåëü Alice ÿâëÿåòñÿ âëàäåëüöåì òàáëèöû company è õðàíèìîé ïðîöåäóðû change_income. Ïîëüçîâàòåëü Alice íå ïðåäîñòàâèë ïîëüçîâàòåëþ Bob äîñòóïà ê òàáëèöå company, îäíàêî ðàçðåøèë âûïîëíÿòü õðàíèìóþ ïðîöåäóðó change_income. Õðàíèìàÿ ïðîöåäóðà change_income âûïîëíÿåò äåéñòâèÿ íàä òàáëèöåé company, è òåïåðü ïîëüçîâàòåëü Bob ïîëó÷èë ïðàâà îïåðèðîâàòü äàííûìè äàííîé òàáëèöû, íå èìåÿ äîñòóïà ê íåé. Âíîñèòü äàííûå â òàáëèöó company Bob ìîæåò òîëüêî ñ ïîìîùüþ õðàíèìîé ïðîöåäóðû è íèêàêèì äðóãèì îáðàçîì. Ëèñòèíã 12.2. Ïðèìåð èñïîëüçîâàíèÿ öåïî÷êè âëàäåëüöåâ -- äåéñòâèÿ âûïîëíÿþòñÿ îò èìåíè ïîëüçîâàòåëÿ Alice -- ñîçäàåì òàáëèöó company CREATE TABLE company ( emp_id INT, name VARCHAR(25), address VARCHAR(100), phone VARCHAR(15), income MONEY ) go -- õðàíèìàÿ ïðîöåäóðà äëÿ âíåñåíèÿ èçìåíåíèé â òàáëèöó company CREATE PROCEDURE change_income (
12.2. Îáçîð ñðåäñòâ áåçîïàñíîñòè SQL Server 2005
277
@EMP_ID INT, @NEW_INCOME MONEY) AS UPDATE company SET income = @NEW_ INCOME WHERE emp_id = @EMP_ID go -- òåïåðü Alice ïðåäîñòàâëÿåò ïðàâà Bob íà âûïîëíåíèå ïðîöåäóðû change_income GRANT EXECUTE ON public to BOB go
 ñëó÷àå ñ ïîëüçîâàòåëåì Alice, ÿâëÿþùèìñÿ âëàäåëüöåì òàáëèöû è õðàíèìîé ïðîöåäóðû, ïðîâåðêà ïðàâ íå âûïîëíÿåòñÿ. ×òî êàñàåòñÿ Bob, òî çäåñü ñêëàäûâàåòñÿ íåñêîëüêî èíàÿ ñèòóàöèÿ. Bob èìååò ïðàâà íà âûïîëíåíèå ïðîöåäóðû (EXECUTE), îäíàêî îí íå ÿâëÿåòñÿ âëàäåëüöåì òàáëèöû. Íåñìîòðÿ íà ýòî Bob âûïîëíèò õðàíèìóþ ïðîöåäóðó. Îäíàêî âî âðåìÿ åå âûïîëíåíèÿ SQL Server ïðîâåðèò óðîâåíü äîñòóïà ïîëüçîâàòåëÿ Bob ê òàáëèöå company.  ñëó÷àå ñìåíû âëàäåëüöà òàáëèöû company ñ Alice íà Catherine ïðè âûïîëíåíèè õðàíèìîé ïðîöåäóðû ïîëüçîâàòåëåì Bob òàêæå áóäóò ïðîâåðÿòüñÿ ïðàâà äîñòóïà ê òàáëèöå change_income (ëèñòèíã 12.3). Ëèñòèíã 12.3. Ïðîâåðêà öåïî÷êè âëàäåëüöåâ -- Alice ÿâëÿåòñÿ âëàäåëüöåì ïðîöåäóðû ALTER PROCEDURE change_income ( @EMP_ID INT, @NEW_ INCOME MONEY) AS -- Alice ÿâëÿåòñÿ âëàäåëüöåì òàáëèöû company UPDATE company SET income = @NEW_ INCOME WHERE emp_id = @EMP_ID -- Catherine ÿâëÿåòñÿ âëàäåëüöåì òàáëèöû income_audit INSERT INTO Catherine.income_audit values(@EMP_ID, @NEW_INCOME) go
Íà ðèñ. 12.2 ïîêàçàíà äèàãðàììà ñìåíû âëàäåëüöà. Îáðàòèòå âíèìàíèå íà äâà ìîìåíòà: 1. Ïîñêîëüêó ïîëüçîâàòåëü Bob âûçûâàåò ïðîöåäóðó, âëàäåëüöåì êîòîðîé ÿâëÿåòñÿ ïîëüçîâàòåëü Alice, òî îí äîëæåí èìåòü ïðàâà íà óðîâíå EXECUTE. Ïîëüçîâàòåëþ Bob íåò íåîáõîäèìîñòè áûòü âëàäåëüöåì òàáëèö, ê êîòîðûì âûïîëíÿåòñÿ îáðàùåíèå èç õðàíèìîé ïðîöåäóðû. 2. Ïîñêîëüêó Alice íå ÿâëÿåòñÿ âëàäåëüöåì òàáëèöû company, òî âî âðåìÿ äîñòóïà ê ýòîé òàáëèöå ñî ñòîðîíû Bob âûïîëíÿåòñÿ ïðîâåðêà óðîâíÿ äîñòóïà.  îáùåì ñëó÷àå SQL Server âûïîëíÿåò ïðîâåðêó óðîâíÿ äîñòóïà ê îáúåêòàì âî âðåìÿ äîñòóïà ê íèì ñî ñòîðîíû ïîëüçîâàòåëÿ, êîòîðûé íå ÿâëÿåòñÿ âëàäåëüöåì.  òîì ñëó÷àå, åñëè ïîëüçîâàòåëü âëàäååò äâóìÿ îáúåêòàìè è îäèí èç íèõ èìååò ñâÿçü ñ äðóãèì, äîñòóï êî âòîðîìó îáúåêòó íå ïðîâåðÿåòñÿ. Ïîäîáíàÿ ñâÿçü íàçûâàåòñÿ öåïî÷êîé âëàäåëüöà. Åñëè ïîëüçîâàòåëü âëàäååò òîëüêî îäíèì èç äâóõ ñâÿçàííûõ îáúåêòîâ, òî öåïî÷êà ðàçðûâàåòñÿ è SQL Server íåîáõîäèìî ïðîâåðÿòü
278
Ãëàâà 12 • Áåçîïàñíîñòü
óðîâåíü äîñòóïà êî âòîðîìó îáúåêòó (âëàäåëüöåì êîòîðîãî íå ÿâëÿåòñÿ äàííûé ïîëüçîâàòåëü). Âñå ñêàçàííîå âûøå î öåïî÷êå âëàäåëüöà äåéñòâóåò íà âñåõ óðîâíÿõ äîñòóïà ê îáúåêòàì.
Ðèñ. 12.2. Ïðîâåðêà äîñòóïà ê îáúåêòàì
Öåïî÷êà âëàäåëüöà äëÿ ðàçëè÷íûõ áàç äàííûõ èñïîëüçîâàëàñü â SQL Server 2000 SP2 è áîëåå ðàííèõ âåðñèÿõ. Îäíàêî â SQL Server 2000 SP2 äàííàÿ ñèòóàöèÿ áûëà èçìåíåíà. Ïî óìîë÷àíèþ ðåæèì èñïîëüçîâàíèÿ öåïî÷êè âëàäåëüöà îòêëþ÷åí. Ýòî îçíà÷àåò, ÷òî ðàçðàáîò÷èêè íå ìîãóò ñîçäàâàòü ñâÿçü äëÿ îáúåêòîâ, íàõîäÿùèõñÿ â ðàçëè÷íûõ áàçàõ äàííûõ. Âêëþ÷èòü äàííûé ðåæèì ìîæíî ñ ïîìîùüþ ñëåäóþùåãî íàáîðà êîìàíä: USE master EXEC sp_dboption MyDB, 'db chaining', 'True' GO
Ïîìèìî ýòîãî óðîâåíü äîñòóïà ìîæåò áûòü èçìåíåí ñ ïîìîùüþ SQL âíóòðè õðàíèìîé ïðîöåäóðû. Ðàññìîòðèì èñïîëüçîâàíèå äèíàìè÷åñêîé óñòàíîâêè óðîâíÿ äîñòóïà ñ ïîìîùüþ õðàíèìîé ïðîöåäóðû íà ïðèìåðå (ëèñòèíã 12.4). Ëèñòèíã 12.4. Äèíàìè÷åñêèé äîñòóï -- Alice ÿâëÿåòñÿ âëàäåëüöåì ïðîöåäóðû ALTER PROCEDURE change_income ( @EMP_ID INT, @NEW_INCOME MONEY) AS -- Alice ÿâëÿåòñÿ âëàäåëüöåì òàáëèöû company; -- äîñòóï ê òàáëèöå company âûïîëíåí ñ ïîìîùüþ äèíàìè÷åñêîãî SQL execute ('UPDATE company SET income = @NEW_INCOME WHERE emp_id = @EMP_ID') GO
 íîâîé âåðñèè âî âðåìÿ âûçîâà äèíàìè÷åñêîãî SQL âûïîëíÿåòñÿ ïðèíóäèòåëüíàÿ ïðîâåðêà óðîâíÿ äîñòóïà ê îáúåêòàì. Ïðîâåðêà óðîâíÿ äîñòóïà âûïîëíÿåòñÿ âíå çàâèñèìîñòè îò òîãî, ÿâëÿåòñÿ ëè ïîëüçîâàòåëü âëàäåëüöåì îáúåêòà,
12.3. Õðàíåíèå ïàðîëåé
279
ê êîòîðîìó âûïîëíÿåòñÿ äîñòóï ñ ïîìîùüþ äèíàìè÷åñêîãî SQL, èëè íåò.  ðàññìîòðåííîì íàìè ïðèìåðå ïðîâåðÿåòñÿ óðîâåíü äîñòóïà äëÿ ïîëüçîâàòåëÿ Bob âî âðåìÿ âûçîâà ïðîöåäóðû execute. Ïîñêîëüêó Bob íå èìååò äîñòóïà ê òàáëèöå income, òî õðàíèìàÿ ïðîöåäóðà íå áóäåò âûïîëíåíà.  Microsoft SQL Server 2005 êîíöåïöèÿ öåïî÷åê âëàäåëüöà óñîâåðøåíñòâîâàíà äëÿ ñîãëàñîâàíèÿ ñ êîíöåïöèåé ñõåì.  íåå òàêæå ââåäåí ìåõàíèçì âûïîëíåíèÿ â çàâèñèìîñòè îò îêðóæåíèÿ. Óñòàíîâêà ïàðàìåòðîâ îêðóæåíèÿ ìîæåò ïîìî÷ü â ðåøåíèè ìíîãèõ ïðîáëåì èñïîëüçîâàíèÿ äèíàìè÷åñêîãî SQL.
12.3. Õðàíåíèå ïàðîëåé Êàê óïîìèíàëîñü â íà÷àëå äàííîé ãëàâû, ïîëüçîâàòåëè SQL ìîãóò èñïîëüçîâàòü àóòåíòèôèêàöèþ Windows èëè SQL Server äëÿ ðàáîòû ñ ñåðâåðîì SQL. Âî âðåìÿ èñïîëüçîâàíèÿ àóòåíòèôèêàöèè Windows ïàðîëè íå ïåðåñûëàþòñÿ ÷åðåç ñåòü, áëàãîäàðÿ ÷åìó ïîâûøàåòñÿ áåçîïàñíîñòü ñèñòåìû. Òàêæå ìîæíî èñïîëüçîâàòü ïîëèòèêè áåçîïàñíîñòè. Ïîëèòèêà áåçîïàñíîñòè ìîæåò áûòü íàñòðîåíà òàêèì îáðàçîì, ÷òîáû ïîëüçîâàòåëü ìåíÿë ñâîé ïàðîëü ÷åðåç îïðåäåëåííîå âðåìÿ. Êðîìå òîãî, ñ ïîìîùüþ ïîëèòèêè áåçîïàñíîñòè ìîæíî çàäàâàòü ñëîæíûå ïàðîëè (íàïðèìåð, ñîñòîÿùèå èç áóêâ, êàê ìèíèìóì îäíîé öèôðû è ñïåöèàëüíîãî ñèìâîëà). Ìîæíî íàñòðîèòü âõîä â ñèñòåìó òàêèì îáðàçîì, ÷òîáû ïîñëå îïðåäåëåííîãî êîëè÷åñòâà íåóäà÷íûõ ïîïûòîê âõîäà ó÷åòíàÿ çàïèñü ïîëüçîâàòåëÿ áëîêèðîâàëàñü, è ðàçáëîêèðîâàòü åå ìîã òîëüêî ñèñòåìíûé àäìèíèñòðàòîð. Ïîäîáíîå òàêæå âîçìîæíî ïðè èñïîëüçîâàíèè ïîëèòèê àóòåíòèôèêàöèè Windows. Îáû÷íî àäìèíèñòðàòîðû áàç äàííûõ èñïîëüçóþò àóòåíòèôèêàöèþ Windows äëÿ òîãî, ÷òîáû ïîâûñèòü áåçîïàñíîñòü ñèñòåìû.  íîâîé âåðñèè SQL Server ðàçðàáîò÷èêè óíàñëåäîâàëè âñå ïðåèìóùåñòâà Windows â îòíîøåíèè àóòåíòèôèêàöèè. Òåïåðü ìîæíî èñïîëüçîâàòü ïîëèòèêè áåçîïàñíîñòè è â îòíîøåíèè ïîëüçîâàòåëåé SQL Server. Ïîëèòèêè áåçîïàñíîñòè ìîãóò ïðèìåíÿòüñÿ êàê ê ïîëüçîâàòåëÿì, òàê è ê ðîëÿì.  òîì ñëó÷àå, åñëè SQL Server óñòàíîâëåí íà Windows Server 2003, ïîëèòèêè áåçîïàñíîñòè ðåàëèçóþòñÿ âûçîâàìè ôóíêöèé îïåðàöèîííîé ñèñòåìû, òàêèõ êàê NetValidatePasswordPolicy. Òàêèì îáðàçîì, ñèñòåìíûå àäìèíèñòðàòîðû ìîãóò èñïîëüçîâàòü îäíè è òå æå ïîëèòèêè áåçîïàñíîñòè êàê äëÿ ó÷åòíûõ çàïèñåé SQL Server, òàê è äëÿ ó÷åòíûõ çàïèñåé Windows. Ïðè íåîáõîäèìîñòè ïîëèòèêè áåçîïàñíîñòè Windows ìîãóò áûòü îòêëþ÷åíû äëÿ ó÷åòíûõ çàïèñåé SQL Server. Îäíàêî ïîäîáíàÿ ïðàêòèêà íå ðåêîìåíäóåòñÿ, ïîñêîëüêó ïîëèòèêè áåçîïàñíîñòè, íåñìîòðÿ íà íåêîòîðûå îãðàíè÷åíèÿ, èìåþò íåêîòîðûå ïðåèìóùåñòâà (íàïðèìåð, îáÿçàòåëüíàÿ ñìåíà ïàðîëÿ âî âðåìÿ âõîäà â ñèñòåìó èëè ñìåíà ïàðîëÿ âî âðåìÿ ðàáîòû). Ïîëèòèêè áåçîïàñíîñòè íàñòðàèâàþòñÿ ñ ïîìîùüþ óòèëèòû Active Directory Users and Computers (â òîì ñëó÷àå, åñëè â äîìåíå èñïîëüçóåòñÿ àóòåíòèôèêàöèÿ ñ ïîìîùüþ Active Directory) èëè ñ ïîìîùüþ óòèëèòû Local Security Settings (åñëè êîìïüþòåð íå âõîäèò â ñîñòàâ äîìåíà).  òàáë. 12.1 ïåðå÷èñëåíû çíà÷åíèÿ ïàðàìåòðîâ, óñòàíîâëåííûõ â Local Security Settings.
280
Ãëàâà 12 • Áåçîïàñíîñòü
Òàáëèöà 12.1. Ïîëèòèêè áåçîïàñíîñòè äëÿ ïîëüçîâàòåëåé Windows è SQL Server Êàòåãîðèÿ
Íàèìåíîâàíèå ïîëèòèêè
Çíà÷åíèå ïî óìîë÷àíèþ
Ïàðîëè
Enforce Password History
0 ïàðîëåé çàïîìèíàåòñÿ
Áëîêèðîâàíèå ó÷åòíîé çàïèñè
Maximum Password Age
42 äíÿ
Minimum Password Age
0 äíåé
Minimum Password Length
0 ñèìâîëîâ
Password Must Meet Complexity Requirements
Îòêëþ÷åíî
Store Passwords Using Reversible Encryption
Îòêëþ÷åíî
Account Lockout Duration
Íå ïðèìåíÿåòñÿ
Account Lockout Threshold
0 âõîäîâ â ñèñòåìó
Reset Lockout Counter After
Íå ïðèìåíÿåòñÿ
Äëÿ ó÷åòíûõ çàïèñåé SQL Server ïðåäóñìîòðåíî äâà ïàðàìåòðà: · CHECK_EXPIRATION — ïîçâîëÿåò îòñëåæèâàòü äëèòåëüíîñòü èñïîëüçîâàíèÿ ïàðîëÿ; · CHECK_POLICY — èñïîëüçóåòñÿ äëÿ íàñòðîéêè äðóãèõ ïîëèòèêè áåçîïàñíîñòè. Èíîãäà ïîëó÷àåòñÿ òàê, ÷òî ïîëèòèêè áåçîïàñíîñòè êîíôëèêòóþò ìåæäó ñîáîé.  ýòîì ñëó÷àå ó÷åòíàÿ çàïèñü ÷àñòî îêàçûâàåòñÿ çàáëîêèðîâàííîé. Äëÿ ðåøåíèÿ ïîäîáíûõ âîïðîñîâ íåîáõîäèìî ñîçäàòü íîâóþ ó÷åòíóþ çàïèñü, èñïîëüçóÿ SQL Server Management Studio, èëè âûïîëíèòü êîìàíäó CREATE LOGIN ÿçûêà Transact-SQL. Õðàíèìàÿ ïðîöåäóðà sp_addlogin òàêæå ïîääåðæèâàåòñÿ â SQL Server 2005, íî ýòî ñäåëàíî òîëüêî â öåëÿõ îáðàòíîé ñîâìåñòèìîñòè ñ ïðèëîæåíèÿìè, ðàçðàáîòàííûìè äëÿ ïðåäûäóùèõ âåðñèé SQL Server. Äàâàéòå ðàññìîòðèì ñîçäàíèå ó÷åòíîé çàïèñè ïîëüçîâàòåëÿ, ïðè ýòîì ñ ïîìîùüþ êëþ÷à MUST_CHANGE çàäàäèì îáÿçàòåëüíóþ ñìåíó ïàðîëÿ äàííîé ó÷åòíîé çàïèñè ïðè ïåðâîì âõîäå â ñèñòåìó (ëèñòèíã 12.5). Åñëè ïîëüçîâàòåëü ïîïûòàåòñÿ âîéòè â ñèñòåìó áåç ïðèíóäèòåëüíîé ñìåíû ïàðîëÿ, òî åìó áóäåò âûâåäåíî ñîîáùåíèå îá îøèáêå. Ëèñòèíã 12.5. Íàâÿçûâàíèå ïîëüçîâàòåëþ ñìåíû ïàðîëÿ âî âðåìÿ ïåðâîãî âõîäà CREATE LOGIN Alice WITH PASSWORD = 'p@ssw0rd' MUST_CHANGE, DEFAULT_DATABASE = company, CHECK_EXPIRATION = ON, CHECK_POLICY = ON GO SETUSER Alice GO
Äëÿ ðàçáëîêèðîâàíèÿ ïîëüçîâàòåëÿ áàçû äàííûõ àäìèíèñòðàòîð ìîæåò âûïîëíèòü ñëåäóþùèé êîä: ALTER LOGIN Alice WITH PASSWORD = 'p@ssw0rd' UNLOCK GO
 íåêîòîðûõ ñëó÷àÿõ ìîæåò ïîòðåáîâàòüñÿ îòêëþ÷èòü ïîëèòèêó áåçîïàñíîñòè èëè ïðîâåðêó ñðîêà äåéñòâèÿ ïàðîëÿ äëÿ îïðåäåëåííîãî ïîëüçîâàòåëÿ èëè ðîëè.
12.3. Õðàíåíèå ïàðîëåé
281
Ïîìî÷ü â ýòîì òàêæå ìîæåò êîìàíäà ALTER LOGIN. Äëÿ îòêëþ÷åíèÿ ïîëèòèêè áåçîïàñíîñòè âûïîëíèòå ñëåäóþùóþ êîìàíäó: ALTER LOGIN Alice WITH CHECK_POLICY = OFF GO
Äëÿ îòêëþ÷åíèÿ ïîëèòèêè ïðîâåðêè ñðîêà äåéñòâèÿ ïàðîëÿ âûïîëíèòå: ALTER LOGIN Alice WITH CHECK_EXPIRATION = OFF GO
Îáðàòèòå âíèìàíèå íà òî, ÷òî íè îäíà èç ýòèõ êîìàíä íå áóäåò âûïîëíåíà â òîì ñëó÷àå, åñëè óñòàíîâëåí ôëàã MUST_CHANGE è ïîëüçîâàòåëü äî ñèõ ïîð íå ñìåíèë ïàðîëü âî âðåìÿ ïåðâîãî âõîäà â ñèñòåìó.
12.3.1. Ìàíäàò  SQL Server 2005 ðàñøèðåíû âîçìîæíîñòè èñïîëüçîâàíèÿ êîäà .NET äëÿ äîñòóïà ê äàííûì, ïðîöåäóðàì èëè ôóíêöèÿì, êîòîðûå íàõîäÿòñÿ âíå áàçû äàííûõ. Êîíòðîëü ïîäîáíîãî äîñòóïà âûïîëíÿåòñÿ ñ ïîìîùüþ óðîâíÿ áåçîïàñíîñòè ñáîðêè. Äëÿ äîñòóïà ê âíåøíèì ðåñóðñàì ó÷åòíûå çàïèñè SQL Server íå ïîëó÷àþò íèêàêèõ äîïîëíèòåëüíûõ ïðèâèëåãèé.  ýòîì ñëó÷àå äîñòàòî÷íî òîãî, ÷òî èçâåñòíî, îò êàêîãî èìåíè ïîëüçîâàòåëÿ Windows íåîáõîäèìî âûïîëíÿòü òó èëè èíóþ êîìàíäó îïåðàöèîííîé ñèñòåìû.  ïðåäûäóùèõ âåðñèÿõ SQL Server ñóùåñòâîâàëî äâå âîçìîæíîñòè äëÿ îðãàíèçàöèè äîñòóïà ê âíåøíèì ðåñóðñàì: · èñïîëüçîâàíèå ó÷åòíîé çàïèñè ñåðâèñà (ó÷åòíàÿ çàïèñü ñåðâèñà, êîòîðóþ çàïóñêàåò sqlserver.exe); · èñïîëüçîâàíèå ãîñòåâîé ó÷åòíîé çàïèñè — â ýòîì ñëó÷àå ìîæíî óñëîæíèòü çàäà÷ó ïðîãðàììèñòàì, ïîñêîëüêó ãîñòåâûå ó÷åòíûå çàïèñè èç ñîîáðàæåíèé áåçîïàñíîñòè ÷àñòî îòêëþ÷àþòñÿ àäìèíèñòðàòîðàìè.  íîâîé âåðñèè SQL Server ìîæíî âîñïîëüçîâàòüñÿ ìåõàíèçìîì ìàíäàòîâ Windows äëÿ ó÷åòíûõ çàïèñåé SQL Server. Ðàññìîòðèì èñïîëüçîâàíèå ìàíäàòîâ íà ñëåäóþùåì ïðèìåðå (ëèñòèíã 12.6). Ëèñòèíã 12.6. Ïðèìåð èñïîëüçîâàíèÿ ìàíäàòîâ SQL Server 2005 CREATE CREDENTIAL credential_users WITH IDENTITY = 'machine\credential_users', SECRET = 'p@ssw' GO CREATE LOGIN Alice WITH PASSWORD = 'Alice' GO ALTER LOGIN Alice WITH CREDENTIAL = credential_users GO
Îáðàòèòå âíèìàíèå íà òî, ÷òî ïîëüçîâàòåëü Windows (machine\credential_ users) äîëæåí áûòü ñîçäàí è íàñòðîåí â îïåðàöèîííîé ñèñòåìå.
12.3.2. Ðàçäåëåíèå ïîëüçîâàòåëåé è ñõåì Ñòàíäàðò SQL-99 îïðåäåëÿåò êîíöåïöèþ ñõåìû áàçû äàííûõ êàê ãðóïïó äàííûõ, âëàäåëüöåì êîòîðûõ ÿâëÿåòñÿ îïðåäåëåííûé àâòîðèçîâàííûé ïîëüçîâàòåëü.
282
Ãëàâà 12 • Áåçîïàñíîñòü
Îáëàñòü äåéñòâèÿ ñõåì ïðîñòèðàåòñÿ äî ïðåäåëà áàçû äàííûõ (íàçûâàåìîé êàòàëîãîì â ñòàíäàðòå SQL-99). Îäíà áàçà äàííûõ ìîæåò ñîäåðæàòü îäíó èëè áîëåå ñõåì. Îáúåêòû áàçû äàííûõ (òàêèå, êàê õðàíèìûå ïðîöåäóðû, òàáëèöû è ïðåäñòàâëåíèÿ) îòíîñÿòñÿ ê îïðåäåëåííîé ïîëüçîâàòåëüñêîé ñõåìå. Äëÿ äîñòóïà ê ïîäîáíûì îáúåêòàì èñïîëüçóåòñÿ ñëåäóþùåå îáðàùåíèå: schemaname.objectname (íàïðèìåð, MySchema.MyTable).  ïðåäûäóùèõ âåðñèÿõ SQL Server èñïîëüçîâàíèå ñõåì âûçûâàëî íåêîòîðûå ïðîáëåìû ó ðàçðàáîò÷èêîâ. Ïðè÷èíà, âåðîÿòíî, â íåïîíèìàíèè ñàìîãî ìåõàíèçìà èñïîëüçîâàíèÿ ñõåì. Ðàññìîòðèì, íàïðèìåð, ñëó÷àé ñ îáúåêòîì, êîòîðûé ñîçäàë îïðåäåëåííûé ïîëüçîâàòåëü. Êîãäà ïîëüçîâàòåëü ñîçäàåò îáúåêò, ýòîìó îáúåêòó ïðèñâàèâàåòñÿ èìÿ ñëåäóþùåãî âèäà: ownername.objectname. Ëåãêî çàìåòèòü, ÷òî ïîäîáíîå îáðàùåíèå ê îáúåêòó î÷åíü ïîõîæå íà schemaname.objectname.  ñëó÷àå ñîçäàíèÿ ñõåìû ñ ïîìîùüþ êîìàíäû CREATE SCHEMA ïîëüçîâàòåëü, íåñìîòðÿ íà òî ÷òî ÿâëÿëñÿ åå âëàäåëüöåì, íå ìîã ñâÿçàòü åå ñ äðóãèì ïîëüçîâàòåëåì.  SQL Server 2005 ðåàëèçîâàí ìåõàíèçì ñâÿçûâàíèÿ ñõåì è ïîëüçîâàòåëåé. Ñ ïîìîùüþ êîìàíäû CREATE USER äëÿ ïîëüçîâàòåëÿ ìîæíî çàäàòü ñõåìó ïî óìîë÷àíèþ. Åñëè ñõåìà ïî óìîë÷àíèþ íå óñòàíàâëèâàåòñÿ äëÿ îïðåäåëåííîãî ïîëüçîâàòåëÿ, òî äëÿ òàêîãî ïîëüçîâàòåëÿ èñïîëüçóåòñÿ ïî óìîë÷àíèþ ñõåìà DBO. CREATE USER Alice FOR LOGIN Alice WITH, DEFAULT_SCHEMA = 'aliceschema' GO
 ýòîì ñëó÷àå ìû ñîçäàëè ïîëüçîâàòåëÿ è îïðåäåëèëè äëÿ íåãî ñõåìó aliceschema â êà÷åñòâå ñõåìû ïî óìîë÷àíèþ. CREATE USER Bob FOR LOGIN Bob GO
 ýòîì ïðèìåðå ìû ñîçäàëè ïîëüçîâàòåëÿ, îäíàêî ñõåìà äëÿ íåãî íå îïðåäåëÿëàñü. Òàêèì îáðàçîì, äëÿ ïîëüçîâàòåëÿ Bob ñõåìîé ïî óìîë÷àíèþ áóäåò ñõåìà DBO. Âëàäåëüöåì ñõåìû ìîæåò ÿâëÿòüñÿ òîëüêî îïðåäåëåííûé ïîëüçîâàòåëü, ãðóïïà ïîëüçîâàòåëåé Windows, ðîëü SQL Server èëè ïîëüçîâàòåëüñêàÿ ðîëü, îïðåäåëåííàÿ ðàçðàáîò÷èêîì èëè àäìèíèñòðàòîðîì ñèñòåìû. Êîìàíäà CREATE APPLICATION ROLE ïîçâîëÿåò âûïîëíÿòü ñâÿçûâàíèå ðîëè ñî ñõåìîé áàçû äàííûõ. Îáðàòèòå âíèìàíèå íà òî, ÷òî âî âðåìÿ èñïîëüçîâàíèÿ õðàíèìûõ ïðîöåäóð sp_adduser è sp_addapprole âûïîëíÿåòñÿ ñîçäàíèå ñõåì ñ òàêèìè æå èìåíàìè, êàê èìÿ ïîëüçîâàòåëÿ è ðîëè, êîòîðûå ñîçäàþòñÿ âî âðåìÿ âûçîâà ïîäîáíûõ ïðîöåäóð. Ïîñëå çàâåðøåíèÿ ýòèõ ïðîöåäóð íåîáõîäèìî âûïîëíèòü êîìàíäó CREATE, ÷òîáû ïåðåîïðåäåëèòü ñõåìû, èñïîëüçóåìûå ïî óìîë÷àíèþ äëÿ ðîëè èëè ïîëüçîâàòåëÿ.  äàííûé ìîìåíò ïðîùå èñïîëüçîâàòü êîìàíäó CREATE. Ïðîöåäóðû sp_adduser è sp_addapprole áûëè îñòàâëåíû äëÿ îáðàòíîé ñîâìåñòèìîñòè ñ ïðåäûäóùèìè âåðñèÿìè SQL Server. Âëàäåëåö ñõåìû ìîæåò ñîçäàâàòü îáúåêòû áàçû äàííûõ âíóòðè äàííîé ñõåìû, à òàêæå óñòàíàâëèâàòü óðîâíè äîñòóïà ê ýòèì îáúåêòàì. Âëàäåëåö ñõåìû äîëæåí îáëàäàòü ïðàâàìè íà ñîçäàíèå îáúåêòîâ áàçû äàííûõ, îäíàêî ïðàâà íà ñîçäàíèå îáúåêòîâ äåéñòâóþò íà óðîâíå áàçû äàííûõ, à íå íà óðîâíå îïðåäåëåííûé ïîëüçîâàòåëüñêîé ñõåìû. Ðàññìîòðèì ïðèìåð èñïîëüçîâàíèÿ ñâÿçàííîé ñõåìû, âëàäåëüöåì êîòîðîé ÿâëÿåòñÿ äàííûé ïîëüçîâàòåëü (ëèñòèíã 12.7).
12.3. Õðàíåíèå ïàðîëåé
283
Ëèñòèíã 12.7. Ïðèìåð èñïîëüçîâàíèÿ äîñòóïà íà óðîâíå ñõåì USE DemoDB GO -- ñîçäàåì ó÷åòíóþ çàïèñü è îïðåäåëÿåì äëÿ íåãî ÁÄ ïî óìîë÷àíèþ CREATE LOGIN alicelogin WITH password = 'p@ssw0rd', DEFAULT_DATABASE = DemoDB GO -- îïðåäåëÿåì ñõåìó, èñïîëüçóåìóþ ïî óìîë÷àíèþ CREATE USER aliceuser FOR LOGIN alicelogin, WITH DEFAULT_SCHEMA = aliceschema GO CREATE SCHEMA aliceschema AUTHORIZATION aliceuser GO --íàçíà÷àåì ïðàâà ñîçäàíèÿ òàáëèöû ÁÄ GRANT CREATE TABLE TO aliceuser GO SETUSER 'aliceuser' GO CREATE TABLE alicetable (theid INTEGER) GO
Âûïîëíåíèå ýòîãî ñöåíàðèÿ ïðèâåäåò ê ñîçäàíèþ òàáëèöû aliceschema. alicetable.
 íåêîòîðûõ ñëó÷àÿõ ïîëüçîâàòåëþ íåîáõîäèìî èìåòü â êà÷åñòâå ñõåìû, èñïîëüçóåìîé ïî óìîë÷àíèþ, òó, âëàäåëüöåì êîòîðîé îí íå ÿâëÿåòñÿ. Íàïðèìåð, åñëè ïîëüçîâàòåëü alice áûë ñîçäàí áåç îïðåäåëåíèÿ ñõåìû, èñïîëüçóåìîé ïî óìîë÷àíèþ, òî åãî ñõåìîé ïî óìîë÷àíèþ áóäåò DBO, õîòÿ ïîëüçîâàòåëü alice íå ÿâëÿåòñÿ ÷ëåíîì ðîëè DBO. Îáðàòèòå âíèìàíèå, ÷òî â ñëó÷àå, êîãäà ïîëüçîâàòåëü íå ÿâëÿåòñÿ âëàäåëüöåì ñõåìû, îí íå ñìîæåò ñîçäàâàòü â íåé îáúåêòû, îäíàêî îí ñìîæåò ñîçäàâàòü îáúåêòû â äðóãèõ ñõåìàõ áàçû äàííûõ.  ðàññìîòðåííîì íàìè ïðèìåðå ïîëüçîâàòåëü Alice íå ñìîæåò ñîçäàâàòü îáúåêòû â ñõåìå DBO. Íàïðèìåð, êîìàíäà: CREATE TABLE ExampleTable (empid INT)
íå áóäåò âûïîëíåíà, à êîìàíäà: CREATE TABLE OtherSchema.ExampleTable (empid INT)
áóäåò âûïîëíåíà, ïîñêîëüêó ïîëüçîâàòåëü Alice ÿâëÿåòñÿ âëàäåëüöåì ñõåìû OtherSchema. Äëÿ ñõåì, òàê æå êàê è äëÿ áàç äàííûõ, ìîæíî çàäàâàòü óðîâíè äîñòóïà. Íàïðèìåð, àäìèíèñòðàòîð ñèñòåìû ìîæåò çàïðåòèòü âûïîëíåíèå íåêîòîðûõ êîìàíä äëÿ îïðåäåëåííîãî ïîëüçîâàòåëÿ (òàêèõ, êàê VIEW). Äëÿ çàïðåòà âûïîëíåíèÿ òîé èëè èíîé êîìàíäû â ñõåìå èñïîëüçóåòñÿ êîìàíäà DENY, íàïðèìåð: DENY VIEW DEFINITION ON UserSchema::Alice TO public
12.3.3. Ñèíîíèìû èìåí  SQL Server 2005 ìîæíî èñïîëüçîâàòü ñèíîíèìû íàçâàíèé ðàçëè÷íûõ îáúåêòîâ áàçû äàííûõ. Ñèíîíèìû íàçâàíèé îáúåêòîâ — ýòî àëüòåðíàòèâíûå èìåíà äëÿ
284
Ãëàâà 12 • Áåçîïàñíîñòü
îáúåêòîâ áàçû äàííûõ, ïîçâîëÿþùèå óïðîñòèòü ïðîöåäóðó îáðàùåíèÿ ê òîìó èëè èíîìó îáúåêòó. Âìåñòî äëèííîãî èìåíè îáúåêòà (êîòîðîå îáû÷íî âêëþ÷àåò íàèìåíîâàíèå áàçû, ñõåìû è ñàìîãî îáúåêòà) äîïóñêàåòñÿ ñîçäàíèå ïðîñòûõ è ëåãêî çàïîìèíàþùèõñÿ èìåí. Ñèíîíèìû ìîãóò ñîçäàâàòüñÿ äëÿ ëþáûõ íàèìåíîâàíèé îáúåêòîâ (ñîñòîÿùèõ èç îäíîé è áîëåå ÷àñòåé). Ñèíîíèìû ìîãóò áûòü ñîçäàíû äëÿ ñëåäóþùèõ îáúåêòîâ áàç äàííûõ: · ïðîöåäóðà ðåïëèêàöèè; · ïîëüçîâàòåëüñêàÿ ôóíêöèÿ; · õðàíèìàÿ ïðîöåäóðà; · ïðåäñòàâëåíèå; · òàáëèöà. Ðàññìîòðèì íåñêîëüêî ïðèìåðîâ ñîçäàíèÿ è èñïîëüçîâàíèÿ ñèíîíèìîâ: USE DemoDB GO CREATE SYNONYM company FOR server.dbo.companies GO SELECT * FROM company GO
12.4. Íàáîðû ïðàâ äîñòóïà è íîâûå îáúåêòû  SQL Server 2005 ñóùåñòâóåò øåñòü òèïîâ îáúåêòîâ äëÿ âûïîëíåíèÿ êîäà: 1. Ïîëüçîâàòåëüñêèå ôóíêöèè. 2. Õðàíèìûå ïðîöåäóðû. 3. Òðèããåðû. 4. Ïîëüçîâàòåëüñêèå òèïû. 5. Àãðåãàöèè. 6. Ñáîðêè. Ñ ïîìîùüþ ýòèõ îáúåêòîâ è òèïîâ ìîæíî «çàñòàâèòü» SQL Server âûïîëíÿòü ïðîãðàììíûé êîä.  ïðåäûäóùèõ âåðñèÿõ SQL Server òàêæå ñóùåñòâîâàëà âîçìîæíîñòü âûïîëíåíèÿ êîäà, êîòîðûé íàõîäèòñÿ âíå SQL Server (ñ ïîìîùüþ ñïåöèàëüíîãî âûçîâà âíåøíåãî êîäà èëè èñïîëüçîâàíèÿ COM-îáúåêòîâ). Ñ ââåäåíèåì â äåéñòâèå ñðåäû ðàçðàáîòêè, êîòîðàÿ ïîçâîëÿåò êîíòðîëèðîâàòü çàãðóçêó êîäà è åãî âûïîëíåíèå ïîñðåäñòâîì Host Protection Attributes (HPA), ðàçðàáîò÷èêàì ïðåäîñòàâëåíà âîçìîæíîñòü áîëåå áåçîïàñíîãî âûïîëíåíèÿ .NET-ñáîðîê è õðàíèìûõ ïðîöåäóð. Ïðè èñïîëüçîâàíèè SQL Server â êà÷åñòâå ñèñòåìû äëÿ îòëàäêè êîäà .NET ðàçðàáîò÷èêàì ïðåäîñòàâëÿþòñÿ ñëåäóþùèå âîçìîæíîñòè: · ïðîãðàììíûé êîä íå èìååò íåàâòîðèçîâàííîãî äîñòóïà ê ñèñòåìíûì ðåñóðñàì, òàêèì êàê ôàéëû, äèñêè è ñåòè;
12.4. Íàáîðû ïðàâ äîñòóïà è íîâûå îáúåêòû
285
· ïðîãðàììíûé êîä ïîçâîëÿåò îãðàíè÷èòü äîñòóï ê ïîëüçîâàòåëüñêèì äàííûì èëè äðóãîìó ïðîãðàììíîìó êîäó âíóòðè SQL Server; · ñóùåñòâóåò íàáîð èíñòðóìåíòîâ äëÿ îãðàíè÷åíèÿ äîñòóïà èç ïðîãðàììíîãî êîäà ê ðåñóðñàì, êîòîðûå íàõîäÿòñÿ âíå ñåðâåðà SQL; · CLR-ïðîöåäóðû è ôóíêöèè ïðåäîñòàâëÿþò âîçìîæíîñòü ñîçäàâàòü îáîëî÷êè äëÿ îáåñïå÷åíèÿ áåçîïàñíîñòè ïðîãðàììíîãî êîäà, òàê æå êàê ýòî ðàíåå ïîçâîëÿëè äåëàòü ôóíêöèè è ïðîöåäóðû T-SQL.
12.4.1. Ñáîðêè Ðàçðàáîò÷èêè ìîãóò ñîçäàâàòü ñáîðêè è âûïîëíÿòü ñ íèìè îïðåäåëåííûå íàáîðû äåéñòâèé. Äëÿ ñîçäàíèÿ ñáîðêè èñïîëüçóåòñÿ êîìàíäà CREATE ASSEMBLY. Ïî óìîë÷àíèþ òîëüêî ïîëüçîâàòåëè, âõîäÿùèå â ñîñòàâ ðîëåé db_owner, ddl_admin èëè sysadmin, èìåþò ïðàâà íà âûïîëíåíèå êîìàíä, ñâÿçàííûõ ñ ñîçäàíèåì ñáîðîê è óïðàâëåíèåì èìè (òàêèìè, êàê ALTER ASSEMBLY è DROP ASSEMBLY). Îäíàêî ïîäîáíûå ïðàâà íà âûïîëíåíèå êîìàíä ìîãóò áûòü ïðåäîñòàâëåíû äðóãèì ïîëüçîâàòåëÿì.  ýòîì ñëó÷àå ïîëüçîâàòåëü, ñîçäàþùèé ñáîðêó, àâòîìàòè÷åñêè ñòàíîâèòñÿ åå âëàäåëüöåì. Ïðè ýòîì ìîæíî ñâÿçàòü ïîëüçîâàòåëÿ èëè ðîëü ñî ñáîðêîé ïðè ïîìîùè ïàðàìåòðà AUTHORIZATION, êîòîðûé èñïîëüçóåòñÿ âìåñòå ñ êîìàíäàìè CREATE ASSEMBLY è ALTER ASSEMBLY. Ðàññìîòðèì èñïîëüçîâàíèå äàííîãî ïàðàìåòðà íà ïðèìåðå (ëèñòèíã 12.8). Ëèñòèíã 12.8. Ïðèìåð èñïîëüçîâàíèÿ êîìàíäû CREATE ASSEMBLY -- ïîä ó÷åòíîé çàïèñüþ sysadmin ñîçäàåì ñáîðêó CREATE ASSEMBLY AssemblyTypes FROM '\\myserver\types\AssemblyTypes.dll' GO -- ñîçäàåì ñáîðêó, âëàäåëüöåì êîòîðîé íàçíà÷àåì DBO -- êîä âûïîëíÿåòñÿ îò èìåíè sysadmin CREATE ASSEMBLY AnotherAssemblyTypes AUTHORIZATION dbo FROM '\\myserver\types\AnotherAssemblyTypes.dll' -- èçìåíÿåì âëàäåëüöà ïåðâîé ñáîðêè íà DBO ALTER ASSEMBLY AssemblyTypes AUTHORIZATION dbo
 îáùåì ñëó÷àå êîìàíäà CREATE ASSEMBLY âûïîëíÿåò ÷òåíèå áàéòîâ êîäà èç ôàéëà Windows. Íåñìîòðÿ íà òî ÷òî âûïîëíÿåòñÿ ÷òåíèå ôàéëà, ê íåìó íå òðåáóåòñÿ óñòàíàâëèâàòü äîïîëíèòåëüíûé óðîâåíü äîñòóïà.  ïðåäûäóùåì ïðèìåðå âûïîëíÿåòñÿ ñîçäàíèå ñáîðêè, ïðè ýòîì ÷òåíèå ôàéëà âûïîëíÿåòñÿ èç ñîâìåñòíî èñïîëüçóåìîãî ðåñóðñà. Êîìàíäà ALTER ASSEMBLY òàêæå ìîæåò âûïîëíÿòü ÷òåíèå áàéòîâ èç ñèñòåìíîãî ôàéëà â òîì ñëó÷àå, åñëè ðåæèì ïåðåçàïèñè ïðîãðàììíîãî êîäà èëè çàãðóçêè îòëàäî÷íûõ ñèìâîëîâ ðàçðåøåí â êîìàíäå ALTER ASSEMBLY. Íåêîòîðûì ïîëüçîâàòåëÿì Windows, íå èìåþùèì äîñòóïà ê íåîáõîäèìûì ôàéëàì, âñå æå òðåáóåòñÿ íàñòðîèòü óðîâåíü äîñòóïà. Äàâàéòå ñíà÷àëà ðàçáåðåìñÿ, îò èìåíè êàêîãî ïîëüçîâàòåëÿ âûïîëíÿåòñÿ ÷òåíèå ôàéëà Windows è ñîçäàíèå ñáîðêè.  òîì ñëó÷àå, åñëè ïîëüçîâàòåëü âîøåë â ñèñ-
286
Ãëàâà 12 • Áåçîïàñíîñòü
òåìó ñ èñïîëüçîâàíèåì ó÷åòíîé çàïèñè SQL Server, äîñòóï ê óäàëåííîìó ôàéëó áóäåò çàïðåùåí.  íåêîòîðûõ ñëó÷àÿõ ó÷åòíàÿ çàïèñü SQL Server âñå æå ìîæåò ïîëó÷èòü äîñòóï ê óäàëåííîìó ôàéëó, èñïîëüçóÿ ìàíäàò ñèñòåìíîãî ïîëüçîâàòåëÿ (ïðè âûïîëíåíèè êîäà îò èìåíè SA) èëè ìàíäàò äðóãîãî ñèñòåìíîãî ïîëüçîâàòåëÿ.  ñëó÷àå èñïîëüçîâàíèÿ ó÷åòíîé çàïèñè Windows ïîäîáíûõ ïðîáëåì íå âîçíèêàåò. Äîñòóï ê ôàéëó ïðåäîñòàâëÿåòñÿ ñ ïîìîùüþ çàèìñòâîâàíèÿ ïðàâ. Ýòî îçíà÷àåò, ÷òî ïîëüçîâàòåëü íå ïîëó÷èò äîñòóïà ê ñèñòåìíîìó ôàéëó â òîì ñëó÷àå, åñëè íå èìååò ïðàâ íà âûïîëíåíèå êîìàíä îò èìåíè äðóãîãî ïîëüçîâàòåëÿ. Åñëè ïîëüçîâàòåëü èìååò òàêèå ïðàâà è èñïîëüçîâàë ó÷åòíóþ çàïèñü Windows äëÿ âõîäà â SQL Server, òî äîñòóï ê ôàéëó åìó áóäåò ïðåäîñòàâëåí. Äëÿ çàâåðøåíèÿ ïðîöåññà ñîçäàíèÿ èëè îáíîâëåíèÿ ñáîðêè íåîáõîäèìî âûïîëíèòü ïîñëåäíåå óñëîâèå. Íóæíî îïðåäåëèòü òðè óðîâíÿ äîñòóïà äëÿ âûáðàííîé ñáîðêè — SAFE, EXTERNAL_ACCESS è UNSAFE (ïåðå÷èñëåíû â ïîðÿäêå óìåíüøåíèÿ óðîâíÿ áåçîïàñíîñòè). Ïîñêîëüêó âñå òðè óðîâíÿ òðåáóþò äîïîëíèòåëüíûõ ïðèâèëåãèé â îòíîøåíèè âûïîëíåíèÿ êîäà, òî äëÿ âûïîëíåíèÿ êîìàíä CREATE è ALTER ASSEMBLY òðåáóþòñÿ äîïîëíèòåëüíûå óðîâíè äîñòóïà ê ïðîãðàììíîìó êîäó, à òàêæå òðåáóåòñÿ ïðåäîñòàâèòü ðåçóëüòèðóþùåé ñáîðêå ïðàâà äîñòóïà, îòëè÷íûå îò SAFE. Ïîëüçîâàòåëü, ñîçäàþùèé ñáîðêó, äîëæåí èìåòü ïðàâà äîñòóïà íà óðîâíå CREATE ASSEMBLY èëè äîëæåí âõîäèòü â ñîñòàâ îäíîé èç ñëåäóþùèõ ðîëåé: dbowner, ddl_admin èëè sysadmin. Òàêæå ïîëüçîâàòåëü äîëæåí èìåòü íàáîð ïðàâ äîñòóïà EXTERNAL_ACCESS, åñëè òàêîâîé èñïîëüçóåòñÿ â ñèñòåìå. Åñëè â ñèñòåìå èñïîëüçóåòñÿ íàáîð äîñòóïà UNSAFE, òî ïîëüçîâàòåëþ äëÿ ñîçäàíèÿ ñáîðîê òðåáóåòñÿ âõîäèòü â ñîñòàâ ðîëè sysadmin. Ê òîìó æå íåîáõîäèìî èñïîëüçîâàòü ñåðòèôèêàò èëè êëþ÷ äëÿ ïîäïèñè ñáîðêè. Äàííûé ñåðòèôèêàò èëè êëþ÷ áóäåò ïîìåùåí â áàçó äàííûõ âìåñòå ñî ñáîðêîé.
12.4.2. Íàáîðû ïðàâ äîñòóïà è ñáîðêè Êàê áûëî ïîêàçàíî â ïðåäûäóùåì ðàçäåëå, äëÿ ñîçäàíèÿ è èçìåíåíèÿ ñáîðîê ïîëüçîâàòåëü äîëæåí îáëàäàòü ñïåöèàëüíûìè ïðàâàìè.  îáùåì ñëó÷àå äîñòóï êî âñåì .NET-îáúåêòàì ñåðâåðà SQL áàçèðóåòñÿ íà îñíîâå òðåõ óðîâíåé ñâÿçè ìåæäó îáúåêòàìè: · ïðîöåäóðíàÿ ñâÿçü; · ñâÿçü ìåæäó ñõåìàìè; · ñâÿçü ìåæäó òàáëèöàìè. Ïðîöåäóðíàÿ ñâÿçü àêòèâèçèðóåòñÿ ñ ïîìîùüþ óðîâíÿ äîñòóïà EXECUTE. Ïðèìåðîì èñïîëüçîâàíèÿ ïðîöåäóðíîé ñâÿçè ìîæåò ñëóæèòü âûçîâ îäíîé õðàíèìîé ïðîöåäóðû èç äðóãîé. Ñâÿçü ìåæäó ñõåìàìè àêòèâèçèðóåòñÿ ñ ïîìîùüþ óðîâíÿ äîñòóïà REFERENCES. Èñïîëüçîâàíèå äàííîãî òèïà ñâÿçè ïðèâîäèò ê ñîçäàíèþ ñâÿçåé ìåæäó îáúåêòàìè ñõåì. Îáúåêò, íà êîòîðûé ññûëàåòñÿ äðóãîé îáúåêò ñõåìû, íå ìîæåò áûòü èçìåíåí èëè óäàëåí äî òåõ ïîð, ïîêà íå óäàëåíà ññûëêà íà íåãî.
12.4. Íàáîðû ïðàâ äîñòóïà è íîâûå îáúåêòû
287
Ñâÿçü ìåæäó òàáëèöàìè ïîçâîëÿåò ñîçäàâàòü ëîãè÷åñêèå ññûëêè ìåæäó òàáëèöàìè, ïðåäñòàâëåíèÿìè è òàáëè÷íûìè ôóíêöèÿìè. Äàííûé ìåõàíèçì î÷åíü ñõîæ ñ ìåõàíèçìîì ññûëîê, îäíàêî åãî îñíîâíîé îòëè÷èòåëüíîé îñîáåííîñòüþ ÿâëÿåòñÿ áîëåå ãèáêèé ìåõàíèçì äîñòóïà. Ðàçðàáîò÷èê ìîæåò óñòàíàâëèâàòü îäèí èç ñëåäóþùèõ óðîâíåé äîñòóïà äëÿ òàáëèöû èëè ïðåäñòàâëåíèÿ: SELECT, INSERT, UPDATE è DELETE. Äàâàéòå òåïåðü ðàññìîòðèì, ÷òî äàííûå óðîâíè äîñòóïà ïðåäîñòàâëÿþò äëÿ ñáîðîê. Óðîâåíü äîñòóïà EXECUTE äëÿ ñáîðêè ïîçâîëÿåò ïîëüçîâàòåëÿì êàòàëîãèçèðîâàòü ñáîðêè èëè ïðèñâàèâàòü çíà÷åíèÿ îòêðûòûì êëàññàì âíóòðè ñáîðêè. Òàêæå äàííûé óðîâåíü äîñòóïà ïîçâîëÿåò ñîçäàâàòü ññûëêè èç îäíîé ñáîðêè íà ýêçåìïëÿð êëàññà äðóãîé. Ïðåäîñòàâëåíèå ïîëüçîâàòåëþ äîñòóïà íà óðîâíå EXECUTE íå äàåò åìó àâòîìàòè÷åñêè äîñòóïà ê õðàíèìûì ïðîöåäóðàì èëè ïîëüçîâàòåëüñêèì ôóíêöèÿì, îïðåäåëåííûì âíóòðè ñáîðêè. Äëÿ ïðåäîñòàâëåíèÿ äîñòóïà ê ïîäîáíûì îáúåêòàì óñòàíîâèòå äîïîëíèòåëüíî ïðàâà äîñòóïà ïîëüçîâàòåëÿ ê äàííûì îáúåêòàì. Óðîâåíü äîñòóïà REFERENCES ïðåäîñòàâëÿåò ïîëüçîâàòåëþ âîçìîæíîñòü ñîçäàâàòü ññûëêè íà õðàíèìûå ïðîöåäóðû è ïîëüçîâàòåëüñêèå ôóíêöèè â ïðîöåññå ñîçäàíèÿ ïðåäñòàâëåíèé ñ èñïîëüçîâàíèåì ïàðàìåòðà WITH SCHEMABINDING. ×òî êàñàåòñÿ òðèããåðîâ, ïîëüçîâàòåëüñêèõ òèïîâ è ïðåäñòàâëåíèé, òî äàííûé óðîâåíü äîñòóïà ïðåäîñòàâëÿåò ïîëüçîâàòåëþ âîçìîæíîñòü ñîçäàâàòü îáúåêòû è ññûëàòüñÿ íà íèõ. Íàïðèìåð, èñïîëüçîâàíèå REFERENCES â îòíîøåíèè UDT ðàçðåøàåò ïîëüçîâàòåëþ ñîçäàâàòü òàáëèöû, êîòîðûå èñïîëüçóþò UDT â êà÷åñòâå îòäåëüíîé êîëîíêè.
12.4.3. Îáùèå ñáîðêè è áåçîïàñíîñòü SQL Server èñïîëüçóåò îáðàç .NET äëÿ òîãî, ÷òîáû îïðåäåëèòü ñâÿçü ìåæäó ñáîðêàìè. Îáðàç ñîäåðæèò ñâîäíóþ òàáëèöó ñ èíôîðìàöèåé î òîì, êàêèå ñáîðêè ññûëàþòñÿ íà äðóãèå îáúåêòû äàííîãî òèïà. Âî âðåìÿ çàãðóçêè ñáîðêè SQL Server ïîìå÷àåò êàæäóþ èç íèõ êàê âèäèìóþ èëè ñêðûòóþ. Ïîä âèäèìîé ñáîðêîé ïîäðàçóìåâàåòñÿ òî, ÷òî îíà èìååò èìÿ, êîòîðîå ñ íåé àññîöèèðîâàíî. Ñêðûòàÿ ñáîðêà íå èìååò èìåíè, à ñëåäîâàòåëüíî, íå ìîæåò áûòü èñïîëüçîâàíà ïîëüçîâàòåëåì äî èíèöèàëèçàöèè. Ïîëüçîâàòåëè ìîãóò çàäàâàòü ïðàâà äîñòóïà òîëüêî äëÿ âèäèìîé ñáîðêè, ïîñêîëüêó ïðè âûçîâå êîìàíäû GRANT òðåáóåòñÿ çàäàòü èìÿ îáúåêòà. Èç ýòîãî ñëåäóåò, ÷òî ñêðûòûå ñáîðêè ÿâëÿþòñÿ ÷àñòíûìè äëÿ òåõ ñáîðîê, êîòîðûå ññûëàþòñÿ íà íèõ. Ðàññìîòðèì èñïîëüçîâàíèå ñêðûòîé ñáîðêè, ïðîöåññ ñîçäàíèÿ íà åå îñíîâå âèäèìîé ñáîðêè è íàñòðîéêó ïðàâ äîñòóïà íà óðîâíå REFERENCES â ñëåäóþùåì ïðèìåðå (ëèñòèíã 12.9). Ëèñòèíã 12.9. Íàñòðîéêà óðîâíÿ äîñòóïà REFERENCES -- ñîçäàåì ñáîðêó AssemblyTypes CREATE ASSEMBLY AssemblyTypes FROM '\\myserver\types\AssemblyTypes.dll' GO
ïðîäîëæåíèå
È
288
Ãëàâà 12 • Áåçîïàñíîñòü
Ëèñòèíã 12.9 (ïðîäîëæåíèå) -- ïðåäîñòàâëÿåì äîñòóï ïîëüçîâàòåëþ Alice ê äàííîé ñáîðêå GRANT EXECUTE ON AssemblyTypes TO Alice GO -- Alice ïîòðåáóåòñÿ äîñòóï ê ñáîðêå OtherAssemblyTypes -- ýòî ïðèâåäåò ê îøèáêå: 'OtherAssemblyTypes does not exist in the SQL Server catalog' GRANT EXECUTE ON OtherAssemblyTypes TO Alice GO -- äåëàåì äàííóþ ñáîðêó âèäèìîé ALTER ASSEMBLY OtherAssemblyTypes FROM '\\myserver\types\OtherAssemblyTypes.dll' SET VISIBILITY = ON -- òåïåðü Alice ñìîæåò îáðàùàòüñÿ ê äàííîé ñáîðêå ïî èìåíè GRANT EXECUTE ON OtherAssemblyTypes TO Alice GO
Ñëîâàðü òåðìèíîâ
Business Intelligence — òåðìèí, îáîçíà÷àþùèé êëàññ ïðèëîæåíèé äëÿ ñáîðà, îáðàáîòêè è âñåñòîðîííåãî àíàëèçà äàííûõ èç ðàçëè÷íûõ èñòî÷íèêîâ. Òàêæå äàííûé òåðìèí ïîäðàçóìåâàåò ñàì ïðîöåññ èçâëå÷åíèÿ èíôîðìàöèè èç äàííûõ è ïðåäîñòàâëåíèÿ åå â óäîáíîì âèäå äëÿ ìåíåäæåðîâ âåðõíåãî çâåíà ñ öåëüþ ïîìî÷ü â ïðèíÿòèè ðåøåíèé. CRUD (Create, Read, Update è Delete) — â îòíîøåíèè áàçû äàííûõ ýòà àááðåâèàòóðà ñîîòâåòñòâóåò ñëåäóþùèì êîìàíäàì SQL: INSERT, SELECT, UPDATE è DELETE. Îçíà÷àåò íàáîð ýëåìåíòàðíûõ îïåðàöèé, äîñòóïíûõ äëÿ âûïîëíåíèÿ íàä áàçîé äàííûõ. DBA — ñì. Àäìèíèñòðàòîð áàçû äàííûõ. HOLAP, Hybrid OLAP — òåõíîëîãèè OLAP, îñíîâàííûå íà ìíîãîìåðíîì ïðåäñòàâëåíèè ñîäåðæèìîãî áàç äàííûõ ðàçëè÷íûõ òèïîâ. MOLAP, Multi-Level OLAP — òåõíîëîãèè OLAP, â êîòîðûõ èñòî÷íèêàìè äàííûõ ñëóæàò ìíîãîìåðíûå áàçû äàííûõ. ODBC, Open Database Connectivity — ðàñïðîñòðàíåííûé ñòàíäàðò, ïîääåðæèâàåìûé ïðèëîæåíèÿìè, êîòîðûå âçàèìîäåéñòâóþò ñ áàçàìè äàííûõ. Ñòàíäàðò ïîääåðæèâàåòñÿ â ïðîäóêòàõ êîìïàíèé Microsoft, Oracle, Sybase è äð. ODBC âêëþ÷àåò â ñâîé ñîñòàâ ñåìåéñòâî ÿçûêîâ SQL äëÿ ìàíèïóëèðîâàíèÿ îáúåêòàìè áàçû äàííûõ. ROLAP, Relational OLAP — òåõíîëîãèè OLAP, èñïîëüçóþùèå ïðåäñòàâëåíèå äàííûõ â âèäå êóáà. Ïîíÿòèå êóáîâ ïîääåðæèâàåòñÿ íàä ðåëÿöèîííîé áàçîé äàííûõ. Select — çàïðîñ, ðåçóëüòàòîì êîòîðîãî ÿâëÿåòñÿ âûâîä ñòðîê, óäîâëåòâîðÿþùèõ çàäàííûì óñëîâèÿì. SQL, Structured Query Language (ßçûê ñòðóêòóðèðîâàííûõ çàïðîñîâ) — ÿçûê ïðîãðàììèðîâàíèÿ, êîòîðûé ïîçâîëÿåò ðåàëèçîâàòü ïîëüçîâàòåëüñêèé èíòåðôåéñ ñ ðåëÿöèîííûìè áàçàìè äàííûõ. SQL — ñòàíäàðò äå ôàêòî äëÿ ñîçäàíèÿ ïðèëîæåíèé ðåëÿöèîííûõ áàç äàííûõ. Îí òàêæå ìîæåò ïðèñóòñòâîâàòü
290
Ñëîâàðü òåðìèíîâ
â ïðîãðàììíîì êîäå â êà÷åñòâå âñòàâîê, ÷òî ïîçâîëÿåò âûçûâàòü êîìàíäû SQL èç äðóãèõ ÿçûêîâ (íàïðèìåð, Ñ++ èëè Delphi). Àâòîðèçàöèîííûé çàïðîñ (authorization request) — çàïðîñ, èíèöèèðóåìûé êëèåíòîì äëÿ ïîëó÷åíèÿ äîñòóïà ê äàííûì, ê êîòîðûì îí íå èìåë äîñòóïà ðàíåå. Àãåíò (emissary) — îáîáùàþùèé òåðìèí äëÿ ïðîãðàììíûõ êîìïîíåíòîâ, êîòîðûå èñïîëüçóþòñÿ äëÿ âçàèìîäåéñòâèÿ ñ âíåøíèìè èñòî÷íèêàìè äàííûõ â ñîîòâåòñòâèè ñ ïîòðåáíîñòÿìè îïðåäåëåííîãî ïðèëîæåíèÿ. Àãåíò ïîçâîëÿåò íå òîëüêî òðàíñëèðîâàòü çàïðîñ âî âíåøíþþ ñèñòåìó íà ïîëó÷åíèå äàííûõ, íî è êîíâåðòèðîâàòü äàííûå. Àãåíò ñåðâèñà (service agent) — ïðîãðàììíîå îáåñïå÷åíèå, ïîçâîëÿþùåå âûïîëíÿòü îáìåí èíôîðìàöèåé ñ âíåøíèìè ñåðâèñàìè ñèñòåìû. Àäìèíèñòðàòîð áàçû äàííûõ (database administrator, DBA) — ñïåöèàëèñò, îòâåòñòâåííûé çà ðàçðàáîòêó, ïîääåðæêó è áåçîïàñíîñòü áàç äàííûõ íà ïðåäïðèÿòèè. Àäìèíèñòðèðîâàíèå äàííûõ (data administration) — ôóíêöèÿ óïðàâëåíèÿ äàííûìè, êîòîðàÿ ïîäðàçóìåâàåò ñáîð è ïîääåðæàíèå â àêòóàëüíîì ñîñòîÿíèè äàííûõ ñïðàâî÷íèêîâ ïðåäïðèÿòèÿ. Ôóíêöèè óïðàâëåíèÿ äàííûìè òàêæå ïîäðàçóìåâàþò àíàëèç ïðîèçâîäèòåëüíîñòè áàç äàííûõ ïðåäïðèÿòèÿ ñ öåëüþ âûðàáîòêè ñòàíäàðòîâ èñïîëüçîâàíèÿ äàííûõ è áåçîïàñíîñòè. Àíàëèç çàïðîñà (query resolution) — ïðîöåññ ñáîðà äàííûõ, êîòîðûå íåîáõîäèìû äëÿ âûïîëíåíèÿ çàïðîñà. Àíàëèòè÷åñêèé òèï áàçû äàííûõ (analytical type of database) — áàçà äàííûõ, ñîäåðæàùàÿ äàííûå èç îïåðàòèâíîé è âíåøíåé áàç äàííûõ. Àíàëèòè÷åñêàÿ áàçà äàííûõ èñïîëüçóåòñÿ äëÿ ïåðåäà÷è äàííûõ â àíàëèòè÷åñêèå ñèñòåìû, ñèñòåìû ïîääåðæêè ïðèíÿòèÿ ðåøåíèé è äðóãèå èíôîðìàöèîííûå ñèñòåìû. Àðõèòåêòóðà õðàíèëèùà äàííûõ (data warehouse architecture) — èíòåãðèðîâàííûé íàáîð ïðîãðàììíûõ ïðîäóêòîâ, ïîçâîëÿþùèé èçâëåêàòü è ïðåîáðàçîâûâàòü îïåðàòèâíûå äàííûå ñ öåëüþ èõ äàëüíåéøåé çàãðóçêè â áàçó äàííûõ äëÿ ïîñëåäóþùåãî àíàëèçà è ôîðìèðîâàíèÿ îò÷åòîâ äëÿ êîíå÷íûõ ïîëüçîâàòåëåé. Àòîìàðíàÿ òðàíçàêöèÿ (atomic transaction) — òðàíçàêöèÿ, â êîòîðîé ëèáî âñå ýòàïû âûïîëíÿþòñÿ, ëèáî íå âûïîëíÿåòñÿ íè îäèí. Àòîìàðíàÿ òðàíçàêöèÿ îáû÷íî èñïîëüçóåòñÿ äëÿ èçìåíåíèÿ äàííûõ â áàçå äàííûõ. Àòîìàðíûå äàííûå (atomic data) — ýëåìåíòû äàííûõ, êîòîðûå ïðåäñòàâëÿþò ñîáîé íèçøèé óðîâåíü äåòàëèçàöèè íàáîðà äàííûõ. Àòðèáóò (attribute) — èñïîëüçóåòñÿ äëÿ îïèñàíèÿ íàáîðà âçàèìîñâÿçàííûõ âåëè÷èí. Îáû÷íî ïðåäñòàâëÿåò ñîáîé íàáîð êîëîíîê, ñîäåðæàùèõ ðàçíîðîäíóþ èíôîðìàöèþ. Áàçà äàííûõ, ÁÄ (database) 1. Íàáîð âñåõ íåîáõîäèìûõ äàííûõ, êîòîðûå ïîìîãàþò îòäåëüíîìó ïîëüçîâàòåëþ èëè öåëîé îðãàíèçàöèè âûïîëíÿòü îïðåäåëåííûå ôóíêöèè. 2. Íàáîð ñâÿçàííûõ ôàéëîâ. 3. Ëþáîé íàáîð äàííûõ, ÿâëÿþùèéñÿ ðåçóëüòàòîì âûïîëíåíèÿ çàïðîñà. 4. Ñèñòåìà óïðàâëåíèÿ õðàíèëèùåì. Áàçà äàííûõ back-end (back-end database) — áàçà äàííûõ, êîòîðàÿ îáû÷íî íàõîäèòñÿ íà êîìïüþòåðå, îòëè÷íîì îò òîãî, íà êîòîðîì íàõîäèòñÿ áàçà äàííûõ
Ñëîâàðü òåðìèíîâ
291
front-end (áàçà, ê êîòîðîé èìåþò íåïîñðåäñòâåííûé äîñòóï ïîëüçîâàòåëè). Áàçà back-end ìîæåò ñîäåðæàòü îäèí èëè íåñêîëüêî ñåðâåðîâ áàç äàííûõ. Òàêèì îáðàçîì, äàííûå ìîãóò áûòü ðàçíåñåíû ïî ðàçëè÷íûì ñåðâåðàì. Ïîääåðæêà òàêèõ ñòàíäàðòîâ, êàê ODBC, ïîçâîëÿåò ñîçäàòü ãåòåðîãåííóþ ñðåäó äëÿ ðåàëèçàöèè áàçû äàííûõ back-end. Áàçà äàííûõ êîíå÷íîãî ïîëüçîâàòåëÿ (end user type of database) — áàçà äàííûõ, ñîäåðæàùàÿ íàáîð äàííûõ, êîòîðûå áûëè çàðàíåå èçâëå÷åíû èç ðàçëè÷íûõ áàç äàííûõ ïðåäïðèÿòèé è ïðèâåäåíû ê åäèíîìó îáùåìó âèäó. Áàçà äàííûõ ëîêàëüíîãî äîñòóïà (Local Access Database, LAD) — áàçà äàííûõ, îáñëóæèâàþùàÿ îòäåëüíûå ñèñòåìû è ðàáî÷èå ãðóïïû. Ïîäîáíûå áàçû äàííûõ ÿâëÿþòñÿ «ðîçíè÷íûìè òîðãîâûì òî÷êàìè» â ñåòè õðàíèëèùà äàííûõ. Îíè îáåñïå÷èâàþò ïðÿìîé äîñòóï ê äàííûì, íåîáõîäèìûì êîíêðåòíûì íàñòîëüíûì ñèñòåìàì èëè ñëóæáàì çàïðîñîâ. Äàííûå ïîïàäàþò â LAD èç õðàíèëèù äàííûõ ñîãëàñíî îïðåäåëåííûì óñëîâèÿì. Áàçîâûå òàáëèöû (base tables) — íîðìèðîâàííûå ñòðóêòóðû äàííûõ, îáðàáàòûâàåìûå â òàáëèöå-ïðèåìíèêå. Òàêæå äëÿ îáîçíà÷åíèÿ äàííîãî ïîíÿòèÿ èñïîëüçóåòñÿ òåðìèí «äåòàëüíûå äàííûå» (detail data). Áàçîâûé çàïðîñ (base query) — ñì. Ïîâåðõíîñòíûé çàïðîñ. Áèáëèîòåêà MFC (Microsoft Foundation Class Library) — íàáîð êëàññîâ, ïîääåðæèâàåìûé êîìïàíèåé Microsoft. MFC èìååò èåðàðõè÷åñêóþ ñòðóêòóðó è ðàññ÷èòàíà íà èñïîëüçîâàíèå â ñðåäå ïðîãðàììèðîâàíèÿ Visual C++. MFC âêëþ÷àåò â ñåáÿ ñðåäó ðàçðàáîòêè äëÿ ñîçäàíèÿ ïðèëîæåíèé, íà îñíîâå êîòîðîé ïðîãðàììèñòû ìîãóò ëåãêî ñîçäàâàòü ïðèëîæåíèÿ, èñïîëüçóþùèå íèçêîóðîâíåâûå ôóíêöèè îïåðàöèîííîé ñèñòåìû ñåìåéñòâà Windows. Áèáëèîòåêà êëàññîâ (class library) — íàáîð ñâÿçàííûõ êëàññîâ, êîòîðûå ñîáðàíû â âèäå èåðàðõè÷åñêîé ñòðóêòóðû. Èåðàðõèÿ ñòðîèòñÿ ïóòåì ñîáëþäåíèÿ ðîäñòâåííûõ îòíîøåíèé ìåæäó êëàññàìè (íàñëåäóåìûé êëàññ — êëàññ-ðîäèòåëü). Ñóùåñòâóåò íåñêîëüêî ñòàíäàðòíûõ áèáëèîòåê êëàññîâ, ðàçðàáàòûâàåìûõ êðóïíûìè ïðîèçâîäèòåëÿìè ñðåä äëÿ ïðîãðàììèðîâàíèÿ. Íàïðèìåð, ÿðêèì ïðåäñòàâèòåëåì ïîäîáíûõ áèáëèîòåê ìîæåò ñëóæèòü áèáëèîòåêà MFC. Áëîêèðîâêà (locking) — ìåòîä «çàìîðàæèâàíèÿ» áàçû äàííûõ, ñâÿçè, êîðòåæà èëè íàáîðà äàííûõ âî âðåìÿ äîñòóïà ê íåìó îäíîãî èç ïîëüçîâàòåëåé. Áëîêèðîâêà ïîçâîëÿåò îáåñïå÷èòü ñîõðàííîñòü äàííûõ â òî âðåìÿ, êîãäà îíè èçìåíÿþòñÿ îäíèì ïîëüçîâàòåëåì. Âî âðåìÿ áëîêèðîâêè äðóãîé ïîëüçîâàòåëü íå ñìîæåò èçìåíèòü äàííûå. Áëîêèðîâêà ïðè çàïèñè (write lock) — áëîêèðîâêà ñòðîêè òàáëèöû, â êîòîðóþ âûïîëíÿåòñÿ çàïèñü äàííûõ. Ïîçâîëÿåò èçáåæàòü ïîòåðè äàííûõ ïðè çàïèñè â òàáëèöó äàííûõ ðàçíûìè ïîëüçîâàòåëÿìè. Ñì. òàêæå Áëîêèðîâêà. Áûñòðàÿ çàãðóçêà (fastload) — òåõíîëîãèÿ, çàìåíÿþùàÿ ñïåöèàëüíóþ ôóíêöèþ çàãðóçêè â ÑÓÁÄ. Õàðàêòåðèçóåòñÿ çíà÷èòåëüíî áîëåå êîðîòêèì âðåìåíåì çàãðóçêè âñëåäñòâèå ïðåäâàðèòåëüíîé îáðàáîòêè äàííûõ è îáõîäà ïðîâåðîê öåëîñòíîñòè äàííûõ è çàïèñè â ñèñòåìíûé æóðíàë. Âòîðè÷íûå äàííûå (derived data) — äàííûå, êîòîðûå ÿâëÿþòñÿ ðåçóëüòàòîì âû÷èñëèòåëüíûõ øàãîâ, ïðèìåíåííûõ ê äàííûì î ñîáûòèè. Âòîðè÷íûå äàííûå ÿâëÿþòñÿ ëèáî ðåçóëüòàòîì ñîïîñòàâëåíèÿ äâóõ èëè áîëåå ýëåìåíòîâ îòäåëüíîé
292
Ñëîâàðü òåðìèíîâ
òðàíçàêöèè (íàïðèìåð, àãðåãàöèÿ), ëèáî ðåçóëüòàòîì ñîïîñòàâëåíèÿ îäíîãî èëè áîëåå ýëåìåíòîâ òðàíçàêöèè ñ êàêèì-ëèáî âíåøíèì àëãîðèòìîì èëè ïðàâèëîì. Âòîðè÷íûå ýëåìåíòû (derived members) — ýëåìåíòû, ÷üè äàííûå ÿâëÿþòñÿ âòîðè÷íûìè äàííûìè. Âû÷èñëåííûé àòðèáóò (computed attribute) — àòðèáóò, çíà÷åíèå êîòîðîãî âû÷èñëÿåòñÿ íà îñíîâå äðóãèõ àòðèáóòîâ. Èíîãäà âû÷èñëåííûå àòðèáóòû õðàíÿòñÿ â âèäå ñâÿçåé è ññûëîê. Áîëåå ÷àñòî îíè ÿâëÿþòñÿ ñëåäñòâèåì âûïîëíåíèÿ êàêèõ-ëèáî îïåðàöèé â ðåçóëüòàòå âûïîëíåíèÿ çàïðîñà ê äðóãèì ÿ÷åéêàì òàáëèöû. Âû÷èñëåííûé ýëåìåíò (calculated member) — ýëåìåíò èçìåðåíèÿ, ÷üÿ âåëè÷èíà îïðåäåëÿåòñÿ âåëè÷èíàìè äðóãèõ ýëåìåíòîâ (íàïðèìåð, âñëåäñòâèå ïðèìåíåíèÿ ìàòåìàòè÷åñêèõ èëè ëîãè÷åñêèõ îïåðàöèé). Âû÷èñëåííûé ýëåìåíò ìîæåò ïðåäñòàâëÿòü ñîáîé ÷àñòü OLAP-ñåðâåðà èëè áûòü îïèñàí ïîëüçîâàòåëåì â òå÷åíèå èíòåðàêòèâíîé ñåññèè. Âû÷èñëåííûé ýëåìåíò — ýòî ëþáîé ýëåìåíò, çíà÷åíèå êîòîðîãî ÿâëÿåòñÿ íå ðåçóëüòàòîì ââîäà, à ðåçóëüòàòîì âû÷èñëåíèÿ. Ãåíåðàòîð îò÷åòîâ (report generator) — ôóíêöèÿ ÑÓÁÄ, ïîçâîëÿþùàÿ êîíå÷íîìó ïîëüçîâàòåëþ áûñòðî îïðåäåëÿòü ôîðìàò îò÷åòà äëÿ èíôîðìàöèè, êîòîðàÿ ÿâëÿåòñÿ ðåçóëüòàòîì âûïîëíåíèÿ çàïðîñà ê áàçå äàííûõ. Ãëàâíûå äàííûå (master data) — äàííûå, êîòîðûå ïîëó÷åíû â ðåçóëüòàòå íåïîñðåäñòâåííîãî àíàëèçà ñóùíîñòè è âíåñåíû â çàðàíåå ïîäãîòîâëåííóþ äëÿ ýòîãî òàáëèöó (íàïðèìåð, öåíà, äîõîä ïðåäïðèÿòèÿ, îò÷åòíûé ïåðèîä è äð.). Äàííûå (data) — ïîíÿòèå, ïðåäñòàâëÿþùåå ñîáîé íàáîð ôàêòîâ, òåêñò, ãðàôèêó, èçîáðàæåíèÿ, çâóêè, àíàëîãîâûå èëè öèôðîâûå âèäåîôðàãìåíòû. Äàííûå — ýòî íåîáðàáîòàííûé ìàòåðèàë ñèñòåìû, ïðåäîñòàâëÿåìûé ïîñòàâùèêàìè äàííûõ è èñïîëüçóåìûé ïîòðåáèòåëÿìè èíôîðìàöèè äëÿ äàëüíåéøåãî àíàëèçà. Äàííûå àäìèíèñòðèðîâàíèÿ (administrative data) — â õðàíèëèùå äàííûõ — äàííûå, êîòîðûå ïîìîãàþò àäìèíèñòðàòîðó âûïîëíÿòü ôóíêöèè óïðàâëåíèÿ õðàíèëèùåì.  êà÷åñòâå ïðèìåðà äàííûõ àäìèíèñòðèðîâàíèÿ ìîæíî ïðèâåñòè äàííûå î ïðîôèëèðîâàíèè ïîëüçîâàòåëåé. Äàííûå êîíå÷íîãî ïîëüçîâàòåëÿ (end user data) 1. Äàííûå, ôîðìàòèðîâàíèå êîòîðûõ âûïîëíåíî â ñîîòâåòñòâèè ñ çàïðîñàìè êîíå÷íîãî ïîëüçîâàòåëÿ. 2. Äàííûå, ñîçäàííûå êîíå÷íûì ïîëüçîâàòåëåì. 3. Äàííûå, êîòîðûå ÿâëÿþòñÿ ðåçóëüòàòîì îáðàáîòêè çàïðîñà õðàíèëèùåì äàííûõ. Äàííûå î ñîáûòèè (event data) — äàííûå î ñîáûòèÿõ áèçíåñà (îáû÷íî î áèçíåñ-òðàíçàêöèÿõ), èìåþùèå èñòîðè÷åñêîå çíà÷åíèå èëè íåîáõîäèìûå äëÿ àíàëèçà äðóãèõ ñèñòåì. Äàííûå î ñîáûòèè ìîãóò ñóùåñòâîâàòü â âèäå àòîìàðíûõ è àãðåãèðîâàííûõ äàííûõ. Äâóíàïðàâëåííàÿ ðåïëèêàöèÿ (bidirectional replication) — ñöåíàðèé ðåïëèêàöèè, â êîòîðîì îäíîâðåìåííî âûïîëíÿåòñÿ ðåïëèêàöèÿ ìåæäó îñíîâíîé è ðåïëèöèðîâàííîé áàçîé äàííûõ â îáîèõ íàïðàâëåíèÿõ. Ñì. òàêæå Îñíîâíàÿ áàçà äàííûõ è Ðåïëèöèðóåìàÿ áàçà äàííûõ. Äâóõôàçíàÿ ôèêñàöèÿ (òðàíçàêöèè) (two-phase commit) — ìåòîäèêà, ïðè èñïîëüçîâàíèè êîòîðîé èçìåíåíèÿ âíîñÿòñÿ ñíà÷àëà âî âðåìåííóþ áàçó äàííûõ.
Ñëîâàðü òåðìèíîâ
293
Ïîñëå ïðîâåðêè íà ïðàâèëüíîñòü äàííûå áóäóò âíåñåíû â ðàáî÷óþ áàçó äàííûõ. Äâóõôàçíàÿ ôèêñàöèÿ îáû÷íî èñïîëüçóåòñÿ äëÿ âíåñåíèÿ èçìåíåíèé â ðàáî÷èå áàçû äàííûõ. Äåíîðìàëèçàöèÿ (denormalize) — ïðîöåññ ðàçðàáîòêè áàçû äàííûõ, êîòîðûé ïîäðàçóìåâàåò îáúåäèíåíèå äàííûõ èç ðàçëè÷íûõ òàáëèö â îäíó òàáëèöó. Äåíîðìàëèçîâàííûå áàçû äàííûõ ìåíåå èíôîðìàòèâíû, ÷åì íîðìàëèçîâàííûå, îäíàêî îíè ïîçâîëÿþò áîëåå áûñòðî è ïðîñòî âûïîëíÿòü çàïðîñû è ñîñòàâëÿòü îò÷åòû. Ñì. òàêæå Íîðìàëèçàöèÿ. Äåöåíòðàëèçîâàííàÿ áàçà äàííûõ (decentralized database) — ðàíåå öåíòðàëèçîâàííàÿ áàçà äàííûõ, êîòîðàÿ çàòåì áûëà ðàçäåëåíà íà íåñêîëüêî áàç â ñîîòâåòñòâèè ñ íåîáõîäèìîñòüþ êîíêðåòíîé áèçíåñ-çàäà÷è èëè êîíå÷íîãî ïîëüçîâàòåëÿ. Äåöåíòðàëèçîâàííîå õðàíèëèùå (decentralized warehouse) — óäàëåííûé èñòî÷íèê äàííûõ, äîñòóï ïîëüçîâàòåëåé ê êîòîðîìó îðãàíèçîâàí ÷åðåç øëþç èëè ïðîêñè-ñåðâåð. Ïîñëå òîãî êàê ïîëüçîâàòåëü áóäåò àâòîðèçîâàí øëþçîì èëè ïðîêñè-ñåðâåðîì, åìó áóäåò ðàçðåøåíî âûïîëíÿòü ðàçëè÷íûå ôóíêöèè â ñîîòâåòñòâèè ñ åãî ïðàâàìè äîñòóïà (íàïðèìåð, âûáîðêó äàííûõ, èõ èíäåêñèðîâàíèå èëè óäàëåíèå). Äèàãðàììà ïîòîêà äàííûõ (data flow diagram) — äèàãðàììà, îòîáðàæàþùàÿ íîðìàëüíûé èíôîðìàöèîííûé ïîòîê ìåæäó îòäåëüíûìè ñåðâèñàìè, à òàêæå ìåæäó ñåðâèñàìè è íàêîïèòåëÿìè äàííûõ Äèàãðàììà ñâÿçåé ñóùíîñòåé (Entity-Relation diagram, ER diagram) 1. Èíñòðóìåíò, èñïîëüçóåìûé ïðè ðàçðàáîòêå ðåëÿöèîííûõ áàç äàííûõ, ñ ïîìîùüþ êîòîðîãî ñóùíîñòè ïðåäñòàâëÿþòñÿ â âèäå ãåîìåòðè÷åñêèõ ôèãóð è ñâÿçåé ìåæäó íèìè. Ñâÿçè ïðåäñòàâëÿþò ñîáîé îáû÷íûå ëèíèè, ñîåäèíÿþùèå ñóùíîñòè ìåæäó ñîáîé. 2.  îòíîøåíèè áàç äàííûõ äèàãðàììà ñâÿçåé ñóùíîñòåé ïðåäñòàâëÿåò ñîáîé íàáîð òàáëèö, ìåæäó êîòîðûìè óñòàíîâëåíû ëîãè÷åñêèå ñâÿçè. Äèíàìè÷åñêàÿ ìàðøðóòèçàöèÿ äàííûõ, ÄÌÄ (dynamic data routing) — ëîãè÷åñêàÿ ñõåìà, êîòîðàÿ èñïîëüçóåòñÿ äëÿ îïðåäåëåíèÿ ñåðâåðà áàç äàííûõ â ñðåäå ñ íåñêîëüêèìè àêòèâíûìè ñåðâåðàìè áàç äàííûõ ïðè ïåðåäà÷å äàííûõ äëÿ èõ ìîäèôèêàöèè è ñîõðàíåíèÿ. ÄÌÄ îáû÷íî èñïîëüçóåòñÿ â êà÷åñòâå àëãîðèòìà õåøèðîâàíèÿ, òàáëèöû ïðàâèë èëè ñõåìû äåêîìïîçèöèè. Äèíàìè÷åñêèé çàïðîñ (dynamic query) — äèíàìè÷åñêè ñîçäàííûé çàïðîñ SQL, êîòîðûé îáû÷íî ÿâëÿåòñÿ ðåçóëüòàòîì èñïîëüçîâàíèÿ ðàçëè÷íûõ ïðîãðàììíûõ ñðåäñòâ.  ïîäîáíûõ ñèñòåìàõ çàïðîñû íå ÿâëÿþòñÿ çàãîòîâêàìè. Èõ ïîäãîòîâêà è âûïîëíåíèå ïðîèñõîäèò âî âðåìÿ ðàáîòû ñèñòåìû â ñîîòâåòñòâèè ñ ïàðàìåòðàìè ðàáîòû ñèñòåìû èëè ñðåäû îêðóæåíèÿ. Äëèòåëüíàÿ òðàíçàêöèÿ (long-running transaction) — òðàíçàêöèÿ, êîòîðàÿ âñëåäñòâèå ñâîåé äëèòåëüíîñòè âûïîëíåíèÿ èìååò íàáîð ñðåäñòâ äëÿ ñâîåãî äîñðî÷íîãî ïðåðûâàíèÿ. Òàêæå äàííàÿ òðàíçàêöèÿ äîëæíà ïîäðàçóìåâàòü íàáîð äåéñòâèé, êîòîðûå áóäóò âûïîëíåíû â ðåçóëüòàòå äîñðî÷íîãî ïðåðûâàíèÿ âûïîëíåíèÿ òðàíçàêöèè. Æóðíàë òðàíçàêöèè (transaction log) — ñèñòåìíûé ôàéë, â êîòîðûé âíîñèòñÿ èíôîðìàöèÿ î õîäå âûïîëíåíèÿ òðàíçàêöèè è åå ðåçóëüòàòàõ.
294
Ñëîâàðü òåðìèíîâ
Çàïèñü äàííûõ (post) — ìåòîä èçìåíåíèÿ äàííûõ â áàçå. Çàïèñü äàííûõ ìîæåò áûòü ïðÿìàÿ èëè çàâèñÿùàÿ îò ñîñòîÿíèÿ áàçû äàííûõ (íàïðèìåð, îò ñîäåðæàíèÿ îïðåäåëåííîãî àòðèáóòà). Çàïðîñ (query) 1. Êîìàíäà, íàïèñàííàÿ íà ÿçûêå çàïðîñîâ, âûïîëíåíèå êîòîðîé âîçâðàùàåò íàáîð äàííûõ èç ÁÄ. 2. Íàáîð äàííûõ, êîòîðûé ÿâëÿåòñÿ ðåçóëüòàòîì âûïîëíåíèÿ çàïðîñà èëè ïðîöåäóðû. Çàõâàò èçìåíåíèé äàííûõ (change data capture) — ïðîöåññ çàõâàòà èçìåíåíèé, ïðîèçâåäåííûõ â ïðîèçâîäñòâåííûõ èñòî÷íèêàõ äàííûõ. Çàõâàò èçìåíåíèé äàííûõ îáû÷íî ïðîèçâîäèòñÿ ïóòåì ÷òåíèÿ æóðíàëà ÑÓÁÄ. Îí îáúåäèíÿåò ó÷àñòêè ðàáîòû, îáåñïå÷èâàåò ñèíõðîíèçàöèþ äàííûõ ñ ïåðâîèñòî÷íèêîì è óìåíüøàåò îáúåì äàííûõ â ñðåäå õðàíèëèùà äàííûõ. Çíà÷åíèå (value) — îïðåäåëåííûå ñâåäåíèÿ (äàííûå) î ñóùíîñòè. Èåðàðõè÷åñêàÿ ñòðóêòóðà áàçû äàííûõ (hierarchical database structures) — ëîãè÷åñêàÿ ñòðóêòóðà áàçû äàííûõ, â êîòîðîé ñâÿçè ìåæäó çàïèñÿìè ìîãóò áûòü ïðåäñòàâëåíû â âèäå èåðàðõè÷åñêîé èëè äðåâîïîäîáíîé ñõåìû. Ñâÿçè ìåæäó çàïèñÿìè ìîãóò áûòü îäíîãî èç äâóõ òèïîâ: «îäèí êî ìíîãèì» è «îäèí ê îäíîìó». Èåðàðõè÷åñêèå îòíîøåíèÿ (hierarchical relationships) — ëþáûå ýëåìåíòû èçìåðåíèé ìîãóò áûòü ïðåäñòàâëåíû â ñèñòåìå ðîäèòåëüñêèõ îòíîøåíèé. Îáû÷íî ýòî ïðîèñõîäèò, êîãäà ðîäèòåëüñêèé ýëåìåíò ÿâëÿåòñÿ ðåçóëüòàòîì êîíñîëèäàöèè äî÷åðíèõ ýëåìåíòîâ. Ñëåäñòâèåì ýòîãî ÿâëÿåòñÿ èåðàðõèÿ, à ðîäèòåëüñêèå îòíîøåíèÿ ïðåäñòàâëÿþòñÿ â âèäå èåðàðõè÷åñêèõ îòíîøåíèé. Èçáûòî÷íîñòü (redundancy) — õðàíåíèå ìíîæåñòâà ýêçåìïëÿðîâ èäåíòè÷íûõ äàííûõ. Èíäåêñ (index) 1. Ìåòîä, êîòîðûé èñïîëüçóåòñÿ äëÿ èçìåíåíèÿ ïîðÿäêà ïðîõîäà êîðòåæà èëè îòîáðàæåíèÿ åãî ñîäåðæèìîãî â îïðåäåëåííîì ïîðÿäêå. 2. Ñòðóêòóðà äàííûõ, êîòîðàÿ ïîçâîëÿåò ïîëó÷èòü áûñòðûé äîñòóï ê äàííûì. Èíäåêñû îáû÷íî èñïîëüçóþòñÿ â áîëüøèõ ìàññèâàõ äàííûõ è ïîçâîëÿþò óñêîðèòü ïðîöåññ âûáîðêè, ïîèñêà è ñîñòàâëåíèÿ îò÷åòîâ. Èíñòðóìåíòû ôîðìèðîâàíèÿ çàïðîñà (query tools) — ïðèëîæåíèå, ïîçâîëÿþùåå ïîëüçîâàòåëþ ñîçäàâàòü ñïåöèôè÷åñêèå çàïðîñû ê áàçå äàííûõ è óïðàâëÿòü èìè. Ïîäîáíûé èíñòðóìåíò ïðåäîñòàâëÿåò ñðåäñòâà äëÿ èçâëå÷åíèÿ íåîáõîäèìîé èíôîðìàöèè èç áàçû äàííûõ. Îáû÷íî îí áàçèðóåòñÿ íà ñðåäñòâàõ SQL è ïîçâîëÿåò îïðåäåëÿòü äàííûå íà ÿçûêå êîíå÷íîãî ïîëüçîâàòåëÿ. Èíòåðôåéñ ñåðâèñà (service interface) — íàáîð ìåòîäîâ, ïîçâîëÿþùèé îðãàíèçîâàòü âçàèìîäåéñòâèå ñ ñåðâèñîì. Èìååò îòêðûòûé èíòåðôåéñ, êîòîðûé ðàçðàáîò÷èêè ìîãóò èñïîëüçîâàòü äëÿ ïåðåäà÷è èëè ïîëó÷åíèÿ äàííûõ îò ñåðâèñà. Èíôîðìàöèîííàÿ ïðîõîäêà (data mining) — ïðîöåññ ïîèñêà è îïðåäåëåíèÿ ñêðûòûõ çàêîíîìåðíîñòåé, òåíäåíöèé è àññîöèàöèé â áîëüøèõ ìàññèâàõ äàííûõ è õðàíèëèùàõ. Äëÿ ýòîãî èñïîëüçóþòñÿ ñëåäóþùèå èíñòðóìåíòû è ìåòîäû: íåéðîííûå ñåòè, ðàñïîçíàâàíèå çàêîíîìåðíîñòåé, ñòàòèñòè÷åñêèé àíàëèç è äð.
Ñëîâàðü òåðìèíîâ
295
Data mining — ýòî ïðîöåññ «ïðîñåèâàíèÿ» áîëüøîãî îáúåìà äàííûõ äëÿ îïðåäåëåíèÿ ñîîòíîøåíèé ìåæäó íèìè. Òàêæå èçâåñòåí òåðìèí «ñêîëüæåíèå ïî äàííûì» (data surfing). Èíôîðìàöèîííàÿ ñèñòåìà (OLAP) (information system) — ïðèëîæåíèå, êîòîðîå âûïîëíÿåò ñáîð äàííûõ èç ðàçëè÷íûõ âíóòðåííèõ è âíåøíèõ èñòî÷íèêîâ, à òàêæå âûïîëíÿåò ïåðâè÷íûé àíàëèç äàííûõ è èçâëå÷åíèå èç íåå èíôîðìàöèè. Èñõîäíàÿ áàçà äàííûõ (source database) — îïåðàöèîííàÿ áàçà äàííûõ èëè öåíòðàëèçîâàííîå õðàíèëèùå, ïîñòàâëÿþùåå äàííûå äëÿ öåëåâîé áàçû äàííûõ. Êëàññ (class) — áàçîâûé ñòðîèòåëüíûé ýëåìåíò îáúåêòíî-îðèåíòèðîâàííîãî ïðîãðàììèðîâàíèÿ. Ñ ïîìîùüþ êëàññîâ îïðåäåëÿåòñÿ ïîíÿòèå òèïà îáúåêòîâ. Äëÿ ýòîãî äîñòàòî÷íî îïðåäåëèòü èõ ñâîéñòâà (äàííûå), à òàêæå ïðîöåäóðû (ìåòîäû), êîòîðûå áóäóò â äàëüíåéøåì ïîääåðæèâàòüñÿ âûáðàííûìè òèïàìè. Êëàññû èìåþò òàêîå âàæíîå ñâîéñòâî, êàê íàñëåäîâàíèå. Îäèí êëàññ ìîæåò áûòü íàñëåäîâàí îò äðóãîãî. Íàñëåäóåìûé êëàññ èìååò íàáîð ñâîéñòâ è ìåòîäîâ, êîòîðûå áûëè ïðèñóùè ðîäèòåëüñêîìó êëàññó, îäíàêî ðàçðàáîò÷èêè ïðè íåîáõîäèìîñòè ìîãóò ðàñøèðèòü íàáîð ñâîéñòâ è ìåòîäîâ äëÿ ðàáîòû ñ äàííûì êëàññîì ïóòåì äîáàâëåíèÿ íîâûõ ýëåìåíòîâ êëàññà. Êëàññû ïîçâîëÿþò âûïîëíèòü äåêîìïîçèöèþ ñëîæíûõ è êîìïëåêñíûõ ïðîãðàìì, à ñëåäîâàòåëüíî, ÷àñòî èñïîëüçóþòñÿ äëÿ ðåøåíèÿ ñëîæíûõ çàäà÷, òðåáóþùèõ ïðèâëå÷åíèÿ áîëüøîãî ÷èñëà ïðîãðàììèñòîâ. Êëþ÷åâîå ïîëå (key field) 1. Îäíî èëè íåñêîëüêî ïîëåé âíóòðè òàáëèöû äàííûõ, êîòîðûå ïîçâîëÿþò èäåíòèôèöèðîâàòü òàáëèöó. 2. Ëîãè÷åñêèé ýëåìåíò äàííûõ, íå çàâèñÿùèé îò ñóùíîñòè, íà îñíîâå êîòîðîé âûïîëíåíà çàïèñü äàííûõ. 3. Íàèìåíüøåå ïîëå ñ äàííûìè, êîòîðîå ñîñòîèò èç íàáîðà ñèìâîëîâ, îïèñûâàþùèõ îïðåäåëåííûé àòðèáóò èëè ñóùíîñòü. 4. Íàáîð ñâÿçàííûõ ïîëåé äàííûõ, îáðàùåíèå ê êîòîðîìó ìîæåò áûòü âûïîëíåíî êàê ê åäèíîìó öåëîìó. Èíîãäà èñïîëüçóåòñÿ íàçâàíèå «íàáîð äàííûõ» (data set). 5. Íàáîð ëîãè÷åñêè ñâÿçàííûõ çàïèñåé èëè ôàéëîâ Êîìïîíåíò (component) 1. ×àñòü êàêîé-ëèáî ñèñòåìû. 2. Ìîäóëü ôóíêöèîíàëüíîñòè, êîòîðûé ìîæåò èñïîëüçîâàòüñÿ â âèäå ðàçëè÷íûõ ðåàëèçàöèé. Êîìïîíåíò îáû÷íî ðåàëèçóåòñÿ â âèäå îòäåëüíîãî ïðîãðàììíîãî îáúåêòà, èìåþùåãî ñâîé ñîáñòâåííûé èíòåðôåéñ è ëîãèêó ðàáîòû. Êîíêóðåíöèÿ ÑÓÐÁÄ (RDBMS concurrence) — ïåðåêðûâàþùåå, êîíêóðèðóþùåå âûïîëíåíèå ñåãìåíòîâ êîäà â ðåëÿöèîííîé áàçå äàííûõ. Êîíòðîëü âçàèìîñîâìåñòèìîñòè (concurrency control) — â òåðìèíàõ ÑÓÁÄ ýòî óïðàâëåíèå îäíîâðåìåííûì äîñòóïîì ê áàçå äàííûõ. Áëàãîäàðÿ êîíòðîëþ âçàèìîñîâìåñòèìîñòè áàçà äàííûõ çàùèùåíà îò îäíîâðåìåííîãî ðåäàêòèðîâàíèÿ ðàçëè÷íûìè ïîëüçîâàòåëÿìè îäíîé ÿ÷åéêè áàçû äàííûõ. Òàêæå êîíòðîëü
296
Ñëîâàðü òåðìèíîâ
âçàèìîñîâìåñòèìîñòè èñïîëüçóåòñÿ âî âðåìÿ ñîçäàíèÿ ðàñïèñàíèÿ âûïîëíåíèÿ ìåòîäîâ ðåçåðâíîãî êîïèðîâàíèÿ è âîññòàíîâëåíèÿ äàííûõ. Êîíòðîëü èçáûòî÷íîñòè (redundancy control) — óïðàâëåíèå ñðåäîé ðàñïðåäåëåííûõ äàííûõ äëÿ îãðàíè÷åíèÿ ÷ðåçìåðíîé ñòîèìîñòè äóáëèðîâàíèÿ, îáíîâëåíèÿ è ïåðåäà÷è, ñâÿçàííîé ñ ìíîæåñòâåííûì êîïèðîâàíèåì îäíèõ è òåõ æå äàííûõ. Äóáëèðîâàíèå äàííûõ ÿâëÿåòñÿ ñòðàòåãèåé êîíòðîëÿ èçáûòî÷íîñòè, íàïðàâëåííîé íà óëó÷øåíèå ðàáîòû ïðîãðàììû. Êîíôèãóðàöèîííûå äàííûå (configuration data) — äàííûå, ïîçâîëÿþùèå âûïîëíèòü íàñòðîéêó ñèñòåìû â öåëîì, à òàêæå åå îòäåëüíûõ ìîäóëåé. Êîíôèãóðàöèîííûå äàííûå îòëè÷àþòñÿ â çàâèñèìîñòè îò òåõ çàäà÷, êîòîðûå âûïîëíÿåò äàííàÿ ñèñòåìà. Êîðòåæ (tuple) — íàáîð äàííûõ îá îïðåäåëåííîé ñóùíîñòè. Îáû÷íî ïðåäñòàâëåí â òàáëèöå ÁÄ â âèäå îòäåëüíîé ñòðîêè. Êðèòåðèé (criterion, pl. criteria) — õàðàêòåðèñòèêà èëè îãðàíè÷åíèå, êîòîðîå ïðèìåíèìî ê çíà÷åíèÿì àòðèáóòà. Ïîçâîëÿåò çàäàòü ãðàíèöû çíà÷åíèé äàííîãî àòðèáóòà, à òàêæå âçàèìîñâÿçü ìåæäó âûáîðîì äàííûõ çíà÷åíèé. Ëîãè÷åñêàÿ ìîäåëü äàííûõ (logical data model) — ôàêòè÷åñêàÿ ðåàëèçàöèÿ êîíöåïòóàëüíîé ìîäåëè â áàçå äàííûõ. Äëÿ ðåàëèçàöèè îäíîé êîíöåïòóàëüíîé ìîäåëè äàííûõ ìîæåò ïîòðåáîâàòüñÿ ìíîæåñòâî ëîãè÷åñêèõ ìîäåëåé äàííûõ. Ëîêàòîð (locator) — ñòðîêîâîå çíà÷åíèå, êîòîðîå óêàçûâàåò íà ìåñòîïîëîæåíèå ïîñòîÿííîãî çàïðîñà èëè ôàéëà ïðîòîêîëà òðàíçàêöèé ÁÄ. Ìàøèíà õðàíèëèùà äàííûõ (data warehouse engine) — ðåëÿöèîííàÿ áàçà äàííûõ èëè ìíîãîìåðíàÿ áàçà äàííûõ. Ìàøèíà õðàíèëèùà äàííûõ òðåáóåò ìîùíûõ ñðåäñòâ ôîðìèðîâàíèÿ çàïðîñîâ, íàëè÷èÿ ìåõàíèçìîâ áûñòðîé çàãðóçêè è âîçìîæíîñòè õðàíåíèÿ áîëüøîãî îáúåìà èíôîðìàöèè. Ìåíåäæåð áàçû äàííûõ (database manager) 1. Ñèñòåìà óïðàâëåíèÿ áàçîé äàííûõ. 2. Ðàçðàáîò÷èê, îòâåòñòâåííûé çà ðàçðàáîòêó, âíåäðåíèå è ïîääåðæêó ïðèëîæåíèé áàçû äàííûõ è ñàìîé ÁÄ. Ìåòàäàííûå (metadata) — ñâåäåíèÿ î äàííûõ. Ïðèìåðàìè ìåòàäàííûõ ìîãóò áûòü îïèñàíèÿ ýëåìåíòîâ è òèïîâ äàííûõ, àòðèáóòîâ è ñâîéñòâ, ðàíãîâ è äîìåíîâ, ïðîöåññîâ è ìåòîäîâ. Ñðåäà õðàíèëèùà îõâàòûâàåò âñå êîðïîðàòèâíûå ðåñóðñû ìåòàäàííûõ: êàòàëîãè áàç äàííûõ, ñëîâàðè äàííûõ è íàâèãàöèîííûå ñëóæáû. Ìåòàäàííûå âêëþ÷àþò â ñåáÿ òàêèå ïàðàìåòðû, êàê èìÿ, äëèíà, äåéñòâèòåëüíûå çíà÷åíèÿ è îïèñàíèÿ ýëåìåíòîâ äàííûõ. Ìåòàäàííûå õðàíÿòñÿ â ñëîâàðÿõ äàííûõ è õðàíèëèùå. Îíè èçîëèðóþò õðàíèëèùå äàííûõ îò èçìåíåíèé â ñõåìå îïåðàöèîííûõ ñèñòåì. Ìíîãîìåðíàÿ áàçà äàííûõ, ÌÁÄ (multi-dimensional database, MDBS è MDBMS) — áàçà äàííûõ, ïîçâîëÿþùàÿ ïîëüçîâàòåëÿì àíàëèçèðîâàòü áîëüøèå îáúåìû äàííûõ, èñïîëüçóÿ ìíîãîìåðíóþ ñòðóêòóðó. Áàçà äàííûõ ñî ñïåöèàëüíîé îðãàíèçàöèåé õðàíåíèÿ — êóáàìè, îáåñïå÷èâàþùàÿ âûñîêóþ ñêîðîñòü ðàáîòû ñ äàííûìè, õðàíÿùèìèñÿ êàê ñîâîêóïíîñòü ôàêòîâ, èçìåðåíèé è çàðàíåå âû÷èñëåííûõ àãðåãàòîâ.
Ñëîâàðü òåðìèíîâ
297
Ìíîãîìåðíûå ñòðóêòóðû áàç äàííûõ (multidimensional database structures) — ìîäåëü áàçû äàííûõ, â êîòîðîé èñïîëüçóþòñÿ ìíîãîìåðíûå ñòðóêòóðû (òàêèå, êàê êóáû) äëÿ õðàíåíèÿ äàííûõ è ñâÿçåé ìåæäó äàííûìè. Ìíîæåñòâî äàííûõ (aggregate data) 1. Äàííûå, êîòîðûå ÿâëÿþòñÿ ðåçóëüòàòîì îáúåäèíåíèÿ ýëåìåíòîâ äàííûõ. 2. Äàííûå, ïðåäîñòàâëÿåìûå â ñîâîêóïíîñòè èëè â ôîðìå åäèíîãî ðåçóëüòàòà ñóììèðîâàíèÿ. Ìîäåëèðîâàíèå äàííûõ (data modeling) — ïðîöåññ, â êîòîðîì âûïîëíÿåòñÿ èäåíòèôèêàöèÿ è óñòàíîâêà ñâÿçåé ìåæäó ýëåìåíòàìè äàííûõ ñ öåëüþ ðàçðàáîòêè ìîäåëè äàííûõ. Ìîäåëü äàííûõ (data model) — ëîãè÷åñêàÿ ñòðóêòóðà, ðàçðàáàòûâàåìàÿ íà ýòàïå ìîäåëèðîâàíèÿ áàçû äàííûõ. Ïðåäñòàâëÿåò ñîáîé íàáîð ñâîéñòâ äàííûõ, êîòîðûå íàñëåäóþòñÿ âíå çàâèñèìîñòè îò ïðîãðàììíîãî è àïïàðàòíîãî îáåñïå÷åíèÿ. Ìîäåëü ñîäåðæèò ýëåìåíòû äàííûõ, ñãðóïïèðîâàííûå â çàïèñè, à òàêæå ñâÿçè, êîòîðûå çàäàþò âçàèìîîòíîøåíèÿ ìåæäó çàïèñÿìè. Íåáåçîïàñíûé çàïðîñ (unsafe query) — çàïðîñ, êîòîðûé ìîæåò ïðèâåñòè ê áåñêîíå÷íîìó âûïîëíåíèþ (èëè áåñêîíå÷íîìó âûâîäó ðåçóëüòàòà). Îáû÷íî âñòðå÷àåòñÿ â ðåêóðñèâíûõ çàïðîñàõ.  íåêîòîðûõ ÑÓÁÄ èìåþòñÿ äîïîëíèòåëüíûå ìåõàíèçìû äëÿ ïðåäîòâðàùåíèÿ âûïîëíåíèÿ ïîäîáíûõ çàïðîñîâ. Íåçàïëàíèðîâàííûé çàïðîñ (ad-hoc query) — ëþáîé çàïðîñ, êîòîðûé íå ìîæåò áûòü ïðåäâàðèòåëüíî îïðåäåëåí ê ìîìåíòó ñâîåãî çàïóñêà. Çàïðîñ, ïîñòðîåííûé íà îñíîâå äèíàìè÷åñêè ñêîíñòðóèðîâàííîãî âûðàæåíèÿ SQL, îáû÷íî èñïîëüçóåìîãî â íàñòîëüíûõ ñðåäñòâàõ ôîðìèðîâàíèÿ çàïðîñîâ. Íåïðîòèâîðå÷èâîñòü òðàíçàêöèè (transactional consistency) — óñëîâèå, ïðè ñîáëþäåíèè êîòîðîãî âñå òðàíçàêöèè â ïåðâè÷íîé áàçå äàííûõ ïðèìåíèìû â ðåïëèöèðóåìîé ÁÄ â òîì æå ïîðÿäêå, â êîòîðîì îíè áûëè âûïîëíåíû â ïåðâè÷íîé ÁÄ. Íîðìàëèçàöèÿ (normalization) — ïðîöåññ óìåíüøåíèÿ êîìïëåêñíîé ñòðóêòóðû äàííûõ äî ïðîñòåéøåé, íàèáîëåå ñòàáèëüíîé ñòðóêòóðû.  öåëîì ïðîöåññ âûçûâàåò óäàëåíèå èçëèøíèõ àòðèáóòîâ, êëþ÷åé è îòíîøåíèé èç êîíöåïòóàëüíîé ìîäåëè äàííûõ. Íîðìàëüíàÿ ôîðìà (normal form) 1. Ñâîéñòâî ñâÿçåé è áàç äàííûõ, êîòîðîå ïîçâîëÿåò èçáåæàòü èçáûòî÷íîñòè õðàíåíèÿ äàííûõ è óâåëè÷èòü ïðîèçâîäèòåëüíîñòü ÁÄ. 2. Ïðàâèëà è ïðîöåññû äëÿ ïðèâåäåíèÿ ñâÿçåé è áàç äàííûõ â íîðìàëüíóþ ôîðìó. Îáîáùàþùèå çàïðîñû (roll up queries) — çàïðîñû, ñóììèðóþùèå äàííûå íà áîëåå âûñîêîì óðîâíå, ÷åì ïðåäûäóùèé óðîâåíü äåòàëèçàöèè. Îáúåäèíåíèå (join) — çàïðîñ, ðåçóëüòàòîì êîòîðîãî ÿâëÿåòñÿ íàáîð äàííûõ èç ðàçëè÷íûõ èñòî÷íèêîâ (ñ èñïîëüçîâàíèåì äâóõ è áîëåå ñâÿçåé). Ñâÿçè äîëæíû èìåòü êàê ìèíèìóì îäèí àòðèáóò ñâÿçûâàíèÿ, êîòîðûé ïîçâîëÿåò ñâÿçàòü äàííûå èç ðàçëè÷íûõ òàáëèö.
298
Ñëîâàðü òåðìèíîâ
Îïåðàòèâíàÿ àíàëèòè÷åñêàÿ îáðàáîòêà (On-line Analytic Processing, OLAP) — òåõíîëîãèÿ àíàëèòè÷åñêîé îáðàáîòêè èíôîðìàöèè â ðåæèìå ðåàëüíîãî âðåìåíè, âêëþ÷àþùàÿ ñîñòàâëåíèå è äèíàìè÷åñêóþ ïóáëèêàöèþ îò÷åòîâ è äîêóìåíòîâ. Òåðìèí «OLAP» áûë ââåäåí â 1993 ã. Å. Ô. Êîääîì (E. F. Codd), ñôîðìóëèðîâàâøèì îñíîâíûå òðåáîâàíèÿ ê ôóíêöèîíàëüíîñòè ïðîãðàììíûõ ïðîäóêòîâ, ðåàëèçóþùèõ ýòè òåõíîëîãèè. Îïåðàòèâíàÿ áàçà äàííûõ (operational database) — áàçà äàííûõ, ñîñòîÿùàÿ èç ñïðàâî÷íûõ äàííûõ ïî êîíêðåòíîé ñèñòåìå è äàííûõ î ñîáûòèÿõ, îòíîñÿùèõñÿ ê ñèñòåìå îáíîâëåíèÿ òðàíçàêöèé. Îíà ìîæåò òàêæå ñîäåðæàòü êîíòðîëüíûå äàííûå ñèñòåìû, òàêèå êàê èíäèêàòîðû, ôëàæêè è ñ÷åò÷èêè. Ðàáî÷àÿ áàçà äàííûõ ÿâëÿåòñÿ èñòî÷íèêîì äàííûõ äëÿ õðàíèëèùà äàííûõ. Îíà ñîäåðæèò äåòàëüíûå äàííûå, èñïîëüçóåìûå äëÿ çàïóñêà åæåäíåâíûõ îïåðàöèé áèçíåñà. Äàííûå íåïðåðûâíî ìåíÿþòñÿ ïðè îáíîâëåíèÿõ è îòðàæàþò òåêóùåå çíà÷åíèå ïîñëåäíåé òðàíçàêöèè. Îïåðàòèâíàÿ îáðàáîòêà òðàíçàêöèé (On-Line Transaction Processing, OLTP) — îáðàáîòêà òðàíçàêöèé â ðåæèìå ðåàëüíîãî âðåìåíè. Îïåðàòèâíûå äàííûå (OLTP) (operations data) — äàííûå, êîòîðûå ñãåíåðèðîâàíû èëè ïîëó÷åíû â ðåçóëüòàòå åæåäíåâíîé ðàáîòû ñèñòåìû (íàïðèìåð, ïîñòóïèâøèå çà òåêóùèé äåíü çàêàçû, îòêðûòûå êðåäèòû èëè ñ÷åòà çà òåêóùèé ìåñÿö). Îïåðàòèâíûé ñêëàä äàííûõ (Operational Data Store, ODS) — èíòåãðèðîâàííàÿ áàçà îïåðàòèâíûõ äàííûõ. Åå èñòî÷íèêàìè ÿâëÿþòñÿ ðàçíîðîäíûå ñèñòåìû, à ñèñòåìà ñîäåðæèò òåêóùèå èëè áëèæàéøèå ê íèì ïî âðåìåíè äàííûå. ODS ìîæåò ñîäåðæàòü èíôîðìàöèþ çà 30–60 äíåé, òîãäà êàê õðàíèëèùå äàííûõ îáû÷íî ñîäåðæèò èíôîðìàöèþ çà ãîäû. Îòêàò (rollback) — ôóíêöèÿ ÑÓÁÄ, ïîçâîëÿþùàÿ âåðíóòü äàííûå ê òîìó ñîñòîÿíèþ, â êîòîðîì îíè áûëè äî âûïîëíåíèÿ òðàíçàêöèè. Îáû÷íî èñïîëüçóåòñÿ â ñëó÷àå âîçíèêíîâåíèÿ îøèáêè èëè íåïðåäâèäåííîé ñèòóàöèè ïðè âûïîëíåíèè òðàíçàêöèè. Îòêðûòîå ñîåäèíåíèå ñ áàçîé äàííûõ (ODBC) — ñòàíäàðò äîñòóïà ê áàçàì äàííûõ, çàèìñòâîâàííûé êîìïàíèåé Microsoft ó êîíñîðöèóìà SQL Access Group. Ïåðâè÷íàÿ áàçà äàííûõ (primary database) — áàçà äàííûõ, êîòîðàÿ ñîäåðæèò ïóáëèêóåìûå îáúåêòû (òàáëèöû è õðàíèìûå ïðîöåäóðû) è ÿâëÿåòñÿ èñòî÷íèêîì ðåïëèöèðóåìûõ äàííûõ. Ñì. òàêæå Ðåïëèöèðóåìàÿ áàçà äàííûõ. Ïåðâè÷íûé îáúåêò (primary object) — îáúåêò (òàáëèöà è õðàíèìàÿ ïðîöåäóðà) â ïåðâè÷íîé áàçå äàííûõ. Ñì. òàêæå Ïåðâè÷íàÿ áàçà äàííûõ. Ïåðåìåùåíèå äàííûõ (data transfer) — ïðîöåññ ïåðåâîäà äàííûõ èç îäíîé ñðåäû â äðóãóþ. Ñðåäîé ìîæåò áûòü êàê ïðèêëàäíàÿ ñèñòåìà, òàê è îïåðàöèîííàÿ ñðåäà. Ïëàíèðîâàíèå äàííûõ (data planning) — ïðîöåññ ïëàíèðîâàíèÿ ðåñóðñîâ ïðåäïðèÿòèÿ ñ öåëüþ îáåñïå÷åíèÿ íàäåæíîãî, ãèáêîãî è îïåðàòèâíîãî õðàíåíèÿ äàííûõ. Ïðîöåññ âêëþ÷àåò ðàçðàáîòêó îáùåé ïîëèòèêè ïðåäïðèÿòèÿ â îòíîøåíèè õðàíèìûõ äàííûõ, à òàêæå àðõèòåêòóðó è ðåñóðñû, èñïîëüçóåìûå äëÿ õðàíåíèÿ äàííûõ ïðåäïðèÿòèÿ.
Ñëîâàðü òåðìèíîâ
299
Ïîâåðõíîñòíûé çàïðîñ (ground query) — çàïðîñ, â êîòîðîì âñå àòðèáóòû äîñòóïíû ÷åðåç ñâÿçè. Íè îäíî èç çíà÷åíèé àòðèáóòà íå áåðåòñÿ èç âíåøíèõ èñòî÷íèêîâ äàííûõ èëè äðóãèõ çàïðîñîâ (ïîäçàïðîñîâ). Ïîäïèñêà (subscription) — êîíòåéíåð îáúåêòà, êîòîðûé àññîöèèðîâàí ñ ñîåäèíåíèåì äëÿ ðåïëèêàöèè. Ñì. òàêæå Ðåïëèöèðóåìàÿ áàçà äàííûõ. Ïîäïèñûâàòü (subscribe) — ïðîöåññ âûáîðà òðàíçàêöèé è èäåíòèôèêàöèè ðåïëèöèðóåìûõ îáúåêòîâ, êîòîðûå äîëæíû èì ñîîòâåòñòâîâàòü. Ñì. òàêæå Ïóáëèêàöèÿ. Ïîëå (field) — íàèìåíüøèé ýëåìåíò òàáëèöû, êîòîðûé èìååò ñâîé ñîáñòâåííûé àäðåñ. Ñì. òàêæå ß÷åéêà. Ïîëèòèêà (policy) — íàáîð ïðàâèë áåçîïàñíîñòè, îïåðàöèîííîãî ìåíåäæìåíòà è êîììóíèêàöèé, êîòîðûé ïðèìåíÿåòñÿ â îòäåëüíî âçÿòîé îáëàñòè (íàïðèìåð, â îòäåëüíî âçÿòîì äîìåíå êîìïàíèè). Ïîñëåäîâàòåëüíûé äîñòóï ê áàçå äàííûõ è ôàéëó (sequential database and file access) — ïîñëåäîâàòåëüíûé ìåòîä ñîõðàíåíèÿ è ñ÷èòûâàíèÿ äàííûõ èç ÁÄ èëè ôàéëà. Ïîñòîÿííûé çàïðîñ (persistent query) — çàïðîñ, êîòîðûé õðàíèòñÿ äëÿ äàëüíåéøåãî èñïîëüçîâàíèÿ (ïîâòîðíîãî èñïîëüçîâàíèÿ). Ïðàâèëà âûïîëíåíèÿ, îñíîâàííûå íà ñîáûòèè (event-based execution rules) — ïðîöåññ èäåíòèôèêàöèè òåõ çàäà÷, êîòîðûå ìîãóò áûòü óñïåøíî äîâåäåíû äî êîíöà, èëè ñèñòåìíûõ ñîáûòèé, êîòîðûå ìîãóò èìåòü ìåñòî äî íà÷àëà îáðàáîòêè ïîñòàâëåííîé çàäà÷è. Ïðåäìåòíî-îðèåíòèðîâàííàÿ áàçà äàííûõ (subject oriented database) — âìåñòî ïîñòðîåíèÿ îäíîãî êðóïíîãî öåíòðàëèçîâàííîãî õðàíèëèùà äàííûõ ìíîãèå êîìïàíèè ñîçäàþò íåñêîëüêî ïðåäìåòíî-îðèåíòèðîâàííûõ õðàíèëèù äëÿ îáñëóæèâàíèÿ ïîòðåáíîñòåé ðàçëè÷íûõ ïîäðàçäåëåíèé. Òàêèå õðàíèëèùà îáðàçóþò ñèñòåìó, íàçûâàåìóþ âèòðèíîé äàííûõ (data mart). Ïðåîáðàçîâàíèå äàííûõ (data transformation) — èçâëå÷åíèå èíôîðìàöèè èç äàííûõ. Âêëþ÷àåò â ñåáÿ ðàñøèôðîâêó ïðîèçâîäñòâåííûõ ïîêàçàòåëåé è ñëèÿíèå çàïèñåé èç ðàçëè÷íûõ ôîðìàòîâ ÑÓÁÄ. Ïðîâåðêà ïðàâèëüíîñòè (validation) — ïðîöåññ ïðîâåðêè äàííûõ íà âûïîëíåíèå êàêèõ-ëèáî óñëîâèé. Ïðîãðàììíîå îáåñïå÷åíèå ñðåäíåãî ñëîÿ (mid-tier data warehouse) — äëÿ òîãî ÷òîáû áûòü ìàñøòàáèðóåìîé, âñÿêàÿ êîíêðåòíàÿ ðåàëèçàöèÿ ñðåäû äîñòóïà ê äàííûì äîëæíà ñîäåðæàòü â ñåáå íåñêîëüêî ïðîìåæóòî÷íûõ ðàñïðåäåëåííûõ ñâÿçåé â ñèñòåìå õðàíèëèùà äàííûõ. Ýòè ïðîìåæóòî÷íûå ñâÿçè äåéñòâóþò â êà÷åñòâå èñõîäíûõ õðàíèëèù äàííûõ äëÿ ãåîãðàôè÷åñêè èçîëèðîâàííûõ ñîâìåñòíî èñïîëüçóåìûõ äàííûõ, íåîáõîäèìûõ â ðàìêàõ îïðåäåëåííûõ áèçíåñ-ôóíêöèé. Ïðÿìîé äîñòóï ê áàçå äàííûõ è ôàéëó (direct database and file access) — ìåòîä õðàíåíèÿ äàííûõ (ôàéëîâ), â êîòîðîì êàæäûé ýëåìåíò õðàíåíèÿ ìîæåò áûòü îõàðàêòåðèçîâàí àäðåñîì, âíå çàâèñèìîñòè îò ôèçè÷åñêîãî ðàñïîëîæåíèÿ äàííûõ. Èñïîëüçóÿ äàííûé óíèêàëüíûé àäðåñ ýëåìåíòà, ðàçðàáîò÷èêè èëè ïîëüçîâàòåëè ìîãóò â ëþáîé ìîìåíò ïîëó÷èòü äîñòóï ê äàííûì (ôàéëó).
300
Ñëîâàðü òåðìèíîâ
Ïóáëèêàöèÿ (publication) — îáúåêò, àññîöèèðîâàííûé ñ ïåðâè÷íîé áàçîé äàííûõ, êîòîðûé ñîäåðæèò íàáîð ïóáëèêóåìûõ äàííûõ. Ñì. òàêæå Ïåðâè÷íàÿ áàçà äàííûõ. Ïóáëèêîâàòü (publish) — ïðîöåññ èäåíòèôèêàöèè è çàïóñêà òðàíçàêöèè äëÿ ðåïëèêàöèè äàííûõ èç ïåðâè÷íîé áàçû äàííûõ. Ñì. òàêæå Ïîäïèñêà. Ïóáëèêóåìîå ïîëå (published field) — ïîëå òàáëèöû â ïåðâè÷íîé áàçå äàííûõ, äëÿ êîòîðîãî âûïîëíÿåòñÿ ðåïëèêàöèÿ äàííûõ. Ñì. òàêæå Ïåðâè÷íàÿ áàçà äàííûõ, Ïîëå. Ðàçáèåíèå äàííûõ (data partitioning) — ïðîöåññ ëîãè÷åñêîãî è/èëè ôèçè÷åñêîãî ðàçáèåíèÿ äàííûõ íà áîëåå ìåëêèå ñåãìåíòû. Ðàçáèåíèå äàííûõ ïîâûøàåò ïðîèçâîäèòåëüíîñòü è óñêîðÿåò âûïîëíåíèå îáðàáîòêè äàííûõ, èíäåêñàöèè è ïîèñêà âõîæäåíèé. Ðàñïðåäåëåííàÿ áàçà äàííûõ (distributed database) — áàçà äàííûõ, ðåñóðñû êîòîðîé ðàñïîëàãàþòñÿ â áîëåå ÷åì îäíîé ñèñòåìå (èëè íà ðàçëè÷íûõ ôèçè÷åñêèõ äèñêàõ êîìïüþòåðà). Ðåãóëÿòîð çàïðîñà (query governor) — ôóíêöèÿ, ïðåêðàùàþùàÿ âûïîëíåíèå çàïðîñà ê áàçå äàííûõ ïðè ïðåâûøåíèè èì çàðàíåå îïðåäåëåííîãî ïîðîãîâîãî çíà÷åíèÿ. Ðåêóðñèâíûé çàïðîñ (recursive query) — çàïðîñ, ðåçóëüòàò âûïîëíåíèÿ êîòîðîãî ÿâëÿåòñÿ âõîäíûìè ïàðàìåòðàìè äëÿ òàêîãî æå çàïðîñà. Ðåëÿöèîííàÿ ñòðóêòóðà áàçû äàííûõ (relational database structure) — ëîãè÷åñêàÿ ñòðóêòóðà ÁÄ, â êîòîðîé âñå ýëåìåíòû õðàíÿòñÿ â âèäå òàáëèö. Ïðè ýòîì äîïóñêàåòñÿ óñòàíîâêà ñâÿçåé (relations) ìåæäó îòäåëüíûìè òàáëèöàìè. Ðåïëèêàöèÿ äàííûõ (data replication) — ïðîöåññ êîïèðîâàíèÿ ôðàãìåíòà áàçû äàííûõ èç îäíîé ñðåäû â äðóãóþ. Ïîñëå êîïèðîâàíèÿ ïîëó÷åííûå êîïèè äàííûõ áóäóò èñïîëüçîâàòüñÿ ñèíõðîííî ñ èñòî÷íèêîì. Èçìåíåíèÿ, âíåñåííûå â èñòî÷íèê, ðàñïðîñòðàíÿþòñÿ íà êîïèè äàííûõ â äðóãèõ ñðåäàõ. Ðåïëèöèðîâàííûå äàííûå (replicated data) — äàííûå, ñêîïèðîâàííûå èç èñòî÷íèêà äàííûõ â îäíó èëè íåñêîëüêî öåëåâûõ ñðåä â ñîîòâåòñòâèè ñ ïðàâèëàìè äóáëèðîâàíèÿ. Ðåïëèöèðîâàííûå äàííûå ìîãóò ñîñòîÿòü èç ïîëíûõ òàáëèö èëè ôðàãìåíòîâ. Ðåïëèöèðóåìàÿ áàçà äàííûõ (replicate database) — áàçà äàííûõ, êîòîðàÿ ïîëó÷àåò äàííûå â ðåçóëüòàòå ðåïëèöèðóþùåé òðàíçàêöèè. Ñì. òàêæå Ïåðâè÷íàÿ áàçà äàííûõ. Ðåïëèöèðóåìûé îáúåêò (replicate object) — îáúåêò áàçû äàííûõ (òàáëèöà èëè õðàíèìàÿ ïðîöåäóðà) â ðåïëèöèðóåìîé áàçå äàííûõ. Ñì. òàêæå Ðåïëèöèðóåìàÿ áàçà äàííûõ. Ðåïîçèòîðèé (repository) — ñðåäà õðàíåíèÿ, ñîäåðæàùàÿ ïîëíûé íàáîð áèçíåñ-ìåòàäàííûõ. Ðåïîçèòîðèé íå òîëüêî ñîäåðæèò ðàñøèðåííûé íàáîð ìåòàäàííûõ, íî òàêæå ìîæåò áûòü ðåàëèçîâàí íà ðàçëè÷íûõ àïïàðàòíûõ ïëàòôîðìàõ è ñèñòåìàõ óïðàâëåíèÿ áàçàìè äàííûõ (ÑÓÁÄ). Ñáîðêà (assembly) — ýëåìåíò ïðèëîæåíèÿ, ñîçäàííîãî â .NET Framework. Ñâÿçóþùåå ïðîãðàììíîå îáåñïå÷åíèå (middleware) 1. Óðîâåíü êîììóíèêàöèé, ïîçâîëÿþùèé ïðèëîæåíèÿì âçàèìîäåéñòâîâàòü äðóã ñ äðóãîì â ðàìêàõ àïïàðàòíîãî îáåñïå÷åíèÿ è ñåòåâûõ ñðåä.
Ñëîâàðü òåðìèíîâ
301
2. Ïðîãðàììíûé ïðîäóêò, ïîçâîëÿþùèé ïðèëîæåíèÿì, ñîçäàííûì íà îñíîâå SQL, ïîëó÷àòü äîñòóï ê ðåëÿöèîííûì è íåðåëÿöèîííûì èñòî÷íèêàì äàííûõ. Ñâÿçü (relation) — ïðîñòåéøèé íàáîð äàííûõ â ðåëÿöèîííîé áàçå äàííûõ. Îáû÷íî ïðåäñòàâëåíà ïðÿìîóãîëüíûì ìàññèâîì äàííûõ, â êîòîðîì êàæäàÿ ñòðîêà (êîðòåæ) ïðåäñòàâëÿåò åäèíîå âõîæäåíèå äàííûõ. Ñâÿçü «ìíîãèå êî ìíîãèì» (many-to-many relationship) — îäèí èëè áîëåå êîðòåæåé, êîòîðûé ñâÿçàí ñ äðóãèìè êîðòåæàìè ñ ïîìîùüþ ññûëîê. Áëàãîäàðÿ ýòîìó àòðèáóòû ìîãóò áûòü îáúåäèíåíû ñ ïîìîùüþ ïðîñòîãî çàïðîñà. Ïðè ýòîì äàííûå îäíîãî êîðòåæà ìîãóò îòîáðàæàòüñÿ êàê îòäåëüíî, òàê è â ñîñòàâå äðóãîãî çàïðîñà ê êîðòåæó, èìåþùåìó ññûëêó íà äàííûé. Ñâÿçü «îäèí êî ìíîãèì» (one-to-many relationship) — âèä ñâÿçè îäíîãî êîðòåæà ñ äðóãèìè êîðòåæàìè. Ýòî îçíà÷àåò, ÷òî ñâÿçûâàåìûé àòðèáóò ïðåäñòàâëåí íåñêîëüêèìè âõîæäåíèÿìè äëÿ ïåðâîãî êîðòåæà, à òàêæå îäíèì âõîæäåíèåì äëÿ âñåõ îñòàëüíûõ. Ñâÿçü «îäèí ê îäíîìó» (one-to-one relationship) — ñâÿçü îäíîãî êîðòåæà ñ äðóãèì ïîñðåäñòâîì îïðåäåëåíèÿ ñâÿçóþùåãî àòðèáóòà. Ýòî îçíà÷àåò, ÷òî ñâÿçóþùèé àòðèáóò âñòðå÷àåòñÿ íå áîëåå ÷åì îäèí ðàç â îáîèõ êîðòåæàõ. Ñåðâèñ (service) — ïðîãðàììíûé êîìïîíåíò, êîòîðûé ìîæåò èñïîëüçîâàòüñÿ â êà÷åñòâå ÷àñòè áîëåå îáøèðíîãî áèçíåñ-ïðîöåññà. Ñåðâèñû ïîääåðæèâàþò èíòåðôåéñ, êîòîðûé áàçèðóåòñÿ íà îñíîâå ñîîáùåíèé. Ñåðâèñ èìååò ìåòîäû äëÿ ñ÷èòûâàíèÿ ñâîåãî ñîáñòâåííîãî ñîñòîÿíèÿ, ïîýòîìó ëåãêî ìîæåò ïåðåñëàòü èõ ïî çàïðîñó ïîëüçîâàòåëþ èëè äðóãîìó ñåðâèñó. Ñåòåâàÿ ñòðóêòóðà áàçû äàííûõ (network database structures) — ëîãè÷åñêàÿ ñòðóêòóðà äàííûõ, ïîçâîëÿþùàÿ èñïîëüçîâàòü ìåõàíèçì ñâÿçè «ìíîãèå êî ìíîãèì» ìåæäó îòäåëüíûìè çàïèñÿìè. Ñåòåâàÿ ñòðóêòóðà áàçû äàííûõ îòëè÷àåòñÿ îò äðóãèõ ñïîñîáîì ôèçè÷åñêîãî õðàíåíèÿ äàííûõ. Ñèíõðîíèçàöèÿ ìåòàäàííûõ (metadata synchronization) — ïðîöåññ îáúåäèíåíèÿ, óñòàíîâëåíèÿ ñâÿçåé è ñèíõðîíèçàöèè ýëåìåíòîâ äàííûõ ñ òàêèìè æå èëè ñõîäíûìè ñâîéñòâàìè èç ðàçëè÷íûõ ñèñòåì. Ñèíõðîíèçàöèÿ ìåòàäàííûõ ñîåäèíÿåò ýòè îòëè÷àþùèåñÿ ýëåìåíòû â õðàíèëèùå äàííûõ ìåæäó ñîáîé äëÿ óïðîùåíèÿ äîñòóïà ê íèì. Ñèñòåìà óïðàâëåíèÿ áàçîé äàííûõ, ÑÓÁÄ (Data Base Management System, DBMS) — íàáîð ïðîãðàììíîãî îáåñïå÷åíèÿ äëÿ ñáîðà, õðàíåíèÿ è áûñòðîãî äîñòóïà ê äàííûì ïðåäïðèÿòèÿ. Òàêæå ÑÓÁÄ ïîäðàçóìåâàåò íàáîð èíñòðóìåíòîâ äëÿ àäìèíèñòðèðîâàíèÿ äàííûõ, äîñòóïà, ñîçäàíèÿ îò÷åòîâ î ðàáîòå áàçû è ôóíêöèé ïîääåðæêè ÁÄ â ðàáî÷åì ñîñòîÿíèè. Íà îñíîâå ÑÓÁÄ ñîçäàþòñÿ äðóãèå ïðèëîæåíèÿ, â êîòîðûõ òðåáóåòñÿ àêòèâíîå èñïîëüçîâàíèå äàííûõ èç ðàçëè÷íûõ (à èíîãäà ðàçíîðîäíûõ) èñòî÷íèêîâ äàííûõ.  äàííûé ìîìåíò íà ðûíêå ïðåäñòàâëåíû ÑÓÁÄ íåñêîëüêèõ ïðîèçâîäèòåëåé, òàêèõ êàê Oracle, Microsoft, IBM, Sybase, Informix è äð. Ïðàêòè÷åñêè âñå îíè ïîääåðæèâàþò ðåëÿöèîííóþ ìîäåëü áàçû äàííûõ. Ñèñòåìà óïðàâëåíèÿ ðåëÿöèîííûìè áàçàìè äàííûõ, ÑÓÐÁÄ (Relational Data Base Management System, RDBMS) — áàçà äàííûõ, â êîòîðîé õðàíåíèå è äîñòóï ê äàííûì ïðîèñõîäÿò ñîãëàñíî ñâÿçÿì ìåæäó íèìè. Áàçà äàííûõ ïîñòðîåíà íà îñíîâå ìîäåëè, ðàçðàáîòàííîé Å. Ô. Êîääîì (E. F. Codd). ÑÓÐÁÄ ïîäðàçóìåâàåò
302
Ñëîâàðü òåðìèíîâ
îïðåäåëåíèå ñòðóêòóðû äàííûõ, îïåðàöèé õðàíåíèÿ è îáðàáîòêè äàííûõ. Äàííûå è ñâÿçè îðãàíèçîâàíû â âèäå òàáëèö, ïðåäñòàâëÿþùèõ ñîáîé íàáîðû çàïèñåé. Êàæäàÿ çàïèñü òàáëèöû ñîäåðæèò íàáîð îäíèõ è òåõ æå àòðèáóòîâ. Çàïèñè ðàçëè÷íûõ òàáëèö ìîãóò áûòü ñâÿçàíû. Äëÿ ñâÿçè èñïîëüçóåòñÿ îäèíàêîâûé àòðèáóò äëÿ êàæäîé òàáëèöû. Ñêëàä äàííûõ (data store) — ìåñòî äëÿ õðàíåíèÿ íåèçìåííûõ äàííûõ (äàííûõ, êîòîðûå ïðàêòè÷åñêè íèêîãäà íå ïîäâåðãàþòñÿ ðåäàêòèðîâàíèþ è èçìåíåíèþ). Ñêëàä äàííûõ ïðåäñòàâëÿåò ñîáîé íàáîð ôàéëîâ äàííûõ, à òàêæå ïðèëîæåíèå äëÿ óïðàâëåíèÿ ýòèìè ôàéëàìè. Ñëîâàðü äàííûõ (data dictionary) — ñëîâàðü ìåòàäàííûõ (äàííûõ î äàííûõ), êîòîðûé âêëþ÷àåò îïèñàíèå ñîäåðæàíèÿ, ñâÿçè ñ äðóãèìè äàííûìè, ÷àñòîòó èñïîëüçîâàíèÿ, ìåñòîïîëîæåíèå, ôîðìàò è äð. Ñëîâàðè èñïîëüçóþòñÿ ñ öåëüþ óíèôèêàöèè ïðåäñòàâëåíèé äàííûõ íà ïðåäïðèÿòèè, ââîäà äàííûõ â ñèñòåìó, àíàëèçà è ìíîãèõ äðóãèõ çàäà÷, êîòîðûå âîçíèêàþò ïåðåä ïðîãðàììèñòàìè íà ïðåäïðèÿòèè. Ñòàíäàðòíûé çàïðîñ (standard query) — õðàíèìàÿ ïðîöåäóðà ïîñëåäíåãî âûïîëíåííîãî çàïðîñà. Ñòàíäàðòíûé çàïðîñ ìîæåò õðàíèòüñÿ íà Ðàáî÷åì ñòîëå êàê çàðàíåå çàïèñàííûé SQL-çàïðîñ è ïåðåäàâàòüñÿ äëÿ âûïîëíåíèÿ â áàçó äàííûõ ñåðâåðà â êà÷åñòâå äèíàìè÷åñêîãî SQL-çàïðîñà. Ñòàòè÷åñêèé çàïðîñ (static query) — õðàíèìàÿ íàñòðàèâàåìàÿ ïðîöåäóðà, îïòèìèçèðîâàííàÿ äëÿ äîñòóïà ê êîíêðåòíîìó õðàíèëèùó äàííûõ. Ñòåïåíü äåòàëèçàöèè (granularity) — ðàçìåð íàèìåíüøåãî ýëåìåíòà áàçû äàííûõ, êîòîðûé ìîæåò áûòü áëîêèðîâàí âíå çàâèñèìîñòè îò äðóãèõ ýëåìåíòîâ áàçû äàííûõ. Áàçà äàííûõ ïðåäîñòàâëÿåò âîçìîæíîñòü äëÿ áëîêèðîâàíèÿ ýëåìåíòîâ íà ðàçëè÷íûõ óðîâíÿõ: óðîâíå áàçû äàííûõ, óðîâíå ñâÿçåé, óðîâíå êîðòåæåé (ãðóïï âçàèìîñâÿçàííûõ ýëåìåíòîâ) èëè îòäåëüíûõ ýëåìåíòîâ, êîòîðûå íå âõîäÿò â ñîñòàâ êîðòåæà. Ñòðîêà (row) — èñïîëüçóåòñÿ â êà÷åñòâå ñèíîíèìà òåðìèíà «êîðòåæ». Ñì. òàêæå Êîðòåæ. Ñóùíîñòü (entity) — ðåàëüíûé îáúåêò, äàííûå î êîòîðîì õðàíÿòñÿ â áàçå äàííûõ. Ïðèìåðîì ñóùíîñòè ìîæåò ñëóæèòü ïðåäïðèÿòèå, ðàáîòíèê îðãàíèçàöèè, áàëàíñ è äð. Ñõåìà (schema) 1. Ëîãè÷åñêîå è ôèçè÷åñêîå îïðåäåëåíèå ýëåìåíòîâ äàííûõ, ôèçè÷åñêèõ õàðàêòåðèñòèê è âíóòðåííèõ îòíîøåíèé âíóòðè áàçû äàííûõ. 2. Ëîãè÷åñêîå îïèñàíèå îïðåäåëåííîé ñâÿçè. Ñõåìà áàçû äàííûõ (database schema) — ëîãè÷åñêîå è ôèçè÷åñêîå îïðåäåëåíèå ñòðóêòóðû áàçû äàííûõ. Òàáëèöà (table) — ýëåìåíò äëÿ õðàíåíèÿ ñòðóêòóðèðîâàííûõ äàííûõ âíóòðè ðåëÿöèîííîé ÁÄ. Òàáëèöà ïîèñêà (lookup table) 1. Ñïåöèàëüíûé ôàéë äàííûõ, ñîäåðæàùèé äîïîëíèòåëüíûå àòðèáóòû äëÿ äàëüíåéøåãî õðàíåíèÿ â âèäå òàáëèöû. Òàáëèöà ìîæåò ñîäåðæàòü êàê âíåøíèå àòðèáóòû, òàê è èíôîðìàöèîííûå ïîëÿ, îïèñûâàþùèå åå ñîäåðæèìîå.
Ñëîâàðü òåðìèíîâ
303
2. Ñïåöèàëüíàÿ òàáëèöà, â êîòîðîé ÷èñëîâûå çíà÷åíèÿ ðàçáèâàþòñÿ íà êàòåãîðèè äëÿ óïðîùåíèÿ ïîèñêà. Òàáëèöû ñóììèðîâàíèÿ (summarization tables) — òàáëèöû, êîòîðûå ñîçäàþòñÿ ïî íàèáîëåå ÷àñòî èñïîëüçóåìûì èçìåðåíèÿì äëÿ óñêîðåíèÿ âûïîëíåíèÿ çàïðîñîâ, íåñìîòðÿ íà òî, ÷òî òàêàÿ èçáûòî÷íîñòü óâåëè÷èâàåò îáúåì äàííûõ â õðàíèëèùå. Ñì. òàêæå Ìíîæåñòâî äàííûõ. Òðàíçàêöèÿ (transaction) — ôóíêöèÿ âûïîëíåíèÿ èçìåíåíèé âíóòðè ðåëÿöèîííîé áàçû äàííûõ. Åäèíè÷íàÿ òðàíçàêöèÿ ìîæåò ïðèâåñòè ê èçìåíåíèþ äàííûõ â íåñêîëüêèõ òàáëèöàõ. Íà ñëó÷àé, åñëè òðàíçàêöèÿ âûïîëíèòñÿ ñ îøèáêîé, â áàçå äàííûõ ïðåäóñìîòðåíà ôóíêöèÿ îòêàòà. Òðàíçèòèâíîå îòíîøåíèå (transitive dependency) — îòíîøåíèå, ïðè êîòîðîì îäèí íåêëþ÷åâîé àòðèáóò çàâèñèì îò çíà÷åíèÿ äðóãîãî íåêëþ÷åâîãî àòðèáóòà. Òðèããåð (trigger) — ïðîöåäóðà SQL, êîòîðàÿ âûïîëíÿåòñÿ âî âðåìÿ ôèêñèðîâàíèÿ êàêîãî-ëèáî ñîáûòèÿ íà ñåðâåðå ÁÄ (íàïðèìåð, äîáàâëåíèÿ çàïèñè, åå îáíîâëåíèÿ èëè óäàëåíèÿ). Ñ ïîìîùüþ òðèããåðà òàêæå ìîãóò âûïîëíÿòüñÿ õðàíèìûå ïðîöåäóðû. Òðèããåðû, òàê æå êàê è õðàíèìûå ïðîöåäóðû, âñòðîåíû â ÑÓÁÄ. Ñì. òàêæå Õðàíèìàÿ ïðîöåäóðà. Óïðàâëåíèå áàçîé äàííûõ (database administration) — ôóíêöèÿ, âêëþ÷àþùàÿ â ñåáÿ ðàçðàáîòêó è ïîääåðæêó ñèñòåì õðàíåíèÿ äàííûõ íà ïðåäïðèÿòèè, îáçîð è ìîíèòîðèíã ïðîèçâîäèòåëüíîñòè áàç äàííûõ, à òàêæå îïòèìèçàöèè áàçû äàííûõ ñ öåëüþ îáåñïå÷åíèÿ áîëåå áûñòðîãî äîñòóïà ê äàííûì è èõ áåçîïàñíîñòè. Ôèêñàöèÿ òðàíçàêöèè (commit) — ðåøåíèå âûïîëíåíèÿ ïðîöåäóðû âíåñåíèÿ äàííûõ èëè èõ èçìåíåíèé â áàçó äàííûõ. Õðàíèëèùå äàííûõ (data warehouse) — îòäåëüíàÿ áàçà, êîòîðàÿ ñîçäàíà äëÿ ïîääåðæêè ïðèíÿòèÿ ðåøåíèé. Äàííûå ïåðåäàþòñÿ èç ðàçëè÷íûõ îïåðàòèâíûõ èñòî÷íèêîâ è ïîìåùàþòñÿ â ýòó áàçó ñ ïîìîùüþ ðàçëè÷íûõ ñåðâèñîâ è ïðîãðàììíûõ âñòàâîê. Äîñòóï ê äàííûì ïðåäîñòàâëÿåòñÿ ïóòåì ñîçäàíèÿ îïðåäåëåííûõ çàïðîñîâ, èñïîëüçîâàíèÿ ïðîãðàììíûõ óòèëèò, OLAP-ñåðâåðîâ è ñèñòåì êëàññà ERP. Õðàíèìàÿ ïðîöåäóðà (stored procedure) — ïðîãðàììà, íàïèñàííàÿ íà ÿçûêå SQL, êîòîðàÿ õðàíèòñÿ â áàçå äàííûõ. Äëÿ âûçîâà õðàíèìîé ïðîöåäóðû íåîáõîäèìî âîñïîëüçîâàòüñÿ åå óíèêàëüíûì èäåíòèôèêàòîðîì èç êëèåíòñêîãî ïðèëîæåíèÿ èëè òðèããåðîì ÁÄ.  òîì ñëó÷àå, åñëè õðàíèìàÿ ïðîöåäóðà ðàñïîëàãàåòñÿ â ÁÄ, íåò íåîáõîäèìîñòè ïðîãðàììíî ïåðåíîñèòü åå íà ëîêàëüíûé êîìïüþòåð. Äîñòàòî÷íî âûçâàòü åå ñ ïîìîùüþ èäåíòèôèêàòîðà. Ñì. òàêæå Òðèããåð. Öåíòðàëüíîå õðàíèëèùå (central warehouse) 1. Áàçà äàííûõ, ñîäåðæàùàÿ äàííûå, êîòîðûå ñîáðàíû èç îïåðàöèîííûõ ñèñòåì îðãàíèçàöèè. Èìååò ñòðóêòóðó, óäîáíóþ äëÿ àíàëèçà äàííûõ è èõ äàëüíåéøåé îáðàáîòêè. Ïðåäíàçíà÷åíà äëÿ ïîääåðæêè ïðèíÿòèÿ ðåøåíèé è ñîçäàíèÿ åäèíîãî èíôîðìàöèîííîãî ïðîñòðàíñòâà êîìïàíèè. 2. Ñïîñîá àâòîìàòèçàöèè, îõâàòûâàþùèé âñå èíôîðìàöèîííûå ñèñòåìû, óïðàâëåíèå êîòîðûìè ïðîèñõîäèò èç îäíîãî ìåñòà. ×àñòè÷íàÿ çàâèñèìîñòü (partial dependency) — çíà÷åíèå íåêëþ÷åâûõ àòðèáóòîâ, êîòîðûå çàâèñÿò îò ÷àñòè êëþ÷åâîãî àòðèáóòà (îáû÷íî ÷àñòè÷íàÿ çàâèñèìîñòü íàáëþäàåòñÿ ïðè èñïîëüçîâàíèè îòäåëüíîãî àòðèáóòà êëþ÷åâîãî ïîëÿ, ñãåíåðèðîâàííîãî íà îñíîâå íåñêîëüêèõ àòðèáóòîâ).
304
Ñëîâàðü òåðìèíîâ
×èñòêà äàííûõ (data scrubbing) — ïðîöåññ ôèëüòðàöèè, ñëèÿíèÿ, ðàñøèôðîâêè è ïåðåâîäà èñõîäíûõ äàííûõ â îïðåäåëåííûå ôîðìàòû ñ öåëüþ óíèôèêàöèè èõ õðàíåíèÿ, óìåíüøåíèÿ çàíèìàåìîãî ïðîñòðàíñòâà, ïåðåäà÷è òðåòüèì ëèöàì è ò. ä. Ýëåìåíò äàííûõ (data element) — ïðîñòåéøàÿ åäèíèöà äàííûõ, êîòîðàÿ ìîæåò áûòü âûäåëåíà è îïèñàíà â ñëîâàðå èëè õðàíèëèùå äàííûõ. Ýëåìåíò äàííûõ íå ìîæåò áûòü ðàçäåëåí íà ñîñòàâëÿþùèå. ßçûê çàïðîñîâ (query language) — âûñîêîóðîâíåâûé ÿçûê ïðîãðàììèðîâàíèÿ, êîòîðûé èñïîëüçóåòñÿ ñèñòåìàìè óïðàâëåíèÿ áàçàìè äàííûõ äëÿ èçâëå÷åíèÿ èíôîðìàöèè è äàííûõ èç ÁÄ. ßçûê îïðåäåëåíèÿ äàííûõ, ßÎÄ (Data Definition Language, DDL) — ïðîãðàììíûé ÿçûê, èñïîëüçóåìûé ñèñòåìîé óïðàâëåíèÿ áàçîé äàííûõ. Ïîçâîëÿåò ïîëüçîâàòåëÿì ñîçäàâàòü áàçû äàííûõ, îïðåäåëÿòü òèïû, ñòðóêòóðó è ñâÿçè â áàçàõ äàííûõ. Ïðèìåðîì êîìàíä ßÎÄ ìîãóò ñëóæèòü: CREATE TABLE, CREATE INDEX, ALTER, DELETE è äð. ß÷åéêà (cell) — îòäåëüíûé ôðàãìåíò äàííûõ, ïîëó÷àåìûé ïóòåì âûáîðà îäíîãî ýëåìåíòà èç êàæäîãî èçìåðåíèÿ ìàññèâà. Ê ïðèìåðó, åñëè èçìåðåíèÿìè ÿâëÿþòñÿ ïðèáûëü ïðåäïðèÿòèÿ è âðåìÿ, òî ÿ÷åéêîé òàêîãî ìàññèâà áóäåò ïåðåñå÷åíèå êàêîé-ëèáî ñòðîêè ñî ñòîëáöîì.  äàííîì ïåðåñå÷åíèè ñîäåðæèòñÿ ïîêàçàòåëü ïðèáûëè ïðåäïðèÿòèÿ íà îïðåäåëåííîé ìîìåíò âðåìåíè (íàïðèìåð, ïðèáûëü çà ÿíâàðü 2005 ãîäà).