Site icon Tosolini.info

MS SQL: single user mode

L’altro giorno durante una copia di routine manuale di un server SQL Microsoft, qualcosa va storto e il database si mette in modalità single user mode, cioè una sorta di protezione per cui un solo utente (generalmente “sa” che sta per sql admin, ma questo non è un dato certo) può di fatto accedere al database.

Questo significa indirettamente che i servizi erogati sono bloccati e quindi anche gli applicativi ad esso correlati.

Inutile dire che riavviare il server SQL o i servizi non serve a nulla, alla ripartenza si ritroverà sempre nello stesso stato. Inoltre anche come “sa” il database non è consultabile, cioè non si vedranno gli oggetti, cioè tabelle, security eccetera.

Come se ne esce? la procedura si risolve con uno script, di fatto la cosa è un minimo complicata da spiegare, perché dobbiamo per prima cosa impostarci in modalità master, cioè una sorta di “super user”; trovare e uccidere tutte le connessioni, quindi anche quella del single user mode; impostare un deadlock (per evitare che qualcuno si re-impossessi dell’unico utente libero) e modificare le impostazioni del database affinché venga sovrascritta la modalità da single-user in multi-user.

Per fare questo andiamo da SQL Explorer in alto, sull’apice dell’albero, attiviamo con il tasto destro la console SQL dove potremo incollare il codice sottostante:

USE master
GO
DECLARE @DBNAME VARCHAR(255)
SET @DBNAME = 'mio_database_bloccato'
DECLARE @kill varchar(max) = '';
SELECT @kill = @kill + 'KILL ' + CONVERT(varchar(10), spid) + '; '
FROM master..sysprocesses 
WHERE spid > 50 AND dbid = DB_ID('DBNAME')
EXEC(@kill);

GO
SET DEADLOCK_PRIORITY HIGH
ALTER DATABASE [DBNAME] SET MULTI_USER WITH NO_WAIT
ALTER DATABASE [DBNAME] SET MULTI_USER WITH ROLLBACK IMMEDIATE
GO

Prima di avviarlo abbiate cura di modificare il parametro alla quarta riga, dove cambieremo “mio_database_bloccato” con il nome del vostro database.

La procedura dovrebbe essere rapidissima e successivamente dovreste essere in grado di accedere voi, come utenti ed applicativi, ad SQL come di consueto.

Exit mobile version