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

Откуда: Волгоград
Сообщений: 41
Хочу с помощью скрипта отключать пользователей базы и делать detach этой базы. Посмотрел по форуму. Общая идея такая сначала с помощью kill завершить процессы потом выполнить sp_detach_db
нашел скрипт для отключения процессов чуть покорректировал получил следующее

DECLARE @DbId SMALLINT
DECLARE @SpId SMALLINT
DECLARE @SQL NVARCHAR(4000)

SELECT
@DbId = DbId
FROM
master.dbo.sysdatabases
WHERE
name = 'buh_test'

DECLARE sp_complete_cursor CURSOR FAST_FORWARD FOR
SELECT
spid
FROM
master.dbo.sysprocesses NOLOCK
WHERE
dbid=@DbId

OPEN sp_complete_cursor
FETCH NEXT FROM sp_complete_cursor INTO @SpId
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = 'KILL ' + CONVERT(VARCHAR(2), @SpId)
EXEC sp_ExecuteSQL @SQL
FETCH NEXT FROM sp_complete_cursor INTO @SpId
END
CLOSE sp_complete_cursor
DEALLOCATE sp_complete_cursor
GO

но при выполнении данного запроса база buh_test исчезает из списка баз хотя detach я еще не делал, а при попытке attach файла базы данных выдается ошибка. Подскажите что не так? Почему база исчезла из списка системных баз?
30 дек 09, 15:39    [8138109]     Ответить | Цитировать Сообщить модератору
 Re: Отключить всех пользователей и сделать detach базы  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
alter database ... set single_user mode
А база исчезает небось потому, что Вы что-то лишнее убиваете :)
30 дек 09, 15:50    [8138173]     Ответить | Цитировать Сообщить модератору
 Re: Отключить всех пользователей и сделать detach базы  [new]
SCALAlaz
Member

Откуда: Волгоград
Сообщений: 41
Le Peace,
а что лишнее я убиваю можно поподробнее?
30 дек 09, 15:55    [8138201]     Ответить | Цитировать Сообщить модератору
 Re: Отключить всех пользователей и сделать detach базы  [new]
85sergu
Member

Откуда: Винница
Сообщений: 137
--Скрипт переводит базу NameDB в однопользовательский режим
USE NameDB
GO
ALTER DATABASE NameDB SET SINGLE_USER WITH ROLLBACK immediate
ALTER DATABASE NameDB SET MULTI_USER
GO


--Убиваем все активные сеансы подключенные к базе NameDB
DECLARE @spid VARCHAR(200)
DECLARE @kill_spid VARCHAR(200)

DECLARE kill_session CURSOR FOR

SELECT spid FROM [master].dbo.sysprocesses
WHERE dbid=db_id('NameDB')
--spid идентификатор сеанса SQL Server.

 OPEN kill_session;

FETCH NEXT FROM kill_session INTO @spid
WHILE @@FETCH_STATUS = 0

BEGIN

   SET @kill_spid='KILL ' + @spid + char(10)
   --PRINT @kill_spid
   EXEC (@kill_spid)
   
 FETCH NEXT FROM kill_session
 INTO @spid;
END;
 DEALLOCATE kill_session;

Рекомендую использовать первый скрипт!!!
30 дек 09, 17:46    [8138827]     Ответить | Цитировать Сообщить модератору
 Re: Отключить всех пользователей и сделать detach базы  [new]
Le Peace
Member

Откуда: Москва
Сообщений: 8969
SCALAlaz,

не знаю, я ж говорю "небось" :)
30 дек 09, 17:47    [8138831]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить