Condividi tramite


Collegamento e scollegamento di un database (SQL Server)

I file di log dei dati e delle transazioni di un database possono essere scollegati e quindi riattaccati alla stessa o a un'altra istanza di SQL Server. Scollegamento e collegamento di un database è utile se si vuole modificare il database in un'istanza diversa di SQL Server nello stesso computer o spostare il database.

Il SQL Server formato di archiviazione su disco è lo stesso negli ambienti a 64 bit e a 32 bit. È pertanto possibile eseguire il collegamento tra ambienti a 32 bit e ambienti a 64 bit. Un database scollegato da un'istanza del server in esecuzione in un ambiente può essere collegato a un'istanza del server in esecuzione in un altro ambiente.

Sicurezza

Le autorizzazioni di accesso ai file vengono impostate durante l'esecuzione di alcune operazioni del database, inclusi il collegamento e lo scollegamento.

Importante

È consigliabile evitare di collegare o ripristinare database provenienti 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 utilizzare un database da un'origine sconosciuta o non attendibile, eseguire DBCC CHECKDB sul database in un server non di produzione ed esaminare il codice contenuto nel database, ad esempio le stored procedure o altro codice definito dall'utente.

Scollegamento di un database

Lo scollegamento di un database ne determina la rimozione dall'istanza di SQL Server, mentre viene mantenuto all'interno dei relativi file di dati e dei file del log delle transazioni. Questi file possono quindi essere usati per collegare il database a qualsiasi istanza di SQL Server, incluso il server da cui è stato scollegato il database.

Non è possibile scollegare un database quando 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, 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 in una sessione di mirroring.

    Non è possibile scollegare il database fino al termine della sessione. Per altre informazioni, vedere Rimozione del mirroring del database (SQL Server).

  • Il database è sospetto. Non è possibile scollegare un database sospetto. Per poter eseguire lo scollegamento, è 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.

Backup e 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).

Risposta 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.

Collegamento di un database

È possibile collegare un database copiato o scollegato SQL Server. Quando si collega un'istanza del server SQL Server 2014, i file di catalogo vengono collegati dal percorso precedente insieme agli altri file di database, uguali a in SQL Server 2005. Per altre informazioni, vedere Aggiornamento della ricerca full-text.

Durante il collegamento di un database è necessario che siano disponibili tutti i file di dati (file MDF e NDF). 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 collegato è di sola lettura, il motore di database presuppone che il database sia 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 chiave master eseguendo l'istruzione 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 finché il database non è stato collegato correttamente senza di essi.

    Se un database di lettura/scrittura include un singolo file di log e non se ne specifica una nuova posizione, durante l'operazione di collegamento il file viene cercato nella vecchia posizione. Se viene trovato, viene utilizzato il vecchio file di log, indipendentemente dal fatto che il database sia stato o meno chiuso correttamente. Se il vecchio file di log non viene trovato, il database è stato chiuso correttamente e non è presente una catena di log attiva, con l'operazione di collegamento si tenta di compilare un nuovo file di log per il database.

  • Se il file di dati primario collegato è di sola lettura, l'SQL Server non può aggiornare il percorso del log archiviato nel file primario.

Modifiche ai metadati durante 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 sul backup di base, il database master non risulta più sincronizzato con il database di sola lettura, per cui i backup differenziali eseguiti successivamente possono restituire risultati imprevisti. Di conseguenza, se si utilizzano backup differenziali con un database di sola lettura, è consigliabile definire 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. Inoltre, quando il database viene collegato, l'opzione TRUSTWORTHY è impostata su OFF. Per informazioni su come impostare TRUSTWORTHY su ON, vedere ALTER DATABASE (Transact-SQL).

Backup e ripristino e collegamento

Analogamente a qualsiasi database completamente o parzialmente offline, non è possibile collegare un database con file in fase di ripristino. Se si arresta la sequenza di ripristino, è possibile collegare il database. Sarà quindi possibile riavviare la sequenza di ripristino.

Collegamento di un database a un'altra istanza del server

Importante

Un database creato con una versione più recente di SQL Server non può essere collegato nelle versioni precedenti.

Quando si collega un database a un'altra istanza del server, per garantire un utilizzo coerente a utenti e applicazioni, potrebbe essere necessario ricreare alcuni o tutti i metadati per il database, ad esempio account di accesso e processi, nell'altra istanza del server. Per altre informazioni, vedere Gestire i metadati quando si rende disponibile un database in un'altra istanza del server (SQL Server).

Attività correlate

Per scollegare un database

Per collegare un database

Per aggiornare un database utilizzando le operazioni di scollegamento e collegamento

Per spostare un database utilizzando le operazioni di scollegamento e collegamento

Per eliminare uno snapshot del database

Vedere anche

Filegroup e file di database