In SQL Server 2000, se si desidera identificare pagine corrotte, l'opzione di database TORN_PAGE_DETECTION dovrebbe essere impostata su TRUE.
Ma in SQL 2005 e versioni successive, una nuova impostazione PAGE_VERIFY ha sostituito il vecchio TORN_PAGE_DETECTION che consente di scegliere tra due diversi tipi di verifica della pagina: TORN_PAGE_DETECTION e CHECKSUM.
Ora arriva la domanda su quale impostare: TORN_PAGE_DETECTION o CHECKSUM?
TORN_PAGE_DETECTION: scrive un po 'ogni 512 byte in una pagina, consentendo di rilevare quando una pagina non è stata scritta correttamente sul disco. Il problema è che non ti dirà se i dati memorizzati in quei 512 byte sono effettivamente corretti o meno a causa del fatto che un paio di byte potrebbero essere stati scritti in modo errato.
CHECKSUM - Calcolerà un checksum della pagina sia quando viene scritta una pagina sia quando viene letta una pagina, supponendo che abbia un checksum su di essa.
SQL Server calcola il checksum in base al modello di bit nella pagina, lo memorizza nell'intestazione della pagina e quindi emette un I / O per scrivere la pagina. Quando SQL Server legge la pagina, calcola nuovamente il checksum utilizzando la stessa logica e quindi lo confronta con il valore disponibile nell'intestazione della pagina. Se il valore di checksum corrisponde, si presume che la pagina non sia stata danneggiata durante il ciclo di lettura-lettura.
Poiché il costo del calcolo del checksum è sostenuto su ogni pagina di lettura e scrittura, può aumentare l'overhead della CPU e influire sul throughput del carico di lavoro. Un'altra cosa da tenere a mente è che il checksum non è univoco per uno specifico schema di bit nella pagina. Due pagine possono eventualmente essere associate allo stesso valore di checksum. Quindi esiste la remota possibilità che la corruzione della pagina non venga rilevata.
Riferimento: checksum in SQL2005
Per rispondere in modo specifico alle tue domande:
Credo che Checksum sia stato introdotto in SQL2005 e che l'aggiornamento o il ripristino di un DB da una versione precedente manterrebbe il metodo di verifica della pagina precedente. cioè non c'è stato un aggiornamento implicito.
Sì, CHECKSUM è stato introdotto in SQL Server 2005 ed è DEFAULT . Quando si aggiorna dal 2000 al 2005, è necessario modificare esplicitamente l'opzione Database Verifica pagina per utilizzare CHECKSUM.
Se si ripristina il database già creato su SQL 2005 su un altro server che esegue SQL 2005, non è necessario impostarlo. Continuerà a qualsiasi cosa tu abbia impostato l'opzione Verifica pagina.
Non sono riuscito a fare ricerche quando è arrivato Torn Page Detection
Da: http://support.microsoft.com/kb/230785
Versioni di SQL Server precedenti alla 7.0
Le versioni di SQL Server precedenti alla 7.0 non fornivano parità di log o funzionalità di rilevamento dei bit strappati. In effetti, tali versioni possono scrivere più volte la stessa pagina di registro fino a quando i record di registro non riempiono la pagina di registro da 2 KB. Ciò può esporre le transazioni che sono state impegnate correttamente. Se la pagina del registro viene riscritta durante un errore, un settore con la transazione impegnata potrebbe non essere riscritto correttamente.
Pertanto, TORN_PAGE_DETECTION è in circolazione da SQL Server 7.0. Anche allora, il valore predefinito era che non era abilitato (stesso collegamento) .
Nota Il rilevamento di pagine strappate non è abilitato per impostazione predefinita in SQL Server 7.0. Vedi sp_dboption per come abilitare il rilevamento sul tuo sistema.
Pertanto, se il database fosse stato sviluppato su un'istanza 7.0 e successivamente aggiornato, avrebbe aggiornato l'opzione con l'opzione PAGINA VERIFY esistente di NESSUNO (come notato da @ThomasStringer nella sua risposta).
Modifica: 24/09/2013 Per migliorare la risposta:
Facendo riferimento alle mie note interne di SQL Server da SQLSkills, ho scoperto che utilizzando un dump della pagina, è possibile verificare se il rilevamento di bit strappati - TORN_PAGE_DETECTION o CHECKSUM è stato abilitato o meno:
use database_name -- change here for your database !!
checkpoint
go
dbcc traceon (3604) -- send output to screen
go
dbcc page (dbaalert, 1,1,0)
dbcc traceoff (3604) -- turn off the trace flag
go
m_tornBits : contiene il checksum della pagina o i bit che sono stati spostati dai bit di protezione della pagina strappata, a seconda della forma di protezione della pagina attivata per il database.
Nota : non ho versioni precedenti del server sql in esecuzione. Di seguito è confermato da SQL Server 2000 e versioni successive . Se hai un 7.0 o 6.5 in giro, puoi anche confermarlo :-)
