SQL Server 2008 Upgrade Advisor
На тему совместимости вниз (backward compatibility) в BOL фигурируют три термина: discontinued, deprecated и obsolete, которые переводятся на русский как неподдерживаемые, устаревшие и obsolete (сравните, напр., здесь и здесь). Наверное, стоило бы перевести как нерекомендуемые, но по русскому у переводчиков в школе было два балла - "Функции SQL Server, неподдерживаемые в этой версии", поэтому что говорить про SQL Server. Существует замечательный по простоте пост, где четко разъясняется, чем каждый термин отличается от остальных. Discontinued - это та часть функционала, которая отмерла в 2008-м. Использование discontinued функциональности вызовет в нем ошибку. Discontinued фичи перечислены здесь. Та функциональность, которая приговорена, называется deprecated, то есть пока ее использовать можно, но в следующем релизе она перейдет в ранг discontinued. Deprecated фичи перечислены здесь. Наконец, obsolete - это нерекомендуемый функционал. Его использование не приведет к ошибке, однако появился лучший способ сделать то же самое. Понятно, что при переезде нужно в первую очередь лечить discontinued, иначе на 2008-м оно заткнется, и по голове за это нас не погладят. Существует тула под названием сабж, которая позволяет заранее перед переездом определить, что в коде и структурах данных требуется поправить. Она берется здесь и весит, смешно сказать, < 10 метров. Запускаем ее и указываем, какие из компонентов SQL Server мы хотим проверить на совместимость, иными словами, экземпляры каких компонентов советник будет искать на машине Server name.
рис.1
Имя экземпляра выбирается на следующем шаге:
рис.2
В качестве входа советник воспринимает одну или несколько БД, файл трассы, скрипт SQL.
рис.3
В данном примере я подсовываю ему базу AdventureWorks с 2005-й версии и скрипт, который специально составил из discontinued и deprecated синтаксических конструкций, перечисленных по ссылкам выше.
/* Скрипт, содержащий нормальные команды для 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)
Скрипт 1
Запускаем советника.
рис.4
Внутри советника существует набор правил, которые он последовательно проверяет против всех объектов заданной БД и нагрузки в виде трассы или SQLного скрипта. Правила могут обновляться/пополняться; чтобы скачать свежую версию, надо нажать Check for updates на первом экране (рис.1). Для просмотра результатов надо нажать Launch Report в конце.
рис.5
Найденные советником косяки выдаются в виде списка, упорядоченного по убыванию критичности косяка. Сначала идут красные значки, которые надо пофиксить в первую очередь (before), т.е. еще до переезда на 2008-й. Это, как понятно, discontinued вещи. Потом (after) желтые значки, с которыми можно жить, но стоит обратить внимание. Это, тоже понятно, deprecated.
рис.6
Каждый значок можно раскрыть, чтобы почитать детали ругательства, а также, что более важно, место, на которое он ругается. Например, если в данном случае кликнуть Show affected objects, выведется кусок скрипта, в котором встретилась discontinued инструкция backup log ... with truncate_only. Куски в скрипте отделяются друг от друга разделителем GO, как задавалось на рис.3.
рис.7
Upgrade Advisor является первым средством, которое нужно использовать перед переходом на новую версию, чтобы отловить и поправить discontinued моменты и затем после перехода, не торопясь, долечивать deprecated. К слову, не все deprecated фичи ловятся советником. Например, мы видим, что он совершенно спокойно отнесся к типам text/image. В следующей серии мы разберем более надежные инструменты выявления устаревших и нерекомендуемых конструкций.
Comments
- Anonymous
December 01, 2011
Хорошая, понятная статья. Несколько раз уже приходилось объяснять как и зачем это делается и всегда попадалить те кто считал что достаточно бекапрестора. Теперь достаточно будет дать ссылку на эту статью.