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
.
SELECT
'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME + ' out d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
-- 'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME + ' in d:\dbdump\' + s.Name + '.' + t.NAME + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME + '.ERRORS.dat'
FROM
sys.tables t
INNER JOIN
sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN
sys.schemas s ON t.schema_id = s.schema_id
ORDER BY
s.Name, t.NAME
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).