Ich werde eine SQL Server 2012-Datenbank und eine Tabelle mit 3 Millionen Zeilen und vielleicht 50 Spalten haben. Was ist der schnellste Weg für einen unbeaufsichtigten .net-Hintergrundprozess (gibt möglicherweise einen SQL- oder Powershell-Befehl aus), um ihn in eine Textdatei zu exportieren, eine Zeile für jede Datenzeile? Der .net-Prozess sollte wissen, wann der Export abgeschlossen wurde oder ob ein Fehler aufgetreten ist. Der Datentyp ist all int
oder nvarchar
.
Ich gehe davon aus, dass ein reiner C # -Code, der ado.net verwendet, um einen select *
Befehl auszuführen, den Daten- Reader zu durchlaufen und für jeden Datensatz in eine Datei zu schreiben, langsam ist und ich dies auf keinen Fall parallelisieren kann.
Im Idealfall erfolgt der Export in einen freigegebenen Remote-Netzwerkordner und nicht in einen lokalen Ordner auf dem SQL Server-Computer. Der SQL Server wird ein HA-Cluster sein. Ist SSIS dafür besser geeignet, keine Datenumwandlung erforderlich?
Der .Net-Prozess würde auf Computer A und SQL Server auf Computer B ausgeführt, und das endgültige Dateiziel ist eine Netzwerkfreigabe. Eine Option ist, dass SQL Server die Datei direkt auf die Netzwerkfreigabe schreibt. Die andere Option besteht darin, dass SQL Server auf Computer A schreibt. Wenn die Datei geschrieben wird, kopiert der .NET-Prozess sie auf die Netzwerkfreigabe. Ich habe keine formelle SLA, erwarte aber 30 Minuten - 1 Stunde für das Schreiben der Datei.
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- Woher wird die .NET-App ausgeführt? Dies könnte im schlimmsten Fall bedeuten, dass die Daten zwei Netzwerksprünge durchlaufen müssen, was wahrscheinlich den größten Engpass darstellt. Auch die Anzahl der Zeilen spielt keine Rolle - wie hoch ist die ungefähre Gesamtdatengröße? Haben Sie eine Leistungs-SLA, die Sie für diesen Prozess einhalten müssen?