Как отключить клиентов от MSSQL для RESTORE DB?
От: _dIAMOND_ Россия  
Дата: 22.05.06 08:44
Оценка:
Добрый день!

Я делаю тестовую оболочку для проекта с MSSQL 2000, которая при начале тестов делает BACKUP DATABASE в файл, а при окончании должна БД восстанавливать.
При попытке восстановить БД кодом:
restore database DBName from DISK='file.path'

При выполнении вываливается
Error: 3101, Severity: 16, State: 1 Exclusive access could not be obtained because the database is in use.

, так как тестируемые модули все еще имеют активные (вернее, открытые) соединения к БД, но их требуется отключить.

В документации рекомендуется выполнить перед операцией
ALTER DATABASE SET SINGLE_USER
, но на практике вываливается (на этот раз после долгого ожидания) следующее:
Error: 5069, Severity: 16, State: 1 ALTER DATABASE statement failed.

Аккаунт, под которым выполняется операция, есть db_owner.

Может быть, есть другие способы отключить соединения?
Re: Как отключить клиентов от MSSQL для RESTORE DB?
От: alico  
Дата: 22.05.06 12:50
Оценка:
Здравствуйте, _dIAMOND_, Вы писали:

_IA>Может быть, есть другие способы отключить соединения?


sp_who + kill

Только неправильно это, пользователей огульно отрубать
Re[2]: Как отключить клиентов от MSSQL для RESTORE DB?
От: _dIAMOND_ Россия  
Дата: 22.05.06 21:32
Оценка:
Здравствуйте, alico, Вы писали:

A>Здравствуйте, _dIAMOND_, Вы писали:


_IA>>Может быть, есть другие способы отключить соединения?


A>sp_who + kill


A>Только неправильно это, пользователей огульно отрубать


К БД гарантированно может обращаться только мой Data Access Layer (ADO.NET), который после окончания тестов все равно корректно инициализируется заново. Так что код завершения тестов (который TearDown) имеет полное право отрубать все его соединения.

Использовать KILL не могу по той причине, что код завершения тестов находится в том же процессе, что и клиенты (data access layer). Надо отрубать именно соединения. Enterprise Manager, кстати, умеет это делать как-то...
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.