/// <summary> /// Retorna um objeto BackupDTO caso com os dados do ultimo backup realizado /// </summary> public BackupDTO GetLastBackup() { try { dbCommand = db.GetSqlStringCommand("SELECT * from backup order by 1 desc limit 1;"); using (IDataReader DR = db.ExecuteReader(dbCommand)) { BackupDTO tab = new BackupDTO(); if (DR.Read()) { tab.Id = int.Parse(DR["id"].ToString()); tab.Data = (DateTime)DR["data"]; tab.Hora = (TimeSpan)DR["hora"]; tab.Usuario = DR["usuario"].ToString(); tab.Maquina = DR["maquina"].ToString(); tab.Nomedados = DR["nomedados"].ToString(); tab.Nomeempresa = DR["nomeempresa"].ToString(); tab.Tamanho = int.Parse(DR["tamanho"].ToString()); tab.Versao = DR["versao"].ToString(); tab.Banco = DR["banco"].ToString(); } return(tab); } } catch (Exception) { throw; } }
/// <summary> /// Retorna uma lista de objetos BackupDTO caso a instrução seja bem sucedida. /// </summary> public List <BackupDTO> GetGridBackup() { try { dbCommand = db.GetStoredProcCommand("GetGridBackup"); using (IDataReader DR = (Transaction == null ? db.ExecuteReader(dbCommand) : db.ExecuteReader(dbCommand, Transaction))) { List <BackupDTO> List = new List <BackupDTO>(); while (DR.Read()) { BackupDTO tab = new BackupDTO(); tab.Id = int.Parse(DR["id"].ToString()); tab.Data = (DateTime)DR["data"]; tab.Hora = (TimeSpan)DR["hora"]; tab.Usuario = DR["usuario"].ToString(); tab.Maquina = DR["maquina"].ToString(); tab.Nomedados = DR["nomedados"].ToString(); tab.Nomeempresa = DR["nomeempresa"].ToString(); tab.Tamanho = int.Parse(DR["tamanho"].ToString()); tab.Versao = DR["versao"].ToString(); tab.Banco = DR["banco"].ToString(); List.Add(tab); } return(List); } } catch (Exception) { throw; } }
/// <summary> /// Retorna um objeto BackupDTO caso a instrução seja bem sucedida. /// </summary> public BackupDTO GetBackup(int id) { try { dbCommand = db.GetStoredProcCommand("GetBackup"); db.AddInParameter(dbCommand, "@id", DbType.Int32, id); using (IDataReader DR = (Transaction == null ? db.ExecuteReader(dbCommand) : db.ExecuteReader(dbCommand, Transaction))) { DR.Read(); BackupDTO tab = new BackupDTO(); tab.Id = int.Parse(DR["id"].ToString()); tab.Data = (DateTime)DR["data"]; tab.Hora = (TimeSpan)DR["hora"]; tab.Usuario = DR["usuario"].ToString(); tab.Maquina = DR["maquina"].ToString(); tab.Nomedados = DR["nomedados"].ToString(); tab.Nomeempresa = DR["nomeempresa"].ToString(); tab.Tamanho = int.Parse(DR["tamanho"].ToString()); tab.Versao = DR["versao"].ToString(); tab.Banco = DR["banco"].ToString(); return(tab); } } catch { throw; } }
/// <summary> /// Retorna um tipo VERDADEIRO caso a instrução seja bem sucedida. /// </summary> public bool Update(BackupDTO backup) { try { return(regrasdados.Update(backup)); } catch (Exception ex) { throw new FaultException(ex.Message); } }
/// <summary> /// Retorna o ID gerado pelo Banco de dados caso a instrução seja bem sucedida. /// </summary> public int Insert(BackupDTO backup) { try { return(regrasdados.Insert(backup)); } catch (Exception ex) { throw new FaultException(ex.Message); } }
/// <summary> /// Retorna o ID gerado pelo Banco de dados caso a instrução seja bem sucedida. /// </summary> public int Insert(BackupDTO backup) { DbConnection connection = null; bool transactionstart = false; try { using (connection = db.CreateConnection()) { connection.Open(); if (Transaction == null) { Transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); transactionstart = true; //db.ExecuteNonQuery(Transaction, CommandType.Text, "SELECT GravaLOG_App(3, 'Inserindo registro','" + MechTech.Util.Global.UsuarioAtivo + "');"); } dbCommand = db.GetSqlStringCommand(" INSERT INTO public.backup(" + " data," + " hora," + " usuario," + " maquina," + " nomedados," + " nomeempresa," + " tamanho," + " versao," + " banco" + ") VALUES (" + " @data," + " @hora," + " @usuario," + " @maquina," + " @nomedados," + " @nomeempresa," + " @tamanho," + " @versao," + " @banco);" + " SELECT currval('backup_id_seq');"); db.AddInParameter(dbCommand, "@data", DbType.Date, (DateTime?)backup.Data); db.AddInParameter(dbCommand, "@hora", DbType.Time, (TimeSpan)backup.Hora); db.AddInParameter(dbCommand, "@usuario", DbType.String, backup.Usuario); db.AddInParameter(dbCommand, "@maquina", DbType.String, backup.Maquina); db.AddInParameter(dbCommand, "@nomedados", DbType.String, backup.Nomedados); db.AddInParameter(dbCommand, "@nomeempresa", DbType.String, backup.Nomeempresa); db.AddInParameter(dbCommand, "@tamanho", DbType.Int32, backup.Tamanho); db.AddInParameter(dbCommand, "@versao", DbType.String, backup.Versao); db.AddInParameter(dbCommand, "@banco", DbType.String, backup.Banco); int id = Convert.ToInt32(db.ExecuteScalar(dbCommand, Transaction)); if (transactionstart) { Transaction.Commit(); Transaction = null; } connection.Close(); return(id); } } catch { if (transactionstart) { if (Transaction.Connection.State == ConnectionState.Open) { Transaction.Rollback(); } Transaction = null; } if (connection.State == ConnectionState.Open) { connection.Close(); } throw; } }
/// <summary> /// Retorna um tipo VERDADEIRO caso a instrução seja bem sucedida. /// </summary> public bool Update(BackupDTO backup) { DbConnection connection = null; bool transactionstart = false; try { using (connection = db.CreateConnection()) { connection.Open(); if (Transaction == null) { Transaction = connection.BeginTransaction(IsolationLevel.ReadCommitted); transactionstart = true; //db.ExecuteNonQuery(Transaction, CommandType.Text, "SELECT GravaLOG_App(3, 'Atualizando registro','" + MechTech.Util.Global.UsuarioAtivo + "');"); } dbCommand = db.GetSqlStringCommand(" UPDATE public.backup SET" + " data = @data," + " hora = @hora," + " usuario = @usuario," + " maquina = @maquina," + " nomedados = @nomedados," + " nomeempresa = @nomeempresa," + " tamanho = @tamanho," + " versao = @versao," + " banco = @banco" + " WHERE" + " id = @id"); db.AddInParameter(dbCommand, "@id", DbType.Int32, backup.Id); db.AddInParameter(dbCommand, "@data", DbType.Date, (DateTime?)backup.Data); db.AddInParameter(dbCommand, "@hora", DbType.Time, (TimeSpan)backup.Hora); db.AddInParameter(dbCommand, "@usuario", DbType.String, backup.Usuario); db.AddInParameter(dbCommand, "@maquina", DbType.String, backup.Maquina); db.AddInParameter(dbCommand, "@nomedados", DbType.String, backup.Nomedados); db.AddInParameter(dbCommand, "@nomeempresa", DbType.String, backup.Nomeempresa); db.AddInParameter(dbCommand, "@tamanho", DbType.Int32, backup.Tamanho); db.AddInParameter(dbCommand, "@versao", DbType.String, backup.Versao); db.AddInParameter(dbCommand, "@banco", DbType.String, backup.Banco); db.ExecuteNonQuery(dbCommand, Transaction); if (transactionstart) { Transaction.Commit(); Transaction = null; } connection.Close(); return(true); } } catch { if (transactionstart) { if (Transaction.Connection.State == ConnectionState.Open) { Transaction.Rollback(); } Transaction = null; } if (connection.State == ConnectionState.Open) { connection.Close(); } throw; } }
private void ExecutarBackup(BackgroundWorker status, DoWorkEventArgs e) { try { NotifyIconBackup.Visible = true; NotifyIconBackup.ShowBalloonTip(0, "Cópia de Segurança", "Processo de cópia de segurança em andamento.", ToolTipIcon.Info); int bkp = 0; string VersaoPostGres = string.Empty; string VersaoBanco = string.Empty; BackupDTO LstBackup = backupbo.GetLastBackup(); BackupDTO BackupResultado = new BackupDTO(); // VERIFICANDO O NÚMERO DO ÚLTIMO BACKUP REALIZADO if (LstBackup.Nomedados != "") { if (LstBackup.Nomedados.Substring(6, 1) == "" || LstBackup.Nomedados.Substring(6, 1) == "5") { bkp = 1; } else { bkp = int.Parse(LstBackup.Nomedados.Substring(6, 1)) + 1; } } else { bkp = 1; } // DADOS DE CONEXÃO PARA O PG_DUMP string[] tags = Global.ConnectionStringPg.Split(';'); //SERVIDOR string[] server = tags[0].Split('='); string Servidor = server[1]; //PORTA string[] port = tags[1].Split('='); string porta = port[1]; //BANCO DE DADOS string[] database = tags[2].Split('='); string BancoDados = database[1]; //USUARIO string[] user = tags[3].Split('='); string usuario = user[1]; //PWD string[] pwd = tags[4].Split('='); string Pwd = pwd[1]; // PEGANDO A VERSÃO DO BANCO DE DADOS try { VersaoBanco = databasestructureBO.GetVersion(); string[] version = VersaoBanco.Split(' '); VersaoPostGres = version[1].Substring(0, 1) + version[1].Substring(2, 1); } catch { } // VERIFICANDO E CRIANDO A PASTA DE ARMAZENAMENTO DO BACKUP if (!Directory.Exists(Global.LocalPath + @"\sistemas\MechTech")) { Directory.CreateDirectory(Global.LocalPath + @"\sistemas\MechTech"); } if (!Directory.Exists(Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString())) { Directory.CreateDirectory(Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString()); } // NOME DO ARQUIVO DE BACKUP CONFORME A VERSÃO DO POSTGRES if (VersaoPostGres.Substring(0, 1) != "7") { ArqDestino = string.Format(Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString() + "\\bkp000" + bkp + ".fc"); } else { ArqDestino = string.Format(Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString() + "\\bkp000" + bkp + ".sql"); } // CRIANDO ARQUIVO DE BAT FileInfo arquivo = new FileInfo(Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString() + "\\backup.bat"); if (arquivo.Exists) { arquivo.Delete(); } StreamWriter arquivoentrada = new StreamWriter(Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString() + "\\backup.bat"); //arquivoentrada.WriteLine("ECHO OFF"); arquivoentrada.WriteLine("@set PGPASSWORD="******"cls"); arquivoentrada.WriteLine("@Echo Processo de backup em execução. Aguarde..."); // ACIONANDO O PG_DUMP CONFORME A VERSÃO DO POSTGRES switch (VersaoPostGres) { case "93": //arquivoentrada.WriteLine("@" + Global.LocalPath + "\\sistemas\\" + Global.Sistema.ToString() + "\\postgres\\93\\pg_dump93.exe -U" + usuario + " -h" + Servidor + " -p" + porta + " -i -v -Fc -f" + ArqDestino + " " + BancoDados + " 2> " + ArqDestino + ".log"); arquivoentrada.WriteLine("@" + Global.LocalPath + "\\sistemas\\" + "MechTech" + "\\postgres\\93\\pg_dump93.exe -U" + usuario + " -h" + Servidor + " -p" + porta + " -i -v -Fc -f" + ArqDestino + " " + BancoDados + " 2> " + ArqDestino + ".log"); break; case "91": arquivoentrada.WriteLine("@" + Global.LocalPath + "\\sistemas\\" + Global.Sistema.ToString() + "\\postgres\\91\\pg_dump91.exe -U" + usuario + " -h" + Servidor + " -p" + porta + " -i -v -Fc -f" + ArqDestino + " " + BancoDados + " 2> " + ArqDestino + ".log"); break; case "90": arquivoentrada.WriteLine("@" + Global.LocalPath + "\\sistemas\\" + Global.Sistema.ToString() + "\\postgres\\90\\pg_dump90.exe -U" + usuario + " -h" + Servidor + " -p" + porta + " -i -v -Fc -f" + ArqDestino + " " + BancoDados + " 2> " + ArqDestino + ".log"); break; case "82": arquivoentrada.WriteLine("@" + Global.LocalPath + "\\sistemas\\" + Global.Sistema.ToString() + "\\postgres\\82\\pg_dump82.exe -U" + usuario + " -h" + Servidor + " -p" + porta + " -i -v -Fc -f" + ArqDestino + " " + BancoDados + " 2> " + ArqDestino + ".log"); break; case "81": arquivoentrada.WriteLine("@" + Global.LocalPath + "\\sistemas\\" + Global.Sistema.ToString() + "\\postgres\\82\\pg_dump81.exe -U" + usuario + " -h" + Servidor + " -p" + porta + " -i -v -Fc -f" + ArqDestino + " " + BancoDados + " 2> " + ArqDestino + ".log"); break; default: if (VersaoPostGres.Substring(0, 1) == "7") { arquivoentrada.WriteLine(Global.LocalPath + @"\\sistemas\\" + Global.Sistema.ToString() + "\\postgres\\82\\pg_dump7.exe -U" + usuario + " -h" + Servidor + " -p" + porta + " -i -v -f" + ArqDestino + " " + BancoDados + " 2> " + ArqDestino + ".log"); } break; } arquivoentrada.Close(); Process backup = new Process(); backup.StartInfo.FileName = Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString() + "\\backup.bat"; backup.StartInfo.WindowStyle = ProcessWindowStyle.Hidden; backup.StartInfo.Verb = "Open"; backup.StartInfo.CreateNoWindow = true; backup.Start(); backup.WaitForExit(); if (backup.ExitCode != 0) { arquivo.Delete(); ErroBackup.AppendLine("Falha na execução do Backup."); ErroBackup.AppendLine("Códido de retorno " + backup.ExitCode.ToString() + " recebido."); e.Result = "Código de saída " + backup.ExitCode; return; } arquivo = new FileInfo(Global.LocalPath + @"\sistemas\MechTech\" + Global.Sistema.ToString() + "\\backup.bat"); if (arquivo.Exists) { arquivo.Delete(); } // REGISTRANDO O BACKUP BackupResultado.Data = DateTime.Today; BackupResultado.Hora = new TimeSpan(DateTime.Now.Hour, DateTime.Now.Minute, 0); BackupResultado.Usuario = Global.UsuarioAtivo; BackupResultado.Maquina = Environment.MachineName; BackupResultado.Nomedados = "bkp000" + bkp; if (VersaoPostGres.Substring(0, 1) != "7") { BackupResultado.Nomeempresa = "bkp000" + bkp + ".fc"; } else { BackupResultado.Nomeempresa = "bkp000" + bkp + ".sql"; } FileInfo fi = new FileInfo(ArqDestino); BackupResultado.Tamanho = (int)fi.Length; BackupResultado.Versao = Global.VersaoSistema; BackupResultado.Banco = VersaoBanco.Substring(0, 50); backupbo.Insert(BackupResultado); if (backupbo.MonitoraBackup()) { while (BackupResultado.Versao.IndexOf(".") != -1) { BackupResultado.Versao = BackupResultado.Versao.Remove(BackupResultado.Versao.IndexOf("."), 1); } int filial = backupbo.GetFilialBackup(); //bool RegistroMW = backupbo.InsertMW(BackupResultado, Global.Sistema.ToString(), filial); //if (!RegistroMW) //{ // ErroBackup.AppendLine("Não foi possível registrar a execução do backup na MECHTECH"); // ErroBackup.AppendLine("Verifique se há uma conexão de internet disponível."); //} } } catch (Exception ex) { ErroBackup.AppendLine("Falha na execução do Backup."); ErroBackup.AppendLine(ex.Message); e.Result = ex.Message; } }