SQL Server 2008 R2.

advertisement
Certified for
и партнерские программы
Microsoft
Алексей Шуленин
Microsoft
Департамент стратегических технологий
Эксперт по технологиям обработки и анализа информации
Совместимость
• Партнерские программы, ориентированные на SQL Server
• Каким формальным критериям необходимо удовлетворить для
соответствия программе Works with Microsoft SQL Server 2008
• Как им удовлетворить
Партнерство с Microsoft
Партнерские баллы
• Положение
организации в
партнерской
программе Microsoft
определяется кол-вом
заработанных ею
партнерских баллов
• Система баллов
обеспечивает
измеряемый индекс, по
которому можно
быстро судить о
состоянии партнера в
программе и
необходимых ему
шагах, чтобы двигаться
вверх
Партнерские программы с SQL Server
Программа 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/lionbrid
ge/en-US/services/softwareproduct-engineering/testingveritest/product-certificationservices/microsoft/works-with-sqlserver-2008/solution-brief.htm
Требования программы
• Требования, которым
необходимо удовлетворить
для прохождения «Works with
Microsoft SQL Server 2008»
• http://www.lionbridge.com/certific
ation/Works-With-SQL-Server2008-Specifications.doc
• Существует два способа
прохождения этого теста
• Отправить ваше приложение в
VeriTest и заплатить, чтобы
протестировали
• Протестировать
самостоятельно
– Если нет лишних денег,
правильней выбирать его, т.к.
требования, в общем, достаточно
примитивные
Тестировочная тула
• Берется здесь
• http://www.innovateon.com/pag
eLayout.aspx?pageID=sql_200
8_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_cmdshell c sa запрещаем, а про xp c unsafe 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_regread
N'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
• Файлы трассировки содержат ценную информацию, позволяющую быстро
определить источник сбоев и ликвидировать его
• Посмотреть, какие трассы запущены на сервере в наст.момент, можно TSQLным способом:
• 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 (убить)
• Дефолтную трассу можно только заенейблить или задисейблить при
помощи exec sp_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 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
• аналогично - select * from ::fn_trace_getfilterinfo(default)
Сценарий 3
• Подробнее про то, что такое дефолтная трасса и для чего она нужна,
можно прочитать в статье Kalen Delaney http://www.sqlmag.com/Articles/ArticleID/48939/pg/1/1.html
• Либо скупое упоминание в BOL: http://msdn.microsoft.com/ruru/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-creatinga-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=400
4#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
•
•
•
•
In-place или side-by-side
Собственно миграция
•
•
Подробная документация на существующую систему
Разработка тестов проверки, стресс тестов и снятие базовой линии производительности
Сформулировать и проверить план отката
Определиться с подходом в миграции
•
•
По возможности 100% тестирование кода
Перед миграцией
•
•
Исправить найденные несоответствия
Выполнить тестирование на совместимость
•
•
Выбор редакции
Требования к оборудованию
Предмиграционные работы
После миграции
•
Вот тут-то на самом деле все и начинается 
Что поддается миграции?
• Компоненты
• Реляционный движок
– Включая суб компоненты такие как 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-45ffad2b-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-4CD94E42-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
• Отметьте также событие в категории TSQL SQL: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 и запустите его депрецированую часть
• Можно из той же сессии
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)
• Посмотрите, какие при этом насобирались XEvents
• В памяти
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'
Расширенные события
• И в файле
alter event session Deprecat on server state = stop;
--Собранные в файл события можно видеть и по завершении сессии:
select object_name, cast(event_data as xml) from sys.fn_xe_file_target_read_file('c:\Demo\Deprecat*.xel', 'c:\Demo\Deprecat*.xem', null, null)
--Можно отдельно вытащить из XML интересующую инфу
with cte(event, xml) as (
select object_name, cast(event_data as xml) from sys.fn_xe_file_target_read_file('c:\Demo\Deprecat*.xel', 'c:\Demo\Deprecat*.xem', null, null)
)
select event,
xml.value('(/event/@timestamp)[1]', 'datetime') [time],
xml.value('(/event/data[@name="message"]/value)[1]', 'varchar(max)') msg,
xml.value('(/event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') [sql]
from cte
--В кач-ве sql_text фигурирует целиковый батч, в к-м произошла несовместимость
Зависимости
• Предполагается, что работы с Upgrade Advisor и тестированию
совместимости закончены
• Само приложение
• “COM Components”, Extended Stored Procedures, sp_OA%, CLR assemblies
– Демо – определение зависимостей (Dependencies.sql, .bat, .ps1)
• Linked servers (вопросы разграничения доступа и провайдеры)
• Зависимости между БД (Cross-database dependencies)
• DTS пакеты
• Зависимость от решений третьих фирм
• ПО – backup, management agents, clusters, MPIO, SAN mirroring
• Компоненты – шифрование, почта,…
• Антивирусное ПО
– Обычно его стоит остановить на период миграции, но это не всегда позволительно
• Различия между функциональностью редакций
• Ничто не заменит знание самого приложения!
Смигрировали? Вот и славно. Самое интересное только начинается 
• Отрицательные значения на графике относятся к тем операциям, которые
при работе в среде SQL Server 2008 стали быстрее
Вообще-то все должно быть быстрее. Ну хотя бы не медленнее. Но
если вдруг...
• Проверьте все журналы
• Еще раз посмотрите рекомендации Upgrade Advisor
• Обновите статистику
• Full если возможно
• Sample для больших таблиц
• Filtered для секционированных
• Проверьте настройки Агента, задания и задачи по сопровождению
• Проверьте настройки безопасности
• Особенно в части меж серверного и меж доменного взаимодействия/прав
доступа
• Проверьте целостность БД
Вообще-то все должно быть быстрее. Ну хотя бы не медленнее. Но
если вдруг...
• Проверьте все журналы
• Еще раз посмотрите рекомендации Upgrade Advisor
• Обновите статистику
•
•
•
Full если возможно
Sample для больших таблиц
Filtered для секционированных
• Проверьте настройки Агента, задания и задачи по сопровождению
• Проверьте настройки безопасности
• Особенно в части меж серверного и меж доменного взаимодействия/прав доступа
• Проверьте целостность БД
• Configuration Manager
Особенно важен для параллельной установки для настройки среды исполнения, протоколов…
• При замещении, процесс установки старается сохранить максимально существующую среду: принцип «минимального
удивления»
•
• Убедитесь, что tempdb имеет правильный размер (кто ее только не использует теперь )
•
•
•
•
•
DBCC CHECKDB, CTEs, Cursors, MARS, Row Versioning, Service Broker, Triggers
Проверьте настройки MODEL
Проверьте, что все что записно в MASTER верно
Заново наполните Full-Text Search каталоги
Выполните запланированные проверки
План-гайды как средство QFE
• Демо: PlanGuides.sql
Мама, роди меня обратно!
• Как быть, если после миграции что-то пошло сильно не так, нужно
откатываться?
• Вероятность такого варианта прямо зависит от глубины предварительного
тестирования
• Что можно сделать и откуда могут расти ноги
• Не паниковать
• Определить причину проблемы (если мигрируете с 2000, заранее поучитесь
пользоваться новыми средствами диагностики)
• Может быть все не так и плохо 
•
•
•
•
В зависимости от… откат может быть простым и сложным
Если процедура прописана и протестирована, будет проще
Мониторинг системы для раннего оповещения
У меня есть статья «Перетаскивание базы с SQL Server 2008 на 2005»,
написанная еще во времена Катмая СТР5
• Я ее подчищу, обновлю и выложу в ISV блог
• Инструменты синхронизации
• Можно порекомендовать tablediff (http://msdn.microsoft.com/ru-ru/library/ms162843.aspx).
Работает быстро и проста в использовании
И в завершение
• Вы зачем переходили на 2008-й? Ради новых возможностей? Так
задействуйте их в своих решениях!
Новые возможности
Productive
Trusted
Intelligent
Transparent Data Encryption
Policy Based Management
Enterprise Reporting Engine
External Key Management
Entity Data Model (EDM)
Report Builder 2.0
Data Auditing
ADO.NET Entity Framework
Enhanced Data Visualization
Pluggable hot-add CPU
ADO.NET Data Services
Change Data Capture
Visual Entity Designer
Data Profiling
Sync Services for ADO.NET
Star Join Query Optimization
Table-Valued Parameters
Better rendering for Word & Excel
PowerShell Integration
TABLIX
CLR Improvements
Data Mining Engine Improvements
FILESTREAM Data Type
Conflict Detection
Integrated Full Text Search
Performance Date Collector
Large User Defined Types
IIS Agnostic Report Deployments
Date/Time Data Types
Scale out Analysis Services
Query Optimizations
Geography Data Types
MERGE SQL Statement
Filtered Indexes
Geometry Data Types
Non-logged Inserts
Sparse Columns
Grouping Sets
Persistent Look-ups
Intellisense
Partition Aligned Indexed View
Transparent Failover for Database Mirroring
Backup Compression
Data Compression
Database Mirroring Enhancements
Upgrade Advisor
Lock Query Plan
Server Group Management
Resource Governor
Partitioned Table Parallelism
Streamlined Installation
59
© 2007 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries. The
information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation. MICROSOFT
MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.
Download