Перемещение базы путём отсоединения и присоединения её файлов

ПУБЛИКАЦИИ  

По материалам статьи Энди Уоррен на swynk.com «Attaching and Detaching Files»

Если логическая конфигурация дисков различна, или Вы хотите переместить только часть ваших файлов, самый легкий путь состоит в том, чтобы отсоединить их от первоначального сервера и затем присоединяться к новому. Это даёт Вам шанс, изменить физическое расположения файлов для каждой базы данных. Обратная сторона этого метода в том, что, если Вам нужно перемещать много баз данных, это становится очень утомительным занятием!
Имеются три хранимые процедуры, которые применяют в этих целях: sp_detach_db, sp_attach_db, sp_attach_single_file_db. Использование sp_detach_db удалит указанную базу данных SQL сервера, но оставит нетронутыми её файлы. После этого Вы можете перемещать их в другие каталоги или даже на другой сервер. Затем, используя sp_attach_db, можно повторно подключить базу данных, и продолжить её использование. Отсоединение базы данных также полезно, когда Вы хотите её архивировать, но не исключена возможность использования её в будущем.
Когда Вы отсоединяете базу данных, В вашем распоряжении есть опция, позволяющая перед этим обновить статистику. Также, у Вас всегда есть возможность обновить статистику после того, как Вы снова прикрепили базу. Вы должны использовать sp_attach_single_file_db, если Вы имеете только файл данных, это позволит создать новый журнал транзакций (Примечание автора рассылки: если журнал разбит на несколько файлов – это не работает). Если журнал существует, то можно использовать sp_attach_db. SP_attach_db поддерживает до 16 файлов (имеется ввиду: комбинация файлов данных и журналов). Если Вы имеете больше 16-ти файлов, Вы должны использовать CREATE DATABASE вместе с опцией FOR ATTACH.
Когда Энди изучал BOL, у него возникло желание убедиться в ограничении на 16 файлов и причинах такого ограничения. Оказалось, что ограничение введено непосредственно в коде sp_attach_db и не допускает более 16-ти имен файлов, причём только для создания динамического sql-запроса, выполняющего CREATE DATABASE с опцией FOR ATTACH! Также Энди смотрел sp_attach_single_file_db, которая просто создаёт базу данных с опцией «for attach» и создаёт журнал в заданном по умолчанию каталоге. SP_detach_db - это только «обертка» для DBCC DetachDB, но можно предположить, что происходит только удаление строки из sysdatabases, а также из других, связанных таблицы базы данных master.
Отсоединение и присоединение баз данных в SQL сервер 7 требует, чтобы Вы использовали хранимые процедуры, но в SQL сервер 2000, Вы можете щёлкнуть правой кнопкой мыши, чтобы исполнить те же операции, что бывает очень удобно, так как необходимо вводить полный путь и имя файла. К сожалению ни одна хранимая процедура и Enterprise Manager не могут корректно оперировать фалами, включёнными в группы (filegroup), при выполнении операции присоединения. Если Вы имеете группы файлов, Вам придётся вручную написать sql - запрос, который будет содержать CREATE DATABASE вместе с опцией FOR ATTACH.
Энди предлагает Вам ознакомиться со статьёй, которая предлагает метод прикрепления баз данных с использованием DMO:
http://www.swynk.com/friends/warren/attachdetachdatabase2.asp

Комментарий автора рассылки к вопросу переприкрепления баз данных:

При переносе баз данных методом переприсоединения на другой сервер с отличной конфигурацией дисков или каталогов, может нарушиться связь между базой и её логинами. Решение этой проблемы было подробно освещено в 12-м выпуске рассылки в статье «Восстановление связи между пользователем БД и его login»
http://www.sql.ru/subscribe/012.shtml
В SQL сервер 2000 Вы можете воспользоваться мастером Copy Database Wizard, который также позволяет переместить базу данных без потери связи с логинами.


Перевод: Александр Гладченко  2001г.

ПУБЛИКАЦИИ

Скачать электронную карту Ангарска бесплатно
Сайт управляется системой uCoz