2014-05-19 18 views

risposta

7

Prima di collegarsi offline. Il dialogo per quello consente un'opzione di forza. Quindi puoi staccarlo in sicurezza.

+1

Ho notato che non è possibile portarlo offline se ci sono persone connesse al database, a meno che non si scolleghino ottenendo il proprio database in modalità utente singolo. –

+1

[Savin 'ya a google] (http://blog.sqlauthority.com/2010/04/24/sql-server-t-sql-script-to-take-database-offline-take-database-online/) : 'ALTER DATABASE [myDB] SET OFFLINE CON ROLLBACK IMMEDIATE' e' ALTER DATABASE [myDB] SET ONLINE' – ruffin

+0

La finestra di dialogo per l'acquisizione offline di un database non è interattiva. Lo tenta semplicemente senza prima chiederlo e annullare non funziona. E potrebbe volerci molto tempo prima che fallisca. Invece, se si scollega il database, esiste un'opzione per eliminare le sessioni correnti. –

9

Scollegare tutti gli altri utenti al database

ALTER DATABASE [YourDbName] 
SET SINGLE_USER WITH ROLLBACK IMMEDIATE; 

scollegare il Connections SSMS al database

Se si è l'unico utente collegato ad un database e desidera disconnettere tutti i collegamenti fatto da voi in SSMS è possibile accedere a uno qualsiasi dei Query windows aperto su SSMS e fare clic destro e vedere di seguito:

enter image description here

1

Manualmente (e quindi, con un po 'di sforzo, a livello di programmazione) è possibile utilizzare il comando KILL per chiudere in modo completo le connessioni aperte al database.

Identificare le convenzioni da chiudere, ora è la parte difficile. Inizia con le procedure di sistema SP_WHO e SP_WHO2 per identificare manualmente quali connessioni utilizzano i database; l'utilizzo e l'analisi di queste procedure può portare a riferimenti agli oggetti di sistema sys.processes, sys.dm_exec_sessions e a una moltitudine di altre, seguite da un'eventuale comprensione degli SPID e da un inevitabile rispetto perverso dei pool di connessioni.

Tutti questi sono trattati in dettaglio nella documentazione in linea di SQL. È l'inizio di un labirinto piuttosto esteso, e in che misura si arriva fino in fondo dipende dai tuoi obiettivi e obiettivi finali.

+0

Questo metodo può essere un vero problema, solo pochi mesi fa stavo cercando di portare un database offline ma l'applicazione continuava ad aprire nuove connessioni al database. Non importa quante volte ho ucciso l'applicazione di processo ne ho aperta una nuova. Finnaly Ho usato la modalità utente singolo per interrompere l'applicazione dall'apertura di nuove connessioni poiché ero l'unico utente ad averlo collegato. –

+0

Parlamene. Ho una routine che scorre su e tenta di uccidere tutte le connessioni aperte per un database specificato, dopo di che se tutti sono stati chiusi esegue uno script passato (in genere, sp_detachdb). Se dopo 10 passaggi non è possibile chiudere tutte le connessioni, ha rinunciato. DBA-solo uso, ovviamente! –

Problemi correlati