Iniciar sessão com a Microsoft
Iniciar sessão ou criar uma conta.
Olá,
Selecione uma conta diferente.
Tem várias contas
Selecione a conta com a qual pretende iniciar sessão.

Sintomas

Considere o seguinte cenário:

  • Instala uma instância do Microsoft SQL Server 2005, do Microsoft SQL Server 2008 ou do Microsoft SQL Server 2008 R2.

  • O caso do SQL Server chama-se INST1 e acolhe uma base de dados que tem o nome Test_RO_FG_DB.

  • A base de dados contém os seguintes grupos de ficheiros:

    • Primária

    • RO_FG

    • RW_FG

  • O grupo de ficheiros que tem o nome RO_FG está marcado como READ_ONLY.

  • Instala uma nova instância do Microsoft SQL Server 2012. Este caso do SQL Server 2012 chama-se INST2.

  • Desprenda a base de dados Test_RO_FG_DB do INST1.

  • Tente anexar a base de dados Test_RO_FG_DB ao INST2.

  • Recebe uma mensagem de erro que se assemelha ao seguinte:

    Msg 3415, Nível 16, Estado 2, Linha 1Database 'Test_RO_FG_DB' não podem ser atualizados porque é apenas lido, tem ficheiros apenas de leitura ou o utilizador não tem permissões para modificar alguns dos ficheiros. Faça a base de dados ou ficheiros sermizável e reencando a recuperação.

  • Tenta recolocar a base de dados Test_RO_FG_DB ao INST1.

Neste cenário, não é possível voltar a ligar a base de dados ao INST1. E, recebe a seguinte mensagem de erro no registo de erro do SQL Server:

Nota Este problema só ocorre quando se tenta anexar uma base de dados que contenha um grupo de ficheiros marcado READ_ONLY. Esta questão não ocorre quando se tenta mover uma base de dados READ_ONLY na qual todos os dados estão marcados READ_ONLY.

Causa

Este problema ocorre porque o SQL Server 2012 não deteta o grupo de ficheiros apenas de leitura antes de começar a atualizar a base de dados. Após o início da atualização, o SQL Server 2012 escreve entradas no registo de transações. As versões anteriores não conseguem ler as novas entradas de registo de transações.

Estado

A Microsoft confirmou que este problema ocorre nos produtos da Microsoft listados na secção "Aplica-se a".

Resolução

Informação de atualização cumulativa

SQL Server 2012

A correção para este problema foi lançada pela primeira vez na Cumulativa Update 2 para o SQL Server 2012. Para obter mais informações sobre este pacote de atualização cumulativa, clique no seguinte número de artigo para ver o artigo na Base de Conhecimento da Microsoft:

2703275 Pacote de atualização cumulativo 2 para SQL Server 2012Nota Como as construções são cumulativas, cada nova versão de correção contém todos os hotfixes e todas as correções de segurança que foram incluídas com o anterior lançamento de correção SQL Server 2012. A Microsoft recomenda que considere aplicar o mais recente lançamento de correção que contém este hotfix. Para mais informações, clique no número de artigo que se segue para ver o artigo na Base de Dados de Conhecimento Microsoft:

2692828 O SQL Server 2012 constrói que foram lançados após o lançamento do SQL Server 2012 Deve aplicar um hotfix SQL Server 2012 a uma instalação do SQL Server 2012.

Solução

Para contornar esta questão, utilize um dos seguintes métodos.Método 1Restaurar uma cópia de segurança da base de dados do INST1 no INST2.Nota O problema descrito na secção "Sintomas" não ocorre no SQL Server 2012 quando restaura uma cópia de segurança de uma versão anterior.Método 2Realize uma atualização no local da versão anterior do SQL Server para o SQL Server 2012.Método 3Mova uma base de dados que contenha um grupo de ficheiros apenas de leitura para um caso do SQL Server 2012. Para tal, siga estes passos.Nota Execute os passos 4 a 11 no servidor que está a executar o SQL Server 2012. Por exemplo, executar os passos 4 a 11 no INST2.

  1. No INST1, desprender a base de dados. Por exemplo, desprender a base de dados Test_RO_FG_DB.

  2. Mover os ficheiros de base de dados para o servidor que acolhe a instância INST2.

  3. Tente anexar a base de dados ao INST2. O seguinte código de amostra mostra como fazê-lo:

    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 Receberá a mensagem de erro 3425 mencionada na secção "Sintomas".

  4. Num pedido de comando, rebatize os ficheiros da base de dados. O seguinte comando da amostra mostra como fazê-lo:

    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 uma base de dados com o mesmo nome e estrutura física que a base de dados que pretende anexar. O seguinte código de amostra mostra como fazê-lo:

    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. Desative a base de dados. Para isso, executar o seguinte comando:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  7. Num pedido de comando, rebatize os ficheiros na nova base de dados. O seguinte comando da amostra mostra como fazê-lo:

    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. Num pedido de comando, rebatize os ficheiros na base de dados que moveu no passo 2. Mude o nome dos ficheiros para corresponder à base de dados que criou no passo 4. O seguinte comando da amostra mostra como fazê-lo:

    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. Desa estada a base de dados para ONLINE. Para isso, executar o seguinte comando:

    ALTER DATABASE [Test_RO_FG_DB] SET ONLINEGO 
  10. Verifique se a base de dados está on-line e restabelece a funcionalidade de Corretor de Serviços.

  11. Elimine os ficheiros de base de dados que não são necessários. O seguinte comando da amostra mostra como fazê-lo:

    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 4Recolocar uma base de dados que contenha um grupo de ficheiros apenas de leitura para a instância anterior do SQL Server. Para tal, siga estes passos.Notas

  • A base de dados também contém as novas entradas de registo de transações a partir da atualização falhada.

  • Execute os passos 3 a 10 no servidor que está a executar uma versão anterior do SQL Server. Por exemplo, executar os passos 3 a 10 no INST1.

  1. Mova os ficheiros de base de dados para a instância do SQL Server que está a hospedar o INST1.

  2. Tente anexar a base de dados ao INST1. O seguinte código de amostra mostra como fazê-lo:

    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 Receberá a mensagem de erro 3624 mencionada na secção "Sintomas". Também receberá uma mensagem de erro de 1813.

  3. Num pedido de comando, rebatize os ficheiros da base de dados no INST1. O seguinte comando da amostra mostra como fazê-lo:

    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 uma base de dados com o mesmo nome e estrutura física que a base de dados que pretende anexar. O seguinte código de amostra mostra como fazê-lo:

    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. Desative a base de dados. Para isso, executar o seguinte comando:

    ALTER DATABASE [Test_RO_FG_DB] SET OFFLINEGO 
  6. Num pedido de comando, rebatize os ficheiros na nova base de dados. O seguinte comando da amostra mostra como fazê-lo:

    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. Num pedido de comando, rebatize os ficheiros na base de dados que moveu no passo 2. Mude o nome dos ficheiros para corresponder à base de dados que criou no passo 4. O seguinte comando da amostra mostra como fazê-lo:

    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. Desa estatua a base de dados para o modo EMERGÊNCIA e efetue uma reparação. Para isso, executar o seguinte comando.Nota Os registos de transações da base de dados são reconstruídos durante este passo. Isto pode resultar em perda de dados. Por isso, recomendamos que faça o back-up da base de dados antes de realizar este passo.

    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 a base de dados está on-line e restabelece a funcionalidade de Corretor de Serviços.

  10. Elimine os ficheiros de base de dados que não são necessários. O seguinte comando da amostra mostra como fazê-lo:

    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 

Mais Informações

Existem vários passos que ocorrem quando uma base de dados é anexada a uma instância do SQL Server. Estes passos incluem a recuperação da base de dados e a atualização dos ficheiros de versões anteriores do SQL Server. Na questão descrita na secção "Sintomas", o SQL Server 2012 inicia o processo de atualização antes de serem detetados os ficheiros apenas de leitura na base de dados. Os passos de atualização incluem iniciar uma transação para limpar a broca "limpamente desligada" na página de arranque da base de dados. As versões anteriores do SQL Server não conseguem ler o registo de transações iniciais. Portanto, a base de dados não é utilizável em versões anteriores do SQL Server, e o SQL Server gera o erro 3624.Atualizações no local quando uma base de dados é marcada como apenas leituraQuando efetuar uma atualização no local de uma instância do SQL Server que contém uma base de dados apenas de leitura que é nomeada Test_RO_DB ao SQL Server 2012, poderá receber mensagens de erro que se assemelham ao seguinte no registo de erros do SQL Server:

No final do processo de atualização, a base de dados Test_RO_DB estará no estado RECOVERY_PENDING. Tem de utilizar o comando ALTER DATABASE para definir a base de dados para READ_WRITE. Em seguida, utilize o comando ALTER DATABASE para definir a base de dados para READ_ONLY. Isto permite ao motor SQL Server atualizar a base de dados para a versão correta.Atualizações no local quando uma base de dados de leitura/escrita contém grupos de ficheiros que são marcados como apenas leituraQuando efetuar uma atualização no local para o SQL Server 2012, poderá receber mensagens que se assemelham ao seguinte no registo de erros do SQL Server. Este problema ocorre quando a instância anterior do SQL Server acolhe uma base de dados de leitura/escrita e contém grupos de ficheiros marcados READ_ONLY. No entanto, o processo de upgrade termina como esperado, e a base de dados começa online.Nota Na seguinte mensagem de erro, a base de dados é nomeada Test_RO_FG:

Precisa de mais ajuda?

Quer mais opções?

Explore os benefícios da subscrição, navegue em cursos de formação, saiba como proteger o seu dispositivo e muito mais.

As comunidades ajudam-no a colocar e a responder perguntas, a dar feedback e a ouvir especialistas com conhecimentos abrangentes.

Estas informações foram úteis?

Quão satisfeito está com a qualidade do idioma?
O que afetou a sua experiência?
Ao selecionar submeter, o seu feedback será utilizado para melhorar os produtos e serviços da Microsoft. O seu administrador de TI poderá recolher estes dados. Declaração de Privacidade.

Obrigado pelo seu feedback!

×