Home Menu Search

Saqwel

IT and other things blog

Изменение collation базы данных SQL, таблиц и полей в таблицах

Share

Статья посвящена обсуждаемому на многих форумах вопросу о том, как перенести базы данных SQL и при это поменять collation. Проблема в том, что необходимо менять collation базы, collation таблиц внутри базы и collation полей таблиц. К тому же нельзя менять collation у индексов и еще где-то. Не знаю почему я не нашел в интернете статей о подобном методе смены collation с одновременным переносом базы. Но он, вроде бы, работает. В интернете я натыкался лишь на большие и непонятные скрипты, которые должны помочь в решении этой проблемы, но запускать их кажется не очень удобным, так как нет желания разобраться в чужом скрипте.

Итак, приступим. Открыть SQL Server Enterprise Manager, выбрать базу данных, которую надо копировать. Правый клик по базе, в появившемся меню выбрать All Tasks->Generate SQL Script. В появившемся окне, находясь на закладке «General», поставить галку напротив «Script all objects».

Рис. 1. Создание скрипта

На вкладке «Formatting» поставить галки «Generate the CREATE <object> command for each object» и «Generate scripts for all dependent objects», остальные убрать.

Рис. 2. Создание скрипта

На вкладке «Options» поставить все галки, которые есть, «File Format» и «Files to Generate» оставляем как есть. Только в случае возникновения проблем при переносе базы данных можно сгенерировать не один файл для всей базы, как установлено по умолчанию, а по одному файлу на каждый объект базы данных, выбрав «Create one file per object».

Рис. 3. Создание скрипта

Нажать кнопку «OK», указать, куда и с каким именем сохранить файл.

Открыть файл в блокноте. Если в скрипте указан collation, с которым необходимо создавать базу и колонки таблиц, и этот collation не соответствует тому, что необходимо, то заменить все упоминания о старом collation на новое значение collation. Если же в скрипте нет упоминаний о collation, то база будет создана с collation по умолчанию (таким как у сервера).

Рис. 4. Изменение collation в созданном скрипте

Открыть Query Analyzer, подключиться к серверу, на который необходимо копировать базу данных. Открыть скрипт. Проверить скрипт на правильность путей, где будут созданы файлы базы данных (*.mdf и *.ldf). Выполнить скрипт. В результате должна появиться база данных, в точности повторяющая структуру старой, только с новым collation и пустыми таблицами.

Замечание. Необходимо убедиться, что на сервере нет базы с таким же именем, на жестком диске достаточно места для новой базы данных (в скрипте, в первых строках указано, какой размер будет у базы данных).

После этого достаточно провести операцию экспорта/импорта данных в эту пустую базу данных. Для этого в окне SQL Server Enterprise Manager выбрать старую базу данных, на старом сервере, правый клик по ней и выбрать All Tasks->Export Data…. Выбрать источник, откуда происходит экспорт, затем сервер и базу, куда будет произведен экспорт данных. В окне «Specify Table Copy or Query» выбрать «Copy objects and data between SQL Server databases». В следующем окне «Select Objects to Copy» убрать галку «Create destination objects», остальное оставить, как есть.

Рис. 5. Окно выбора объектов, которые необходимо экспортировать

Нажимаем кнопку «Next», в следующем окне жмем «Next», затем «Finish».

В случае, если процедура экспорта/импорта прошла успешно, то база должна быть полностью скопирована с новым collation и готова к работе.

Leave a Reply