Obniżenie wersji SQL Server 2008 na 2005

32

Pliki baz danych zbudowane przy użyciu SQL 2008 nie są kompatybilne z 2005. Czy istnieje jakieś rozwiązanie?

Sevki
źródło
Nie zapomnij również wyeksportować danych logowania do serwera.
StanleyJohns
Czy to dlatego, że rozwijacie się w 2008 r., Ale wasze serwery produkcyjne mają wciąż rok 2005? Każde dostarczone przez ciebie rozwiązanie opóźni nieuniknione, a jednocześnie sprawi, że twoje życie będzie nieszczęśliwe, ponieważ prawdopodobnie skończysz regularnie z tymi obniżkami.
datagod

Odpowiedzi:

16

Nie są potrzebne narzędzia innych firm. SQL Server 2008 Management Studio dał nam bardzo potężne narzędzie do konwersji bazy danych w dół, ponieważ dodali opcję „Dane skryptu” do kreatora „Baza danych skryptu”.

Po prostu kliknij prawym przyciskiem myszy DB w SQL2008 SSMS i przejdź do Zadania, a następnie „Generuj skrypty”

Przejdź przez kreatora, pamiętaj, aby wybrać „Prawda” dla „Dane skryptu” w opcjach tabeli / widoku. Wybierz wszystkie obiekty, a następnie uruchom skrypt, który tworzy na serwerze 2005. (Należy pamiętać, że utworzony skrypt może być ogromny, jeśli oryginalna baza danych jest bardzo duża!)

Pamiętaj, że możesz nawet uruchomić kreatora na serwerze SQL2005, aby przekonwertować bazę danych SQL2005 na SQL2000 (oczywiście na stacji roboczej potrzebujesz oczywiście narzędzi 2008).

BradC
źródło
4
Bez obrazy, ale nie może to być rozwiązaniem, jeśli baza danych jest duża. Wypróbuj tę technikę na dowolnej tabeli z kilkoma milionami wierszy (i myśl o varchar (max) jako typ danych pojedynczej kolumny) i jeśli Management Studio będzie w stanie otworzyć i przeanalizować ten plik, będziesz zadowolony, ale jestem zadowolony na pewno się nie otworzy, się zawiesi. Przepraszamy, ale to nie jest rozwiązanie tego problemu, z wyjątkiem sytuacji, gdy db jest naprawdę mały.
Marian
3
Jasne, jeśli db jest zbyt duży, wypisz skrypt tylko strukturę bazy danych, a następnie użyj swojej ulubionej metody (SSIS, BCP, Kreator importu) do wypchnięcia danych.
BradC,
W SSMS 11.0 wydaje się, że nie ma opcji, aby skrypty danych wraz ze strukturą. i.imgur.com/SGkG8oZ.png
jcollum
Ach, OK, teraz jest w części „Typy danych do skryptu” tuż nad
opcjami
16

Możesz BCP dane z jednej instancji SQL Server do innej instancji. Byłby to najszybszy sposób na skopiowanie danych z jednej wersji do drugiej. W zależności od ilości danych może to zająć dużo czasu.

Jeremiasz Peschka
źródło
2
W zależności od ilości danych prawie zawsze zajmie to dużo czasu
jcolebrand
Tak, na pewno to zrobi. Przeniesienie dużej bazy danych do starszej wersji programu SQL Server nie jest łatwym zadaniem.
mrdenny 15.04. Kwietnia
2
Zaletą BCP jest to, że będzie szybsze niż używanie danych skryptowych. Tak, jest wolny, ale szybszy niż wiele alternatyw.
Jeremiah Peschka
15

Niestety nie ma bezpośredniego sposobu na obniżenie DB z formatu z 2008 r. Do 2005 r.

Sposób, w jaki to robiłem w przeszłości (właściwie ze starszymi wersjami serwera SQL, ale proces będzie taki sam) to:

  1. Przywróć bazę danych w instancji SQL2008, jeśli jeszcze tego nie zrobiono
  2. Zbuduj pustą bazę danych z odpowiednimi strukturami (tabele, indeksy, ograniczenia, widoki, procy, wyzwalacze, ...) w instancji SQL2005. Mamy nadzieję, że możesz to zrobić na podstawie istniejącej procedury kompilacji i / lub kodu źródłowego, ale jeśli nie, możesz użyć SQL Server Managera do tworzenia skryptów dla wszystkiego w DB 2005 i uruchomić wynik na pustym w instancji 2008.
  3. Upewnij się, że oba wystąpienia mogą się widzieć (tzn. Nie ma zapór blokujących połączenia, jeśli wystąpienia znajdują się na różnych komputerach) i połącz je za pomocą sp_addlinkedserver .
  4. Skopiuj wszystkie dane z jednej bazy danych na drugą. Jeśli nie ma ograniczeń klucza obcego i podobnych problemów w wyzwalaczach, możesz się martwić, możesz po prostu połączyć bazy danych razem i przesuwać kursorem listę tabel (wybierając je z sys.objects) i uruchomić
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (lub INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.tablejeśli połączyłeś instancje w ten sposób )
    dla każdej tabeli. Jeśli masz wymuszanie ograniczeń i wyzwalaczy w zakresie spójności między tabelami, musisz oczywiście być nieco bardziej sprytny w kwestii kolejności tych operacji, szczególnie jeśli masz ograniczenia cykliczne, takie jak tabela z ograniczeniem opartym na sobie (jedna hierarchia trzymania dane, jako możliwy przykład).

Bardziej efektywne może być po prostu skopiowanie danych najpierw i dodanie całej innej struktury (indeksy, procy, wyzwalacze, ...) po kroku 3. Pozwala to uniknąć problemów z porządkowaniem wstawiania wierszy spowodowanych ograniczeniami i wyzwalaczami oraz budowania indeksów w koniec powinien teoretycznie być szybszy niż budowanie ich, ponieważ wszystkie dane są dodawane - chociaż jeśli masz tabele indeksów klastrowych w twoich tabelach, utwórz je przed dodaniem danych, ponieważ nie byłoby to szybsze tworzenie po fakcie.

Oczywiście wszystko to zakłada, że ​​żaden z twoich obiektów nie korzysta z funkcji specyficznych dla SQL 2008 - jeśli tak, miejmy nadzieję, że odkryjesz i naprawisz takie rzeczy, gdy wystąpią błędy podczas przebudowywania schematu. Jeśli którykolwiek z Twoich kodów opiera się na oficjalnie niezdefiniowanym zachowaniu, które różni się w zależności od wersji SQL Server, możesz mieć o wiele bardziej subtelne i nieuchwytne błędy, które można później wyłapać i usunąć.

David Spillett
źródło
1
-1, ponieważ jest to faktycznie nieefektywne (wybierz * na od) w porównaniu do BCP.
jcolebrand
@jcolebrand dość uczciwie na wydajność. Chociaż ta technika była jedną z moich prac.
David Spillett
to sprawiedliwy system, pomyślałem, że dołączę go tutaj ze względu na przyszłych czytelników. Masz obecnie głosy poparcia, aby nie było to problemem. ;)
jcolebrand
1

Najpierw musisz napisać skrypt do bazy danych i upewnić się, że w wersji, którą określisz, chcesz obniżyć ocenę. I skopiowanie danych z wyższej wersji do niższej wersji SQL Data porównywania zrobi dla ciebie lewę.

Powodzenia!

Mbongeni
źródło