Procedura: Spostamento di un database tramite la funzionalità di scollegamento e collegamento (Transact-SQL)

Nota importanteImportante

È consigliabile spostare i database utilizzando la procedura di rilocazione pianificata ALTER DATABASE anziché la funzionalità di scollegamento e collegamento. Per ulteriori informazioni, vedere ALTER DATABASE (Transact-SQL).

È possibile spostare un database scollegato in un'altra posizione e ricollegarlo alla stessa istanza oppure a un'altra istanza del server.

Nota sulla sicurezzaNota sulla sicurezza

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

Quando si collega un database di SQL Server 2005 contenente file di cataloghi full-text in un'istanza del server di SQL Server 2008, 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. Quando si scollega un database di SQL Server 2005 aggiornato contenente file di cataloghi full-text da un'istanza del server di SQL Server 2008, i file di catalogo vengono mantenuti con gli altri file del database, come in SQL Server 2005.

Nota

È inoltre possibile utilizzare la funzionalità di scollegamento e collegamento per aggiornare un database di SQL Server 2000 o SQL Server 2005 a SQL Server 2008. Per ulteriori informazioni, vedere Procedura: Aggiornamento di un database utilizzando le operazioni di scollegamento e collegamento (Transact-SQL).

Procedura

Per copiare un database utilizzando la funzionalità di scollegamento e collegamento

  1. Scollegare il database utilizzando la stored procedure sp_detach_db.

  2. In Esplora risorse o in una finestra del prompt dei comandi di Windows spostare nella nuova posizione il file o i file del database scollegato e i relativi file di log.

    Nota

    Per spostare un database composto da un singolo file è possibile utilizzare la posta elettronica se le dimensioni del file sono sufficientemente ridotte.

    È consigliabile spostare i file di log anche se si prevede di crearne di nuovi. In alcuni casi, per il ricollegamento di un database sono necessari i file di log esistenti. Mantenere pertanto sempre tutti i file di log scollegati fino a quando il database non è stato collegato senza di essi.

    Nota

    Se si tenta di collegare il database senza specificare il file di log, verrà eseguita una ricerca di tale file nella relativa posizione originale. Se nella posizione originale esiste ancora una copia del log, verrà collegata tale copia. Per evitare di utilizzare il file di log originale, specificare il percorso del nuovo file di log oppure rimuovere la copia originale del file di log dopo averlo copiato nella nuova posizione.

  3. Per collegare i file copiati, utilizzare l'istruzione Transact-SQL CREATE DATABASE con la clausola FOR ATTACH [ WITH <service_broker_option> ] o la clausola FOR ATTACH_REBUILD_LOG. Per ulteriori informazioni, vedere CREATE DATABASE (Transact-SQL)). In ogni database è contenuto un identificatore univoco utilizzato per il routing dei messaggi di Service Broker verso il database. Se il database utilizza Service Broker, vedere Gestione delle identità di Service Broker.

    Nota

    Per informazioni sul collegamento di un database tramite Esplora oggetti, vedere Procedura: Collegamento di un database (SQL Server Management Studio).

Esempio

Nell'esempio seguente viene creata una copia del database AdventureWorks2008R2 denominata MyAdventureWorks. Le istruzioni Transact-SQL vengono eseguite in una finestra dell'editor di query connessa all'istanza del server a cui è collegato AdventureWorks2008R2.

  1. Scollegare il database AdventureWorks2008R2 eseguendo le istruzioni Transact-SQL seguenti:

    USE master;
    GO
    EXEC sp_detach_db @dbname = N'AdventureWorks2008R2';
    GO
    
  2. Copiare i file di database (AdventureWorks2008R2_Data.mdf e AdventureWorks2008R2_log) rispettivamente in C:\MySQLServer\AdventureWorks2008R2_Data.mdf e C:\MySQLServer\AdventureWorks2008R2_Log.ldf, utilizzando il metodo desiderato.

    Nota importanteImportante

    Nel caso di un database di produzione, memorizzare su dischi separati il database e il log delle transazioni.

    Per copiare i file in rete su un disco di un computer remoto, utilizzare il nome UNC (Universal Naming Convention) della posizione remota. Un nome UNC presenta il formato **\\Nomeserver\Nomecondivisione\Percorso\**Nomefile. Come per la scrittura di file nel disco rigido locale, è necessario che l'account utente utilizzato dall'istanza di SQL Server disponga delle autorizzazioni appropriate per la lettura o la scrittura di un file nel disco remoto.

  3. Collegare il database spostato e, facoltativamente, collegare il relativo log tramite l'esecuzione delle istruzioni Transact-SQL seguenti:

    USE master;
    GO
    CREATE DATABASE MyAdventureWorks 
        ON (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Data.mdf'),
        (FILENAME = 'C:\MySQLServer\AdventureWorks2008R2_Log.ldf')
        FOR ATTACH;
    GO
    

    Nota

    In SQL Server Management Studio un database appena collegato non è immediatamente visibile in Esplora oggetti. Per visualizzarlo, in Esplora oggetti scegliere Aggiorna dal menu Visualizza. Quando si espande il nodo Database in Esplora oggetti, il database appena collegato viene visualizzato nell'elenco dei database.