600 likes | 742 Views
Certified for и партнерские программы Microsoft. Алексей Шуленин Microsoft Департамент стратегических технологий Эксперт по технологиям обработки и анализа информации. Совместимость. Партнерские программы, ориентированные на SQL Server
E N D
Certified for • и партнерские программы Microsoft Алексей ШуленинMicrosoftДепартамент стратегических технологийЭксперт по технологиям обработки и анализа информации
Совместимость • Партнерские программы, ориентированные на SQL Server • Каким формальным критериям необходимо удовлетворить для соответствия программе Works with Microsoft SQL Server 2008 • Как им удовлетворить
Партнерство с Microsoft • https://partner.microsoft.com/rus/program/programoverview
Партнерские баллы • Положение организации в партнерской программе Microsoft определяется кол-вом заработанных ею партнерских баллов • Система баллов обеспечивает измеряемый индекс, по которому можно быстро судить о состоянии партнера в программе и необходимых ему шагах, чтобы двигаться вверх
Программа Certified for SQL Server • Создана под SQL Server 2005 • Выполняется VeriTest’ом (sqlcert@veritest.com) • Протестировать свое SQLное приложение у них стоит $10 тыс. • Плата за каждый доп.день тестирования $1850 • Программа приносит 50 партнерских баллов, если приложение удовлетворяет обязательным требованиям • Кроме того, есть т.н. Elective Features, за к-е начисляются доп.баллы • Опубликовав 3 customer reference profiles, ISV получает компетенцию ISV / Software Solution Competency • см. https://partner.microsoft.com/rus/program/competencies
Тест Works with Microsoft SQL Server 2008 • Необходим по двум причинам • Элективная составляющая Platform Test for ISVs • Дает право на маркетинг партнерского решения в solution briefвместе с Microsoft
Platform Test for ISVs • Обязательная часть (Foundation Test Components) • Windows Server 2008: $250 • После 31.12.2009 будет заменен R2 • Windows Client: $400 • Элективная часть • SQL Server 2008: $250* • Office 2007: $400 • Office 2003: $400 • Web Services plus .NET Framework: $400 • Managed Code: $400 • *При выборе вместе скидка $100 • Каждый тест приностит 10 партнерских баллов • При условии, что пройдены тесты как из обязательной, так и элективной части
Microsoft SQL Server 2008 Solution Brief • Платим $350 и попадаем в виде странички в Solution Brief - Microsoftовскийсборник историй успеха, который будет раздаваться worldwide • Сейчас действует скидка в полцены - $175 • http://www.lionbridge.com/lionbridge/en-US/services/software-product-engineering/testing-veritest/product-certification-services/microsoft/works-with-sql-server-2008/solution-brief.htm
Требования программы • Требования, которым необходимо удовлетворить для прохождения «Works with Microsoft SQL Server 2008» • http://www.lionbridge.com/certification/Works-With-SQL-Server-2008-Specifications.doc • Существует два способа прохождения этого теста • Отправить ваше приложение в VeriTest и заплатить, чтобы протестировали • Протестировать самостоятельно • Если нет лишних денег, правильней выбирать его, т.к. требования, в общем, достаточно примитивные
Тестировочная тула • Берется здесь • http://www.innovateon.com/pageLayout.aspx?pageID=sql_2008_test • Клиент должен быть • Windows Vista Business SP1 (x86 или x64) • Windows XP(SP - ?) • Сервер - стоять на • Windows Server 2008 Edition(x86 или x64) Windows Server 2003 Enterprise Edition SP2 (x86 или x64) • Допускаются все редакции SQL Server 2008 c Enterprise по Express
Как тестируем • Простая визардоподобная оболочка • Последовательность действий • Выбрать new test, запустить • Указать ехешник своего приложения • Если сервис - ехешник сервиса • Если веб-приложение - w3wp.exe (IIS 7.0, 6.0) • Убедиться, что только тестируемое приложение работает в данный момент, т.к. все приложения будут под одним Process ID • Если многоуровневое, тестируется каждое звено • Запустить приложение и выполнить в нем какие-либо операции с базой • Завершить тест, получить отчет • Отчет является подтверждением прохождения теста • Либо, в случае выявленных несовместимостей там, как при прохождении ТО, указывается, что подправить • Проверяет 6 сценариев на совместимость
Предупреждение • Под совместимостью с SQL Server 2008 будем понимать действия, которые требуется совершить для успешного прохождения теста Works with Microsoft SQL Server 2008 • В их нынешнем виде эти требования вызывают, мягко говоря, недоумение • От 2008-го в них присутствуют только строка соединения и ROW COMPRESSION (да и то последнее - опционально) • Никакие другие интересные новшества 2008-го (Page Level Compression, Backup Compression, sparse columns, filtered indexes, Resource Governor, Filestream, Geospatial, TDE, EKM, аудит, политики DMF, CDC, Change Tracking, Date/Time, Merge, GroupingSets, ... ) в требования не попали • Остальные требования относятся, в основном, к безопасности, да и то однобоко • Напр., xp_cmdshellc sa запрещаем, а про xp cunsafe assemblies ничего не говорим • Складывается впечатление, что составители не вполне представляли предметную область • Однако разумность и полноту выносим за скобки • Действуем строго формально
Сценарий 1 • Приложение должно использовать интегрированную систему безопасности (integrated security) - Windows Authentication - для соединения с SQL Server 2008 и компонентами сервера • Данное требование повышает безопасность и управляемость приложений. Использование интегрированной системы безопасности позволяет осуществить подключение уникальных пользователей, определенных на уровне AD • ADподдерживает централизованное управление политиками, например, политики управления паролями, что позволяет, например, централизованно отключать пользовательские записи, блокируя доступ пользователей ко всем базам данных. • Помимо, Windows Authentication использует более безопасные протоколы аутентификации по сравнению с SQL Authentication (особенно в тех случаях, когда используется Kerberos) • Если использование Windows Authentication невозможно по каким-либо причинам, следует использовать опцию SQL Server Authentication с поддержкой Enforce Password Policy и Password expiration, что гарантирует использование сложных паролей • Пароль является одним из самых уязвимых компонентов системы безопасности – следование перечисленным выше требованиям позволит существенно обезопасить как само приложение, так и данные
Сценарий 1 declare @LoginMode int exec master.dbo.xp_instance_regreadN'HKEY_LOCAL_MACHINE', N'Software\Microsoft\MSSQLServer\MSSQLServer', N'LoginMode', @LoginMode OUTPUT select @LoginMode --1 - Windows --2 - Mixed
Сценарий 1 select is_policy_checked, is_expiration_checked from sys.sql_logins where name = 'sa‘ alter login sa with check_policy = ON, check_expiration = OFF
Сценарий 2 • Подключаемые к SQL Server 2008 учетные записи не должны входить в серверную роль sysadmin --Кто входит в роль? select p2.name, p2.type_desc from sys.server_role_members rm join sys.server_principals p1 on rm.role_principal_id = p1.principal_id join sys.server_principals p2 on rm.member_principal_id = p2.principal_id where p1.name = 'sysadmin'
Сценарий 2 if exists(select * from sys.server_principals where type_desc = 'SQL_LOGIN' and name = 'xxx') drop login xxx create login xxx with password = 'SQL.NET Architecture Day', default_database = tempdb, check_policy = on, check_expiration = off exec sp_addsrvrolemember @loginame = 'xxx', @rolename = 'sysadmin' exec sp_helpsrvrolemember @srvrolename = 'sysadmin' exec sp_dropsrvrolemember @loginame = 'xxx', @rolename = 'sysadmin' exec sp_helpsrvrolemember @srvrolename = 'sysadmin' • Добавление/отлучение от роли
Сценарий 2 • Не используйте учетную запись SA как учетную запись по умолчанию для вашего приложения. Создайте новую учетную запись и задайте для нее необходимые привилегии • Лучше вообще sa от греха задисейблить alter login sa disable alter login sa enable
Сценарий 3 • Должна быть включена трассировка по умолчанию (default trace) • Данное требование позволяет постоянно мониторить производительность приложений за счет сбора данных о работе приложения и базы данных SQL Server • Файлы трассировки содержат ценную информацию, позволяющую быстро определить источник сбоев и ликвидировать его • Посмотреть, какие трассы запущены на сервере в наст.момент, можно T-SQLным способом: • select * from sys.traces • Имеется также функция fn_trace_getinfo(), к-я возвращает информацию о трассе по ее id; 0 - для всех трасс • Небольшая вариация с осмысленными значениями свойств: with cte(TraceID, TraceOption, FileName, MaxSize_MB, StopTime, IsRunning) as (select * from ::fn_trace_getinfo(0) pivot (min(value) for property in ([1], [2], [3], [4], [5])) pt) select TraceID, case TraceOption when 2 then '2 = TRACE_FILE_ROLLOVER' when 4 then '4 = SHUTDOWN_ON_ERROR' when 6 then '6 = ROLLOVER_AND_SHUTDOWN' when 8 then '8 = PRODUCE_BLACKBOX' else TraceOption end, FileName, MaxSize_MB, StopTime, IsRunning from cte
Сценарий 3 • В отличие от обычной трассы, запуск, останов и удаление которой выполняются процедурой exec sp_trace_setstatus @traceid = <id трассы>, @status = 1 (старт), 0 (стоп), 2 (убить) • Дефолтную трассу можно только заенейблить или задисейблить при помощи execsp_configure'default trace enabled‘ • Дефолтную трассу нельзя поменять, изменив в ней список отслеживаемых событий или колонок по событию (sp_trace_setevent)или фильтров на события (sp_trace_setfilter) • Msg 19070, Level 16, State 3, Procedure sp_trace_setfilter, Line 1 • The default trace cannot be stopped or modified. Use SP_CONFIGURE to turn it off. • Можно только посмотреть ее состав: • аналогично - select * from ::fn_trace_getfilterinfo(default) select f.eventid, e.name as EventName, e.category_id, cat.name as EventCategoryName, f.columnid, c.name as ColumnName from ::fn_trace_geteventinfo(1) f inner join sys.trace_events e on f.eventid = e.trace_event_id inner join sys.trace_categories cat on e.category_id = cat.category_id inner join sys.trace_columns c on f.columnid = c.trace_column_id
Сценарий 3 • Подробнее про то, что такое дефолтная трасса и для чего она нужна, можно прочитать в статье Kalen Delaney - http://www.sqlmag.com/Articles/ArticleID/48939/pg/1/1.html • Либо скупое упоминание в BOL: http://msdn.microsoft.com/ru-ru/library/ms175513.aspx
Сценарий 4 • The application should be able to connect successfully • Basic Requirement for Works With SQL Server 2008 test • Без комментариев
Сценарий 5 • xp_cmdshell должна быть выключена • Данное требование направлено на запрет выполнения системных команд из кода на Transact SQL, что существенно снижает вероятность доступа к системных ресурсам из вредоносного кода, расположенного в базе данных. • Проверка текущего состояния • select value from sys.configurations where name = 'xp_cmdshell‘ • Запрет • exec sp_configure 'show', 1 • reconfigure with override • exec sp_configure 'xp_cmdshell', 0 • reconfigure with override
Сценарий 6 • Объекты таблиц и индексов, создаваемыe прикладной программой, должны использовать ROW Level сжатие. • Данное требование является опциональным, но крайне рекомендуемым к использованию. • Поддержка данного требования может увеличить производительность системы и улучшить использование системных ресурсов (например, сократить место на диске). Производительность системы в этом случае зависит от производительности подсистемы ввода/вывода – именно поэтому данное требование является опциональным. • Демо на сжатие • DataCompression.sql
Миграция: предисловие • Я постараюсь рассказать о: • Вариантах перехода, методике, инструментах и планировании • С фокусом на реляционную часть SQL Server • Технических и не очень аспектах перехода • Часто встречающихся проблемах, ошибках и мифах • Я не планирую рассказывать о: • Полном перечне всех возможных проблем миграции • Полном перечне нововведений в SQL Server 2008– пожалуйста спрашивайте, тем не менее • Для лучшего усвоения желательно: • Иметь некоторую практику работы с SQL Server 2000/2005 • Иметь базовые знания о SQL Server 2008
Конфигурация демонстрационной среды • Windows 7 Ultimate • Visual Studio Team System 2008 + SP1 • Microsoft® Visual Studio Team System 2008 Database Edition GDR R2 • Это SQL2008 DB Project Template for VS2008 • http://www.microsoft.com/downloads/details.aspx?FamilyID=bb3ad767-5f69-4db9-b1c9-8f55759846ed&displaylang=en • SQL Server 2008 R2 CTP2 • Просто SQL Server 2008 в чистом виде не встает на Windows 7 • Необходимо ставить слипстримнутый с SP1 релиз • Как сварить, объясняется здесь: http://blogs.msdn.com/petersad/archive/2009/02/25/sql-server-2008-creating-a-merged-slisptream-drop.aspx • Готовить его времени не было, а R2 все равно выкачивался к ISV Innovation Day • http://technet.microsoft.com/en-us/evalcenter/ee315247.aspx • Ставился дефолтным инстансом
Конфигурация демонстрационной среды • SQL Server 2005 Developer Edition • Встает на Windows 7 со всем вышеперечисленным без сучка и задоринки • Единственно прикалывает распознавание 10.5 то как семерки, то как 2000 • Но по-серьезному это ни на что не влияет • Поставлен именованым инстансом (Yukon)
Конфигурация демонстрационной среды • SQL Server 2005 SP3 • http://www.microsoft.com/downloads/details.aspx?FamilyID=ae7387c3-348c-4faa-8ae5-949fdfbe59c4&displaylang=en • Adventure Works Sample Database for SQL Server 2005 SP2a (case insensitive) • http://msftdbprodsamples.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=4004#DownloadId=11754 • Microsoft SQL Server 2008 Upgrade Advisor • http://www.microsoft.com/downloadS/details.aspx?familyid=F5A6C5E9-4CD9-4E42-A21C-7291E7F0F852&displaylang=en • RML Utilities for SQL Server • http://www.microsoft.com/downloads/details.aspx?FamilyId=7EDFA95A-A32F-440F-A3A8-5160C8DBE926&displaylang=en • В част., ReadTrace
Общий обзор подхода • Зачем мигрировать? Убедить начальство • Microsoft в помощь - http://www.microsoft.com/sqlserver/2008/en/us/why-upgrade.aspx • Анализ окружения • Требования к миграции • Выбор редакции • Требования к оборудованию • Использовать Upgrade Advisor • Исправить найденные несоответствия • Выполнить тестирование на совместимость • По возможности 100% тестирование кода • Перед миграцией • Подробная документация на существующую систему • Разработка тестов проверки, стресс тестов и снятие базовой линии производительности • Сформулировать и проверить план отката • Определитьсяс подходом в миграции • In-place или side-by-side • Собственно миграция • Предмиграционные работы • После миграции • Вот тут-то на самом деле все и начинается
Что поддается миграции? • Компоненты • Реляционный движок • Включая суб компоненты такие как SQL Agent, Tools, и.т.д. • В дальнейшем именно на нем будем фокусироваться • Full-text Search • Reporting Services • Analysis Services • Data Transformation Services / SSIS • Редакции • Express, Developer, Workgroup, Standard, Enterprise • Платформы • 32-bit & 64-bit (IA64 и x64) • Языки и сортировки • SQL Server 2008 имеет новые сортировки (для соответствия Windows) • select * from ::fn_helpcollations() where name like '%100%‘
Варианты миграции: • In-Place (замещение) • Обновление существующей инсталляции при сохранении пользовательских данных • Имя экземпляра после миграции остается прежним • Старый экземпляр перекрывается новым (исчезает) • Практически 100% автоматический процесс • Включая кластерную установку • Side-by-side (Параллельная установка) • Ставится новый экземпляр SQL Server • Объекты БД переносятся между экземплярами вручную • Copy Database Wizard • Не копирует extended procs, alerts, DTS packages, linked servers. • Detach -> Copy -> Attach • Backup -> Restore • T-SQL Scripts, BCP, Break SAN mirror -> attach • Новый и старый миры сосуществуют бок о бок • Это может быть жизнь на том же сервере (именованный экземпляр) или на другом сервере • Процесс в основном ручной
Как выбрать: замещение или параллельная установка? • Критичность приложения и его сложность • Критичные приложения не обязательно сложны, но имеют жесткие ограничения по тестированию, размерам админ. окна,… • Сложные приложения не обязательно критичны, но требуют интенсивного тестирования и можно столкнуться со сложным откатом • Практические соображения • Размер БД и число объектов • Локальные задания по сопровождению • Длительность допустимого простоя • Аппаратные возможности/возраст серверов • Зависимость от системы и других приложений • Время, необходимое на откат и усилия на это потребные • Возможные требования к параллельному исполнению • C какой версии/редакции на какую поддерживается апгрейд • http://msdn.microsoft.com/en-us/library/ms143393.aspx • Понятно, что при параллельной установке мы можем мигрировать базу хоть на Access;главное, чтобы поддерживалась нужная функциональность
Перенос данных • Говорить об отдельном переносе данных имеет смысл в случае side-by-side миграции • Перенос резервной копии базы • Делай раз: alter database ... set read_only with rollback immediate (или SINGLE_USER) • Делай два: бэкап • Делай три: переносим резервную копию на назначение • Делай четыре: восстанавливаемся на назначении из резервной копии • Делай пять: переводим базу в режим совместимости с 2008 (10), отпускаем многопользовательский доступ • Примечание раз: логины вместе с базой не переносятся, т.к. являются объектами уровня сервера • Можно заскриптовать отдельно на источнике и выполнить скрипт на назначении • Можно воспользоваться Transfer Logins Task в SSIS • В случае интегрированной безопасности окружение назначения должно уже иметь соответствующие записи в AD • Осиротевшие SQLные юзеры базы лечатся при пом. sp_change_users_login (к-я явл-ся deprecated ;)) • Примечание два: перед тем, как открывать базу пользователям, по ней стоит выполнить стандартные процедуры поддержки: checkdb, обновл-е статистики, ... • Примечание три: с полнотекстовыми индексами лучше не возиться с переносом. Из-за изменений в движке iFTS 2008 их проще перестроить. • Демо (показывается на примере 2005, аналогично для 2000) • Отсоединение / присоединение базы
Совместимость вниз • Часть функционала отмерла, часть приговорена, часть просто не рекомендуется • См. замечательный по ясности пост http://social.msdn.microsoft.com/Forums/en/sqldocumentation/thread/899f6b8c-165b-45ff-ad2b-6bd77e6dfdd6 • Заглавная страница в документации – SQL 2008 Backward Compatibility • http://msdn.microsoft.com/en-us/library/cc280407.aspx • Discontinued - no longer in this release of SQL Server. • Перечислены в BOL (http://msdn.microsoft.com/en-us/library/ms144262.aspx) • Deprecated - in this release, but no longer being developed or supported. Will be discontinued in the next release or two. • Перечислены в BOL (http://msdn.microsoft.com/en-us/library/ms143729.aspx) • Obsolete - a better alternative is available so this is now deemed redundant. Will probably be discontinued in the next release. • Понятно, что в списках не значатся недокументированные команды • Они на то и недокументированы, чтобы исчезнуть без предупреждения в любой момент • Как всегда, dbcc traceon(2588); dbcc help('?'), чтобы посмотреть оставшиеся • Аналогично, появиться • Список недокументированных команд, добавленных в 2005 – см. http://mssqlonline.blogspot.com/2007/04/dbcc-commands-introduced-in-sql-server.html • Выполните функциональное тестирование, чтобы поймать пропущенное Upgrade Advisor • Не все приложения нуждаются в полноценной проверке. Реальные по требности зависят от критичности/сложности приложения • Как мы помним, критичность <> сложности и наоборот
SQL Server 2008 Upgrade Advisor • Берется здесь - http://www.microsoft.com/downloadS/details.aspx?familyid=F5A6C5E9-4CD9-4E42-A21C-7291E7F0F852&displaylang=en • Занимает < 10 MB
SQL Server 2008 Upgrade Advisor • После выбора компонент указываем имя экземпляра • В кач-ве входа воспринимает одну или несколько БД, файл трассы, скрипт SQL • Применяет к ним проверку заложенного в него набора правил совместимости
SQL Server 2008 Upgrade Advisor • Дополнительно к AdventureWorks_2005 был задан следующий скрипт, специально наполненный неподходящими командами (см. слайд «Совместимость вниз») • Демо ->DeprecatedIn2008.sql /* Скрипт, содержащий нормальные команды для SQL Server 2005, но криминальные с точки зрения SQL Server 2008 */ --Не поддерживаемые более: use tempdb backup log AdventureWorks_2005 with truncate_only use AdventureWorks_2005 if exists (select 1 from sys.database_principals where type = 'R' and name = 'Test') exec sp_dropgroup @rolename = 'Test' exec sp_addgroup @grpname = 'Test' --Deprecated, т.е. в 2008 поддерживаются, но в след.версии - не факт: select databaseproperty('AdventureWorks_2005', 'Version') --будет заменена на databasepropertyex exec sp_dboption @dbname = 'AdventureWorks_2005', @optname = 'trunc. log on chkpt.', @optvalue = 'true' --sp_dboption в целом заменяется командой alter database; в данном случае действие эквивалентно ALTER DATABASE ... SET RECOVERY SIMPLE select * from Production.Product with (fastfirstrow) --хинт заменен на OPTION (FAST N) select * from Production.Product order by Name collate SQL_AltDiction_CP1253_CS_AS select * from Production.Product p, Production.ProductSubcategory sc, Production.ProductCategory c where p.ProductSubcategoryID *= sc.ProductSubcategoryID and sc.ProductCategoryID *= c.ProductCategoryID --заменен на синтаксис ANSI left/right outer join declare @t table (fld1 text, fld2 image) --замена на varchar/varbinary(max) declare @db_id int, @tbl_id int; select @db_id = db_id(), @tbl_id = object_id('Production.Product'); dbcc pintable(@db_id, @tbl_id)
SQL Server 2008 Upgrade Advisor • Генерируется отчет с найденными несовместимостями • Как мы видим, не все несовместимости в него попадают даже из тех, что перечислены в BOL • Напр., спокойно отнеслась к типам text/image, ...
Другие способы выявления несовместимостей • SQL 2008 ставит большой набор счетчиков, отслеживающих устаревшие конструкции языка • select * from sys.dm_os_performance_counters where object_name like '%deprecated%' • sys.sysperfinfo – deprecated • Делаем в Perfmon сбор всех этих счетчиков и запускаем типовую нагрузку
Использование счетчиков несовместимости Perfmon • Создайте трассу в Perfmon • Перезапустите SQL Server 2008 для обнуления показателей
Использование счетчиков несовместимости Perfmon • Прогоните шаг за шагом вторую (Deprecated) часть скрипта DeprecatedIn2008.sql и наблюдайте, как прирастают счетчики
Использование счетчиков несовместимости Perfmon • Контролировать кол-во выявленных несовместимостей вы можете непосредственно из SQLного скрипта при помощи вышеупомянутого DMV • Выполните в кач-ве примера скрипт • select * from sys.dm_os_performance_counters where instance_name = 'Data types: text ntext or image' • go • declare @t table (fld1 text, fld2 image) • go • select * from sys.dm_os_performance_counters where instance_name = 'Data types: text ntext or image‘ • и обратите внимание, как приросло значение счетчика • Обратите также внимание, что Upgrade Advisor изначально не ловил эту несовместимость • PS. (Не по делу) Как вы объясните два одинаковых спида на картинке?
Особенности предыдущего способа • AS. Правильно. Изначально SQLQuery3 имел другой спид. Но перед его выполнением был сделан рестарт SQL Server. Первой закладке Change Connection еще не успел быть сделан. • Действует аккуратнее по сравнению с Upgrade Advisor • Данные счетчики ставит SQL Server 2008, 2005 про них не знает • Следовательно, выполнять типовую нагрузку надо уже после переноса кода на 2008 • Discontinued вещи в этом случае просто не пойдут, отлавливать можно только те, что все еще поддерживаются, но не рекомендуются • Нельзя фильтровать по конкретной нагрузке • Способ только сообщает, что выявлена такая-то несовместимость, но ничего не говорит, в каком месте • Нужно самому лазить по коду и ее выискивать • Может рассматриваться в качестве финальной проверки на вшивость после того, как все найдено и пофиксено
Как же все-таки отыскать, где собака порылась? • Известны два способа: 1) профайлер; 2) XEvents • Первый элементарен • Откройте профайлер и отметьте события в категории Deprecation • Deprecation Announcement event class • Deprecation Final Support event class • Отметьте также событие в категории T-SQLSQL:BatchCompleted и в категории Stored Procedures RPC:Completed, SP:Completed, SP:StmtCompleted • Остальные можно не выбирать, чтобы не зашумлять картины • Запустите трассу • Выполняйте шаг за шагом вторую часть скрипта DeprecatedIn2008.sql из предыдущей демы • Наблюдайте, как несовместимости отлавливаются в профайлере
Расширенные события • Новая фича SQL Server 2008 • Использует механизм ETW, при помощи которого SQL Server сообщает наружу о происходящих внутри него событиях • Подробнее можно посмотреть в моем блоге • http://blogs.msdn.com/alexejs/archive/2009/09/07/sql-server-etw-4.aspx • http://blogs.msdn.com/alexejs/archive/2009/09/06/sql-server-etw-3.aspx • http://blogs.msdn.com/alexejs/archive/2009/09/04/sql-server-etw-2.aspx • http://blogs.msdn.com/alexejs/archive/2009/09/04/sql-server-etw-1.aspx • Выводим все доступные события независимо от пакета • select xp.name, xo.* from sys.dm_xe_objects xo • join sys.dm_xe_packages xp on xp.guid = xo.package_guid • where xo.object_type = 'event' • order by xp.name, xo.name • И замечаем среди них в пакете sqlserver все те же знакомые deprecation_announcement и deprecation_final_support
Расширенные события • Какую информацию (какие колонки) они о себе несут? • select * from sys.dm_xe_object_columns where object_name in ('deprecation_announcement', 'deprecation_final_support') • Очень обнадеживающе выглядят feature и message, вы не находите? • Какие доп.колонки можно к ним еще подвязать? • Выполните запрос с пред.слайда, только object_type поставьте = ‘action’ • sql_text, tsql_stack, session_id, username, plan_handle – кто и чем нарушил совместимость
Расширенные события • В какие места (targets) могут поступать эти события? • Выполните тот же самый запрос, только object_type поставьте = ‘target’ • Напр., asynchronous_file_target пишет информацию о событиях в файл, ring_buffer – в память, etw_classic_sync_target отдает SQL Serverному ETW-провайдеру и т.д. • Доп.информация – см. http://msdn.microsoft.com/en-us/library/dd822788.aspx
Расширенные события • Теперь все готово, чтобы запустить сессию сбора событий select DB_ID('AdventureWorks_2005') if exists(select 1 from sys.server_event_sessions where name = 'Deprecat') drop event session Deprecat on server go create event session Deprecat on server --будем собирать два выбранных события add event sqlserver.deprecation_announcement (action (sqlserver.sql_text,sqlserver.tsql_stack) --feature и message не указываем, поск.они и так входят в колонки данного события where sqlserver.database_id = 13), --AdventureWorks_2005 add event sqlserver.deprecation_final_support (action (sqlserver.sql_text,sqlserver.tsql_stack) where sqlserver.database_id = 13) --будем писать в два назначения: --в память add target package0.ring_buffer (set max_memory=4096), --и в файл add target package0.asynchronous_file_target (set filename = 'c:\Demo\Deprecat.xel', metadatafile = 'c:\Demo\Deprecat.xem') --это общие п-ры сессии: with ( MAX_MEMORY = 4096KB, EVENT_RETENTION_MODE = ALLOW_MULTIPLE_EVENT_LOSS, MAX_DISPATCH_LATENCY = 1 SECONDS, MEMORY_PARTITION_MODE = NONE, TRACK_CAUSALITY = OFF, STARTUP_STATE = OFF ); alter event session Deprecat on server state = start; --стартуем сессию
Расширенные события • Затем откройте DeprecatedIn2008.sql и запустите его депрецированую часть • Можно из той же сессии • Посмотрите, какие при этом насобирались XEvents • В памяти select databaseproperty('AdventureWorks_2005', 'Version') --будет заменена на databasepropertyex exec sp_dboption @dbname = 'AdventureWorks_2005', @optname = 'trunc. log on chkpt.', @optvalue = 'true' --sp_dboption в целом заменяется командой alter database; в данном случае действие эквивалентно ALTER DATABASE ... SET RECOVERY SIMPLE select * from Production.Product with (fastfirstrow) --хинт заменен на OPTION (FAST N) select * from Production.Product order by Name collate SQL_AltDiction_CP1253_CS_AS go declare @t table (fld1 text, fld2 image) --замена на varchar/varbinary(max) declare @db_id int, @tbl_id int; select @db_id = db_id(), @tbl_id = object_id('Production.Product'); dbcc pintable(@db_id, @tbl_id) select cast(xet.target_data as xml) from sys.dm_xe_session_targets xet inner join sys.dm_xe_sessions xe on (xe.address = xet.event_session_address) where xe.name = 'Deprecat'