Mam wielu klientów z SQL Server 2008 i właśnie to mam tutaj na moim serwerze. Korzystam z plików kopii zapasowych, aby przesyłać bazy danych tam iz powrotem między klientami i moim biurem.
Czytałem, że podczas tworzenia kopii zapasowej z SQL Server 2012 nie ma sposobu, aby przywrócić ją do instancji z 2008 roku. Zakładałem, że poziom kompatybilności poradziłby sobie z tym problemem, ale tak nie jest. Dlatego nie mam pojęcia, jak zaktualizować. Poza uaktualnieniem wszystkich moich klientów naraz, co jest niemożliwe, nie mogę wymyślić żadnego czystego sposobu na zrobienie tego.
Muszę wysłać bazę danych do klienta, a także otrzymać bazę danych od klienta. To jest moja pierwsza aktualizacja wersji na SQL Server, więc jestem nowy w tym problemie. Wszelkie pomysły, jak postępować?
źródło
Odpowiedzi:
W grę wchodzą dwie rzeczy: numer wersji pliku i poziom zgodności. Po dołączeniu bazy danych do nowszej wersji głównej (na przykład od 2008 do 2008 R2 lub od 2008 R2 do 2012) wersja bazy danych zostaje trwale zmieniona i nie można ponownie dołączyć tej bazy danych do starszej wersji.
Poziom zgodności służy do analizowania przestarzałych T-SQL przestarzałych szkół, które działały w starszych wersjach SQL Server. Nie zmienia to sposobu przechowywania danych na dysku.
Aby przekazać bazę danych komuś ze starszej wersji programu SQL Server, musisz wyeksportować dane i zaimportować je do innej bazy danych. Pomocne są do tego narzędzia takie jak porównywanie danych Red Gate.
źródło
bcp
.Ustawienie poziomu zgodności jest używane przez SQL Server do ustalenia, w jaki sposób należy obsługiwać określone nowe funkcje. W ten sposób DB można migrować do nowszej wersji SQL bez problemów z aplikacją. Poziom zgodności można zmieniać tam iz powrotem.
Niestety pliki kopii zapasowych nie są kompatybilne wstecz. Jedną z metod byłoby użycie importu / eksportu do przeniesienia danych z bieżącej bazy danych do starszej wersji wersji.
źródło
W przypadku migracji SQL użyj darmowego i otwartego oprogramowania SQL Database Wizard Migration Wizard.
Miałem bazę danych o pojemności 5 GB z kilkoma ~ 10 milionami rekordów i wypróbowałem trasę za pomocą Generate Script, a następnie uruchomiłem ją za pomocą narzędzia sqlcmd.exe. Przede wszystkim wygenerowany skrypt nie zawsze działał poprawnie. Po drugie, sqlcmd.exe może również zawieść w przypadku dużych plików, narzekając na dostępną pamięć. osql.exe działa, ale po prostu trwa wieki (i ma te same argumenty wiersza poleceń).
Potem natknąłem się na wspaniałe narzędzie do migracji programu SQL Server do baz danych SQL Azure. Działa to również w przypadku SQL Server na SQL Server, na przykład jeśli chcesz przeprowadzić migrację bazy danych SQL 2012 do 2008 R2. Używa programu bcp.exe, który używa kopii zbiorczej. Dostępna jest wersja interfejsu graficznego i wiersza polecenia (partia) i jest to oprogramowanie typu open source. Zobacz http://sqlazuremw.codeplex.com/ . W moim przypadku operacja zajęła 16 minut.
Na ekranie zaawansowanym możesz wybrać, że celem jest SQL Server, a nie SQL Azure.
źródło
Odkryłem, że BCP jest bardziej skuteczny niż niektóre narzędzia do wprowadzania danych do wcześniejszej wersji SQL Server i do pobierania danych z RDS. (Dzięki @ivan_posdeev.)
Najpierw generuję schemat, klikając bazę danych prawym przyciskiem myszy w SQL Server Management Studio, Zadania, Generuj skrypty. Zaznacz wszystkie obiekty, w obiektach zaawansowanych upewnij się, że wszystko, czego potrzebujesz, będzie skryptowane (statystyki, indeksy itp.), Odznacz „USE database”, jeśli twoja docelowa baza danych ma inną nazwę, ustaw zgodność z wersją docelowej bazy danych i wygeneruj plik, który tworzy twój schemat. Stworzenie bazy danych na temat miejsca docelowego i uruchomić ten plik na nim (za pomocą
osql
,sqlcmd
lub GUI).Aby przenieść dane, uruchom następujące zapytanie dwukrotnie w źródłowej bazie danych, najpierw komentując drugą kolumnę w celu wygenerowania pliku wsadowego w celu wyodrębnienia danych, a następnie komentując pierwszą kolumnę w celu wygenerowania importowanego pliku wsadowego do uruchomienia w miejscu docelowym. (Musisz dodać serwery źródłowe i docelowe, nazwy instancji, katalogi plików wyjściowych i wejściowych, nazwy użytkowników i hasła. Aby zastosować zintegrowane zabezpieczenia, zastąp
-U
-P
opcjami i-T
).Obsługuje Unicode, jeśli nie jest to potrzebne, zmień
-N
przełącznik w obu instrukcjach na-n
.Po uruchomieniu sprawdź pliki o nazwie schema.tablename.ERRORS.dat - obejmie wszystkie wiersze, które się nie powiodły, puste, jeśli żaden nie.
Referencja MSDN dla BCP tutaj , bardziej przyjazny przegląd opcji BCP tutaj .
Przekonałem się, że jest to znacznie lepsze od generowania skryptów i każdego z narzędzi, które wypróbowałem. Działa również na bazach danych RDS (które nie zezwalają na tworzenie kopii zapasowych). Wygenerowane pliki danych mają rozmiar skryptów SQL o 30%, ich uruchomienie zajmuje ułamek czasu i jest znacznie bardziej niezawodne. (Skrypty generowane przez SQL Server dla skryptów danych zawsze się wyzwalają, czasem przewidywalnie czasami nie, wygenerowany SQL nie był zgodny z 2008R2 (np. Używany
nvarchar(0)
, często nie został ukończony bez wyraźnego powodu itp. BCP replikuje również wszelkie naruszenia ograniczeń , takich jak integralność referencyjna).źródło