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.