sp_attach_db (Transact-SQL)

Si applica a: SQL Server

Collega un database a un server.

Importante

Questa funzionalità verrà rimossa nelle versioni future di 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 <database_name> FOR ATTACH in alternativa. Per altre informazioni, vedere CREATE DATABASE. Per ricompilare più file di log quando uno o più hanno una nuova posizione, usare CREATE DATABASE <database_name> FOR ATTACH_REBUILD_LOG.

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

Sintassi

sp_attach_db
    [ @dbname = ] N'dbname'
    , [ { @filename1 ... @filename16 } = ] { N'*filename1*' ... N'*filename16*' }
[ ; ]

Argomenti

[ @dbname = ] N'dbname'

Nome del database da collegare al server. @dbname è sysname, senza impostazione predefinita.

[ { @filename1 ... @filename16 } = ] { N'filename1' ... N'filename16' }

Nome fisico, incluso il percorso, di un file di database. Questo parametro è nvarchar(260), con un valore predefinito .NULL È possibile specificare fino a 16 nomi di file. I nomi dei parametri iniziano da @filename1 e incrementino a @filename16. L'elenco dei nomi file deve includere almeno il file primario (.mdf). il quale contiene le tabelle di sistema che fanno riferimento ad altri file del database. Tale elenco deve includere inoltre tutti i file spostati dopo lo scollegamento del database.

Questo parametro esegue il FILENAME mapping al parametro dell'istruzione CREATE DATABASE . Per altre informazioni, vedere CREATE DATABASE.

Nota

Quando si collega un database di SQL Server 2005 (9.x) che contiene file di catalogo full-text in una versione più recente di SQL Server, i file di catalogo vengono allegati dal percorso precedente insieme agli altri file di database, come in SQL Server 2005 (9.x). Per altre informazioni, vedere Aggiornamento della ricerca full-text.

Valori del codice restituito

0 (esito positivo) o 1 (errore).

Set di risultati

Nessuno.

Osservazioni:

La sp_attach_db stored procedure deve essere eseguita solo nei database precedentemente scollegati dal server di database usando un'operazione esplicita sp_detach_db o nei database copiati. Se è necessario specificare più di 16 file, usare CREATE DATABASE <database_name> FOR ATTACH o CREATE DATABASE <database_name> FOR_ATTACH_REBUILD_LOG. Per altre informazioni, vedere CREATE DATABASE.

Si presuppone che i file non specificati siano memorizzati nell'ultima posizione nota. Per utilizzare un file in una posizione diversa, è necessario specificare la nuova posizione.

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

Nota

Non è possibile scollegare o collegare uno snapshot del database.

Quando si collega un database replicato copiato invece di essere scollegato, prendere in considerazione le condizioni seguenti:

  • Se si collega il database alla stessa istanza del server e alla stessa versione del database originale, non sono necessari altri passaggi.

  • Se si collega il database alla stessa istanza del server ma si usa una versione aggiornata, dopo il completamento dell'operazione di collegamento è necessario eseguire sp_vupgrade_replication per aggiornare la replica.

  • Se si collega il database a un'istanza del server diversa, indipendentemente dalla versione, dopo il completamento dell'operazione di collegamento è necessario eseguire sp_removedbreplication per rimuovere la replica.

Quando un database viene collegato o ripristinato per la prima volta in una nuova istanza di SQL Server, una copia della chiave master del database (DMK) crittografata dalla chiave master del servizio (SMK) non è ancora archiviata nel server. È necessario usare l'istruzione OPEN MASTER KEY per decrittografare DMK. Dopo aver decrittografato la DMK, è possibile abilitare la decrittografia automatica in futuro usando l'istruzione ALTER MASTER KEY REGENERATE per fornire al server una copia di DMK, crittografata con SMK. Quando un database viene aggiornato da una versione precedente, la DMK deve essere rigenerata per usare l'algoritmo AES più recente. Per altre informazioni sulla rigenerazione della DMK, vedere ALTER MASTER KEY. Il tempo richiesto per rigenerare la chiave DMK e aggiornarla ad AES dipende dal numero di oggetti protetti dalla DMK. La rigenerazione della chiave DMK per l'aggiornamento a AES è necessaria una sola volta e non ha alcun effetto sulle rigenerazioni future come parte di una strategia di rotazione chiave.

Autorizzazioni

Per informazioni sulla gestione delle autorizzazioni quando un database è collegato, vedere CREATE DATABASE.

Esempi

Nell'esempio seguente vengono collegati file da AdventureWorks2022 al server corrente.

EXEC sp_attach_db @dbname = N'AdventureWorks2022',
    @filename1 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_Data.mdf',
    @filename2 =
N'C:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\Data\AdventureWorks2022_log.ldf';