Spostamento dei database di sistema

Data aggiornamento: 17 novembre 2008

In questo argomento viene descritta la procedura per lo spostamento dei database di sistema in SQL Server 2005. Lo spostamento dei database di sistema può risultare utile nelle situazioni seguenti:

  • Recupero da errore. Ad esempio, il database è in modalità sospetta oppure viene chiuso a causa di un errore hardware.
  • Rilocazione pianificata.
  • Rilocazione per una manutenzione pianificata del disco.

Le procedure seguenti consentono di spostare i file di 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, utilizzare le operazioni di backup e ripristino o di collegamento e scollegamento.

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

ms345408.note(it-it,SQL.90).gifImportante:
Se si sposta un database di sistema e successivamente si ricostruisce il database master, è necessario spostare nuovamente il database di sistema poiché durante l'operazione di ricostruzione vengono installati tutti i database di sistema nel relativo percorso predefinito. Per ulteriori informazioni sulla ricostruzione del database master, vedere la sezione relativa alla ricostruzione dei database di sistema e del Registro di sistema in Procedura: Installazione di SQL Server 2005 dal prompt dei comandi.

Procedura di rilocazione pianificata e manutenzione pianificata del disco

Per spostare un file di dati o di log del database di sistema nell'ambito di un'operazione di rilocazione pianificata o di manutenzione pianificata, attenersi alla procedura seguente. Questa procedura è valida per tutti i database di sistema ad eccezione dei database master e Resource.

  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. Interrompere l'istanza di SQL Server o arrestare il sistema per eseguire la manutenzione. Per ulteriori informazioni, vedere Interruzione di servizi.

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

  4. Riavviare l'istanza di SQL Server o il server. Per ulteriori informazioni, vedere Avvio e riavvio di servizi.

  5. Verificare la modifica ai file eseguendo la query seguente.

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

Se il database msdb viene spostato e l'istanza di SQL Server è configurata per Posta elettronica database, completare i passaggi aggiuntivi seguenti.

  1. Verificare che Service Broker sia abilitato per il database msdb eseguendo la query seguente.

    SELECT is_broker_enabled 
    FROM sys.databases
    WHERE name = N'msdb';
    

    Per ulteriori informazioni sull'abilitazione di Service Broker, vedere ALTER DATABASE (Transact-SQL).

  2. Verificare il funzionamento di Posta elettronica database inviando un messaggio di prova. Per ulteriori informazioni, vedere Risoluzione dei problemi relativi a Posta elettronica database.

Procedura di recupero da errore

Se è necessario spostare un file a causa di un errore hardware, eseguire la procedura seguente per rilocare il file in una nuova posizione. Questa procedura è valida per tutti i database di sistema ad eccezione dei database master e Resource.

ms345408.note(it-it,SQL.90).gifImportante:
Se non è possibile avviare il database, ovvero si trova in modalità sospetta o in uno stato non recuperato, solo i membri del ruolo predefinito sysadmin possono spostare il file.
  1. Interrompere l'istanza di SQL Server, se avviata.

  2. Avviare l'istanza di SQL Server in modalità di recupero del solo database master digitando uno dei comandi seguenti al prompt dei comandi. I parametri specificati in questi comandi fanno distinzione tra maiuscole e minuscole. I comandi hanno esito negativo se i parametri non vengono specificati come illustrato.

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

      NET START MSSQLSERVER /f /T3608
      
    • Per un'istanza denominata, eseguire il comando seguente:

      NET START MSSQL$instancename /f /T3608
      

    Per ulteriori informazioni, vedere Procedura: Avvio di un'istanza di SQL Server (comandi net).

  3. Per ogni file che si desidera spostare, utilizzare i comandi sqlcmd oppure SQL Server Management Studio per eseguire l'istruzione seguente.

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

    Per ulteriori informazioni sull'utilizzo dell'utilità sqlcmd, vedere Utilizzo dell'utilità sqlcmd.

  4. Chiudere l'utilità sqlcmd o SQL Server Management Studio.

  5. Interrompere l'istanza di SQL Server. Ad esempio, eseguire NET STOP MSSQLSERVER.

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

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

  8. Verificare la modifica ai file eseguendo la query seguente.

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

Spostamento dei database master e Resource

Il database Resource dipende dalla posizione del database master. I dati e file di log del database Resource devono trovarsi nella stessa posizione del file di dati del database master (master.mdf). Se si sposta il database master, sarà quindi necessario spostare anche il database Resource nella stessa posizione in cui si trova il file di dati del database master. Non inserire il database Resource in cartelle del file system NTFS compresse o crittografate, dato che ciò comporterebbe una riduzione delle prestazioni e impedirebbe gli aggiornamenti.

Per spostare i database master e Resource, attenersi alla procedura seguente.

  1. Fare clic sul pulsante Start, scegliere Tutti i programmi, Microsoft SQL Server 2005, Strumenti di configurazione e quindi fare clic su Gestione configurazione SQL Server.

  2. Nel nodo Servizi di SQL Server 2005 fare clic con il pulsante destro del mouse sull'istanza di SQL Server, ad esempio SQL Server (MSSQLSERVER), e scegliere Proprietà.

  3. Nella finestra di dialogo Proprietà server (instance_name) fare clic sulla scheda Avanzate.

  4. Modificare i valori Parametri di avvio in modo che facciano riferimento al percorso pianificato per i file di dati e di log del database master, quindi fare clic su OK. Lo spostamento del file di log degli errori è facoltativo.
    Il valore del parametro per il file di dati deve seguire il parametro -d e il valore per il file di log deve seguire il parametro -l. Nell'esempio seguente vengono mostrati i valori di parametro per la posizione predefinita dei file di dati e di log del database master.

    -dC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\mastlog.ldf
    

    Se la nuova posizione pianificata dei file di dati e di log del database master è E:\SQLData, i valori dei parametri verranno modificati nel modo seguente:

    -dE:\SQLData\master.mdf;-eC:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\ERRORLOG;-lE:\SQLData\mastlog.ldf
    
  5. Interrompere l'istanza di SQL Server facendo clic con il pulsante destro del mouse sul nome dell'istanza e scegliendo Interrompi.

  6. Spostare i file master.mdf e mastlog.ldf nel nuovo percorso.

  7. Avviare l'istanza di SQL Server in modalità di recupero del solo database master digitando uno dei comandi seguenti al prompt dei comandi. I parametri specificati in questi comandi fanno distinzione tra maiuscole e minuscole. I comandi hanno esito negativo se i parametri non vengono specificati come illustrato.

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

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

      NET START MSSQL$instancename /f /T3608
      

    Per ulteriori informazioni, vedere Procedura: Avvio di un'istanza di SQL Server (comandi net).

  8. Utilizzando i comandi sqlcmd o SQL Server Management Studio, eseguire le istruzioni seguenti. Modificare il percorso FILENAME in base alla nuova posizione del file di dati del database master. Non modificare il nome del database o i nomi dei file.

    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=data, FILENAME= 'new_path_of_master\mssqlsystemresource.mdf');
    GO
    ALTER DATABASE mssqlsystemresource 
        MODIFY FILE (NAME=log, FILENAME= 'new_path_of_master\mssqlsystemresource.ldf');
    GO
    
  9. Spostare i file mssqlsystemresource.mdf e mssqlsystemresource.ldf nel nuovo percorso.

  10. Impostare la modalità di sola lettura per il database Resource eseguendo l'istruzione seguente.

    ALTER DATABASE mssqlsystemresource SET READ_ONLY;
    
  11. Chiudere l'utilità sqlcmd o SQL Server Management Studio.

  12. Interrompere l'istanza di SQL Server.

  13. Riavviare l'istanza di SQL Server.

  14. Verificare la modifica ai file per il database master eseguendo la query seguente. I metadati del database Resource non possono essere visualizzati mediante le viste del catalogo di sistema o le tabelle di sistema.

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    GO
    

Esempi

A. Spostamento del database tempdb

Nell'esempio seguente i file dei dati e di log del database tempdb vengono spostati in una nuova posizione nell'ambito di una rilocazione pianificata.

[!NOTA] Poiché il database tempdb viene ricreato a ogni avvio dell'istanza di SQL Server, non è necessario spostare fisicamente i file di dati e di log. I file vengono creati nella nuova posizione quando il servizio viene riavviato durante il passaggio 3. Fino a quel momento, il database tempdb continuerà a utilizzare i file di dati e di log nella posizione esistente.

  1. Determinare i nomi dei file logici del database tempdb e la relativa posizione corrente sul disco.

    SELECT name, physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. Modificare il percorso di ogni file tramite ALTER DATABASE.

    USE master;
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    ALTER DATABASE tempdb 
    MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
    GO
    
  3. Interrompere e riavviare l'istanza di SQL Server.

  4. Verificare la modifica ai file.

    SELECT name, physical_name AS CurrentLocation, state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  5. Eliminare i file tempdb.mdf e templog.ldf dalla posizione originale.

Vedere anche

Concetti

Database Resource
Database tempdb
Database master
Database msdb
Database model
Spostamento dei database utente
Interruzione di servizi

Altre risorse

Spostamento dei file del database
Avvio e riavvio di servizi
ALTER DATABASE (Transact-SQL)

Guida in linea e informazioni

Assistenza su SQL Server 2005

Cronologia modifiche

Versione Cronologia

17 novembre 2008

Contenuto aggiornato:
  • Aggiunto il requisito che prevede che i dati e file di log del database Resource devono trovarsi nella stessa posizione del file di dati del database master.

14 aprile 2006

Nuovo contenuto:
  • Aggiunta della nota Importante relativa allo spostamento dei database di sistema dopo la ricostruzione del database master.
Contenuto aggiornato:
  • Modifica della procedura per lo spostamento dei database master e Resource.