Przenieś bazę danych z SQL Server 2012 do 2008

29

Mam bazę danych instancji SQL Sever 2012, którą chciałbym skopiować na serwer 2008. Serwer 2008 nie może przywrócić kopii zapasowych utworzonych przez serwer 2012 (próbowałem).

W 2012 roku nie mogę znaleźć opcji utworzenia kopii zapasowej zgodnej z rokiem 2008. Czy coś brakuje?

Czy istnieje prosty sposób na wyeksportowanie schematu i danych do formatu niezależnego od wersji, który mogę następnie zaimportować do 2008 roku?

Baza danych nie korzysta z żadnych funkcji specyficznych dla 2012 roku. Zawiera tabele, dane i procedury przechowywane.

Oto, co próbowałem do tej pory

Próbowałem ZadaniaGeneruj skrypty na serwerze 2012 i byłem w stanie wygenerować schemat (w tym procedury składowane) jako skrypt SQL. Nie zawierało to jednak żadnych danych.

Po utworzeniu tego schematu na moim komputerze w 2008 r. Mogłem otworzyć kreatora „Eksportuj dane” na komputerze w 2012 r., A po skonfigurowaniu 2012 jako maszyny źródłowej i 2008 jako maszyny docelowej przedstawiono mi listę tabel, które ja można skopiować. Wybrałem wszystkie moje tabele (300+) i kliknąłem kreatora. Niestety generuje skrypty przez całe wieki, a następnie kończy się niepowodzeniem z błędami typu „Błąd wstawiania do kolumny„ FOO_ID ”tylko do odczytu.

Próbowałem także „Copy Database Wizard”, który twierdził, że jest w stanie skopiować „z 2000 roku lub później do roku 2005 lub później”. Ma dwa tryby:

  1. „Odłącz i dołącz”, który nie powiódł się z błędem:

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. Metoda obiektu zarządzania SQL, która zakończyła się błędem

    Nie można odczytać właściwości IsFileStream. Ta właściwość nie jest dostępna w SQL Server 7.0. ”

Bogaty
źródło
Czy możesz eksportować bezpośrednio? Nie wiem, jak duża jest twoja baza danych, ale to właśnie zrobiłbym podczas pracy z mniejszymi bazami danych.
Dave
2
Żadna starsza wersja programu SQL Server nie może przywracać kopii zapasowych z nowszych wersji. Jest to zgodne z projektem. Skorzystaj z funkcji eksportu,
4
„Próbuję dowiedzieć się, dlaczego ktoś przy zdrowych zmysłach migrowałby wstecz”. - Mam serwer produkcyjny z 2012 r., Ale moja maszyna deweloperska ma tylko 2008 r. Chciałbym, aby lokalna kopia DB była pomocna w programowaniu, ale nie chcę instalować 2012 r. Na moim komputerze deweloperskim, ponieważ pozostało tyle wolnego miejsca i nie chcę tracić godzin na jego instalowanie. (Więc spędzam godziny próbując migrować wstecz zamiast ... ale to tylko ja.)
Rich
1
Jesteś prawie na miejscu. W sekcji Eksport, do której wszedłeś, możesz uwzględnić zarówno dane, jak i schemat.
1
Chciałem tylko dodać dla Ramhound: dla jednego uaktualnionego SQL 2008 R2 do SQL 2012 w moim środowisku deweloperskim, a następnie, po zmianie dużej ilości schematu i danych w mojej zaktualizowanej instancji, uświadomiłem sobie, że VS 2010 nie może porównać schematu lub danych z SQL 2012. SSDT dla VS 2010 i VS 2012 może porównywać schemat z SQL 2012, ale nie jest kompatybilny z oryginalnymi projektami baz danych VS 2010 i nie może porównywać danych. Krótko mówiąc, wolałbym wrócić do SQL 2008 R2 i poczekać, aż firma podejmie decyzję o przejściu na rok 2012. Ale chciałbym zapisać mój nowy schemat / dane. AFAIK Mam rację.
GFK

Odpowiedzi:

40

Kliknij prawym przyciskiem myszy bazę danych w SQL Management Studio 2012 i wybierz „Zadania -> Generuj skrypty”. Kliknij obok ekranu powitalnego, wybierz „skryptuj całą bazę danych i wszystkie obiekty bazy danych”. Na stronie „określ sposób zapisywania skryptów” kliknij „zaawansowane”. W sekcji „Ogólne” na wyskakującej stronie właściwości zmień „Typy danych na skrypt” z „Tylko schemat” na „Schemat i dane” i zmień „Skrypt dla wersji serwera” z „2012” na „2008”.

Następnie musiałem znaleźć sposób na edytowanie początku tego ogromnego pliku SQL, aby dostosować sposób tworzenia bazy danych - patrz ten q: /programming/102829/best-free-text-editor -obsługujące więcej niż 4 GB plików

I w końcu musiałem znaleźć sposób na uruchomienie skryptu SQL, który był zbyt duży, aby go otworzyć w SQL Management Studio - patrz to q: /programming/431913/how-do-you-run- a-300mb-ms-sql-sql-file

Bogaty
źródło
co poprawiłeś na początku pliku?
JonoRR
1
Przepraszam, nie pamiętam dokładnie. Myślę, że specyficzne dla aplikacji rzeczy. Być może nazwa bazy danych lub coś takiego. Myślę, że dodałbym go tutaj, gdyby był odpowiedni dla osób z tym samym problemem.
Bogaty
3
@JonoRR Najprawdopodobniej zechcesz edytować instrukcję CREATE DATABASE i ustawić ścieżki plików danych na cokolwiek, co ma sens na serwerze docelowym.
Igby Largeman
12

W przypadku migracji SQL użyj bezpłatnego i otwartego Kreatora migracji bazy danych SQL.

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ą z 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 GUI i wiersza poleceń (Batch) 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.

lvmeijer
źródło
1
Gdzie ustawić 2008 R2 w tym kreatorze?
JonoRR
Świetna wskazówka, przywróciłem bazę danych z Express 2012 do Web 2008. Bardzo łatwo.
rkawano
Potwierdzam, że działa zgodnie z reklamą. Czy 2014-> 2012, między domenami, lokalne serwery SQL. W jaki sposób to narzędzie tak długo unikało moich poszukiwań! Niesamowite, nawet do użytku na lazur.
Gomibushi
3

Jestem nowy w SQL, ale udało mi się przeprowadzić migrację z 2012 do 2008. W tym celu skorzystałem z narzędzia SQL do importowania i eksportowania. Wybrałem serwer SQL 2012 i bazę danych, którą chcę migrować, a na koniec serwer 2008 i utworzyłem nową bazę danych jako moją bazę docelową. Zadziałało.

Fernando
źródło
2

Wypróbuj narzędzia APEXSQL . Posiadają narzędzie, które będzie skryptować bazę danych i również dane.

Paweł
źródło
„od 299 $” - czy istnieje darmowa alternatywa?
Rich
1

Po utworzeniu tego schematu na moim komputerze w 2008 r. Mogłem otworzyć kreatora „Eksportuj dane” na komputerze w 2012 r., A po skonfigurowaniu 2012 jako maszyny źródłowej i 2008 jako maszyny docelowej przedstawiono mi listę tabel, które ja można skopiować. Wybrałem wszystkie moje tabele (300+) i kliknąłem kreatora. Niestety generuje skrypty przez całe wieki, a następnie kończy się niepowodzeniem z błędami typu „Błąd wstawiania do kolumny„ FOO_ID ”tylko do odczytu.

Problem polega na tym, że nie można wstawić kolumn identyfikatora, więc:

  1. Wybierz wszystkie tabele, zaznaczając je
  2. Wybierz wszystkie tabele (sposobem na to jest kliknięcie pierwszego i przytrzymanie klawisza Shift i kliknięcie ostatniego stolika)
  3. Kliknij „Edytuj odwzorowania” - widać to tuż nad następnym przyciskiem i obok podglądu.
  4. Pojawi się okno, zaznacz opcję „Włącz wstawianie tożsamości”, a następnie kliknij przycisk Dalej i kontynuuj, powinno to działać. To zadziałało dla mnie.
Jaimee Jose
źródło
1

Postępowałem zgodnie z rozwiązaniem Richa /superuser//a/469597/312310 powyżej i zadziałało świetnie! Dzięki - nie mogę jeszcze głosować tutaj!

Dodatkowe kroki, które musiałem zrobić, aby to zadziałać, to:

  • Zmień nazwy plików logicznych i upewnij się, że ścieżka jest poprawna. Musiałem także zmienić wygenerowaną nazwę dziennika, w przeciwnym razie próbował on zastąpić plik mdf dziennikiem, a następnie zgłosił ten błąd /programming/7534664/sql-server-script-error-database-is- już w użyciu

    UTWÓRZ BAZA DANYCH [xxxxx] NA PODSTAWIE (NAZWA = xxxxx ', NAZWA PLIKU = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', ROZMIAR = 14400 KB, MAXSIZE = NIEOGRANICZONY, FILEGROWTH = 1024KB) ZALOGUJ SIĘ (NAZWA = N'xxxxxldf ', NAZWA PLIKU = N'C: \ Program Files \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', ROZMIAR = 18560 KB, MAXSIZE = 2048 GB, FILEGROWTH = 10 %) UDAĆ SIĘ

  • Musiałem skomentować wygenerowaną sekcję i później ręcznie dodać uprawnienia użytkownika

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

Uruchomiłem go i oto mogę teraz przywrócić moją nową bazę danych Umbraco 7.1.2 na moim serwerze internetowym, który ma tylko SQL Server 2008 R2!

ladygargar
źródło