Aby przesyłać duże ilości danych między serwerami SQL, stosuje się kilka strategii, w tym bulk insert, procesy ETL (Extract-Transform-Load), replikację oraz mechanizmy kopii zapasowej/przywracania, połączeń db-link i wbudowane środki eksportu-importu.
Najlepiej wykorzystać partie mechanizmów przesyłania. Przykład na SQL Server — to BULK INSERT do ładowania dużych plików, lub SSIS/Integration Services do skomplikowanych scenariuszy ETL. W bardziej przenośnych wariantach używa się skryptów z logiką LIMIT/OFFSET i zapisaniem pozycji przesyłania. Dla niezawodności często stosuje się:
-- Przesyłanie danych w porcjach między bazami (PostgreSQL) INSERT INTO target_db.public.data_table (col1, col2) SELECT col1, col2 FROM source_db.public.data_table WHERE transferred = FALSE LIMIT 10000;
Jaka jest różnica między replikacją a eksportem-importem, i dlaczego replikacja nie zawsze nadaje się do migracji dużych archiwów historycznych?
Odpowiedź: Replikacja wspiera synchronizację aktualnych zmian i działa efektywnie dla "żywych" danych. Do migracji archiwów historycznych replikacja może być niewystarczająco szybka i elastyczna, ponieważ nie wspiera niestandardowej transformacji i nie rozwiązuje problemu jednorazowego masowego przesyłania — tu częściej stosuje się ETL.
Historia
Firma zintegrowała kilka regionalnych baz w jedną hurtownię. Podczas masowego importu bez partii system "zamrażał się" z powodu braku pamięci RAM, co prowadziło do partial commit i pół-ręcznego przywracania stanu. Naprawiono poprzez przejście na pakietowe wypisywanie z rejestrowaniem postępu przez tabele staging.
Historia
Z powodu nieprawidłowej kontroli sum kontrolnych podczas przesyłania dużych plików za pomocą BULK INSERT część informacji została uszkodzona, jednak ten fakt odkryto po kilku tygodniach. Rozwiązaniem był przeliczenie sum kontrolnych przed i po każdym bicie z automatycznym powtórzeniem przy niespójności.
Historia
W próbie migracji 100+ mln wierszy przez standardowy eksport-import jeden programista nie uwzględnił zarządzania blokadą: blokada tabel na docelowym serwerze spowodowała przestój operacji biznesowych na kilka godzin. Wnioski — dla takich zadań używać tylko nocnych okienek i etapowego kopiowania z tymczasową ponowną indeksacją.