Entrar com a conta da Microsoft
Entre ou crie uma conta.
Olá,
Selecione uma conta diferente.
Você tem várias contas
Escolha a conta com a qual você deseja entrar.

Sintomas

Considere o seguinte cenário:

  • Você instala uma instância do Microsoft SQL Server 2005, do Microsoft SQL Server 2008 ou do Microsoft SQL Server 2008 R2.

  • A instância do SQL Server é chamada INST1 e hospeda um banco de dados chamado Test_RO_FG_DB.

  • O banco de dados contém os seguintes grupos de arquivos:

    • Preocupação

    • RO_FG

    • RW_FG

  • O grupo de arquivos chamado RO_FG é marcado como READ_ONLY.

  • Você instala uma nova instância do Microsoft SQL Server 2012. Esta instância do SQL Server 2012 é chamada INST2.

  • Você desconectará o banco de dados Test_RO_FG_DB do INST1.

  • Você tenta anexar o banco de dados Test_RO_FG_DB ao INST2.

  • Você recebe uma mensagem de erro semelhante à seguinte:

    MSG 3415, nível 16, estado 2, a linha 1Database ' Test_RO_FG_DB ' não pode ser atualizada porque é somente leitura, tem arquivos somente leitura ou o usuário não tem permissões para modificar alguns dos arquivos. Torne o banco de dados ou arquivos graváveis e execute a recuperação novamente.

  • Você tenta anexar novamente o banco de dados do Test_RO_FG_DB ao INST1.

Nesse cenário, você não pode reanexar o banco de dados ao INST1. E você recebe a seguinte mensagem de erro no log de erro do SQL Server:

Observação Esse problema ocorre apenas quando você tenta anexar um banco de dados que contém um grupo de arquivos marcado READ_ONLY. Esse problema não ocorre quando você tenta mover um READ_ONLY banco de dados no qual todos os dados são marcados READ_ONLY.

Causa

Esse problema ocorre porque o SQL Server 2012 não detecta o grupo de arquivos somente leitura antes de iniciar a atualização do banco de dados. Após a atualização ter começado, o SQL Server 2012 grava entradas no log de transação. Versões anteriores não podem ler as novas entradas do log de transação.

Status

A Microsoft confirmou que este é um problema nos produtos Microsoft listados na seção "Aplicável a".

Resolução

Informações sobre a atualização cumulativa

SQL Server 2012

A correção para esse problema foi lançada pela primeira vez na atualização cumulativa 2 do SQL Server 2012. Para obter mais informações sobre esse pacote de atualizações cumulativas, clique no número abaixo para ler o artigo na base de dados de conhecimento da Microsoft:

2703275 Pacote de atualizações cumulativas 2 para SQL Server 2012Observação Como as compilações são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança incluídas na versão anterior do SQL Server 2012 Fix. A Microsoft recomenda que você considere a aplicação do lançamento de correção mais recente que contém esse hotfix. Para obter mais informações, clique no número abaixo para ler os artigos na Base de Dados de Conhecimento Microsoft:

2692828 As compilações do SQL Server 2012 lançadas após o lançamento do SQL Server 2012 Você deve aplicar um hotfix do SQL Server 2012 a uma instalação do SQL Server 2012.

Solução alternativa

Como solução alternativa para esse problema, use um dos seguintes métodos.Método 1Restaure um backup do banco de dados do INST1 no INST2.Observação O problema descrito na seção "sintomas" não ocorre no SQL Server 2012 quando você restaura um backup de uma versão anterior.Método 2Realize uma atualização local da versão anterior do SQL Server para o SQL Server 2012.Método 3Mover um banco de dados que contém um grupo de arquivos somente leitura para uma instância do SQL Server 2012. Para isso, siga estas etapas.Observação Execute as etapas de 4 a 11 no servidor que está executando o SQL Server 2012. Por exemplo, execute as etapas 4 a 11 no INST2.

  1. No INST1, desanexe o banco de dados. Por exemplo, desanexe o banco de dados Test_RO_FG_DB.

  2. Mova os arquivos de banco de dados para o servidor que hospeda a instância INST2.

  3. Tente anexar o banco de dados ao INST2. O código de exemplo a seguir mostra como fazer isto:

    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

    Observação Você receberá a mensagem de erro do 3425, que é mencionada na seção "sintomas".

  4. Em um prompt de comando, renomeie os arquivos do banco de dados. O comando de exemplo a seguir mostra como fazer isto:

    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. No SQL Server Management Studio, crie um banco de dados com o mesmo nome e a estrutura física do banco de dados que você deseja anexar. O código de exemplo a seguir mostra como fazer isto:

    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. Defina o banco de dados como offline. Para fazer isso, execute o seguinte comando:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. Em um prompt de comando, renomeie os arquivos no novo banco de dados. O comando de exemplo a seguir mostra como fazer isto:

    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. Em um prompt de comando, renomeie os arquivos no banco de dados que você moveu na etapa 2. Renomeie os arquivos para que correspondam ao banco de dados que você criou na etapa 4. O comando de exemplo a seguir mostra como fazer isto:

    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. Defina o banco de dados como ONLINE. Para fazer isso, execute o seguinte comando:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Verifique se o banco de dados está online e restabeleça a funcionalidade do agente de serviços.

  11. Exclua os arquivos de banco de dados que não são necessários. O comando de exemplo a seguir mostra como fazer isto:

    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 

Método 4Reconecte um banco de dados que contenha um grupo de arquivos somente leitura à instância anterior do SQL Server. Para fazer isso, execute as etapas a seguir.Observações

  • O banco de dados também contém as novas entradas do log de transações da atualização com falha.

  • Execute as etapas 3 a 10 no servidor que está executando uma versão anterior do SQL Server. Por exemplo, execute as etapas 3 a 10 em INST1.

  1. Mova os arquivos de banco de dados para a instância do SQL Server que hospeda o INST1.

  2. Tente anexar o banco de dados ao INST1. O código de exemplo a seguir mostra como fazer isto:

    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

    Observação Você receberá a mensagem de erro do 3624, que é mencionada na seção "sintomas". Você também receberá uma mensagem de erro do 1813.

  3. Em um prompt de comando, renomeie os arquivos de banco de dados no INST1. O comando de exemplo a seguir mostra como fazer isto:

    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. No SQL Server Management Studio, crie um banco de dados com o mesmo nome e a estrutura física do banco de dados que você deseja anexar. O código de exemplo a seguir mostra como fazer isto:

    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. Defina o banco de dados como offline. Para fazer isso, execute o seguinte comando:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. Em um prompt de comando, renomeie os arquivos no novo banco de dados. O comando de exemplo a seguir mostra como fazer isto:

    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. Em um prompt de comando, renomeie os arquivos no banco de dados que você moveu na etapa 2. Renomeie os arquivos para que correspondam ao banco de dados que você criou na etapa 4. O comando de exemplo a seguir mostra como fazer isto:

    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. Definir o banco de dados para o modo de emergência e executar um reparo. Para isso, execute o seguinte comando.Observação Os logs de transação do banco de dados são recriados durante esta etapa. Isso pode resultar em perda de dados. Portanto, recomendamos que você faça backup do banco de dados antes de executar esta etapa.

    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. Verifique se o banco de dados está online e restabeleça a funcionalidade do agente de serviços.

  10. Exclua os arquivos de banco de dados que não são necessários. O comando de exemplo a seguir mostra como fazer isto:

    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 

Informações adicionais

Há várias etapas que ocorrem quando um banco de dados é anexado a uma instância do SQL Server. Essas etapas incluem a recuperação do banco de dados e a atualização dos arquivos de versões anteriores do SQL Server. No problema descrito na seção "sintomas", o SQL Server 2012 inicia o processo de atualização antes de os arquivos somente leitura serem detectados no banco de dados. As etapas de atualização incluem iniciar uma transação para limpar o bit "desligamento limpo" na página de inicialização do banco de dados. As versões anteriores do SQL Server não podem ler o registro de transação inicial. Portanto, o banco de dados não pode ser usado em versões anteriores do SQL Server, e o SQL Server gera o erro 3624.Atualizações in-loco quando um banco de dados é marcado como somente leituraAo realizar uma atualização local de uma instância do SQL Server que contém um banco de dados somente leitura chamado Test_RO_DB ao SQL Server 2012, você pode receber mensagens de erro semelhantes às seguintes no log de erros do SQL Server:

No final do processo de atualização, o banco de dados do Test_RO_DB estará no estado RECOVERY_PENDING. Você deve usar o comando ALTER DATABASE para definir o banco de dados como READ_WRITE. Em seguida, use o comando ALTER DATABASE para definir o banco de dados como READ_ONLY. Isso permite que o mecanismo do SQL Server atualize o banco de dados para a versão correta.Atualizações in-loco quando um banco de dados de leitura/gravação contém grupos de arquivos marcados como somente leituraAo realizar uma atualização in-loco para o SQL Server 2012, você pode receber mensagens parecidas com o seguinte no log de erro do SQL Server. Esse problema ocorre quando a instância anterior do SQL Server hospeda um banco de dados de leitura/gravação e contém grupos de arquivos marcados READ_ONLY. No entanto, o processo de atualização termina conforme o esperado, e o banco de dados é iniciado online.Observação Na seguinte mensagem de erro, o banco de dados é nomeado Test_RO_FG:

Precisa de mais ajuda?

Expanda suas habilidades
Explore o treinamento
Obtenha novos recursos primeiro
Ingressar no Microsoft Insider

Essas informações foram úteis?

Qual é o seu grau de satisfação com a qualidade do idioma?
O que afetou sua experiência?

Obrigado pelos seus comentários!

×