Vou ter um banco de dados do SQL Server 2012 e uma tabela com 3 milhões de linhas e talvez 50 colunas. Qual será a maneira mais rápida de um processo .net de plano de fundo autônomo (talvez emita algum comando SQL ou Powershell) para exportá-lo para um arquivo de texto, uma linha para cada linha de dados? O processo .net deve saber quando a exportação foi concluída ou se houve algum erro. O tipo de dados será todo int
ou nvarchar
.
Estou assumindo que um código C # puro usando ado.net para executar um select *
comando e fazendo um loop sobre o datareader e gravando em um arquivo para cada registro será lento e não há como paralelizar isso.
Idealmente, a exportação será para uma pasta de rede compartilhada remota e não para uma pasta local na máquina do SQL Server. O SQL Server será um cluster de alta disponibilidade. O SSIS é mais adequado para isso, sem necessidade de transformação de dados?
O processo .Net seria executado na Máquina A, SQL Server na Máquina B e o destino final do arquivo é um compartilhamento de rede. Uma opção é o SQL Server grava o arquivo diretamente no compartilhamento de rede. A outra opção é o SQL Server grava na máquina A e, quando o arquivo é gravado, o processo .net o copia para o compartilhamento de rede. Não tenho SLA formal, mas espero 30 minutos - 1 hora para a gravação do arquivo.
"Ideally the export will be to a remote shared network folder and not a local folder on the SQL Server machine."
- de onde o aplicativo .NET será executado? Na pior das hipóteses, isso pode significar que os dados precisam passar por dois saltos de rede, o que provavelmente será o maior gargalo. Além disso, o número de linhas é um tanto irrelevante - qual é o tamanho total aproximado dos dados? Você tem um SLA de desempenho que precisa cumprir para esse processo?