Errore durante la ridenominazione del database in SQL Server 2008 R2


164

Sto usando questa query per rinominare il database:

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

Ma mostra un errore durante l'escissione:

Messaggio 5030, livello 16, stato 2, riga 1
Impossibile eseguire il blocco esclusivo del database per eseguire l'operazione.

C'è qualcosa che non va nella mia domanda?


4
Non c'è niente di sbagliato nella query: l'errore ti dice che altre connessioni sono connesse al database, quindi non ti è permesso di rinominarlo in questo momento.
Damien_The_Unbeliever

1
Se lo stai facendo da SSMS, assicurati di non avere una finestra di query aperta su quel db, poiché si tratta di una connessione separata che pone un blocco sul db.
jleach,

Risposte:


329

Potresti provare a impostare il database in modalità utente singolo.

https://stackoverflow.com/a/11624/2408095

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE    
ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]
ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

1
è WITH ROLLBACK IMMEDIATEnecessario Se non lo uso affatto, causerà problemi?
user13892,

Un po 'tardi alla festa, ma per rispondere a questa domanda: sì, è necessario utilizzare WITH ROLLBACK IMMEDIATEmentre si modifica un database su cui potrebbero operare altri utenti, al fine di garantire l'integrità di queste operazioni. Ma non è davvero necessario quando si imposta nuovamente il database in modalità MULTI_USER poiché il database è già in modalità SINGLE_USER e tu sei l'unico utente in grado di eseguire comunque qualsiasi transazione.
Hakan Yildizhan,

61
  1. Impostare il database in modalità singola:

    ALTER DATABASE dbName
    SET SINGLE_USER WITH ROLLBACK IMMEDIATE
  2. Prova a rinominare il database:

    ALTER DATABASE dbName MODIFY NAME = NewName
  3. Impostare il database in modalità multiutente:

    ALTER DATABASE NewName
    SET MULTI_USER WITH ROLLBACK IMMEDIATE

@SamieyMehdi Dovrei usare WITH ROLLBACk IMMEDIATEper multiutente?
BendEg

29

In SQL Server Management Studio (SSMS) :

È inoltre possibile fare clic con il pulsante destro del mouse sul database in Esplora oggetti e selezionare Proprietà . Da lì, vai su Opzioni . Scorri fino in fondo e imposta Limita accesso su SINGLE_USER . Cambia il nome del tuo database, quindi torna indietro e ripristinalo su MULTI_USER .


Facile e veloce!
ani627

È perfetto. Lavorare con SQL Server 2017
Adam Macierzyński

19

Prova a chiudere prima tutte le connessioni al tuo database:

use master
ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE 

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

Tratto da qui


4

Questo ha fatto per me:

USE [master];
GO
ALTER DATABASE [OldDataBaseName] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
EXEC sp_renamedb N'OldDataBaseName', N'NewDataBaseName';


-- Add users again
ALTER DATABASE [NewDataBaseName] SET MULTI_USER
GO


2

Cambia il database in modalità utente singolo come mostrato nelle altre risposte

A volte, anche dopo la conversione in modalità utente singolo, l'unica connessione consentita al database potrebbe essere in uso.

Per chiudere una connessione anche dopo la conversione in modalità utente singolo prova:

select * from master.sys.sysprocesses
where spid>50 -- don't want system sessions
  and dbid = DB_ID('BOSEVIKRAM')

Guarda i risultati e vedi l'ID della connessione al database in questione.

Quindi utilizzare il comando seguente per chiudere questa connessione (dovrebbe essercene solo una poiché il database è ora in modalità utente singolo)

KILL connection_ID

Sostituisci connection_id con l'ID nei risultati della prima query


1

1.database impostato prima modalità utente singolo

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER CON ROLLBACK IMMEDIATO

2. Rinominare il database

ALTER DATABASE BOSEVIKRAM MODIFY NAME = [BOSEVIKRAM_Deleted]

3.DATABAE IMPOSTARE LA MODALITÀ MULIUSER

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER CON ROLLBACK IMMEDIATO


0

Un altro modo per chiudere tutte le connessioni:

Strumenti di amministrazione> Visualizza servizi locali

Arresta / avvia il servizio "SQL Server (MSSQLSERVER)"


-1
use master

ALTER DATABASE BOSEVIKRAM SET SINGLE_USER WITH ROLLBACK IMMEDIATE  

exec sp_renamedb 'BOSEVIKRAM','BOSEVIKRAM_Deleted'

ALTER DATABASE BOSEVIKRAM_Deleted SET MULTI_USER

Questa è la stessa risposta esatta di Squid
reggaeguitar il
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.