Accedi con Microsoft
Accedi o crea un account.
Salve,
Seleziona un altro account.
Hai più account
Scegli l'account con cui vuoi accedere.

Sintomi

Considerare lo scenario descritto di seguito:

  • Si installa un'istanza di Microsoft SQL Server 2005, di Microsoft SQL Server 2008 o di Microsoft SQL Server 2008 R2.

  • L'istanza di SQL Server è denominata INST1 e ospita un database denominato Test_RO_FG_DB.

  • Il database contiene i gruppi di file seguenti:

    • Principale

    • RO_FG

    • RW_FG

  • Il filegroup denominato RO_FG è contrassegnato come READ_ONLY.

  • Si installa una nuova istanza di Microsoft SQL Server 2012. Questa istanza di SQL Server 2012 è denominata INST2.

  • Si disconnette il database di Test_RO_FG_DB da INST1.

  • Si prova ad allegare il database di Test_RO_FG_DB a INST2.

  • Viene visualizzato un messaggio di errore simile al seguente:

    Msg 3415, livello 16, stato 2, linea 1Database ' Test_RO_FG_DB ' non può essere aggiornato perché è di sola lettura, ha file di sola lettura o l'utente non ha le autorizzazioni per modificare alcuni file. Rendere scrivibili il database o i file e rieseguire il ripristino.

  • Si prova a riconnettere il database di Test_RO_FG_DB a INST1.

In questo scenario, non è possibile riconnettere il database a INST1. Viene visualizzato il messaggio di errore seguente nel log degli errori di SQL Server:

Nota Questo problema si verifica solo quando si prova ad allegare un database contenente un filegroup contrassegnato READ_ONLY. Questo problema non si verifica quando si tenta di trasferire un database di READ_ONLY in cui tutti i dati sono contrassegnati READ_ONLY.

Causa

Questo problema si verifica perché SQL Server 2012 non rileva il filegroup di sola lettura prima che inizi l'aggiornamento del database. Dopo l'avvio dell'aggiornamento, SQL Server 2012 scrive le voci nel log delle transazioni. Le versioni precedenti non possono leggere le nuove voci del log delle transazioni.

Stato

Microsoft ha confermato che questo problema si verifica nei prodotti elencati nella sezione "Si applica a".

Risoluzione

Informazioni sull'aggiornamento cumulativo

SQL Server 2012

La correzione di questo problema è stata rilasciata per la prima volta in aggiornamento cumulativo 2 per SQL Server 2012. Per altre informazioni su questo pacchetto di aggiornamento cumulativo, fare clic sul numero dell'articolo della Microsoft Knowledge Base seguente per visualizzare l'articolo:

2703275 Pacchetto di aggiornamento cumulativo 2 per SQL Server 2012Nota Poiché le build sono cumulative, ogni nuova versione di correzione contiene tutti gli hotfix e tutti gli aggiornamenti della sicurezza inclusi nella versione precedente di SQL Server 2012 FIX. Microsoft consiglia di applicare l'ultima versione di correzione che contiene questo hotfix. Per ulteriori informazioni, fare clic sul numero dell'articolo seguente per visualizzare l'articolo nella Microsoft Knowledge Base:

2692828 Build di SQL Server 2012 rilasciate dopo il rilascio di SQL Server 2012 È necessario applicare un hotfix di SQL Server 2012 a un'installazione di SQL Server 2012.

Soluzione alternativa

Per risolvere il problema, usare uno dei metodi seguenti.Metodo 1Ripristinare una copia di backup del database da INST1 in INST2.Nota Il problema descritto nella sezione "Sintomi" non si verifica in SQL Server 2012 quando si ripristina un backup da una versione precedente.Metodo 2Eseguire un aggiornamento sul posto della versione precedente di SQL Server a SQL Server 2012.Metodo 3Consente di trasferire un database che contiene un filegroup di sola lettura in un'istanza di SQL Server 2012. Per effettuare questa operazione, procedere come segue.Nota Eseguire i passaggi da 4 a 11 nel server in cui è in esecuzione SQL Server 2012. Ad esempio, eseguire i passaggi da 4 a 11 in INST2.

  1. In INST1 scollegare il database. Ad esempio, Disconnetti il database Test_RO_FG_DB.

  2. Trasferire i file di database nel server che ospita l'istanza di INST2.

  3. Provare ad allegare il database a INST2. Il codice di esempio seguente illustra come eseguire questa operazione:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACH;GO

    Nota Verrà visualizzato il messaggio di errore 3425 menzionato nella sezione "Sintomi".

  4. Al prompt dei comandi rinominare i file di database. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  5. In SQL Server Management Studio creare un database con lo stesso nome e la stessa struttura fisica del database che si vuole allegare. Il codice di esempio seguente illustra come eseguire questa operazione:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL11.SQL2012\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  6. Impostare il database su offline. A tale scopo, eseguire il comando seguente:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. Al prompt dei comandi rinominare i file nel nuovo database. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  8. Al prompt dei comandi rinominare i file nel database spostati nel passaggio 2. Rinominare i file in base al database creato nel passaggio 4. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  9. Impostare il database su ONLINE. A tale scopo, eseguire il comando seguente:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Verificare che il database sia online e ristabilire la funzionalità di Service Broker.

  11. Eliminare i file di database che non sono necessari. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

Metodo 4Riassociare un database che contiene un filegroup di sola lettura all'istanza precedente di SQL Server. A tale scopo, attenersi alla seguente procedura.Note

  • Il database contiene anche le nuove voci del log delle transazioni dall'aggiornamento non riuscito.

  • Eseguire i passaggi da 3 a 10 nel server in cui è in esecuzione una versione precedente di SQL Server. Ad esempio, eseguire i passaggi da 3 a 10 in INST1.

  1. Trasferire i file di database nell'istanza di SQL Server che ospita INST1.

  2. Provare ad allegare il database a INST1. Il codice di esempio seguente illustra come eseguire questa operazione:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' )FOR ATTACHGO

    Nota Verrà visualizzato il messaggio di errore 3624 menzionato nella sezione "Sintomi". Verrà visualizzato anche un messaggio di errore di 1813.

  3. Al prompt dei comandi rinominare i file di database in INST1. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    rename Test_RO_FG.mdf original_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf original_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf original_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf original_Test_RO_FG_log.ldf 
  4. In SQL Server Management Studio creare un database con lo stesso nome e la stessa struttura fisica del database che si vuole allegare. Il codice di esempio seguente illustra come eseguire questa operazione:

    CREATE DATABASE [Test_RO_FG_DB] ON PRIMARY ( NAME = N'Test_RO_FG_DB', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_DB.mdf' , SIZE = 4072KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RO_FG] ( NAME = N'Test_RO_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB ), FILEGROUP [RW_FG] ( NAME = N'Test_RW_FG_File1', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RW_FG_File1.ndf' , SIZE = 8192KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )LOG ON ( NAME = N'Test_RO_FG_log', FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL2008R2\MSSQL\DATA\Test_RO_FG_log.ldf' , SIZE = 1024KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)GO
  5. Impostare il database su offline. A tale scopo, eseguire il comando seguente:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. Al prompt dei comandi rinominare i file nel nuovo database. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    rename Test_RO_FG.mdf new_Test_RO_FG.mdfrename Test_RO_FG_File1.ndf new_Test_RO_FG_File1.ndfrename Test_RW_FG_File1.ndf new_Test_RW_FG_File1.ndfrename Test_RO_FG_log.ldf new_Test_RO_FG_log.ldf 
  7. Al prompt dei comandi rinominare i file nel database spostati nel passaggio 2. Rinominare i file in base al database creato nel passaggio 4. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    rename original_Test_RO_FG.mdf Test_RO_FG.mdf rename original_Test_RO_FG_File1.ndf Test_RO_FG_File1.ndf rename original_Test_RW_FG_File1.ndf Test_RW_FG_File1.ndf rename original_Test_RO_FG_log.ldf Test_RO_FG_log.ldf 
  8. Impostare il database in modalità emergenza ed eseguire un ripristino. A tale scopo, eseguire il comando seguente:Nota Durante questo passaggio vengono ricostruiti i registri delle transazioni del database. Ciò può causare la perdita di dati. È quindi consigliabile eseguire il backup del database prima di eseguire questo passaggio.

    ALTER DATABASE Test_RO_FG_DB SET EMERGENCYGOALTER DATABASE Test_RO_FG_DB SET SINGLE_USERGODBCC CHECKDB (Test_RO_FG_DB, repair_allow_data_loss) WITH ALL_ERRORMSGSGOALTER DATABASE Test_RO_FG_DB SET MULTI_USERGO 
  9. Verificare che il database sia online e ristabilire la funzionalità di Service Broker.

  10. Eliminare i file di database che non sono necessari. Il comando di esempio seguente illustra come eseguire le operazioni seguenti:

    del /P new_Test_RO_FG.mdfdel /P new_Test_RO_FG_File1.ndfdel /P new_Test_RW_FG_File1.ndfdel /P new_Test_RO_FG_log.ldf 

Ulteriori informazioni

Esistono diversi passaggi che si verificano quando un database viene allegato a un'istanza di SQL Server. Questi passaggi includono il recupero del database e l'aggiornamento dei file dalle versioni precedenti di SQL Server. Nel problema descritto nella sezione "Sintomi", SQL Server 2012 avvia il processo di aggiornamento prima che vengano rilevati i file di sola lettura nel database. La procedura di aggiornamento include l'avvio di una transazione per cancellare il bit "Shut Down" nella pagina di avvio del database. Le versioni precedenti di SQL Server non possono leggere il record BEGIN TRANSACTION. Di conseguenza, il database non è utilizzabile nelle versioni precedenti di SQL Server e SQL Server genera l'errore 3624.Aggiornamenti sul posto quando un database è contrassegnato come di sola letturaQuando si esegue un aggiornamento sul posto di un'istanza di SQL Server che contiene un database di sola lettura denominato Test_RO_DB a SQL Server 2012, potrebbe essere visualizzato un messaggio di errore simile al seguente nel log degli errori di SQL Server:

Al termine del processo di aggiornamento, il database di Test_RO_DB sarà nello stato RECOVERY_PENDING. È necessario usare il comando ALTER database per impostare il database su READ_WRITE. Utilizzare quindi il comando ALTER database per impostare il database su READ_ONLY. In questo modo il motore di SQL Server aggiornerà il database alla versione corretta.Aggiornamenti sul posto quando un database di lettura/scrittura contiene gruppi di file contrassegnati come di sola letturaQuando si esegue un aggiornamento sul posto a SQL Server 2012, è possibile che vengano visualizzati messaggi simili a quelli riportati nel log degli errori di SQL Server. Questo problema si verifica quando l'istanza precedente di SQL Server ospita un database di lettura/scrittura e contiene i gruppi di file contrassegnati READ_ONLY. Il processo di aggiornamento viene tuttavia completato come previsto e il database inizia online.Nota Nel messaggio di errore seguente il database è denominato Test_RO_FG:

Serve aiuto?

Vuoi altre opzioni?

Esplorare i vantaggi dell'abbonamento e i corsi di formazione, scoprire come proteggere il dispositivo e molto altro ancora.

Le community aiutano a porre e a rispondere alle domande, a fornire feedback e ad ascoltare gli esperti con approfondite conoscenze.

Queste informazioni sono risultate utili?

Come valuti la qualità della lingua?
Cosa ha influito sulla tua esperienza?
Premendo Inviare, il tuo feedback verrà usato per migliorare i prodotti e i servizi Microsoft. L'amministratore IT potrà raccogliere questi dati. Informativa sulla privacy.

Grazie per il feedback!

×