Spostare database utenteMove User Databases

In SQL ServerSQL Serverè possibile spostare i file di dati, di log e del catalogo full-text di un database utente specificando il nuovo percorso file nella clausola FILENAME dell'istruzione ALTER DATABASE .In SQL ServerSQL Server, you can move the data, log, and full-text catalog files of a user database to a new location by specifying the new file location in the FILENAME clause of the ALTER DATABASE statement. Questo metodo è valido per lo spostamento dei file del database all'interno della stessa istanza di SQL ServerSQL Server.This method applies to moving database files within the same instance SQL ServerSQL Server. Per spostare un database in un'altra istanza di SQL ServerSQL Server o in un altro server, usare le operazioni di backup e ripristino o di collegamento e scollegamento.To move a database to another instance of SQL ServerSQL Server or to another server, use backup and restore or detach and attach operations.

ConsiderazioniConsiderations

Quando si sposta un database in un'altra istanza del server, per garantire un sistema consistente a utenti e applicazioni, potrebbe essere necessario ricreare tutti i metadati del database o parte di essi.When you move a database onto another server instance, to provide a consistent experience to users and applications, you might have to re-create some or all the metadata for the database. Per altre informazioni, vedere Gestire i metadati quando si rende disponibile un database in un'altra istanza del server (SQL Server).For more information, see Manage Metadata When Making a Database Available on Another Server Instance (SQL Server).

Alcune funzionalità del Motore di database di SQL ServerSQL Server Database Engine comportano una modifica della modalità di archiviazione delle informazioni nei file di database da parte del Motore di databaseDatabase Engine.Some features of the Motore di database di SQL ServerSQL Server Database Engine change the way that the Motore di databaseDatabase Engine stores information in the database files. Queste funzionalità sono disponibili solo in edizioni specifiche di SQL ServerSQL Server.These features are restricted to specific editions of SQL ServerSQL Server. Un database che contiene queste funzionalità non può essere spostato a un'edizione di SQL ServerSQL Server che non le supporta.A database that contains these features cannot be moved to an edition of SQL ServerSQL Server that does not support them. Utilizzare la vista a gestione dinamica sys.dm_db_persisted_sku_features per ottenere un elenco di tutte le caratteristiche specifiche dell'edizione abilitate nel database corrente.Use the sys.dm_db_persisted_sku_features dynamic management view to list all edition-specific features that are enabled in the current database.

Le procedure descritte in questo argomento richiedono il nome logico dei file di database.The procedures in this topic require the logical name of the database files. Per ottenere il nome, eseguire una query sulla colonna name della vista del catalogo sys.master_files .To obtain the name, query the name column in the sys.master_files catalog view.

A partire da SQL Server 2008 R2SQL Server 2008 R2, i cataloghi full-text sono integrati nel database anziché essere archiviati nel file system.Starting with SQL Server 2008 R2SQL Server 2008 R2, full-text catalogs are integrated into the database rather than being stored in the file system. I cataloghi full-text vengono ora spostati automaticamente quando si sposta un database.The full-text catalogs now move automatically when you move a database.

Procedura di rilocazione pianificataPlanned Relocation Procedure

Per spostare un file di dati o di log nell'ambito di una rilocazione pianificata, eseguire la procedura seguente:To move a data or log file as part of a planned relocation, follow these steps:

  1. Eseguire l'istruzione seguente.Run the following statement.

    ALTER DATABASE database_name SET OFFLINE;  
    
  2. Spostare il file o i file nella nuova posizione.Move the file or files to the new location.

  3. Per ogni file che si desidera spostare, eseguire l'istruzione seguente.For each file moved, run the following statement.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name, FILENAME = 'new_path\os_file_name' );  
    
  4. Eseguire l'istruzione seguente.Run the following statement.

    ALTER DATABASE database_name SET ONLINE;  
    
  5. Verificare la modifica ai file eseguendo la query riportata di seguito.Verify the file change by running the following query.

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

Rilocazione per una manutenzione pianificata del discoRelocation for Scheduled Disk Maintenance

Per rilocare un file nell'ambito di un processo di manutenzione pianificata del disco, eseguire la procedura seguente:To relocate a file as part of a scheduled disk maintenance process, follow these steps:

  1. Per ogni file che si desidera spostare, eseguire l'istruzione seguente.For each file to be moved, run the following statement.

    ALTER DATABASE database_name MODIFY FILE ( NAME = logical_name , FILENAME = 'new_path\os_file_name' );  
    
  2. Arrestare l'istanza di SQL ServerSQL Server o arrestare il sistema per eseguire la manutenzione.Stop the instance of SQL ServerSQL Server or shut down the system to perform maintenance. Per altre informazioni, vedere Avviare, arrestare, sospendere, riprendere, riavviare il motore di database, SQL Server Agent o SQL Server Browser.For more information, see Start, Stop, Pause, Resume, Restart the Database Engine, SQL Server Agent, or SQL Server Browser Service.

  3. Spostare il file o i file nella nuova posizione.Move the file or files to the new location.

  4. Riavviare l'istanza di SQL ServerSQL Server o il server.Restart the instance of SQL ServerSQL Server or the server. Per altre informazioni, vedere Avviare, arrestare, sospendere, riprendere, riavviare il motore di database, SQL Server Agent o SQL Server Browser.For more information, see Start, Stop, Pause, Resume, Restart the Database Engine, SQL Server Agent, or SQL Server Browser Service

  5. Verificare la modifica ai file eseguendo la query riportata di seguito.Verify the file change by running the following query.

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

Procedura di recupero da erroreFailure Recovery Procedure

Se è necessario spostare un file a causa di un errore hardware, eseguire la procedura seguente per rilocare il file in una nuova posizione.If a file must be moved because of a hardware failure, use the following steps to relocate the file to a new location.

Importante

Se non è possibile avviare il database, ovvero se il database è in modalità sospetta o in stato non recuperato, il file può essere spostato solo dai membri del ruolo predefinito sysadmin.If the database cannot be started, that is it is in suspect mode or in an unrecovered state, only members of the sysadmin fixed role can move the file.

  1. Arrestare l'istanza di SQL ServerSQL Server , se avviata.Stop the instance of SQL ServerSQL Server if it is started.

  2. Avviare l'istanza di SQL ServerSQL Server in modalità di recupero del solo database master digitando uno dei comandi seguenti al prompt dei comandi.Start the instance of SQL ServerSQL Server in master-only recovery mode by entering one of the following commands at the command prompt.

  3. Per ogni file da spostare, usare i comandi sqlcmd oppure SQL Server Management StudioSQL Server Management Studio per eseguire l'istruzione seguente.For each file to be moved, use sqlcmd commands or SQL Server Management StudioSQL Server Management Studio to run the following statement.

    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.For more information about how to use the sqlcmd utility, see Use the sqlcmd Utility.

  4. Uscire dall'utilità sqlcmd o SQL Server Management StudioSQL Server Management Studio.Exit the sqlcmd utility or SQL Server Management StudioSQL Server Management Studio.

  5. Arrestare l'istanza di SQL ServerSQL Server.Stop the instance of SQL ServerSQL Server.

  6. Spostare il file o i file nella nuova posizione.Move the file or files to the new location.

  7. Avviare l'istanza di SQL ServerSQL Server.Start the instance of SQL ServerSQL Server. Ad esempio, eseguire NET START MSSQLSERVER.For example, run: NET START MSSQLSERVER.

  8. Verificare la modifica ai file eseguendo la query riportata di seguito.Verify the file change by running the following query.

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

EsempiExamples

Nell'esempio seguente il file di log del database AdventureWorks2012AdventureWorks2012 viene spostato in una nuova posizione nell'ambito di una rilocazione pianificata.The following example moves the AdventureWorks2012AdventureWorks2012 log file to a new location as part of a planned relocation.

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 ancheSee Also

ALTER DATABASE (Transact-SQL) ALTER DATABASE (Transact-SQL)
CREATE DATABASE (SQL Server Transact-SQL) CREATE DATABASE (SQL Server Transact-SQL)
Collegamento e scollegamento di un database (SQL Server) Database Detach and Attach (SQL Server)
Spostare i database di sistema Move System Databases
Spostare file del database Move Database Files
BACKUP (Transact-SQL) BACKUP (Transact-SQL)
RESTORE (Transact-SQL) RESTORE (Transact-SQL)
Avviare, arrestare, sospendere, riprendere, riavviare il motore di database, SQL Server Agent o SQL Server BrowserStart, Stop, Pause, Resume, Restart the Database Engine, SQL Server Agent, or SQL Server Browser Service