Existem duas opções diferentes no SQL Server moderno para verificação de página; sendo rasgado detecção de página e soma de verificação . Nenhuma também é, obviamente, uma opção.
Acredito que o Checksum foi introduzido no SQL Server 2005 e que a atualização ou restauração de um banco de dados de uma versão anterior manteria seu método de verificação de página anterior. ou seja, não houve atualização implícita.
O problema envolvido é que temos um banco de dados de produção que entrou em produção usando o SQL Server 2000 e que foi transferido para um servidor SQL Server 2008 R2. A Verificação de página está definida como Nenhum quando eu esperava que fosse Detecção de página rasgada . Voltando a essa quantidade de tempo, parece que o banco de dados foi originalmente desenvolvido no SQL Server 7.0 e depois migrado para o SQL Server 2000, o que pode explicar o resultado observado.
Fiquei pensando quando a detecção de página rasgada e a soma de verificação se tornaram um recurso do SQL Server e como elas se comportaram quando migradas ou atualizadas para versões mais recentes.
Edit: Resumindo algumas das respostas:
Há um pouco de discrepância em algumas datas de quando a Detecção de página rasgada entrou no SQL Server.
Link 1: http://support.microsoft.com/kb/230785
Link 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx
O primeiro link indica o SQL 7.0 e o segundo SQL2000. Costumo confiar na sugestão do SQL7.0 e esse link dois ficou confuso por estar desativado por padrão no SQL7.0 e ativado por padrão no SQL2000.
fonte
Respostas:
No SQL Server 2000, se você deseja identificar páginas corrompidas, a opção do banco de dados TORN_PAGE_DETECTION deve ser definida como TRUE.
Porém, no SQL 2005 e posteriores, uma nova configuração PAGE_VERIFY substituiu a antiga TORN_PAGE_DETECTION, que permite escolher entre dois tipos diferentes de verificação de página: TORN_PAGE_DETECTION e CHECKSUM.
Agora vem a pergunta qual definir - TORN_PAGE_DETECTION ou CHECKSUM?
TORN_PAGE_DETECTION - grava um bit para cada 512 bytes em uma página, permitindo detectar quando uma página não foi gravada com sucesso no disco. O problema é que ele não informa se os dados armazenados nesses 512 bytes estão realmente corretos ou não, devido ao fato de que alguns bytes podem ter sido gravados incorretamente.
CHECKSUM - calculará uma soma de verificação da página quando uma página for escrita e quando uma página for lida, assumindo que ela tenha soma de verificação.
Referência: soma de verificação no SQL2005
Para responder especificamente às suas perguntas:
Sim, o CHECKSUM foi introduzido no SQL Server 2005 e é o PADRÃO . Ao atualizar de 2000 para 2005, é necessário alterar explicitamente a opção de verificação de página do banco de dados para usar CHECKSUM.
Se você restaurar o banco de dados já criado no sql 2005 para outro servidor executando o sql 2005, não será necessário configurá-lo. Ele persistirá para o que você definiu como opção de verificação da página.
De: http://support.microsoft.com/kb/230785
Portanto, TORN_PAGE_DETECTION existe desde o SQL Server 7.0. Mesmo assim, o padrão era que não estava ativado (mesmo link) .
Portanto, se o banco de dados fosse desenvolvido em uma instância 7.0 e posteriormente atualizado, ele teria atualizado a opção PAGE VERIFY existente de NONE (como @ThomasStringer observou em sua resposta).
Edição: 24/09/2013 Para melhorar a resposta:
Referindo-me às minhas anotações internas do SQL Server do SQLSkills, descobri que, usando um despejo de página, é possível verificar se a detecção de bits rasgados - TORN_PAGE_DETECTION ou CHECKSUM foi ativada ou não:
m_tornBits : mantém a soma de verificação da página ou os bits que foram deslocados pelos bits de proteção de página rasgada - dependendo de qual forma de proteção de página está ativada para o banco de dados.
Nota : Não tenho versões mais antigas do servidor sql em execução. Abaixo está confirmado a partir do sql server 2000 e superior . Se você tem um 7.0 ou 6.5 rodando, também pode confirmá-lo :-)
fonte
Veja a referência da BOL :
Isso determina que, antes do SQL Server 2005, a opção
TORN_PAGE_DETECTION
existia, mas nãoCHECKSUM
.E para responder seu segundo ponto:
Sim, está correto. Você precisaria definir explicitamente o banco de dados para utilizar o
CHECKSUM
método de verificação da página.fonte
Existem três como você declarou: TORN_PAGE_DETECTION, CHECKSUM e NONE.
Conforme citado neste artigo do MSDN intitulado "Gerenciamento de buffer": A detecção de página rasgada foi introduzida no SQL Server 2000. A soma de verificação foi introduzida no SQL Server 2005.
Uma sinopse de outras coisas observadas neste artigo é que o mecanismo de verificação da página é especificado no momento da criação do banco de dados. Portanto, depende de quem e como eles criaram o banco de dados, para o que está definido, também pode ser controlado pelo modelo de banco de dados configurado. Também interessante notar é que, se você alterar a configuração, ela não afetará todo o banco de dados, somente quando a página for gravada na próxima. De acordo com Paul Randal, isso é feito apenas quando a página é lida na memória, alterada e depois gravada de volta no disco; essa informação está aqui .
Qualquer pessoa que tenha permissões para a instância do banco de dados pode modificar esse valor. Poderia ter persistido através de atualizações, conforme indicado no MSDN aqui :
Também poderia ter sido modificado posteriormente porque alguém não entendeu a configuração e estava atirando no escuro para tentar resolver um problema.
SQL Server 2000, conforme indicado acima.
A configuração anterior é mantida durante a atualização, conforme indicado acima.
Agora, gostaria de salientar o fato de que outros links fornecidos por pessoas afirmam que o SQL Server 7.0 é quando a detecção de página rasgada estava disponível. O que, conforme mencionado nesses artigos, é verdadeiro, no entanto, é comprovado muitas vezes que a documentação da Microsoft não deve ser considerada verdadeira em todas as circunstâncias. Há muitos onde eles estão errados. Então, com isso dito, como você pode determinar qual resposta é aceitável? Todos nós fornecemos documentação da Microsoft para apoiar nossa resposta.
Observe também que a detecção de página rasgada está na lista de depreciação do SQL Server 2012, então qual é a preocupação com a forma como foi definida nos bancos de dados para começar. Se o vi definido como algo diferente de CHECKSUM, mudei-o imediatamente e segui para outra tarefa mais importante. Não tenho nenhuma preocupação sobre como uma configuração ruim foi implementada; é mais importante corrigi-la e garantir que aqueles que têm permissões para alterá-la sejam informados do motivo pelo qual esse item de configuração não deve ser alterado para outra coisa. Apenas meus $ 0,02
fonte
Como o @Thomas Stringer e o @Kin disseram, ele foi introduzido no SQL Server 2005 e acredito que funciona em todas as edições do SQL Server. Para TempDB, embora o CHECKSUM tenha sido introduzido no SQL Server 2008
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx
fonte