Como verificar e reparar um banco de dados (programaticamente)

Neste tópico, você aprenderá como verificar e reparar um banco de dados corrompido do Microsoft SQL Server Compact 3.5 com o uso do o objeto Engine. Para obter mais informações sobre como usar o namespace SqlServerCe, consulte a documentação de referência de namespaces do SqlServerCe.

Os arquivos de banco de dados do SQL Server Compact 3.5 são divididos em unidades lógicas de 4 KB chamadas páginas. Conforme cada página é gravada no arquivo do banco de dados, o SQL Server Compact 3.5 calcula e salva uma soma de verificação para essa página. Se a página for modificada ou corrompida depois de ser gravada no arquivo, ela não corresponderá mais à sua soma de verificação esperada.

Chamar o método Verify da classe System.Data.SqlServerCe.SqlCeEngine recalculará as somas de verificação de todas as páginas no arquivo de banco de dados e verificará se essas somas correspondem aos seus valores esperados. Se esse método retornar true, o arquivo de banco de dados não foi corrompido. Se esse método retornar false, o arquivo de banco de dados foi corrompido e o aplicativo deverá chamar o método Repair.

Se o arquivo de banco de dados for corrompido, você poderá tentar recuperá-lo usando o método Repair do objeto SqlCeEngine. O método Repair examina o banco de dados e calcula as somas de verificação da página. Se uma soma de verificação não corresponder à soma de verificação calculada anteriormente quando aquela página foi gravada no banco de dados, essa página será considerada corrompida.

Há duas opções ao chamar o método Repair:

  • RepairOption.DeleteCorruptedRows

    Se o método de reparo for invocado com o valor DeleteCorruptedRows, todas as páginas corrompidas serão descartadas. Isso poderá causar uma perda de dados significativa se a página corrompida contiver um esquema de banco de dados. No entanto, não deve haver qualquer corrupção nos dados recuperados usando essa opção.

  • RepairOption.RecoverCorruptedRows

    Se o método de reparo for invocado com o valor RecoverCorruptedRows , o banco de dados tentará ler os dados das páginas corrompidas. Isso pode resultar na recuperação de mais dados, mas não garante que os dados recuperados estejam isentos de corrupção lógica.

Observação Observação

O método Repair será útil somente se o SQL Server Compact 3.5 retornar um erro com um número de erro nativo 25017 (SSCE_M_DATABASECORRUPTED) ou se uma chamada do método Verify do objeto SqlCeEngine retornar false.

Para verificar um banco de dados

  1. Crie um objeto Engine.

    SqlCeEngine engine = new SqlCeEngine("Data Source = AdWks.sdf");
    
  2. Chame o método Verify para examinar linhas corrompidas no banco de dados.

     if (false == engine.Verify()) {...}
    

Para reparar um banco de dados

  • Se o banco de dados possuir linhas corrompidas, chame o método Repair para corrigir o banco de dados. Você pode optar por excluir todas as linhas corrompidas passando a opção de reparo DeleteCorruptedRows ou por tentar recuperar as linhas corrompidas passando a opção de reparo RecoverCorruptedRows.

    engine.Repair(null, RepairOption.RecoverCorruptedRows);
    
  • Para criar um banco de dados reparado que diferencia maiúsculas de minúsculas, defina a propriedade com diferenciação de maiúsculas e minúsculas na propriedade de cadeia de conexão do método Repair. Para obter mais informações sobre bancos de dados com diferenciação de maiúsculas e minúsculas, consulte Trabalhando com agrupamentos (SQL Server Compact). Exemplo:

    engine.Repair("Data Source= Test.sdf; LCID= 1033; Case Sensitive=true;", RepairOption.RecoverCorruptedRows);
    

Este exemplo mostra como verificar um banco de dados do SQL Server Compact 3.5 e, se forem encontradas linhas corrompidas, como reparar o banco de dados ao recuperar dados das linhas corrompidas.

SqlCeEngine engine = new SqlCeEngine("Data Source = AdventureWorks.sdf");

if (false == engine.Verify())
{
   MessageBox.Show("Database is corrupted.");
   engine.Repair(null, RepairOption.RecoverCorruptedRows);
}
Mostrar: