コード例 #1
0
ファイル: Program.cs プロジェクト: heliomarpm/SQLDataTransfer
        private static void IniciarTransferencia(BaseConfigurationCollection <TablesElement> tables, DataTransfer.BulkConfig bulkConfig)
        {
            var tempo = new System.Diagnostics.Stopwatch();
            int rcount;

            #region [ TRANSFERENCIA DOS DADOS ]
            foreach (TablesElement table in tables)
            {
                string msg = "IniciarTransferencia: ";
                try
                {
                    if (!string.IsNullOrEmpty(table.ToCsvFile))
                    {
                        EscreverLog($"Exportação da fonte de dados \"{table.SourceName}\"", ConsoleColor.DarkGreen);
                    }
                    else if (string.Compare(table.Name, table.SourceName, StringComparison.OrdinalIgnoreCase) == 0)
                    {
                        EscreverLog($"Transferindo dados para a tabela \"{table.Name}\"", ConsoleColor.DarkGreen);
                    }
                    else
                    {
                        EscreverLog($"Transferindo dados de \"{table.SourceName}\" para \"{table.Name}\"", ConsoleColor.DarkGreen);
                    }

                    if (!string.IsNullOrEmpty(table.ToCsvFile))
                    {
                        msg = $"Exportação da fonte de dados \"{table.SourceName}\"";
                        tempo.Restart();
                        rcount = _transfer.ExportarArquivoCsv(table.SelectAll, table.ToCsvFile, true, ";", bulkConfig.CopyTimeout);
                        tempo.Stop();
                        EscreverLog($"\t Arquivo \"{table.ToCsvFile}\" criado com {rcount:n0} linhas! {tempo.Elapsed}");
                    }
                    else
                    {
                        if (table.Truncate)
                        {
                            msg = "Exclusão de dados";
                            tempo.Restart();
                            _transfer.LimparTabelaDestino(table.Name);
                            tempo.Stop();
                            EscreverLog($"\t {msg} finalizado! {tempo.Elapsed}");
                        }

                        msg = "Copia de dados";
                        tempo.Restart();
                        EscreverLog($"\t Transferência de {_transfer.BulkCopy(table.Name, table.SelectAll, bulkConfig):n0} registros finalizado! {tempo.Elapsed}");
                        tempo.Stop();

                        msg = "Re-Sequênciamento de campo Identity";
                        tempo.Restart();
                        _transfer.Reseed(table.Name);
                        tempo.Stop();

                        EscreverLog($"\t {msg} finalizado! {tempo.Elapsed}");
                        if (table.UpdateStatistics)
                        {
                            msg = "Atualização de estatisticas";
                            tempo.Restart();
                            _transfer.UpdateStatistics(table.Name);
                            tempo.Stop();
                            EscreverLog($"\t {msg} finalizado! {tempo.Elapsed}");
                        }
                    }
                }
                catch (Exception ex)
                {
                    EscreverLogErro(msg + " " + ex.Message);
                }
                finally
                {
                    EscreverLogLinha();
                }
            }
            #endregion
        }
コード例 #2
0
ファイル: Program.cs プロジェクト: heliomarpm/SQLDataTransfer
        static void Main(string[] args)
        {
            //local de armazenamento do log de execução
            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, @"Log");

            if (!Directory.Exists(path))
            {
                Directory.CreateDirectory(path);
            }

            _fileName = Path.Combine(path, string.Format("ErroConsole_{0}.txt", DateTime.Now.ToString("yyyyMMdd")));
            try
            {
                var transferSection = TransferSection.GetSection();
                //Se grupo de transferencia foi passado como parametro, executa apenas determinado
                if (args.Length > 0)
                {
                    foreach (TransfersElement item in transferSection.Transfers)
                    {
                        item.Disabled = !args.Contains(item.Name);
                    }

                    var confirmarTransferencia = (args.Length > 1 && !(args[1].ToUpper() == "S" || args[1].ToUpper() == "Y"));

                    if (args.Length == 1 || confirmarTransferencia)
                    {
                        if (!ConfirmarTransferencia(transferSection))
                        {
                            return;
                        }
                    }
                }
                else if (args.Length == 0)
                {
                    //Se não foi passado nenhuma configuração como parametro então deve esperar ok do usuário
                    if (!ConfirmarTransferencia(transferSection))
                    {
                        return;
                    }
                }

                var tempoProcesso = new Stopwatch();
                var tempoEtapa    = new Stopwatch();

                foreach (TransfersElement item in transferSection.Transfers)
                {
                    //local de armazenamento do log de execução
                    _fileName = Path.Combine(path, string.Format("{0}_{1}.txt", item.Name, DateTime.Now.ToString("yyyyMMdd")));
                    if (!item.Disabled)
                    {
                        tempoProcesso.Restart();
                        EscreverLogInfo(item);
                        _transfer = new DataTransfer(item.ConnectionSource, item.ConnectionTarget);
                        if (_transfer.Conectado)
                        {
                            EscreverLogLinha('=');
                            EscreverLog(string.Format("{0} BEGIN Transfer: {1} => {2}", DateTime.Now.ToString("dd.MM.yyyy"), _transfer.DatabaseOrigem, _transfer.DatabaseDestino), ConsoleColor.Blue, false);
                            EscreverLogLinha();

                            //setando parametros para execucao do bulk
                            var bulkConfig = new DataTransfer.BulkConfig
                            {
                                Options = SqlBulkCopyOptions.KeepIdentity
                            };

                            if (item.TableLock)
                            {
                                bulkConfig.Options |= SqlBulkCopyOptions.TableLock;
                            }
                            if (item.CheckConstraints)
                            {
                                bulkConfig.Options |= SqlBulkCopyOptions.CheckConstraints;
                            }
                            if (item.FireTriggers)
                            {
                                bulkConfig.Options |= SqlBulkCopyOptions.FireTriggers;
                            }

                            bulkConfig.CopyTimeout = item.BulkCopyTimeout;
                            bulkConfig.BatchSize   = item.BulkBatchSize;

                            IniciarTransferencia(item.Tables, bulkConfig);

                            /*
                             * var tasks = new Task[item.Tables.Count];
                             * for (int i = 0; i < tasks.Count(); i++)
                             * {
                             *  tasks[i] = new Task((object element) =>
                             *  {
                             *      IniciarTransferencia((TablesConfigurationElement)element);
                             *  },
                             *  item.Tables[i]);
                             * }
                             * Parallel.ForEach(tasks, (t) =>
                             * {
                             *  t.Start();
                             * });
                             * Task.WaitAll(tasks);
                             */

                            //_transfer.Reseed();
                            //EscreverMemo("Reseed Identitys: " + tempo.Elapsed.ToString());
                            //EscreverMemo(new String('-', 80) + Environment.NewLine);
                        }
                        else
                        {
                            EscreverLogErro("FALHA NA CONEXÃO, VERIFIQUE AS CONFIGURAÇÕES");
                        }
                        tempoProcesso.Stop();

                        EscreverLogLinha();
                        EscreverLog($"{DateTime.Now:dd.MM.yyyy} END Transfer. {tempoProcesso.Elapsed}", ConsoleColor.Blue, false);
                        EscreverLogLinha('=');
                    }
                }
            }
            catch (Exception ex)
            {
                EscreverLogErro(ex.Message);
            }
            finally
            {
                if (_transfer != null)
                {
                    _transfer.Disconnect();
                    _transfer = null;
                }
            }
            Console.Read();
        }