Collegare un database
Si applica a: SQL Server
Questo articolo descrive come associare un database in SQL Server tramite SQL Server Management Studio o Transact-SQL. Con questa funzionalità è possibile copiare, spostare o aggiornare un database di SQL Server.
Limitazioni e restrizioni
Per un elenco delle limitazioni e restrizioni, vedere Collegamento e scollegamento di un database (SQL Server).
Prerequisiti
Prima di iniziare questa procedura, consultare i seguenti prerequisiti:
Nel caso in cui venga spostato un database da un'istanza a un'altra, il database deve prima essere scollegato da qualsiasi istanza di SQL esistente. Se si tenta di collegare un database che non è stato scollegato, viene restituito un errore. Per altre informazioni, vedere Scollegare un database.
Durante il collegamento di un database è necessario che siano disponibili tutti i file di dati del database. Spesso, questi file hanno estensioni .mdf o ndf (per i file di dati) e .ldf (per i file di registro delle transazioni). Inoltre, tutti i filegroup dei dati FILESTREAM devono essere presenti e disponibili. Per altre informazioni sul collegamento di un database abilitato per FILESTREAM, vedere Spostare un database abilitato per FILESTREAM.
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.
L'account del servizio del motore di database deve avere le autorizzazioni per leggere i file nella nuova posizione.
Quando si collega un database, se i file MDF e LDF si trovano in directory diverse e uno dei percorsi include
\\?\GlobalRoot
, l'operazione avrà esito negativo.
Il collegamento è la scelta migliore?
Quando si spostano file di database all'interno della stessa istanza, è consigliabile spostare i database usando la procedura di rilocazione pianificata ALTER DATABASE
invece delle operazioni di scollegamento e collegamento. Per altre informazioni, vedere Spostare database utente.
Non è consigliabile usare le operazioni di collegamento e scollegamento per il backup e il ripristino. Non sono disponibili backup del log delle transazioni o recuperi temporizzati quando si scollegano i file di cui eseguire il backup esternamente da SQL Server.
Sicurezza
Le autorizzazioni di accesso ai file vengono impostate durante l'esecuzione di diverse operazioni del database, inclusi il collegamento e lo scollegamento. Quando un database viene scollegato o collegato, il motore di database tenta di rappresentare l'account di Windows della connessione che esegue l'operazione per garantire che l'account disponga dell'autorizzazione per accedere al database e ai file di log. Per gli account di sicurezza misti che usano account di accesso di SQL Server, la rappresentazione potrebbe non riuscire.
La tabella seguente illustra le autorizzazioni impostate nei file di database e di log dopo il completamento di un'operazione di collegamento o scollegamento e indica se l'account di connessione può essere rappresentato dal motore di database.
Operazione | L'account di connessione può essere rappresentato | Le autorizzazioni per i file vengono concesse a |
---|---|---|
Detach | Sì | Solo l'account che esegue l'operazione. Gli account aggiuntivi possono essere aggiunti da un amministratore del sistema operativo, se necessari dopo la disconnessione del database. |
Detach | No | L'account del servizio SQL Server (MSSQLSERVER) e i membri del gruppo Administrators locale di Windows. |
Collega | Sì | L'account del servizio SQL Server (MSSQLSERVER) e i membri del gruppo Administrators locale di Windows. |
Collega | No | L'account del servizio SQL Server (MSSQLSERVER). |
Per altre informazioni sulle autorizzazioni del file system concesse a un SID per servizio per il servizio SQL Server, vedere Configurare le autorizzazioni del file system per l'accesso al motore di database.
Attenzione
È 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. Per altre informazioni sul collegamento di database e sulle modifiche apportate ai metadati in caso di collegamento di un database, vedere Collegamento e scollegamento di un database (SQL Server).
Autorizzazioni
È necessaria l'autorizzazione CREATE DATABASE
, CREATE ANY DATABASE
o ALTER ANY DATABASE
.
Usare SQL Server Management Studio (SSMS)
Prima di spostare un database
Se si sposta un database, prima di scollegarlo dall'istanza di SQL Server esistente, usare la pagina Proprietà database per esaminare i file associati al database e i relativi percorsi correnti.
In Esplora oggetti di SQL Server Management Studio connettersi all'istanza del motore di database di SQL Server e quindi espandere l'istanza.
Espandere Databasee selezionare il nome del database utente che si desidera scollegare.
Fare clic con il pulsante destro del mouse sul database e selezionare Proprietà. Selezionare la pagina File ed esaminare le voci nella tabella File di database:.
Assicurarsi di tenere conto di tutti i file associati al database prima di scollegare, spostare e collegare. Procedere quindi con i passaggi di scollegamento, copia file e collegamento del database nella sezione successiva. Per altre informazioni, vedere Scollegare un database.
Collegare un database
In Esplora oggetti di SQL Server Management Studio connettersi a un'istanza del motore di database di SQL Server, quindi selezionare per espandere la vista dell'istanza in SSMS.
In Database fare clic con il pulsante destro del mouse e selezionare Collega.
Nella finestra di dialogo Collega database selezionare Aggiungi per specificare il database da collegare. Nella finestra di dialogo Individua file di database selezionare il percorso in cui si trova il database ed espandere l'albero di directory per trovare e selezionare il file .mdf del database, ad esempio:
C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\DATA\AdventureWorks2022_Data.mdf
Importante
Se si tenta di selezionare un database già collegato, verrà generato un errore.
Database da collegare
Consente di visualizzare informazioni sui database selezionati.<nessuna intestazione di colonna>
Consente di visualizzare un'icona che indica lo stato dell'operazione di collegamento. Le icone possibili sono illustrate nella descrizione di Stato.Percorso file MDF
Consente di visualizzare il percorso e il nome del file MDF selezionato.Nome database
Consente di visualizzare il nome del database.Collega come
Facoltativamente, è possibile specificare un nome diverso per il database da collegare.Proprietario
Consente di visualizzare un elenco a discesa di possibili proprietari del database in cui è possibile selezionare un proprietario diverso.Stato
Consente di visualizzare lo stato del database in base alla tabella seguente:Icon Testo Stato Descrizione (Nessuna icona) (Nessun testo) L'operazione di collegamento non è stata avviata o può essere sospesa per questo oggetto. È il valore predefinito all'apertura della finestra di dialogo. Triangolo verde che punta a destra In corso L'operazione di collegamento è stata avviata ma non ancora completata. Segno di spunta verde Success L'oggetto è stato collegato. Cerchio rosso con croce bianca Error Si è verificato un errore durante l'operazione. Il collegamento non è stato completato. Cerchio con due quadranti neri a destra e a sinistra e due quadranti bianchi in alto e in basso Arrestato L'operazione di collegamento non è stata completata perché l'utente ne ha arrestato l'esecuzione. Cerchio con freccia curva che punta in senso antiorario. È stato eseguito il rollback L'operazione di collegamento è stata completata ma ne è stato eseguito il rollback a causa di un errore durante il collegamento di un altro oggetto. Messaggio
Non viene visualizzato alcun messaggio oppure viene visualizzato il collegamento ipertestualeImpossibile trovare il file.Aggiunta
Consente di individuare i file principali del database necessari. Se viene selezionato un file con estensione mdf, le informazioni appropriate vengono inserite automaticamente nei rispettivi campi della griglia Database da collegare.Rimuovi
Consente di rimuovere il file selezionato dalla griglia Database da collegare." <database_name> " dettagli database
Consente di visualizzare i nomi dei file da collegare. Per verificare o modificare il percorso di un file, selezionare il pulsante Sfoglia (...).Nota
Se un file non esiste, nella colonna Messaggio viene visualizzato "Non trovato". Se non viene trovato un file di log, esiste in un'altra directory o è stato eliminato. È necessario aggiornare il percorso del file nella griglia Dettagli database in modo che indichi la posizione corretta oppure rimuovere il file di log dalla griglia. Se non viene rilevato un file di dati con estensione ndf, è necessario aggiornare il percorso nella griglia in modo che indichi la posizione corretta.
Nome file originale
Consente di visualizzare il nome del file collegato appartenente al database.Tipo di file
Indica il tipo di file, ovvero Dati o Log.Percorso file corrente
Consente di visualizzare il percorso del file di database selezionato. Il percorso può essere modificato manualmente.Messaggio
Non viene visualizzato alcun messaggio oppure viene visualizzato il collegamento ipertestualeImpossibile trovare il file.
Usare Transact-SQL
Prima di spostare un database
Se si sta spostando un database, prima che venga scollegato dall'istanza di SQL Server esistente, usare la vista del catalogo di sistema sys.database_files
per esaminare i file associati al database e i relativi percorsi correnti. Per altre informazioni, vedere sys.database_files (Transact-SQL).
In SQL Server Management Studio selezionare Nuova query per aprire l'editor di query.
Copiare lo script Transact-SQL seguente nell'editor di query e selezionare Esegui. Lo script consentirà di visualizzare il percorso dei file fisici del database. Assicurarsi di tenere conto di tutti i file associati al database prima di scollegare, spostare e collegare.
USE [database_name] GO SELECT type_desc, name, physical_name from sys.database_files;
Assicurarsi di tenere conto di tutti i file associati al database prima di scollegare, spostare e collegare. Procedere quindi con i passaggi di scollegamento, copia file e collegamento del database nella sezione successiva. Per altre informazioni, vedere Scollegare un database.
Per collegare un database
Connettersi al motore di database di .
Nella barra Standard selezionare Nuova query.
Usare l'istruzione CREATE DATABASE con la clausola
FOR ATTACH
.Copiare e incollare l'esempio seguente nella finestra di query e selezionare Esegui. In questo esempio si collegano tutti i file del database AdventureWorks2022 e si rinomina il database in
MyAdventureWorks
.CREATE DATABASE MyAdventureWorks ON (FILENAME = 'C:\MySQLServer\AdventureWorks_Data.mdf'), (FILENAME = 'C:\MySQLServer\AdventureWorks_Log.ldf') FOR ATTACH;
Il database potrebbe avere file di dati aggiuntivi (comunemente, .mdf o .ndf) e richiedere file aggiuntivi da includere nell'istruzione
CREATE DATABASE ... FOR ATTACH
. Inoltre, tutti i filegroup dei dati FILESTREAM devono essere inclusi anch'essi nell'istruzione. Per altre informazioni sul collegamento di un database abilitato per FILESTREAM, vedere Spostare un database abilitato per FILESTREAM.Nota
In alternativa, è possibile usare la stored procedure sp_attach_db o sp_attach_single_file_db. Tuttavia, queste stored procedure verranno eliminate nelle versioni future di Microsoft SQL Server. Evitare di usare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È consigliabile utilizzare
CREATE DATABASE ... FOR ATTACH
in alternativa.
Dopo l'aggiornamento di un database SQL Server
Livello di compatibilità del database
Una volta aggiornato utilizzando il metodo di collegamento, il database viene reso immediatamente disponibile. Il database verrà aggiornato automaticamente al livello di versione interno della nuova istanza. Se il database include indici full-text, questi vengono importati, reimpostati o ricompilati dal processo di aggiornamento, a seconda dell'impostazione della proprietà del server Opzione di aggiornamento full-text. Se l'opzione di aggiornamento è impostata su Importa o Ricompila, gli indici full-text non sono disponibili durante l'aggiornamento. A seconda della quantità di dati indicizzati, l'importazione può richiedere diverse ore, mentre la ricompilazione può risultare 10 volte più lunga. Si noti inoltre che, quando l'opzione di aggiornamento è impostata su Importae un catalogo full-text non è disponibile, gli indici full-text associati vengono ricompilati.
Dopo l'aggiornamento, il livello di compatibilità del database rimane al livello di compatibilità prima dell'aggiornamento, a meno che il livello di compatibilità precedente non sia supportato nella nuova versione. In tal caso, il livello di compatibilità del database aggiornato viene impostato sul livello di compatibilità più basso supportato. Ad esempio, se si collega un database che aveva un livello di compatibilità pari a 90 prima del collegamento a un'istanza di SQL Server 2019 (15.x), dopo l'aggiornamento il livello viene impostato su 100, ovvero il livello di compatibilità supportato più basso in SQL Server 2019 (15.x). Per altre informazioni, vedere Livello di compatibilità ALTER DATABASE (Transact-SQL).
Change Data Capture (CDC)
Se si collega un database da un'istanza di SQL Server 2014 (12.x) o versioni precedenti con Change Data Capture (CDC) abilitato, è necessario eseguire anche il comando seguente per aggiornare i metadati di Change Data Capture (CDC).
USE <database name>
EXEC sys.sp_cdc_vupgrade
Per altre informazioni, vedere Errore durante il collegamento di un database abilitato per CDC a un'istanza di SQL Server 2016 o SQL Server 2017 in Windows.
Vedi anche
- Collegamento e scollegamento di un database (SQL Server)
- Scollegamento di un database
- CREATE DATABASE (SQL Server Transact-SQL)
- Configurare le autorizzazioni del file system per l'accesso al motore di database