Zaktualizuj bazę danych SQL Server 2000 do 2008 R2 i włącz nowe funkcje

23

Niedawno zaktualizowałem bazę danych SQL Server 2000 do 2008 R2.


To co zrobiłem to:

  1. Zamknij usługę SQL Server 2000 (ekspresową) na starym komputerze,
  2. Przenieś pliki danych ( mydatabase.mdf i mydatabase.ldf ) na nową maszynę,
  3. Uruchom SQL Server Management Studio 2008,
  4. Połącz się z lokalnym silnikiem bazy danych,
  5. Dołącz pliki danych do bazy danych.
  6. Zmień poziom zgodności bazy danych na SQL 2008 (100).

Pytanie: Co jeszcze powinienem zrobić, aby dokończyć migrację?

Chcę:

  1. korzystaj z nowych funkcji, takich jak suma kontrolna i model pełnego odzyskiwania,
  2. spraw, aby ta baza danych była dokładnie taka, jak została utworzona w SQL 2008 R2,
  3. spraw, by ta baza danych była w pełni kompatybilna, poprawna i idealnie pasowała do nowego silnika bazy danych SQL 2008 R2.

Innymi słowy: chcę tylko wiedzieć, jak poprawnie i całkowicie przekonwertować starą bazę danych SQL 2000 na nową bazę danych 2008 R2, bądź spokojny, że wszystko jest zrobione dobrze i ciesz się ze wszystkich nowych funkcji.


Zadaję to pytanie, ponieważ znalazłem w Internecie wiele witryn, które zawierają tak wiele różnych rzeczy, które powodują, że jestem zdezorientowany: niektórzy twierdzą, że konieczne jest przebudowanie indeksów, inny mówi, że powinien robić inne rzeczy ... i teraz nic nie wiem, więc chcę usłyszeć opinie doświadczonej osoby i jasne instrukcje krok po kroku. Pracuję dla bardzo małej firmy, jestem sam i nie chcę nic zepsuć.


Sir, jestem pod wrażeniem pańskiej odpowiedzi, nie spodziewałem się tak wiele.


Więc kilka komentarzy:

  1. Baza danych jest teraz w produkcji. Jak powiedziałem, został zaktualizowany przy użyciu metody deattach-attach, jak opisałem w pierwszym poście i jak opisano w MSDN: http://msdn.microsoft.com/en-us/library/ms189625.aspx Musiało to zostać zrobione szybko, więc byłem zmuszony to zrobić w ten sposób. Zapomnijmy o tym, jak niewłaściwe to może być i skupmy się na obecnej sytuacji.

  2. Użytkownicy / persmission nie stanowią tutaj problemu - jest ich tylko kilka, a uprawnienia są proste.

  3. Aplikacja korzystająca z bazy danych jest kompatybilna z SQL 2000 do 2012 roku, więc nie stanowi to również problemu.

  4. Plik bazy danych (MDF) nie jest duży - tylko około 1 GB.


Kilka dodatkowych pytań:

  1. Zalecasz użycie metody tworzenia kopii zapasowych / przywracania, ale zrobiłem to tak, jak napisano powyżej, więc czy mogę teraz napotkać jakieś problemy? Wszystko działało bez problemu.

  2. Model sumowania kontrolnego i pełnego odzyskiwania: nie był dostępny / włączony w SQL 2000, więc chcę go teraz użyć. Powiedziałeś, że jedyne, co muszę zrobić, to włączyć te opcje we właściwościach bazy danych? Czytałem gdzieś, że to nie wystarczy i powinienem też odbudować indeksy czy coś takiego. Naprawdę nie wiem, po prostu pytam.

  3. Przygotowuję się do migracji tej bazy danych do SQL 2012 - więc najpierw była z SQL 2000 do 2008 R2, teraz będzie z 2008 R2 do 2012 (było to niemożliwe bezpośrednio z powodu braku obsługi baz danych SQL 2000 w SQL 2012). Rozumiem więc, że powinienem postępować zgodnie z twoim przewodnikiem: wykonaj kopię zapasową w 2008 R2 i przywróć w 2012, a następnie wykonaj resztę swoich wskazówek, prawda?

  4. Wyjaśnij mi metodę tworzenia kopii zapasowych / przywracania: czy to jest jak zrzut bazy danych do zapytań SQL, a następnie przywrócenie ich przez wykonanie szeregu zapytań? Czy ta metoda przy okazji „defragmentuje” moją bazę danych? Jeśli nie, to jak ręcznie go zdefragmentować / zoptymalizować?

  5. Ponieważ korzystaliśmy z SQL 2000 Express od lat (bez interfejsu zarządzania), robiliśmy kopie zapasowe po prostu zatrzymując silnik i RAR katalogu DATA. Na razie, skoro jesteśmy na SQL 2008, czy to nie jest lepsze niż używanie funkcji tworzenia kopii zapasowych w Management Studio?

  6. Tryb pełnego odzyskiwania z częstymi kopiami zapasowymi dziennika transakcji - Gdzie jest przechowywany dziennik transakcji - czy jest to plik LDF? Jak mogę prawidłowo wykonać kopię zapasową?


Wiem, że moje pytania mogą zabrzmieć głupio, nie jestem profesjonalnym administratorem bazy danych, ale jestem jedyną osobą, która może wykonywać takie „twarde” zadania, jak modernizacja silnika bazy danych. Jestem również pewien, że twoja wiedza bardzo pomoże innym ludziom, takim jak ja.

Dziękuję bardzo za poświęcony czas i wiedzę, naprawdę to doceniam.

Mark Saelic
źródło
2
Następnym razem zdecydowanie zalecam tworzenie kopii zapasowych / przywracanie zamiast zamykania programu SQL Server, przenoszenia plików i dołączania ich. Tak wiele rzeczy, które mogą pójść nie tak. Na plus gratulujemy wreszcie porzucenia 14-letniego oprogramowania bazodanowego!
Aaron Bertrand

Odpowiedzi:

37

Najważniejszym krokiem do zrobienia jest, aby uruchomić program Doradca uaktualnienia na bazie danych i adresu wszystkich problemów zgłoszonych przez nią SQL Server 2000.

Najlepszym rozwiązaniem jest skorzystanie z narzędzia Doradca uaktualnienia w starszej bazie danych SQL Server 2000 i zaimportowanie pliku śledzenia do narzędzia Doradca uaktualnienia w celu analizy. Plik śledzenia pozwala Doradcy uaktualnienia wykryć problemy, które mogą nie pojawić się podczas zwykłego skanowania bazy danych, takie jak TSQL osadzony w aplikacjach. Możesz przechwytywać ślady TSQL za pomocą SQL Profiler na serwerze SQL Server 2000 w typowych godzinach i analizować te ślady za pomocą Doradcy uaktualnienia.

Tak więc pozostałe kroki to:

W dniu migracji:

  1. skrypt naszych loginów na serwerze 2000 za pomocą sp_help_revlogin .
  2. Skryptuj zadania i połączone serwery z serwera SQL 2000.
  3. zatrzymać serwery WWW łączące się z serwerem 2000. Upewnij się, że żadna aplikacja nie łączy się z serwerem 2000.
  4. wykonaj kopię zapasową baz danych i przywróć na docelowym serwerze SQL 2008 R2 (uwaga: nie odłączaj / dołączaj, ponieważ może to pójść źle, a skończy się to odłączoną bazą danych i brakiem kopii zapasowych!)
  5. Po przywróceniu kopii zapasowych na serwerze 2008 R2 uruchom dane wyjściowe ze sp_help_revlogin na serwerze 2008 R2, aby ponownie utworzyć dane logowania.
  6. Zsynchronizuj osieroconych użytkowników (jeśli istnieją) i odtwórz zadania agenta SQL i połączonych serwerów na nowym serwerze.
  7. zmień poziom zgodności w przywróconych bazach danych na 100.
  8. Dbcc checkdb z włączonymi opcjami all_errormsgs i data_purity: DBCC CHECKDB ('<db_name_goes_here>' ) WITH ALL_ERRORMSGS,NO_INFOMSGS, DATA_PURITY
  9. uruchom DBCC UPDATEUSAGE na przywróconych bazach danych DBCC UPDATEUSAGE('database_name') WITH COUNT_ROWS
  10. Zaktualizuj statystyki wszystkich tabel przy pełnym skanie: Update Statistics table_name with FULLSCAN
  11. Opcjonalnie: Sprawdź poziomy fragmentacji i, w zależności od poziomu fragmentacji, uruchom reorg / rebuild wszystkich indeksów. Możesz użyć skryptów Oli .
  12. Ponownie skompiluj wszystkie SP za pomocą sp_recompile 'procedureName'
  13. Odśwież swoje poglądy SP_REFRESHVIEW view_name
  14. koniecznie zmień opcję bazy danych: sprawdź stronę na SUMA KONTROLNA.
  15. Zmień model odzyskiwania (jeśli inny niż SQL 2000) na FULL. Jeśli zmienisz na PEŁNY model odzyskiwania, UPEWNIJ SIĘ, że często wykonujesz kopie zapasowe dziennika transakcji. Pomoże ci to odzyskać punkt w czasie, a także nie nadmuchać T-Log.
  16. W SQL Server 2005 i nowszych wprowadzono pocztę bazy danych . Musisz więc przeprowadzić migrację z SQLMail do poczty bazy danych.

    USE [master]
    GO
    sp_configure 'show advanced options',1
    GO
    RECONFIGURE WITH OVERRIDE
    GO
    sp_configure 'Database Mail XPs',1
    GO
    RECONFIGURE 
    GO

Ponadto, jeśli masz replikację, musisz ją zresetować. Jeśli jakieś DR, takie jak logshipping lub Mirroring (nowe w 2005 r. I nowsze, ale amortyzowane w 2012 r.), Musisz je zresetować.

Stare pakiety DTS należy migrować do SSIS przy użyciu C:\Program Files\Microsoft SQL Server\100\DTS\Binn\DTSMigrationWizard.exe(wiersza polecenia) lub Kreatora migracji pakietów .

Możesz także użyć mojego skryptu znalezionego na /dba//a/36701/8783 . Chociaż używa metody odłączania / dołączania, bardzo polecam użycie metody BACKUP / RESTORE . Zmień odpowiednio skrypt.


Na marginesie:

  • włącz natychmiastową inicjalizację pliku na nowym serwerze.
  • Mają wiele plików danych tempdb o jednakowej wielkości.
  • Włącz flagę śledzenia 1118
  • Prawidłowo skonfiguruj pamięć maksymalną i minimalną. Zwłaszcza pamięć Max z dala od domyślnych.
  • Prawidłowo dostosuj ustawienia MAXDOP. Patrz /dba//a/36578/8783 więcej szczegółów.
  • Najlepiej jest zainstalować sp_Blitz z Brenta Ozara . Uruchom go i rozwiąż zgłoszone przez niego problemy krytyczne i o wysokim priorytecie.
  • Możesz nawet używać SQL Power Doc z kendalvandyke - SQL Power Doc współpracuje ze wszystkimi wersjami SQL Server od SQL Server 2000 do 2012 oraz wszystkimi wersjami Windows Server i konsumenckich systemów operacyjnych Windows od Windows 2000 i Windows XP do Windows Server 2012 i Windows 8. Przydatny również przy planowaniu aktualizacji - zobacz, jakie ukryte funkcje są używane w instancji.
  • Włącz Optymalizuj dla obciążeń ad-hoc i Domyślne opcje kompresji kopii zapasowej.

Pozwala odpowiedzieć na twoje pytania ...

Co jeszcze powinienem zrobić, aby dokończyć migrację?

Zobacz moją odpowiedź. Pomoże Ci to właściwie wymyślić plan migracji. Zawsze testuj swój plan migracji w UAT (nieprodukcyjnym) wraz z odpowiednim testowaniem aplikacji przez użytkowników biznesowych.

korzystaj z nowych funkcji, takich jak suma kontrolna i model pełnego odzyskiwania.

CHECKSUMjest nowością w SQL Server 2005 i nowszych wersjach. Omówiłem to w ramach opisanych wyżej kroków migracji.

full recovery modelnie jest nowy. Zależy to od rodzaju działalności i decyduje o tym, ile danych możesz stracić w przypadku katastrofy.

Tryb pełnego odzyskiwania z częstymi kopiami zapasowymi dziennika transakcji pozwala przywrócić dane w określonym czasie i tam, zmniejszając utratę danych.

uczyń tę bazę danych dokładnie taką, jaka została utworzona w SQL Server 2008 R2.

spraw, aby ta baza danych była w pełni kompatybilna, poprawna i idealnie pasowała do nowego silnika bazy danych SQL 2008 R2.

Nie do końca to rozumiem! Ale powyższe kroki migracji pomogą ci. Musisz tylko przywrócić bazę danych i zmienić poziom zgodności 10 100wraz z powyższymi krokami.

Chcę tylko wiedzieć, jak poprawnie i całkowicie przekonwertować starą bazę danych SQL Server 2000 na nową bazę danych 2008 R2, bądź spokojny, że wszystko jest zrobione dobrze i ciesz się ze wszystkich nowych funkcji.

Musisz być ostrożny, ponieważ będzie to wymagało również zmian w kodzie aplikacji. Jeśli kod aplikacji zostanie zmieniony w celu korzystania z nowych funkcji programu SQL Server 2008 R2, nie wystąpią żadne problemy - ZAPEWNIAJĄC, że w pełni wykonałeś pełne testy regresji aplikacji w środowisku UAT lub DEV. Zapewni to najwyższą pewność podczas rzeczywistej migracji w PROD.


Uwaga: powyżej są kroki, które pamiętam i jestem prawie pewien, że nic nie zostało pominięte. Jeśli zobaczę, że coś przeoczyłem, dodam go lub innych ekspertów na tej stronie - dodaj!

Wszystko, co opisano powyżej, musi najpierw zostać odtworzone w środowisku NON PRODUCTION, aby uniknąć niespodzianek podczas rzeczywistej migracji.

----------

Kilka dodatkowych pytań:

Zalecasz użycie metody tworzenia kopii zapasowych / przywracania, ale zrobiłem to tak, jak napisano powyżej, więc czy mogę teraz napotkać jakieś problemy? Wszystko działało bez problemu.

Jeśli wszystko działało dobrze i udało Ci się dołączyć bazę danych, NIE , nie będziesz mieć żadnych problemów. Detach / Attach vs. Backup / Restore to tylko metoda przenoszenia bazy danych w inne miejsce. Po prostu FYI .. Tworzenie kopii zapasowych / przywracanie jest bezpieczniejsze i bardziej niezawodne, jak gdyby coś poszło nie tak (w najgorszych przypadkach), to przynajmniej masz kopię zapasową do przywrócenia i odzyskania bazy danych.

Model sumowania kontrolnego i pełnego odzyskiwania: nie był dostępny / włączony w SQL Server 2000, więc chcę ich teraz użyć. Powiedziałeś, że jedyne, co muszę zrobić, to włączyć te opcje we właściwościach bazy danych? Czytałem gdzieś, że to nie wystarczy i powinienem też odbudować indeksy czy coś takiego. Naprawdę nie wiem, po prostu pytam.

Jak powiedziałem, suma kontrolna jest nowa w wersji 2005 i nowszych. Jest to mechanizm, za pomocą którego SQL Server wykryje uszkodzenie strony, szczególnie z powodu operacji we / wy. Więcej informacji można znaleźć w mojej odpowiedzi tutaj .

Aby włączyć CHECKSUM, a także zmienić model odzyskiwania na FULL, możesz to zrobić przy użyciu poniższego kodu T-SQL:

USE master;
GO
ALTER DATABASE [your_database_name] -- change this !!
SET RECOVERY FULL, PAGE_VERIFY CHECKSUM;
GO

Uwaga: po ustawieniu opcji bazy danych zostanie ona zachowana podczas migracji z wersji 2008R2 do 2012.

Przygotowuję się do migracji tej bazy danych do SQL Server 2012 - więc najpierw było to od 2000 do 2008 R2, teraz będzie od 2008 R2 do 2012 (było to niemożliwe bezpośrednio z powodu braku obsługi 2000 baz danych w SQL Serwer 2012). Rozumiem więc, że powinienem postępować zgodnie z twoim przewodnikiem: wykonaj kopię zapasową w 2008 R2 i przywróć w 2012, a następnie wykonaj resztę swoich wskazówek, prawda?

Tak proszę. Jak powiedziałem, przywracanie kopii zapasowej jest preferowaną metodą, chyba że masz dobry powód, aby tego nie robić.

Wyjaśnij mi metodę tworzenia kopii zapasowych / przywracania: czy to jest jak zrzut bazy danych do zapytań SQL, a następnie przywrócenie ich przez wykonanie szeregu zapytań? Czy ta metoda przy okazji „defragmentuje” moją bazę danych? Jeśli nie, to jak ręcznie go zdefragmentować / zoptymalizować?

Tworzenie kopii zapasowych / przywracanie jest ... podobne do zrzutu i obciążenia używanego w Sybase, Oracle lub prawdopodobnie również w MySQL. To tylko SQL Server nazywa to .. backup / przywracanie.

Koniecznie przeczytaj: Zrozumienie kopii zapasowych SQL Server autorstwa Paula Randalla.

Prosta składnia (pełna składnia patrz BOL ):

backup database database_name
to disk = 'D:\backup\database_name_full.bak'
with init, stats =10

Następnie przywracania można dokonać na serwerze docelowym jako:

- zakładając, że układ dysku docelowego nie pasuje do serwera źródłowego

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
move 'logical_data_fileName' to 'physical_path\database_name.mdf'
move 'logical_log_fileName' to 'physical_path\database_name_log.ldf'
with recovery, stats = 10

- zakładając, że układ dysku docelowego jest zgodny z serwerem źródłowym

restore database database_name
from disk = 'D:\backup\database_name_full.bak'
with recovery, stats = 10

Czy ta metoda przy okazji „defragmentuje” moją bazę danych? Jeśli nie, to jak ręcznie go zdefragmentować / zoptymalizować?

tworzenie kopii zapasowych / przywracanie nie spowoduje defragmentacji bazy danych. Musisz użyć Alter Index Reorganize lub Rebuild w zależności od poziomu fragmentacji.

Ponieważ jesteś nowy w SQL Server, gorąco polecam użycie Ola Hallengren's:

Ponieważ od lat korzystaliśmy z SQL Server 2000 Express (bez interfejsu zarządzania), robiliśmy kopie zapasowe po prostu zatrzymując silnik i RAR katalogu DATA. Na razie, skoro jesteśmy na SQL Server 2008, czy to nie jest lepsze niż używanie funkcji tworzenia kopii zapasowych w Management Studio?

Zatrzymanie silnika to najgorsza rzecz, jaką możesz zrobić, aby wykonać kopię zapasową !!

Przeczytaj link Paula o kopiach, o których wspomniałem, i użyj skryptu Oli. Microsoft ma artykuł KB ze skryptem do tworzenia automatycznych kopii zapasowych - Jak zaplanować i zautomatyzować tworzenie kopii zapasowych baz danych SQL Server w SQL Server Express

Tryb pełnego odzyskiwania z częstymi kopiami zapasowymi dziennika transakcji - Gdzie jest przechowywany dziennik transakcji - czy jest to plik LDF? Jak mogę prawidłowo wykonać kopię zapasową?

Każda baza danych SQL Server ma dziennik, który rejestruje wszystkie transakcje i modyfikacje bazy danych dokonane przez każdą transakcję. Dziennik transakcji jest kluczowym elementem każdej bazy danych.

Zwykłym rozszerzeniem konwencji nazewnictwa dla dziennika transakcji jest „.LDF”, ale może być dowolny.

Nie zamierzam więcej pisać na ten temat, ponieważ dzięki temu odpowiedź będzie bardzo pochopna. Zobacz Zarządzanie dziennikiem transakcji, a moja odpowiedź tutaj ma również doskonałe linki.


EDYCJA: 24.08.2016 .. Pomoże to przyszłym czytelnikom:

Jeśli migrujesz całą instancję z jednej wersji do innej, zdecydowanie zalecam użycie rozwiązania opartego na PowerShellStart-SqlMigration

wprowadź opis zdjęcia tutaj

Kin Shah
źródło