Показаны сообщения с ярлыком alter database. Показать все сообщения
Показаны сообщения с ярлыком alter database. Показать все сообщения

среда, 10 апреля 2013 г.

alter database rebuild log

Обнаружил на тестовом сервере БД, недоступную пользователями. Когда на этом сервере умер жёсткий диск, большую часть баз я перенёс, какие-то просто убил за ненадобностью, а про эту, получается, просто забыл.
Проблема с этой БД была в том, что раньше у неё журнал транзакций лежал на диске E, теперь такого диска на этом сервере не было в принципе, а журнал транзакций располагался по тому же пути, но на диске D.
С помощью ALTER DATABASE hd_ts MODIFY FILE (name = 'hd_ts', filename = 'D:\bases\hd_ts_log.ldf') я показал, что журнал транзакций теперь живёт в другом месте. Файл этот, к сожалению был повреждён и база данных упала в SUSPECT.
Я выполнил ALTER DATABASE hd_ts SET EMERGENCY и SET SINGLE_USER, после чего с hd_ts появилась возможность делать хоть что-то. Выполнив DBCC CHECKDB ('hd_ts') WITH NO_INFOMSGS, я увидел, что ошибок не обнаружено, но при попытке сделать ALTER DATABASE hd_ts SET ONLINE, БД снова упала в suspect.
Тут я сделал глупость и удалил сам файл журнала транзакций, после чего ни о каком EMERGENCY речь уже не шла. Почитав форумы, я понял, что DBCC CHECKDB ('hd_ts', REPAIR_ALLOW_DATA_LOSS), скорее всего спасло бы меня. Но, что делать сейчас, было непонятно.
Сделать DETACH БД SQL Server не давал, а останавливать сервер на котором крутится десяток других тестовых баз ради того чтобы спасти никому ненужную БД, было бы не логично. В принципе, если бы я мог остановить сервер - потом можно было бы сделать CREATE DATABASE FOR ATTACH_REBUILD_LOG, либо attach_single_file_db и проблема была бы решена. И вот, наткнулся на такую "недокументированную" возможность ALTER DATABASE:
ALTER DATABASE hd_ts REBUILD LOG ON (name = 'hd_ts_log', filename = 'd:\bases\hd_ts_log.ldf'). Вуаля, база жива.