Condividi tramite


Spostare i database utente

In SQL Server è possibile spostare i file di dati, log e catalogo full-text di un database utente in un nuovo percorso specificando il nuovo percorso del file nella clausola FILENAME dell'istruzione ALTER DATABASE . Questo metodo è valido per lo spostamento dei file del database all'interno della stessa istanza di SQL Server. Per spostare un database in un'altra istanza di SQL Server o in un altro server, usare le operazioni di backup e ripristino o di collegamento e scollegamento.

Considerazioni

Quando si sposta un database in un'altra istanza del server, per offrire un'esperienza coerente agli utenti e alle applicazioni, potrebbe essere necessario ricreare alcuni o tutti i metadati per il database. Per altre informazioni, vedere Gestire i metadati quando si rende disponibile un database in un'altra istanza del server (SQL Server).

Alcune funzionalità del motore di database di SQL Server comportano una modifica della modalità di archiviazione delle informazioni nei file di database. Queste funzionalità sono disponibili solo in edizioni specifiche di SQL Server. Un database che contiene queste funzionalità non può essere spostato in un'edizione di SQL Server che non li supporta. Utilizzare la sys.dm_db_persisted_sku_features visualizzazione a gestione dinamica per elencare tutte le funzionalità specifiche dell'edizione abilitate nel database corrente.

Le procedure descritte in questo argomento richiedono il nome logico dei file di database. Per ottenere il nome, eseguire una query sulla colonna "name" nella vista del catalogo sys.master_files.

A partire da SQL Server 2008 R2, i cataloghi full-text sono integrati nel database anziché essere archiviati nel file system. I cataloghi full-text vengono ora spostati automaticamente quando si sposta un database.

Procedura di rilocazione pianificata

Per spostare un file di dati o di log nell'ambito di una rilocazione pianificata, eseguire la procedura seguente:

  1. Esegui la dichiarazione seguente.

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. Spostare il file o i file nella nuova posizione.

  3. Per ogni file spostato, eseguire l'istruzione seguente.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  4. Esegui la dichiarazione seguente.

    ALTER DATABASE database_name SET ONLINE;  
    
  5. Verificare la modifica ai file eseguendo la query riportata di seguito.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

Rilocazione per la manutenzione pianificata del disco

Per rilocare un file nell'ambito di un processo di manutenzione pianificata del disco, eseguire la procedura seguente:

  1. Per ogni file che si desidera spostare, eseguire l'istruzione seguente.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    
  2. Arrestare l'istanza di SQL Server o spegnere il sistema per eseguire la manutenzione. Per ulteriori informazioni, vedere Avviare, arrestare, sospendere, riprendere, riavviare il Motore di Database, il Servizio Agente di SQL Server o il Servizio Browser di SQL Server.

  3. Spostare il file o i file nella nuova posizione.

  4. Riavviare l'istanza di SQL Server o il server. Per altre informazioni, vedere Avviare, arrestare, sospendere, riprendere, riavviare il motore di database, SQL Server Agent o il servizio SQL Server Browser

  5. Verificare la modifica ai file eseguendo la query riportata di seguito.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

Procedura di recupero dai guasti

Se è necessario spostare un file a causa di un errore hardware, eseguire la procedura seguente per rilocare il file in una nuova posizione.

Importante

Se il database non può essere avviato, è in modalità sospetta o in uno stato non ripristinato, solo i membri del ruolo predefinito sysadmin possono spostare il file.

  1. Arrestare l'istanza di SQL Server se è attiva.

  2. Avviare l'istanza di SQL Server in modalità di ripristino solo del master immettendo uno dei comandi seguenti al prompt dei comandi.

    • Per l'istanza predefinita (MSSQLSERVER), eseguire il comando seguente.

      NET START MSSQLSERVER /f /T3608  
      
    • Per un'istanza denominata, eseguire il comando riportato di seguito.

      NET START MSSQL$instancename /f /T3608  
      

    Per ulteriori informazioni, vedere Avviare, arrestare, sospendere, riprendere, riavviare il Motore di Database, il Servizio Agente di SQL Server o il Servizio Browser di SQL Server.

  3. Per ogni file da spostare, usare i comandi sqlcmd oppure SQL Server Management Studio per eseguire la seguente istruzione.

    ALTER DATABASE database_name MODIFY FILE( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    

    Per altre informazioni su come usare l'utilità sqlcmd , vedere Usare l'utilità sqlcmd.

  4. Uscire dall'utilità sqlcmd o da SQL Server Management Studio.

  5. Arrestare l'istanza di SQL Server.

  6. Spostare il file o i file nella nuova posizione.

  7. Avviare l'istanza di SQL Server. Ad esempio, eseguire NET START MSSQLSERVER.

  8. Verificare la modifica ai file eseguendo la query riportata di seguito.

    SELECT name, physical_name AS CurrentLocation, state_desc  
    FROM sys.master_files  
    WHERE database_id = DB_ID(N'<database_name>');  
    

Esempi

Nell'esempio seguente il file di log AdventureWorks2012 viene spostato in un nuovo percorso come parte di una rilocazione pianificata.

USE master;  
GO  
-- Return the logical file name.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  
GO  
ALTER DATABASE AdventureWorks2012 SET OFFLINE;  
GO  
-- Physically move the file to a new location.  
-- In the following statement, modify the path specified in FILENAME to  
-- the new location of the file on your server.  
ALTER DATABASE AdventureWorks2012   
    MODIFY FILE ( NAME = AdventureWorks2012_Log,   
                  FILENAME = 'C:\NewLoc\AdventureWorks2012_Log.ldf');  
GO  
ALTER DATABASE AdventureWorks2012 SET ONLINE;  
GO  
--Verify the new location.  
SELECT name, physical_name AS CurrentLocation, state_desc  
FROM sys.master_files  
WHERE database_id = DB_ID(N'AdventureWorks2012')  
    AND type_desc = N'LOG';  

Vedere anche

ALTER DATABASE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL)
Collegamento e scollegamento di un database (SQL Server)
Spostare i database di sistema
Spostare file del database
BACKUP (Transact-SQL)
RESTORE (Transact-SQL)
Avviare, arrestare, sospendere, riprendere, riavviare il motore di database, l'agente di SQL Server o il servizio SQL Server Browser