В SQL Server 2000, если вы хотите идентифицировать поврежденные страницы, для параметра базы данных TORN_PAGE_DETECTION должно быть установлено значение TRUE.
Но в SQL 2005 и выше новая настройка PAGE_VERIFY заменила старую TORN_PAGE_DETECTION, которая позволяет выбирать из двух разных типов проверки страницы: TORN_PAGE_DETECTION и CHECKSUM.
Теперь возникает вопрос, какой из них установить - TORN_PAGE_DETECTION или CHECKSUM?
TORN_PAGE_DETECTION - записывает бит для каждых 512 байт на странице, позволяя определить, когда страница не была успешно записана на диск. Суть в том, что он не скажет вам, являются ли данные, хранящиеся в этих 512 байтах, действительно правильными или нет, из-за того, что пара байтов может быть записана неправильно.
CHECKSUM - вычисляет контрольную сумму страницы как при написании страницы, так и при чтении страницы, при условии, что на ней есть контрольная сумма.
SQL Server вычисляет контрольную сумму на основе битового шаблона на странице, сохраняет ее в заголовке страницы и затем выдает ввод-вывод для записи страницы. Когда SQL Server читает страницу, он пересчитывает контрольную сумму, используя ту же логику, а затем сравнивает ее со значением, доступным в заголовке страницы. Если значение контрольной суммы совпадает, то предполагается, что страница не была повреждена во время цикла записи-чтения.
Поскольку затраты на вычисление контрольной суммы производятся на каждой странице чтения и записи, это может увеличить нагрузку на ЦП и, возможно, повлиять на пропускную способность вашей рабочей нагрузки. Следует также помнить, что контрольная сумма не уникальна для определенного битового шаблона на странице. Две страницы могут отображаться на одно и то же значение контрольной суммы. Таким образом, существует вероятность, что повреждение страницы может остаться незамеченным.
Ссылка: Контрольная сумма в SQL2005
Чтобы конкретно ответить на ваши вопросы:
Я считаю, что контрольная сумма была введена в SQL2005, и что при обновлении или восстановлении БД из предыдущей версии будет сохранен метод проверки предыдущей страницы. т.е. не было неявного обновления.
Да, CHECKSUM был введен в SQL Server 2005 и является ПО УМОЛЧАНИЮ . При обновлении с 2000 до 2005 вы должны явно изменить параметр страницы Проверка страницы, чтобы использовать CHECKSUM.
Если вы восстановите базу данных, уже созданную в SQL 2005, на другой сервер, на котором работает SQL 2005, вам не нужно ее устанавливать. Это будет сохраняться до того, что вы когда-либо устанавливали опцию Page Verify.
Мне не удалось исследовать, когда обнаружилось Torn Page Detection
От: http://support.microsoft.com/kb/230785
Версии SQL Server ранее 7.0
Версии SQL Server более ранних, чем 7.0, не обеспечивали четность журнала или средства обнаружения разорванных битов. Фактически, эти версии могут записывать одну и ту же страницу журнала несколько раз, пока записи журнала не заполнят страницу журнала объемом 2 КБ. Это может раскрыть транзакции, которые были успешно зафиксированы. Если страница журнала перезаписывается во время сбоя, сектор с зафиксированной транзакцией может переписываться неправильно.
Таким образом, TORN_PAGE_DETECTION существует с SQL Server 7.0. Даже тогда по умолчанию это было не включено (та же ссылка) .
Примечание Обнаружение разорванной страницы не включено по умолчанию в SQL Server 7.0. Смотрите sp_dboption, чтобы узнать, как включить обнаружение в вашей системе.
Поэтому, если база данных была разработана для экземпляра 7.0 и впоследствии была обновлена, она обновила бы имеющуюся опцию PAGE VERIFY NONE (как отметил @ThomasStringer в своем ответе).
Изменить: 24.09.2013 Чтобы улучшить ответ:
Обратившись к моим внутренним заметкам по SQL Server от SQLSkills, я обнаружил, что используя дамп страницы, вы можете проверить, включено ли обнаружение разорванного бита - включено TORN_PAGE_DETECTION или CHECKSUM:
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 : содержит контрольную сумму страницы или биты, смещенные битами защиты от порванной страницы - в зависимости от того, какая форма защиты страницы включена для базы данных.
Примечание : у меня не работает ни одна старая версия сервера sql. Ниже подтверждается SQL Server 2000 и выше . Если у вас работает 7.0 или 6.5, вы также можете это подтвердить :-)