Tendré una base de datos SQL Server 2012 y una tabla con 3 millones de filas y quizás 50 columnas. ¿Cuál será la forma más rápida para que un proceso .net en segundo plano desatendido (tal vez emita algún comando SQL o Powershell) para exportarlo a un archivo de texto, una línea para cada fila de datos? El proceso .net debe saber cuándo finalizó la exportación o si hubo algún error. El tipo de datos será todo int
o nvarchar
.
Supongo que un código C # puro que usa ado.net para ejecutar un select *
comando y recorrer el lector de datos y escribir en un archivo para cada registro será lento y no hay forma de que pueda paralelizar esto.
Idealmente, la exportación será a una carpeta de red compartida remota y no a una carpeta local en la máquina de SQL Server. El servidor SQL será un clúster HA. ¿SSIS es más adecuado para esto, no se requiere transformación de datos?
El proceso .Net se ejecutaría en la Máquina A, SQL Server en la Máquina B y el destino final del archivo es un recurso compartido de red. Una opción es que el servidor SQL escribe el archivo directamente en el recurso compartido de red. La otra opción es que SQL Server escribe en la máquina A y luego, cuando se escribe el archivo, el proceso .net lo copia al recurso compartido de red. No tengo SLA formal pero espero 30 minutos - 1 hora para la escritura del archivo.
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- ¿desde dónde se ejecutará la aplicación .NET? En el peor de los casos, esto podría significar que los datos deben moverse a través de 2 saltos de red, lo que probablemente será el mayor cuello de botella. Además, el número de filas es algo irrelevante: ¿cuál es el tamaño total aproximado de los datos? ¿Tiene un SLA de rendimiento que necesita cumplir para este proceso?