У 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 і є DEFAULT . Під час оновлення з 2000 по 2005 рік ви повинні явно змінити параметр бази даних Page Verify, щоб використовувати CHECKSUM.
Якщо ви відновите базу даних, вже створену на sql 2005, на інший сервер, на якому працює sql 2005, не потрібно її встановлювати. Він зберігатиметься у тому, що ви коли-небудь встановили параметр «Перевірка сторінки».
Мені не вдалося дослідити, коли з’явилося виявлення Torn Page
З: 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 2000 і вище . Якщо у вас працює 7.0 або 6.5, ви можете це підтвердити :-)
