sp_detach_db (Transact-SQL)
Si applica a:SQL Server
Scollega un database attualmente non in uso da un'istanza del server e, facoltativamente, esegue UPDATE STATISTICS su tutte le tabelle prima dello scollegamento.
Importante
Per poter scollegare un database replicato, è necessario che non sia pubblicato. Per ulteriori informazioni, vedere la sezione "Osservazioni" di seguito in questo argomento.
Convenzioni di sintassi Transact-SQL
Sintassi
sp_detach_db [ @dbname= ] 'database_name'
[ , [ @skipchecks= ] 'skipchecks' ]
[ , [ @keepfulltextindexfile = ] 'KeepFulltextIndexFile' ]
Argomenti
[ @dbname = ] 'database_name'
Nome del database da scollegare. database_name è un valore sysname, con un valore predefinito NULL.
[ @skipchecks = ] 'skipchecks'
Specifica se ignorare o eseguire UPDATE STATISTIC. skipchecks è un valore nvarchar(10), con un valore predefinito NULL. Per ignorare UPDATE STATISTICS, specificare true. Per eseguire in modo esplicito UPDATE STATISTICS, specificare false.
Per impostazione predefinita, l'istruzione UPDATE STATISTICS viene eseguita per aggiornare le informazioni sui dati nelle tabelle e negli indici. L'esecuzione di UPDATE STATISTICS risulta utile per i database che devono essere spostati su supporti di sola lettura.
[ @keepfulltextindexfile = ] 'KeepFulltextIndexFile'
Specifica che il file di indice full-text associato al database scollegato non verrà eliminato durante l'operazione di scollegamento del database. KeepFulltextIndexFile è un valore nvarchar(10) con valore predefinito true. Se KeepFulltextIndexFile è false, tutti i file di indice full-text associati al database e i metadati dell'indice full-text vengono eliminati, a meno che il database non sia di sola lettura. Se NULL o true, i metadati correlati a full-text vengono mantenuti.
Importante
Il parametro @keepfulltextindexfile verrà rimosso in una versione futura di SQL Server. Non utilizzare questo parametro in un nuovo progetto di sviluppo e modificare non appena possibile le applicazioni in cui viene attualmente utilizzato.
Valori del codice restituito
0 (operazione completata) o 1 (operazione non riuscita)
Set di risultati
Nessuno
Osservazioni:
Quando un database è scollegato, tutti i suoi metadati vengono eliminati. Se il database è il database predefinito di qualsiasi account di accesso, master diventa il database predefinito.
Nota
Per informazioni su come visualizzare il database predefinito di tutti gli account di accesso, vedere sp_helplogins (Transact-SQL). Se si dispone delle autorizzazioni necessarie, è possibile usare ALTER LOGIN per assegnare un nuovo database predefinito a un account di accesso.
Limitazioni
Non è possibile scollegare un database se una delle seguenti condizioni è vera:
Il database è attualmente in uso. Per ulteriori informazioni, vedere la sezione "Come ottenere l'accesso esclusivo" di seguito in questo argomento.
Se è replicato, il database viene pubblicato.
Prima di poter scollegare il database, è necessario disabilitare la pubblicazione eseguendo sp_replicationdboption.
Nota
Se non è possibile usare sp_replicationdboption, rimuovere la replica eseguendo sp_removedbreplication.
Uno snapshot del database esiste nel database.
Prima di scollegare il database, è necessari eliminare tutti i relativi snapshot. Per altre informazioni, vedere Eliminare uno snapshot del database (Transact-SQL).
Nota
Non è possibile scollegare o collegare uno snapshot del database.
È in corso il mirroring del database.
Non è possibile scollegare il database finché non viene terminata la sessione di mirroring del database. Per altre informazioni, vedere Rimozione del mirroring del database (SQL Server).
Il database è sospetto.
Per scollegare un database sospetto è prima necessario attivare la modalità di emergenza. Per altre informazioni su come inserire un database in modalità di emergenza, vedere ALTER DATABASE (Transact-SQL).
Il database è un database di sistema.
Come ottenere l'accesso esclusivo
Per scollegare un database, è necessario l'accesso esclusivo al database. Se il database che si desidera scollegare è in uso, per scollegarlo è necessario impostare la modalità SINGLE_USER, in modo da ottenere l'accesso esclusivo.
Prima di impostare il database in modalità SINGLE_USER, verificare che l'opzione AUTO_UPDATE_STATISTICS_ASYNC sia impostata su OFF. Se l'opzione è impostata su ON, tramite il thread in background utilizzato per aggiornare le statistiche viene stabilita una connessione con il database che non sarà quindi accessibile in modalità utente singolo. Per altre informazioni, vedere Impostare un database sulla modalità utente singolo.
Ad esempio, l'istruzione seguente ALTER DATABASE
ottiene l'accesso esclusivo al database AdventureWorks2022 dopo che tutti gli utenti correnti si disconnettono dal database.
USE master;
ALTER DATABASE AdventureWorks2022
SET SINGLE_USER;
GO
Nota
Per forzare immediatamente gli utenti correnti dal database o entro un numero specificato di secondi, usare anche l'opzione ROLLBACK: ALTER DATABASE database_name SET SINGLE_USER WITH ROLLBACK rollback_option. Per altre informazioni, vedere ALTER DATABASE (Transact-SQL).
Ricollegamento di un database
I file scollegati non vengono eliminati e possono essere ricollegati tramite CREATE DATABASE (con l'opzione FOR ATTACH o FOR ATTACH_REBUILD_LOG). È possibile spostare e quindi collegare tali file in un altro server.
Autorizzazioni
Richiede l'appartenenza al ruolo predefinito del server sysadmin o all'appartenenza al ruolo db_owner del database.
Esempi
Nell'esempio seguente il database AdventureWorks2022 viene scollegato con skipchecks impostato su true.
EXEC sp_detach_db 'AdventureWorks2022', 'true';
L'esempio seguente scollega il database AdventureWorks2022 e mantiene i file di indice full-text e i metadati dell'indice full-text. Per impostazione predefinita, questo comando esegue UPDATE STATISTICS.
exec sp_detach_db @dbname='AdventureWorks2022'
, @keepfulltextindexfile='true';
Vedi anche
ALTER DATABASE (Transact-SQL)
Scollegamento e collegamento del database (SQL Server)
CREATE DATABASE (SQL Server Transact-SQL)
Scollegamento di un database
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per