Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 сложности при: set multi_user  [new]
Alexander Us
Member

Откуда:
Сообщений: 1133
Наткнулся на проблему при переводе базы назад, в multi_user.

Решение нагуглил, но решил тут обобщить. Может кому понадобится.

1. Создаем базу, переводим её в singe_user но сессия остаётся открытой:
select @@spid --> 56

create database test
go

use test
go

--делаем что то
create table t(c1 int); insert t values(1)
go

--возвращаемся в master!
use master
go

alter database test set single_user
go

select * from test..t  --> делаем что то, например читаем данные, всё ок.



2. Старую сессию не закрываем, но забываем её номер. Открвыаем новую сессию:
select @@spid --59

alter database test set multi_user with rollback immediate --Error 5064: ...The database is in single-user mode, and a user is currently connected to it...


3. Терерь надо найти номер сессии которая "держит" базу и закрыть её, чтобы команда перевода в multi_user выполнилась:

--попытка 1
sp_who2 
-- найти не удалось

--попытка 2
select 
    d.name, 
    d.dbid, 
    spid
from sysprocesses p inner join sysdatabases d  on p.dbid = d.dbid where d.name = 'test'
-- найти не удалось

--попытка 3: 
select * from sys.dm_exec_requests req join sys.dm_exec_sessions ses on req.session_id=ses.session_id
-- найти не удалось


4. А вот так должно получиться:

SELECT request_session_id 
FROM   sys.dm_tran_locks
WHERE  resource_database_id = DB_ID('test')  -->> 56   

kill 56

alter database test set multi_user with rollback immediate 
-- УРА!
23 дек 15, 16:39    [18600277]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить