sp_attach_db (Transact-SQL)

Collega un database a un server.

Nota importanteImportante

Questa funzionalità verrà rimossa a partire da una delle prossime versioni di Microsoft SQL Server. Evitare di utilizzare questa funzionalità in un nuovo progetto di sviluppo e prevedere interventi di modifica nelle applicazioni in cui è attualmente implementata. È invece consigliabile utilizzare CREATE DATABASE database_name FOR ATTACH. Per ulteriori informazioni, vedere CREATE DATABASE (Transact-SQL).

[!NOTA]

Per ricompilare più file di log quando uno o più di essi si trovano in una nuova posizione, utilizzare CREATE DATABASE database_name FOR ATTACH_REBUILD_LOG.

Nota sulla sicurezzaNota sulla sicurezza

È 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 di 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 inoltre il codice contenuto nel database, ad esempio le stored procedure o altro codice definito dall'utente.

Icona di collegamento a un argomento Convenzioni della sintassi Transact-SQL

Sintassi

sp_attach_db [ @dbname= ] 'dbname'
    , [ @filename1= ] 'filename_n' [ ,...16 ] 

Argomenti

  • [ @dbname= ] **'**dbnam '
    Nome del database da collegare al server. Il nome deve essere univoco. dbname è di tipo sysname e il valore predefinito è NULL.

  • [ @filename1= ] 'filename_n'
    Nome fisico, ad esempio il percorso, di un file di database. filename_n è di tipo nvarchar(260) e il valore predefinito è NULL. È possibile specificare un massimo di 16 nomi di file. I nomi dei parametri sono numerati a partire da @filename1 e vengono incrementati fino a @filename16. L'elenco dei nomi di file deve includere almeno il file primario, 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.

    [!NOTA]

    Questo argomento esegue il mapping al parametro FILENAME dell'istruzione CREATE DATABASE. Per ulteriori informazioni, vedere CREATE DATABASE (Transact-SQL).

    Quando si collega un database di SQL Server 2005 contenente file di cataloghi full-text a un'istanza del server SQL Server 2012, i file di catalogo vengono collegati dal percorso precedente insieme agli altri file del database, come in SQL Server 2005. Per ulteriori informazioni, vedere Aggiornamento della ricerca full-text in SQL Server 2005.

Valori di codice restituiti

0 (esito positivo) o 1 (esito negativo)

Set di risultati

Nessuno

Osservazioni

La stored procedure sp_attach_db deve essere eseguita solo in database che sono stati precedentemente scollegati dal server di database tramite un'operazione sp_detach_db esplicita o in database copiati. Se è necessario specificare più di 16 file, utilizzare CREATE DATABASE database_name FOR ATTACH oppure CREATE DATABASE database_name FOR_ATTACH_REBUILD_LOG. Per ulteriori informazioni, vedere CREATE DATABASE (Transact-SQL).

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 in versioni precedenti.

[!NOTA]

Non è possibile scollegare o collegare uno snapshot del database.

Quando si collega un database replicato copiato anziché scollegato, è necessario considerare quanto segue:

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

  • Se si collega il database alla stessa istanza del server ma si utilizza 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.

Solo i database di SQL Server 2005 e delle versioni successive possono essere collegati a SQL Server 2012. Se il livello di compatibilità di un database è minore di 90, il relativo livello di compatibilità sarà impostato sul livello 90 quando il database viene collegato a SQL Server 2012.

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

Autorizzazioni

Per informazioni sulla modalità di gestione delle autorizzazioni quando viene collegato un database, vedere CREATE DATABASE (Transact-SQL).

Esempi

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

EXEC sp_attach_db @dbname = N'AdventureWorks2012', 
    @filename1 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_Data.mdf', 
    @filename2 = 
N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Data\AdventureWorks2012_log.ldf';

Vedere anche

Riferimento

sp_detach_db (Transact-SQL)

sp_helpfile (Transact-SQL)

sp_removedbreplication (Transact-SQL)

Stored procedure di sistema (Transact-SQL)

Concetti

Collegamento e scollegamento di un database (SQL Server)