MCDBA Brasil


  • Home
  • Sobre
  • Contato

Livros





Links Rápidos

SQL Server Builds (All Versions/Editions)


Download SQL Server 2017 (trial)


SQL Server 2017 Feature Pack


SQL Server 2016 Feature Pack


Cumulative Update SQL Server 2017 builds


Cumulative Update SQL Server 2016 builds


Cumulative Update SQL Server 2014 builds


Cumulative Update SQL Server 2012 builds


SQL Server 2005/2008 Samples Databases


Documentando o Servidor SQL Server


Analisando a Performance do Servidor-CheckList


Virtual PASS PT


Faça parte do maior virtual chapter do PASS com conteúdos técnicos em Português sobre SQL Server.

Todos os meses um evento Online para você! Acompanhe aqui os WebCasts já agendados

Sindicalize seu blog ou site ao VirtualPASSPT

SQL Server Blogs

SQL Server Query Processing Team


SQL Programmability & API Development Team


SQL Server Manageability Team


Latin America Support Team


Database + Disk + Performance


Microsoft SQL Server Support


SQL CLR Team


SQL Query Optimization Team


SQL 2005 Code Samples


SQL Server Express Team


SQL SMO Samples


SQL Storage Engine Team


SQL CAT Team


SQL Protocols Team


PSS SQL Server Engineers


Slava Oks on SQLOS


Ken Henderson’s blog


LUTI@Microsoft Blog


kimberly L. Trip’s blog


Fernando Garcia Blog

Artigos

Recuperar Database após corromper o Log de Transação

por Nilton Pinheiro junho 26, 2010 Nenhum comentário

Cenário:


Vamos criar um database em seguida vamos simular um erro de Log corruption, e vamos realizar alguns procedimentos para torná-lo operacional novamente.


Passo a passo (Reprodução):


1 – Criar um database de nome Teste no servidor SQL Server:


CREATE DATABASE Teste
ON (NAME=’Teste_Data’, FILENAME=’D:TempTeste_Data.MDF’)
LOG ON (NAME=’Teste_Log’, FILENAME=’D:TempTeste_Log.LDF’)


2 – Pare o serviço do SQL Server.
3 – Renomeie o arquivo de Log.
4 – Inicie o serviço do SQL Server.
5 – Verifique o status do database pelo Enterprise Manager, provavelmente estará em Suspect.
6 – Faça um detach no database:


EXEC sp_detach_db ‘Teste’


7 – Localize os arquivos de dados (.mdf) e log (.ldf) e renomei-os para um nome qualquer.
8 – Crie um novo database com o mesmo nome do banco corrompido, conforme passo 1.


Nota: Na medida do possível é recomendado que  os arquivos deste novo banco tenham o mesmo tamanho que os arquivos do banco corrompido.


9 – Pare o serviço do SQL Server.
10 – Localize os arquivos de dados (.mdf) e log (.ldf) do banco recém criado e renomeie os arquivos para o nome dos arquivos originais (banco corrompido).
11 – Inicie o serviço do SQL Server.
12 – Verifique o status do database pelo Enterprise Manager, provavelmente estará em Suspect.
13 – Vamos tentar “zerar” o status do database para o modo operacional.


EXEC sp_resetstatus ‘Teste’


Nota: Neste passo verificamos que o comando acima retorna que nada foi alterado.


14 – Vamos novamente tentar colocar o database operacional, utilizando um comando DBCC não documentado.


DBCC DBRECOVER (Teste, ignoreerrors)


Server: Msg 5173, Level 16, State 1, Line 1
Cannot associate files with different databases.
Log file ‘d:TempTeste_Log.LDF’ does not match the primary file.  It may be from a different database or the log may have been rebuilt previously.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


A mensagem acima indica que o arquivo de Log encontrado não é correspondente ao Primary Data File.


15 – Sendo assim, vamos fazer um “rebuild” no arquivo de Log para que nosso database torne-se operacional.


EXEC sp_configure ‘allow updates’, 1
RECONFIGURE WITH OVERRIDE
GO
BEGIN TRANSACTION
UPDATE sysdatabases SET status = 32768 WHERE name=’Teste’
COMMIT TRANSACTION
GO
EXEC sp_configure ‘allow updates’, 1
RECONFIGURE WITH OVERRIDE
GO


15.1 – Vamos novamente verificar o status do nosso database no Enterprise Manager.


Agora ele deve apresentar-se em “Emergency Mode“, neste status conseguimos realizar um “rebuild” no Log, para isso vamos utilizar um outro comando DBCC não documentado:


USE master
GO
DBCC REBUILD_LOG(‘Teste’,’D:TempTeste_Log_new.LDF’)


A seguinte mensagem deverá ser exibida:


Warning: The log for database ‘Teste’ has been rebuilt. Transactional consistency has been lost. DBCC CHECKDB should be run to validate physical consistency. Database options will have to be reset, and extra log files may need to be deleted.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.


16 – Após os procedimentos do passo 15, vamos corrigir as inconsistências que por ventura possam ter ocorrido nesse “rebuild“.


DBCC CHECKDB(‘Teste’)


Caso ao final dessa checagem sejam encontradas inconsistências, execute:


EXEC sp_dboption ‘dbo use only’, false
GO
EXEC sp_dboption ‘single user’, true
GO
DBCC CHECKDB(‘Teste’, REPAIR_FAST)


Se mesmo após o REPAIR_FAST continuar encontrando inconsistências execute:


DBCC CHECKDB(‘Teste’, REPAIR_ALLOW_DATA_LOSS)


Nota: Este procedimento deve ser executado em último caso, pois como o próprio nome diz, existe a possibilidade de perda de dados.


Ao final dessa checagem verifique novamente se existem inconsistências executando o comando DBCC CHECKDB do passo 16.


17 – Caso não existam mais inconsistências, devemos colocar nosso banco operacional novamente, sendo assim execute:


EXEC sp_dboption ‘single user’, false


Pronto, a partir deste ponto o database deverá ficar operacional novamente. Lembre-se de realizar um backup full 🙂


Grande abraço e até a próxima!


Rodrigo Fernandes (RFernandes)

Avaliação:
Compartilhe:
  • Anterior Integrando o SQL Express ao Setup da Aplicação16 anos atrás
  • Próximo Alterando o Collation Default do Servidor16 anos atrás

Deixe uma resposta Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

MVP Reconnect Award

Categorias

  • Artigos (359)
  • Dica da Semana (95)
  • Documentação (54)
  • Downloads (113)
  • MSDE 2000 (3)
  • Sem categoria (1)
  • Tutoriais (9)

Posts recentes

  • #FechouBrasil #PartiuPortugal
  • Brigando com o erro “The cached MSI file is missing”
  • MCDBABRASIL está de volta
  • Documentando o Servidor SQL Server
  • Brigando com os Erros 17182, 17826 e 17120

SQL Server AlwaysOn Video Series

Video1: Introdução ao SQLServer2012 AlwaysOn


Video2: Introdução ao SQLServer2012 AlwaysOn Availability Group


Video3: Introdução ao SQLServer2012 AlwaysOn AVG-Demo


Video4: Introdução ao SQLServer2012 AlwaysOn Listener


Video5: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries


Video6: Introdução ao SQLServer2012 AlwaysOn Readable Secondaries-Demo


Video7: Introdução ao SQLServer2012 AlwaysOn Failover Clustering


Serie SQL Server Failover Clustering End-to-End

Parte 1: Configuração da Rede e Ambiente


Parte 2: Configurando o Windows 2008 R2 Domain Controler e DNS


Parte 3: Preparando os nós para o Failover Cluster


Parte 4: Configurando um Failover Cluster de 2 nós


Parte 5: Configurando as LUNs no iSCSI Software Target (Parte 1)


Parte 6: Configurando as LUNs no iSCSI Software Target (Parte 2)


Parte 7: Apresentando as LUNs para os nós do Failover Cluster


Parte 8: Configurando os discos no Failover Cluster


Parte 9: Instalando a primeira instância virtual do SQL Server 2008


Parte 10: Instalando a segunda instância virtual do SQL Server 2008


Parte 11: Instalando e Configurando o MSDTC no Failover Cluster


Parte 12: Configurando Mount Points no Cluster e SQL Server 2008


Vídeo Extra: Removendo uma Instância do SQL Server 2008 R2 em Cluster


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering Overview


Alta Disponibilidade no SQL Server 2008 R2: Failover Clustering na Prática

Menu

  • Home
  • Sobre
  • Contato

Mais

  • RSS Feeds
2026 MCDBA Brasil.