O artigo apresenta algumas das funções utilizadas para detectar e corrigir possíveis problemas de corrupção do banco de dados firebird e Sql no sistema RRSoft.
Resumo
O sistema RRSoft utiliza dois gerenciadores de banco de dados, Firebird que gerencia o Petmaster/ flexcorp e SQL Server que oferece agilidade nas vendas do AgiosPDV.
Causa
O problema pode vir a ocorrer tanto por motivos de software, falha de hardware ou intervenção humana. Segue a lista de ações que podem corromper a base de dados.
– Dispositivo de armazenamento defeituoso: Discos rígidos com setores defeituosos podem causar falhas do software e consequentemente ocasionar a perda de dados.
– Dispositivo de rede com defeito: Ligações de rede danificados ou mal configuradas também podem afetar o banco de dados e torná-lo inacessível, se as placas de interface de rede, cabos, roteadores, hubs e quaisquer outros dispositivos que compreendem as ligações de rede estiverem com problema.
– Falha de energia: Quedas de luz inesperadas também podem danificar o banco de dados.
– Vírus ou outro software malicioso: Softwares maliciosos podem causar danos à base de dados mesmo que indiretamente, pois podem danificar arquivos importantes do Windows, os quais são utilizados pelo sistema.
– Usuários sem experiência ou treinamento: Estes usuários podem causar sérios danos ao banco de dados. Por exemplo, existem pessoas que desligam o computador direto no estabilizador, sem clicar no Menu Iniciar – Desligar; além de alterar parâmetros de configuração do Windows e do Access. Assim como já houve situações em que o colaborador abriu / tentou salvar o banco de dados com o Word, Excel, Bloco de Notas, danificando-o.
Solução comando gfix para resturar o banco de dados
1. Verifique se seu banco de dados está realmente corrompido:
gfix -v -full database.fdb
Este comando irá retornar algumas informações com o número de registros corrompidos e páginas afetadas, se houver. Se o comando não retornar nada seu banco está ok e sem erros.
2. Se o comando informou que existem erros no banco, tente este comando:
gfix -mend -full -ignore database.fdb
Depois de executar este comando, realize o passo 1 novamente, pode ser que alguns erros tenham sido corrigidos, mas não todos. Você pode executar o passo 1 e 2 várias vezes. Mas se o número de erros não diminuir e o banco continuar com erro vamos para um backup/restore.
3. Vamos realizar um backup:
gbak -g -l -z -v database.fdb database.bkp
Aqui realizamos o backup com as seguintes flags:
-g: realiza o garbage collect (coleta de lixo)
-l: ignora transações no limbo
-v: relata cada ação tomada
-z: imprime número de versão
4. Agora vamos restaurar:
gbak -create -v database.bkp database2.fdb
Este comando ira restaurar o banco de dados em database2.fdb (esse será o banco de dados sem corrigido).
Após isso execute o passo 1 no database2.fdb e você verá que não existem mais erros. Banco restaurado com sucesso!
Se mesmo assim nao funcionar, tente este comando para restaurar o backup:
gbak -create -v -inative -ONE_AT_A_TIME database.bkp database2.fdb
Solução DBCC CHECKDB para resturar o banco de dados
O comando DBCC CHECKDB em SQL pode ser usado para verificar as inconsistências do banco de dados e repará-lo.
Passo 1: Acesse o gerenciado SQL management
Passo 2 :DBCC CHECKDB(‘AGIOSPDV‘)
Analisa a integridade do banco.
Passo 3 :DBCC CHECKTABLE (‘Tabela‘).
analisa a tabela da tabela.
Passo 4 :ALTER DATABASE AGIOSPDV SET SINGLE_USER WITH ROLLBACK IMMEDIATE
muda de multi-usuário para usuário-único.
Passo 5 :DBCC CHECKDB (‘AGIOSPDV‘, REPAIR_ALLOW_DATA_LOSS)
Realiza a reparação do banco de dados.
Passo 6 :DBCC CHECKTABLE (‘FUNCIONARIOS‘, REPAIR_ALLOW_DATA_LOSS);
faz a fazer a correção da tabela.
Passo 7 :ALTER DATABASE AGIOSPDV SET MULTI_USER
muda de usuário – único para multi – usuário.
Resolvendo e reparando banco suspect:
Passo 1:EXEC sp_resetstatus ‘AGIOSPDV‘
Passo 2:ALTER DATABASE AGIOSPDV SET EMERGENCY
Passo 3:DBCC checkdb(‘AGIOSPDV‘)
Passo 4:ALTER DATABASE AGIOSPDV SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Passo 5:DBCC CheckDB (‘AGIOSPDV‘, REPAIR_ALLOW_DATA_LOSS)
Passo 6:ALTER DATABASE AGIOSPDV SET MULTI_USER