Řešení problému s importem serveru SQL Server
Předběžná podmínka
Chcete-li přesunout data z jednoho SQL Serveru do druhého (např. z produkčního prostředí do testovacího prostředí), má smysl použít funkci "Generovat skripty", která je dostupná v možnostech databáze v SQL Server Management Studio. Výsledkem této operace je textový soubor s SQL příkazy, které lze spustit na jiném SQL serveru. Obvykle jsou tyto soubory příliš velké na to, aby je bylo možné spustit v SQL Server Management Studio, takže musíme použít sqlcmd nástroj příkazového řádku z instalačního balíčku SQL Server. Ve většině případů nástroj funguje hladce a další uživatelské akce nejsou nutné.
Popis problému
V některých vzácných případech sqlcmd nástroj může selhat při importu a vyvolat následující chybu:"Uzavřené uvozovky za znakovým řetězcem...", což znamená, že jeden z SQL dotazů nebyl proveden. K tomu dochází, protože sqlcmd pracuje pomocí zpracování toku, tj. načte nějaký kus dat, zpracuje je, načte další kus a tak dále. V některých případech může vstupní soubor obsahovat velkou instrukci SQL, jejíž velikost je větší než množství dat, které by mohl zpracovat sqlcmd najednou, takže sqlcmd se pokusí provést nefunkční SQL a selže.
Možná řešení
K vyřešení tohoto problému lze použít 2 přístupy:
-
sqlcmd obslužný program může přijmout parametr "-a", který definuje maximální velikost paketu (části dat), který bude použit během zpracování. Maximální hodnota je 32767, výchozí hodnota je 4096, takže má smysl používat tento parametr vždy s maximální hodnotou.
sqlcmd -i input.sql -a 32767 -o import_log.txt
-
Pokud první přístup nepomohl a problém se stále objevuje, existuje další, obtížnější řešení:
- Nainstalujte Cygwin
- Během instalace se po několika standardních obrazovkách zastavte na obrazovce „Vybrat balíčky“
- Do pole „Hledat“ zadejte „sed“ a ve stromové struktuře níže rozbalte kategorii „Základní“ a pro instalaci vyberte verzi ne nižší než 4.2.2
- Dokončete instalaci
- Poznámka:"sed" je nástroj systému Linux, který umožňuje zpracování souborů na základě proudu
- Po dokončení instalace spusťte "Cygwin64 Terminal" z plochy. Použijeme jej pro další kroky
-
Přejděte do adresáře, kde se nachází soubor SQL vygenerovaný aplikací SQL Server Management Studio. Musíte použít lomítka ve stylu Linuxu "/" místo stylu Windows, což je "\"
cd d:/temp
-
Změňte kódování souboru SQL z UTF-16LE na UTF-8, protože „sed“ neumí zpracovat UTF-16LE, tento převod je pro data bezpečný. Výsledkem bude nový soubor, který použijeme v dalším kroku
iconv -f UTF-16LE -t UTF-8 input.sql > input_utf8.sql
-
Převeďte nový soubor, aby měl jeden SQL dotaz v jedné dávce. Výsledkem bude nový soubor, který použijeme v dalším kroku
sed -e 's/^INSERT/GO\nINSERT/' input_utf8.sql > input_utf8_adapted.sql
-
Nyní by měl být soubor "input_utf8_adapted.sql" zpracován sqlcmd bez problémů, takže můžeme provést následující:
sqlcmd -i input_utf8_adapted.sql -a 32767 -o import_log.txt
-
Po dokončení spuštění zkontrolujte soubor import_log.txt a ujistěte se, že se neobjevily žádné chyby
- Nainstalujte Cygwin