Istnieją dwie różne opcje we współczesnym SQL Server do weryfikacji strony; jest rozdarty Detection stronę i kontrolna . Żadna nie jest oczywiście opcją.
Wierzę, że suma kontrolna została wprowadzona w SQL Server 2005 i że uaktualnienie lub przywrócenie bazy danych z poprzedniej wersji zachowałoby metodę weryfikacji poprzedniej strony. tzn. nie było niejawnej aktualizacji.
Problem polega na tym, że mamy produkcyjną bazę danych, która została uruchomiona przy użyciu SQL Server 2000 i od tego czasu została przeniesiona na serwer SQL Server 2008 R2. Weryfikacja strony jest ustawiona na Brak, gdy spodziewałem się, że będzie to wykrywanie rozdartej strony . Cofając się o ten czas, wydaje nam się, że DB został pierwotnie opracowany w SQL Server 7.0, a następnie migrowany do SQL Server 2000, co może tłumaczyć obserwowany wynik.
Zastanawiałem się, kiedy Wykrywanie stron i suma kontrolna stały się funkcją SQL Server i jak się zachowywały po migracji lub aktualizacji do nowszych wersji.
Edycja: Podsumowując niektóre odpowiedzi:
Istnieje niewielka rozbieżność w niektórych datach, w których wykrycie strony rozdartej pojawiło się w SQL Server.
Link 1: http://support.microsoft.com/kb/230785
Link 2: http://technet.microsoft.com/en-us/library/aa337525(v=sql.90).aspx
Pierwsze łącze wskazuje SQL 7.0, a drugie SQL2000. Zwykle wierzę w sugestię SQL7.0 i ten link dwa był zdezorientowany, ponieważ domyślnie jest wyłączony w SQL7.0 i domyślnie włączony w SQL2000.
źródło
Odpowiedzi:
W SQL Server 2000, jeśli chcesz zidentyfikować uszkodzone strony, to dla opcji bazy danych TORN_PAGE_DETECTION należy ustawić wartość PRAWDA.
Ale w SQL 2005 i nowszych nowe ustawienie PAGE_VERIFY zastąpiło stary TORN_PAGE_DETECTION, który pozwala wybierać spośród dwóch różnych rodzajów weryfikacji strony: TORN_PAGE_DETECTION i CHECKSUM.
Teraz pojawia się pytanie, które ustawić - TORN_PAGE_DETECTION lub CHECKSUM?
TORN_PAGE_DETECTION - zapisuje trochę na każde 512 bajtów na stronie, umożliwiając wykrycie, kiedy strona nie została pomyślnie zapisana na dysk. Chodzi o to, że nie powie ci, czy dane przechowywane w tych 512 bajtach są rzeczywiście poprawne, czy nie, z powodu faktu, że kilka bajtów mogło być zapisanych niepoprawnie.
SUMA KONTROLNA - obliczy sumę kontrolną strony zarówno podczas pisania strony, jak i podczas czytania strony, przy założeniu, że ma na niej sumę kontrolną.
Odniesienie: Suma kontrolna w SQL2005
Aby dokładnie odpowiedzieć na twoje pytania:
Tak, CHECKSUM zostało wprowadzone w SQL Server 2005 i jest DOMYŚLNE . Podczas aktualizacji z 2000 do 2005 musisz jawnie zmienić opcję bazy danych Page Verify, aby użyć CHECKSUM.
Jeśli przywrócisz bazę danych już utworzoną w SQL 2005 na innym serwerze z SQL 2005, nie musisz go ustawiać. Zachowa się na tym, co ustawiłeś opcję Weryfikuj stronę.
Od: http://support.microsoft.com/kb/230785
Tak więc TORN_PAGE_DETECTION istnieje od SQL Server 7.0. Nawet wtedy domyślnie było to, że nie było włączone (ten sam link) .
Dlatego, jeśli baza danych została opracowana dla instancji 7.0, a następnie zaktualizowana, zaktualizowałaby opcję z zachowaną opcją PAGE VERIFY NONE (jak zauważył @ThomasStringer w swojej odpowiedzi).
Edytuj: 24.09.2013 Aby poprawić odpowiedź:
Odnosząc się do moich wewnętrznych notatek SQL Server z SQLSkills, odkryłem, że za pomocą zrzutu strony możesz sprawdzić, czy wykrywanie rozdartych bitów - TORN_PAGE_DETECTION lub CHECKSUM zostało włączone, czy nie:
m_tornBits : przechowuje sumę kontrolną strony lub bity, które zostały zastąpione bitami ochrony rozdartych stron - w zależności od tego, jaką formą ochrony strony jest włączone dla bazy danych.
Uwaga : Nie mam uruchomionych żadnych starszych wersji serwera SQL. Poniżej potwierdzono z serwera SQL 2000 i nowszych . Jeśli masz uruchomioną wersję 7.0 lub 6.5, możesz to również potwierdzić :-)
źródło
Spójrz na referencję z BOL :
To dyktuje, że przed SQL Server 2005 opcja
TORN_PAGE_DETECTION
istniała, ale nieCHECKSUM
.Aby odpowiedzieć na drugi punkt:
Tak to jest poprawne. Trzeba będzie jawnie ustawić bazę danych, aby korzystać z
CHECKSUM
metody weryfikacji strony.źródło
Istnieją trzy, jak powiedziałeś: TORN_PAGE_DETECTION, CHECKSUM i NONE.
Jak cytowano w tym artykule MSDN zatytułowanym „Zarządzanie buforami”: w SQL Server 2000 wprowadzono wykrywanie podartych stron. W SQL Server 2005 wprowadzono sumę kontrolną.
Streszczenie innych rzeczy odnotowanych w tym artykule jest takie, że mechanizm weryfikacji strony jest określony podczas tworzenia bazy danych. Zależy więc od tego, kto i jak utworzyli bazę danych, co do tego, do czego jest ustawiona, może być również kontrolowany przez to, na jakiej bazie danych model jest skonfigurowany. Warto również zauważyć, że zmiana ustawienia nie ma wpływu na całą bazę danych, tylko gdy strona jest zapisywana jako następna. Według Paula Randala dzieje się tak tylko wtedy, gdy strona jest wczytywana do pamięci, zmieniana, a następnie zapisywana z powrotem na dysk; ta informacja jest tutaj .
Każdy, kto ma uprawnienia do instancji bazy danych, może zmodyfikować tę wartość. Mógł się utrzymywać przez aktualizacje, jak podano w MSDN tutaj :
Mogło to zostać zmodyfikowane później, ponieważ ktoś źle zrozumiał konfigurację i strzelał w ciemności, aby spróbować rozwiązać problem.
SQL Server 2000, jak podano powyżej.
Poprzednie ustawienie zostaje zachowane podczas aktualizacji, jak podano powyżej.
Teraz chciałbym zwrócić uwagę na fakt, że inne łącza dostarczane przez ludzi wskazują, że SQL Server 7.0 jest wtedy, gdy dostępne jest wykrywanie rozdartej strony. Co, jak stwierdzono w tych artykułach, jest prawdą, jednak wielokrotnie udowodniono, że dokumentacja Microsoft nie powinna być traktowana jako prawda we wszystkich okolicznościach. Jest wielu tam, gdzie się mylą. W związku z tym, w jaki sposób można ustalić, która odpowiedź jest dopuszczalna? Wszyscy dostarczyliśmy dokumentację Microsoft na poparcie naszej odpowiedzi.
Należy również pamiętać, że wykrywanie podartych stron znajduje się na liście amortyzacji od wersji SQL Server 2012, więc jaki jest problem z tym, jak zostało to ustawione w bazach danych na początek. Jeśli zobaczyłem, że jest ustawiony na coś innego niż CHECKSUM, natychmiast go zmieniam i przechodzę do innego ważniejszego zadania. Nie przejmuję się tym, jak została wprowadzona zła konfiguracja, ważniejsze jest, aby ją poprawić, a następnie upewnić się, że osoby mające uprawnienia do jej zmiany są informowane o tym, dlaczego ten element konfiguracji nie powinien zostać zmieniony na nic innego. Tylko moje 0,02 $
źródło
Jak zarówno @Thomas Stringer, jak i @Kin powiedział, że został wprowadzony w SQL Server 2005 i uważam, że działa we wszystkich wersjach SQL Server. W przypadku TempDB wprowadzono CHECKSUM w SQL Server 2008
http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/23/checksum-and-tempdb.aspx
źródło