Scollegamento e collegamento del database (SQL Server)

Si applica a:SQL Server

È possibile scollegare i file di dati e di log delle transazioni di un database e, successivamente, ricollegarli alla stessa istanza di SQL Server o a un'istanza diversa. Scollegare e collegare un database risulta utile se si desidera assegnare il database a un'istanza diversa di SQL Server nello stesso computer oppure spostarlo.

Autorizzazioni

Le autorizzazioni di accesso ai file vengono impostate durante diverse operazioni di database, tra cui scollegamento o collegamento di un database.

Importante

È consigliabile non collegare o ripristinare database da origini sconosciute o non attendibili. Tali database possono contenere codice dannoso che potrebbe eseguire codice Transact-SQL indesiderato o causare errori modificando lo schema o la struttura fisica del database. Prima di usare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB (Transact-SQL) nel database in un server non di produzione ed esaminare anche il codice, ad esempio stored procedure o altro codice definito dall'utente, nel database.

Scollegamento di un database

Lo scollegamento di un database determina la rimozione del database dall'istanza di SQL Server, mentre i file di dati e i file del log delle transazioni inclusi nel database non vengono modificati. È quindi possibile utilizzare questi file per collegare il database a qualsiasi istanza di SQL Server, incluso il server dal quale è stato scollegato il database.

Non è possibile scollegare un database se si verifica una delle condizioni seguenti:

  • Il database è replicato e pubblicato. Se replicato, il database deve essere non pubblicato. Prima dello scollegamento, è necessario disabilitare la pubblicazione eseguendo sp_replicationdboption.

    Nota

    Se non è possibile usare sp_replicationdboption, è possibile 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.

  • Il database fa parte di un gruppo di disponibilità Always On.

    Il database non può essere scollegato fino a quando non viene rimosso dal gruppo di disponibilità. Per altre informazioni, vedere Rimuovere un database primario da un gruppo di disponibilità Always On.

  • È in corso il mirroring del database in una sessione di mirroring.

    Il database non può essere scollegato a meno che la sessione non venga terminata. Per altre informazioni, vedere Rimozione del mirroring del database (SQL Server).

  • Il database è sospetto. Non è possibile scollegare un database sospetto; prima di poter scollegarlo, è necessario metterlo in modalità di emergenza. Per ulteriori informazioni sull'attivazione della modalità di emergenza per un database, vedere ALTER DATABASE (Transact-SQL).

  • Il database è un database di sistema.

Backup, ripristino e scollegamento

Lo scollegamento di un database di sola lettura comporta la perdita di informazioni sulle basi differenziali dei backup differenziali. Per altre informazioni, vedere Backup differenziali (SQL Server).

Rispondere agli errori di scollegamento

Gli errori generati durante lo scollegamento di un database possono impedire la chiusura corretta del database e la ricompilazione del log delle transazioni. Se viene visualizzato un messaggio di errore, eseguire gli interventi di correzione seguenti:

  1. Ricollegare tutti file associati al database, non solo il file primario.

  2. Risolvere il problema che ha causato l'errore.

  3. Scollegare di nuovo il database.

Collegare un database

È possibile collegare un database di SQL Server copiato o scollegato. Quando colleghi un database di SQL Server 2005 (9.x) contenente file di cataloghi full-text in un'istanza del server di SQL Server, i file di catalogo vengono collegati dal percorso precedente insieme agli altri file del database, come in SQL Server 2005 (9.x). Per altre informazioni, vedere Aggiornamento della ricerca full-text.

Quando si collega un database, tutti i file di dati (.mdf e .ndf i file ) devono essere disponibili. Se un file di dati si trova in un percorso diverso rispetto al momento della creazione o dell'ultimo collegamento del database, è necessario specificare il percorso corrente.

Nota

Se il file di dati primario in corso di collegamento è di sola lettura, nel motore di database si considera il database di sola lettura.

Quando un database crittografato viene prima collegato a un'istanza di SQL Server, il proprietario del database deve aprire la chiave master del database eseguendo l'istruzione seguente: OPEN MASTER KEY DECRYPTION BY PASSWORD = 'password'. È consigliabile abilitare la decrittografia automatica della DMK eseguendo l'istruzione seguente: ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY. Per altre informazioni, vedere CREATE MASTER KEY (Transact-SQL) e ALTER MASTER KEY (Transact-SQL).

I requisiti necessari per il collegamento dei file di log dipendono in parte dallo stato di lettura/scrittura o di sola lettura del database, come illustrato di seguito:

  • Per i database di lettura/scrittura è in genere possibile collegare un file di log in una nuova posizione. In alcuni casi, tuttavia, per ricollegare un database sono necessari i relativi file di log esistenti. Pertanto, è importante mantenere sempre tutti i file di log scollegati fino a quando il database non viene collegato correttamente senza di essi.

    Se un database di lettura/scrittura ha un singolo file di log e non si specifica un nuovo percorso per il file di log, l'operazione di collegamento cerca nel percorso precedente per il file. Se viene trovato il file di log precedente, viene usato indipendentemente dal fatto che il database sia stato arrestato correttamente. Tuttavia, se il file di log precedente non viene trovato e se il database è stato arrestato correttamente e non ha alcuna catena di log attiva, l'operazione di collegamento tenta di compilare un nuovo file di log per il database.

  • Se il file di dati primario in corso di collegamento è di sola lettura, nel motore di database si considera il database di sola lettura. Nel caso di database di sola lettura, è necessario che i file di log si trovino nella posizione specificata nel file primario del database. Non è possibile compilare un nuovo file di log perché SQL Server non può aggiornare il percorso del log archiviato nel file primario.

Modifiche ai metadati per il collegamento di un database

Quando si esegue lo scollegamento e il successivo ricollegamento di un database di sola lettura, le informazioni sul backup relative alla base differenziale corrente vanno perdute. La base differenziale è il backup completo più recente di tutti i dati nel database o in un subset dei file o dei filegroup del database. Senza le informazioni di backup di base, il master database diventa non sincronizzato con il database di sola lettura, quindi i backup differenziali eseguiti successivamente potrebbero fornire risultati imprevisti. Pertanto, se si usano backup differenziali con un database di sola lettura, è necessario stabilire una nuova base differenziale eseguendo un backup completo dopo aver ricollegato il database. Per informazioni sui backup differenziali, vedere Backup differenziali (SQL Server).

Al momento del collegamento, viene eseguito l'avvio del database. In genere, il collegamento di un database non altera lo stato in cui questo si trovava al momento dello scollegamento o della copia. Tuttavia, le operazioni di collegamento e scollegamento comportano la disabilitazione del concatenamento della proprietà tra database relativo al database in oggetto. Per informazioni su come abilitare il concatenamento, vedere Opzione di configurazione del server cross db ownership chaining.

Importante

Per impostazione predefinita e per questioni di sicurezza, le opzioni is_broker_enabled, is_honor_broker_priority_on e is_trustworthy_on sono disattivate ogni volta che il database viene collegato. Per informazioni su come attivare queste opzioni, vedere ALTER DATABASE (Transact-SQL). Per altre informazioni sui metadati, vedere Gestire i metadati quando si rende disponibile un database in un altro server.

Backup, ripristino e collegamento

Come qualsiasi database completamente o parzialmente offline, non è possibile allegare un database con il ripristino dei file. Se si arresta la sequenza di ripristino, è possibile collegare il database. Sarà quindi possibile riavviare la sequenza di ripristino.

Collegare un database a un'altra istanza del server

Importante

Un database creato da una versione più recente di SQL Server non può essere collegato nelle versioni precedenti. Questo impedisce che il database venga fisicamente usato con una versione precedente del motore di database. Tuttavia, si riferisce allo stato dei metadati e non influisce sul livello di compatibilità del database. Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE (Transact-SQL).

Per offrire un'esperienza coerente agli utenti e alle applicazioni, quando si collega un database a un'altra istanza del server, potrebbe essere necessario ricreare alcuni o tutti i metadati per il database nell'altra istanza del server. Questi metadati includono account di accesso e processi. Per altre informazioni, vedere Gestire i metadati quando si rende disponibile un database in un altro server.

Attività Articolo
Scollegamento di un database - sp_detach_db (Transact-SQL)
- Scollegamento di un database
Collegare un database - CREATE DATABASE
- Collegare un database
- sp_attach_db (Transact-SQL)
- sp_attach_single_file_db (Transact-SQL)
Aggiornare un database usando operazioni di scollegamento e collegamento - Aggiornare un database usando scollegamento e collegamento (Transact-SQL)
Spostare un database usando operazioni di scollegamento e collegamento - Spostare un database usando scollegamento e collegamento (Transact-SQL)
Eliminare uno snapshot del database - Eliminare uno snapshot del database (Transact-SQL)