как отрубить всех юзеров от сервера/базы ?

Winnipuh
Дата: 28.01.2009 18:18:58
как в скрипте отрубить всех юзеров от сервера/базы, кроме себя ?

Юзер-френдли приложение делает апгрейд базы до следующей версии, т.е. накатывает набор скриптов на базу.

Есть некоторые действия, которые sql server позволяет производить только, если нет юзерских коннекций.

Как отключить юзеров?
SignOff
Дата: 28.01.2009 18:19:53
Winnipuh,

Ну насколько я знаю можно RESTRICTED_USER опцию заюзать ;)
Supra93
Дата: 28.01.2009 18:26:06
SignOff
Winnipuh,

Ну насколько я знаю можно RESTRICTED_USER опцию заюзать ;)

А если я dbo и буду ченить мутить?
BOL

<db_user_access_option> ::=

Controls user access to the database.
SINGLE_USER

Specifies that only one user at a time can access the database. If SINGLE_USER is specified and there are other users connected to the database the ALTER DATABASE statement will be blocked until all users disconnect from the specified database. To override this behavior, see the WITH <termination> clause.
Mr Marmelad
Дата: 28.01.2009 18:36:27
Winnipuh
Как отключить юзеров?


как нить так Коллега:

ALTER DATABASE yourDB
    SET SINGLE_USER WITH 
ROLLBACK IMMEDIATE
так се прохожий
Дата: 30.04.2009 23:11:04
exec sp_dboption 'base_name', 'dbo use only', 'TRUE'
Vadim Yakimets
Дата: 04.03.2010 17:49:32
а вот бывает, что базу держит процесс системный checkpoint, и не дает переключиться в single_user,
как тут быть?
Now password
Дата: 04.03.2010 17:57:51
CREATE PROCEDURE KillDatabaseSessions_SP ( @DBName VARCHAR(50) )
AS 

            DECLARE @SessionID INT
            CREATE TABLE #DBSessions
                (
                  SPID INT,
                  status VARCHAR(50),
                  loginname VARCHAR(50),
                  hostname VARCHAR(100),
                  blk VARCHAR(10),
                  dbname VARCHAR(100),
                  cmd VARCHAR(50),
                  CPUTime INT,
                  DiskIO INT,
                  lastbatch VARCHAR(50),
                  programname VARCHAR(100),
                  SPID2 INT,
                  requestid INT
                ) ;
            INSERT  INTO [#DBSessions]
                    (
                      [SPID],
                      [status],
                      [loginname],
                      [hostname],
                      [blk],
                      [dbname],
                      [cmd],
                      [CPUTime],
                      [DiskIO],
                      [lastbatch],
                      [programname],
                      [SPID2],
                      [requestid] 
                    )
                    EXEC sp_who2 ;
                    IF( (SELECT  COUNT(SPID) FROM    [#DBSessions] WHERE   upper(dbname) = UPPER(@DBName))>0)
                    BEGIN
            DECLARE ctr CURSOR
                FOR SELECT  SPID
                    FROM    [#DBSessions]
                    WHERE   upper(dbname) = UPPER(@DBName) ;

            DECLARE @string VARCHAR(1000)

            OPEN ctr
            FETCH NEXT FROM ctr INTO @SessionID
            WHILE( @@FETCH_STATUS = 0 )
                BEGIN
                    SET @string = 'KILL ' + CONVERT(VARCHAR(20), @SessionID)
                    exec ( @string )         
					select @string
                    FETCH NEXT FROM ctr INTO @SessionID	
                END
           
            CLOSE ctr
            DEALLOCATE ctr

            DROP TABLE [#DBSessions]
        END

Убивает всех, кто в коннекте с базой.
Павел-П
Дата: 04.03.2010 18:16:01
1. Исходя из своего опыта, приведенный ниже скрипт от Mr Marmelad отрабатывает всега и переводит БД в SINGLE_USER mode.

ALTER DATABASE yourDB
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE

Как я понимаю, именно этот вариант использует Management Studio когда Вы пытаетесь убить БД c опцией Close existing connections. Сначала переводит БД в SINGLE_USER mode, а затем убивает.

2. Вариант от Now password тоже хороший, но может нарываться на процессы типа CHECKPOINT_QUEUE и падать с ошибкой.
msLex
Дата: 04.03.2010 18:20:08
Павел-П
2. Вариант от Now password тоже хороший, но может нарываться на процессы типа CHECKPOINT_QUEUE и падать с ошибкой.


Вариант от Now password вообще лучше не читать.
eugenehr
Дата: 04.03.2010 18:32:08
Вариант от Now Password прибьет и самого Now Password? Чего-то нигде сравнения SPID со своим не видно.