По материалам статьи Энди Уоррен на 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, который также позволяет переместить базу
данных без потери связи с логинами.