metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2007-07-02 10:36 am

Перемещение баз MSSQL 2000 в другое место.

Добавил я тут еще один раздел к винту в ноутбуке - для больших файлов, типа виртуальных машин, баз данных и образов дисков.
Базы Firebird переносятся за 1 минуту - скопировал файлы, поменял алиасы в aliases.conf.
Базы же MSSQL - пляска с бубном. Сначала надо отсоединить (sp_detach_db или в меню All tasks - Detach database) все пользовательские базы. Перенести их на новое место.
Затем надо залезть в параметры старта сервера (Сервер - Properties - General - Startup Parameters), там удалить старые параметры - путь к базе master, ее логу и логу ошибок, добавить новые(с новыми путями). Я вообще бзырь - я сначала нашел где эти параметры лежат в реестре(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\MSSQLServer\Parameters) и там их поправил :)
Остановить сервер, перенести базу master на новое место. Запустить сервер.

Чтобы перенести базу tempdb, надо в Query Analyzer выполнить команду(E:\Sqldata\ - новое место для баз):
use master
go
Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
Go

Затем перестартовать сервер и грохнуть старые файлы от tempdb.

Чтобы перенести базы msdb и model (внимание, интенсивность плясок с бубном достигает своего максимума), надо к параметрам запуска сервера добавить параметр трассировки -T3608. Перестартовать сервер.

Затем надо отсоединить базы:
use master
go
sp_detach_db 'model'
go
sp_detach_db 'msdb'
go


Перенести их файлы в новое место и присоединить:
use master
go
sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
go
sp_attach_db 'msdb','E:\Sqldata\msdbdata.mdf','E:\Sqldata\msdblog.ldf'
go


Затем надо убрать из параметров запуска -T3608 и опять перестартовать сервер.
Присоединить обратно все пользовательские базы.


Вопрос же переноса баз Oracle вы у меня лучше не спрашивайте. Я один раз это делал, что-то мне совсем не понравилось. А сейчас у меня оракл не используется.

[identity profile] ennor.livejournal.com 2007-07-02 08:24 am (UTC)(link)
Ну, пользовательские базы в MSSQL переносятся несложно - детач-мув-аттач. Насчет же переноса системных БД - да, несколько сложнее, но все равно - есть полезная КВ на эту тему: How To move SQL Server databases.

А лазать в реестр, устанавливать глобальные флаги трассировки и заниматься другими низкоуровневыми хаками не стоило - слишком опасно. Я так однажды решил в мастере поправить расположения баз - так потом пришлось из консоли запускать сиквел в однопользовательском режиме и ручками, из-под osql, прогонять апдейты на sysdatabases, чтобы вернуть все обратно :)

[identity profile] metaclass.livejournal.com 2007-07-02 09:42 am (UTC)(link)
Кстати в этой самой KB и написано про флаг трассировки.

[identity profile] ennor.livejournal.com 2007-07-02 11:58 am (UTC)(link)
Проглядел, да.

В любом случае, ничего запредельного в этом нет - во всяком случае, при наличии столь исчерпывающей документации. Да, неочевидно, да, надо читать доки - ну так их в любом бол-мен серьезном продукте читать надо.

Собственно, потому в нормальной ситуации DBA и выделяется в отдельную должность.