Będę miał bazę danych SQL Server 2012 i tabelę z 3 milionami wierszy i może 50 kolumnami. Jaki będzie najszybszy sposób dla bezobsługowego procesu .net w tle (być może wydaje polecenie SQL lub Powershell) w celu wyeksportowania go do pliku tekstowego, jeden wiersz dla każdego wiersza danych? Proces .net powinien wiedzieć, kiedy eksport został zakończony lub czy wystąpił błąd. Typem danych będzie cały int
lub nvarchar
.
Zakładam, że czysty kod C # przy użyciu select *
polecenia ado.net do wykonania polecenia i zapętlania się w centrum danych i zapisywania do pliku dla każdego rekordu będzie powolny i nie ma możliwości, żebym mógł to zrównoleglić.
Najlepiej byłoby, gdyby eksport był do zdalnego udostępnionego folderu sieciowego, a nie lokalnego folderu na komputerze z programem SQL Server. SQL Server będzie klastrem HA. Czy SSIS lepiej nadaje się do tego, czy nie jest wymagana transformacja danych?
Proces .Net działałby na komputerze A, SQL Server na komputerze B, a docelowym miejscem docelowym plików był udział sieciowy. Jedną z opcji jest SQL Server zapisuje plik bezpośrednio do udziału sieciowego. Inną opcją jest zapis programu SQL Server na komputerze A, a następnie podczas zapisywania pliku proces .net kopiuje go do udziału sieciowego. Nie mam formalnej umowy SLA, ale oczekuję 30 minut - 1 godzina na zapis pliku.
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- skąd będzie działać aplikacja .NET? W najgorszym przypadku może to oznaczać, że dane muszą przechodzić przez 2 przeskoki sieciowe, co prawdopodobnie będzie największym wąskim gardłem. Ponadto liczba wierszy jest nieco nieistotna - jaki jest przybliżony całkowity rozmiar danych? Czy masz umowę SLA dotyczącą wydajności, którą musisz spełnić w tym procesie?