Corrupção de Dados: Incorrect PFS free space information
Olá Pessoal,
Essa semana iniciei mais uma Consultoria Remota em um cliente e uma das atividades mais importante desse serviço é criar uma rotina para validar diariamente se existe corrupção nos bancos. Na grande maioria das vezes o banco está abandonado e não tem uma rotina dessa.
Ao executar essa validação, peguei o erro abaixo em uma das bases de dados:
Executed as user: XXXX. Incorrect PFS free space information for page (1:9434) in object ID 1458104235,
index ID 0, partition ID 72057594051100672, alloc unit ID 72057594055229440 (type In-row data).
Expected value 80_PCT_FULL, actual value 50_PCT_FULL. [SQLSTATE 42000] (Error 8914)
CHECKDB found 0 allocation errors and 1 consistency errors in table ‘XXXX’
CHECKDB found 0 allocation errors and 1 consistency errors in database ‘XXXX’
repair_allow_data_loss is the minimum repair level for the errors found by DBCC CHECKDB
__________
Antes de sair executando repair_allow_data_loss, dei uma pesquisada sobre o erro.
Esse erro não é exatamente de dados corrompidos. Segundo meu amigo Paul Randal, isso quer dizer que a informação dessa página (1:9434), na PFS (Page Free Space), está com um valor errado para a quantidade de espaço livre que ela tem. Essa página tem 50% de espaço livre ao invés dos 80% informado na PFS.
O Repair iria apenas corrigir essa configuração de espaço livre, mas teria que deixar a base em single user mode (offline).
Isso normalmente ocorre com bases que são migradas do SQL 2000, onde existiam alguns bugs no algoritmo que gerava essa informação.
Olhando o erro é possível ver que ele estava afetando uma tabela:
CHECKDB found 0 allocation errors and 1 consistency errors in table ‘XXXX’
Como eu não queria deixar a base OFFLINE, pois a tabela com problema era bem pequena, fiz os procedimentos abaixo:
1) Gerei o script dessa tabela e criei com outro nome (lembre de manter índices, identity e constraints)
2) Migrei os dados da tabela com erro para a nova tabela
3) Excluí a tabela que estava dando erro
Feito isso, o CHECKDB executou novamente sem nenhum problema.
Mais um caso de erro no CHECKDB para contar aos netos. E eles estão ficando bem constantes nesse meu trabalho de consultor SQL Server.
Até o próximo erro.
Gostou desse Post?
Cadastre seu e-mail para receber novos Posts e curta minha Página no Facebook para receber Dicas de Leituras e Eventos sobre SQL Server.
Abraços,
Fabrício Lima
MCITP – Database Administrator
Consultor e Instrutor SQL Server
Trabalha com SQL Server desde 2006
Muito bom o artigo Fabrício,
Sempre bom encontrarmos em fontes fidedignas soluções para problemas que fogem do cotidiano…
keep blogging
Obrigado Edvaldo.
Abraços
Faaaala Fabricio..
Ótimo post… apliquei em um caso aqui no DER e deu tudo certo.
Obrigado mais uma vez…
Utilizo bastante coisa postada por voce..
abrs
Massa Walisson!!!
Obrigado pelo feedback.