private void BackUpFilteredDb(string copyDbName) { string targetNameForRar = string.Format("{0}{1}.bak", DiskOperations.DataTemp_ForBackUpDirectory, copyDbName); DiskOperations.AssertFileNotExist(targetNameForRar, Utility._Error_ExistTargetBackUpDb); SqlCommandRunner.BackUpDb(copyDbName, targetNameForRar); }
/// <summary> /// 分析Rar文件,并将Config解析为Rule与时间参数 /// </summary> /// <param name="theRarFile">rar文件的地址</param> /// <param name="fromDay">开始时间</param> /// <param name="toDay">结合时间</param> /// <param name="directory">解压缩的文件夹</param> /// <param name="needClean">分析结束是否需要清理解压缩的文件夹</param> /// <param name="remainRarFile">分析结束是否需要保留Rar文件</param> /// <returns>迁移规则</returns> public static TransferRule AnalyseRarData(string theRarFile, out DateTime?fromDay, out DateTime?toDay, string directory, bool needClean, bool remainRarFile) { //解压缩 CommandRunner.AssertIsRarFile(theRarFile); CommandRunner.UnRarFileToDirectory(theRarFile, DiskOperations.CorrectDirectory(directory), true); //分析config文件 string ruleString; Dictionary <string, string> theRuleStrings = new Dictionary <string, string>(); theRuleStrings.Add(ReadConfig(DiskOperations.CorrectDirectory(directory), out ruleString, out fromDay, out toDay), ruleString); List <TransferRule> allTransferRule = RuleConverter.Convert(theRuleStrings); if (allTransferRule.Count != 1) { throw new ApplicationException(Utility._Error_AnalyseRarData_Error); } if (needClean) { CommandRunner.CleanUpDirectory(DiskOperations.CorrectDirectory(directory)); } if (!remainRarFile) { CommandRunner.DeleteFile(theRarFile); } return(allTransferRule[0]); }
internal void RestoreData(DateTime?fromDay, DateTime?toDay, RestoreStatus theRuningStatusInSession) { //备份源数据库 TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}{1}", Utility._Process_BackUpDb, _DbName)); string targetName = string.Format("{0}{1}{2}.bak", DiskOperations.DbBackUp_ForRestoreDirectory, _DbName, Utility.GetTimeStamp()); SqlCommandRunner.BackUpDb(_DbName, targetName); //删减数据库备份 TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}", Utility._Process_DelNonuseDbBackUp)); theRuningStatusInSession.AddInformationLine(DiskOperations.DelFilesFromDirectory(DiskOperations.DbBackUp_ForRestoreDirectory, _DbName, targetName, _DefaultBackUpDbCount)); //拷贝下载的数据库用于数据还原 string copyDbName = _DbName + _ForRestoreCopyDbSuffix; string downLoadDbBackUpFullName = string.Format("{0}{1}{2}.bak", DiskOperations.DataTemp_ForRestoreDirectory, _DbName, _OrginCopyDbSuffix); TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}{1}", Utility._Process_CopyDb, copyDbName)); SqlCommandRunner.RestoreDbFromFile(copyDbName, DiskOperations.TempDirectory, downLoadDbBackUpFullName); //每一个表的数据还原 foreach (TableTransfer tt in _TablesToTransfer) { tt.RestoreData(fromDay, toDay, theRuningStatusInSession); } //删除无用的数据库拷贝 TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}{1}", Utility._Process_DelNonUseDb, copyDbName)); SqlCommandRunner.DeleteDb(copyDbName); }
public static void BackUpData(string ruleName, DateTime?fromDay, DateTime?toDay, BackUpStatus theRuningStatusInSession) { StartFlag(theRuningStatusInSession); try { //读入静态配置表 StartLittleProcess(theRuningStatusInSession, StaticConfigTable.ReadToTableToString()); StaticConfigTable.ReadToTable(); //准备所需文件夹 StartLittleProcess(theRuningStatusInSession, DiskOperations.PrepareForBackUpToString()); DiskOperations.PrepareForBackUp(); //检查Rar压缩器 StartLittleProcess(theRuningStatusInSession, CommandRunner.CheckRarReadyToString()); CommandRunner.CheckRarReady(); //配置日志对象 StartLittleProcess(theRuningStatusInSession, TransferDataLogManager.TryConfigLogObjToString()); TransferDataLogManager.TryConfigLogObj(); //根据规则起另外线程开始工作 StartLittleProcess(theRuningStatusInSession, RulesPool.FindRuleByNameToString()); //需要克隆的原因在于RulesPool是静态的,上次运行的对象会影响下次的运行 TransferRule tr = RulesPool.FindRuleByName(ruleName); BackUpProcess bup = StartBackUp; bup.BeginInvoke(tr.Clone() as TransferRule, fromDay, toDay, theRuningStatusInSession, null, null); } catch (ApplicationException ae) { FailedFlag(theRuningStatusInSession, ae.Message); } }
/// <summary> /// 读取Config,获取相应的规则字符串与调用参数 /// </summary> /// <param name="directoryWithConfigFile">默认配置存放的文件夹,里面应该存有默认的配置文件,入config.txt</param> /// <param name="ruleString">规则字符串</param> /// <param name="startTime">开始时间</param> /// <param name="endTime">结束时间</param> /// <returns>规则名字</returns> public static string ReadConfig(string directoryWithConfigFile, out string ruleString, out DateTime?startTime, out DateTime?endTime) { //读取所有配置字符串 string fullConfigName = DiskOperations.CorrectDirectory(directoryWithConfigFile) + _DefaultConfigName; List <string> readConfigs = DiskOperations.ReadLinesFromFile(fullConfigName); string theRuleNameString = FindLineContainsKey(readConfigs, _TransferRuleNameKey); string theRuleString = FindLineContainsKey(readConfigs, _TransferRuleKey); string theParameterString = FindLineContainsKey(readConfigs, _TransderParameterKey); //配对出参数,迁移名字以及迁移字符串 GetParameter(theParameterString, out startTime, out endTime); ruleString = theRuleString.Replace(_TransferRuleKey, string.Empty); return(theRuleNameString.Replace(_TransferRuleNameKey, string.Empty)); }
/// <summary> /// 拷贝文件至文件夹 /// </summary> public static void CopyToDirectory(string fromFile, string toDirectory) { if (!File.Exists(fromFile)) { throw new ApplicationException(string.Format("{0}{1}", Utility._Error_File_NotExist, fromFile)); } string fileName = fromFile.Substring(fromFile.LastIndexOf(@"\") + 1); string targetFile = string.Format("{0}{1}", DiskOperations.CorrectDirectory(toDirectory), fileName); if (File.Exists(targetFile)) { throw new ApplicationException(string.Format("{0}{1}", Utility._Error_File_Exist, targetFile)); } Copy(fromFile, toDirectory); }
public void BackUpData(DateTime?fromDay, DateTime?toDay, BackUpStatus theRuningStatusInSession) { try { //写入迁移配置文件 TransferService.StartLittleProcess(theRuningStatusInSession, TransferConfig.WriteConfigToString()); TransferConfig.WriteConfig(this, fromDay, toDay); //配置所有过滤器 TransferService.StartLittleProcess(theRuningStatusInSession, Utility._Process_ConfigFilter); ConfigAllRuleFitler(); //每个数据库执行操作 foreach (DbTransfer dt in _DbsToTransfer) { dt.BackUpData(fromDay, toDay, theRuningStatusInSession); } //打包下载文件 TransferService.StartLittleProcess(theRuningStatusInSession, Utility._Process_RarBackUpFile); string theBackUpSimpleName = string.Format("{0}{1}.rar", _DefaultBackUpDbName, Utility.GetTimeStamp()); string theBackUpFullPath = string.Format("{0}{1}", DiskOperations.DownLoadDirectory, theBackUpSimpleName); CommandRunner.RarDirectoryToFile(theBackUpFullPath, DiskOperations.DataTemp_ForBackUpDirectory); theRuningStatusInSession.SuccessFileName = theBackUpSimpleName; theRuningStatusInSession.SuccessFullFileName = theBackUpFullPath; //清理无用的数据 TransferService.StartLittleProcess(theRuningStatusInSession, Utility._Process_CleanNonUseData); CommandRunner.CleanUpDirectory(DiskOperations.DataTemp_ForBackUpDirectory); theRuningStatusInSession.AddInformationLine(DiskOperations.DelFilesFromDirectory(DiskOperations.DownLoadDirectory, _DefaultBackUpDbName, theBackUpFullPath, _DefaultDownloadFiles)); //成功运行 TransferService.SuccessFlag(theRuningStatusInSession); } catch (ApplicationException ae) { TryBackUpErrorClean(); TransferService.FailedFlag(theRuningStatusInSession, ae.Message); } catch (Exception e) { TryBackUpErrorClean(); TransferService.ErrorFlag(theRuningStatusInSession, e.Message); } }
/// <summary> /// 写入Config /// </summary> /// <param name="theRule">待写入的Rule</param> /// <param name="startTime">开始时间(方法参数)</param> /// <param name="endTime">结束时间(方法参数)</param> public static void WriteConfig(TransferRule theRule, DateTime?startTime, DateTime?endTime) { TransferRule _TransferRule = theRule; Utility.AssertNotNull(theRule, Utility._Error_TransferRule_NotNull); List <string> needWrite = new List <string>(); //写规则的名字 needWrite.Add(_TransferRuleNameKey + _TransferRule.RuleName); //写规则字符 needWrite.Add(_TransferRuleKey + _TransferRule.MakeString()); //写参数名字 needWrite.Add(_TransderParameterKey + MakeParameters(startTime, endTime)); string fullConfigName = DiskOperations.DataTemp_ForBackUpDirectory + _DefaultConfigName; DiskOperations.WriteLinesToFile(fullConfigName, needWrite); }
/// <summary> /// 清空文件夹,删除文件夹下所有文件(不递归) /// </summary> public static void CleanUpDirectory(string directory) { string theRightDirectory = DiskOperations.CorrectDirectory(directory); string command = string.Format("/c del \"{0}*\" /q", theRightDirectory); bool reslut; try { reslut = Run("cmd.exe", command, 20); } catch (Exception e) { throw new ApplicationException(string.Format("{0}{1},原因是:{2}", Utility._Error_CleanDirectory_Failed, theRightDirectory, e.Message)); } if (!reslut) { throw new ApplicationException(string.Format("{0}{1},原因是:超时(20秒内无响应)", Utility._Error_CleanDirectory_Failed, theRightDirectory)); } }
public static void RestoreData(string theRarFile, RestoreStatus theRuningStatusInSession) { StartFlag(theRuningStatusInSession); try { //读入静态配置表 StartLittleProcess(theRuningStatusInSession, StaticConfigTable.ReadToTableToString()); StaticConfigTable.ReadToTable(); //准备所需文件夹 StartLittleProcess(theRuningStatusInSession, DiskOperations.PrepareForRestoreToString()); DiskOperations.PrepareForRestore(); //检查Rar压缩器 StartLittleProcess(theRuningStatusInSession, CommandRunner.CheckRarReadyToString()); CommandRunner.CheckRarReady(); //配置日志对象 StartLittleProcess(theRuningStatusInSession, TransferDataLogManager.TryConfigLogObjToString()); TransferDataLogManager.TryConfigLogObj(); //解析Rar数据 StartLittleProcess(theRuningStatusInSession, TransferConfig.AnalyseRarDataToString()); DateTime? fromDay; DateTime? toDay; TransferRule theTransferRule = TransferConfig.AnalyseRarData(theRarFile, out fromDay, out toDay, DiskOperations.DataTemp_ForRestoreDirectory, false, false); //根据规则起另外线程开始工作 RestoreProcess rp = StartRestore; rp.BeginInvoke(theTransferRule, fromDay, toDay, theRuningStatusInSession, null, null); } catch (ApplicationException ae) { FailedFlag(theRuningStatusInSession, ae.Message); } }
internal void BackUpData(DateTime?fromDay, DateTime?toDay, RunningStatus theRuningStatusInSession) { //备份源数据库 TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}{1}", Utility._Process_BackUpDb, _DbName)); string targetName = string.Format("{0}{1}{2}.bak", DiskOperations.DbBackUp_ForBackUpDirectory, _DbName, Utility.GetTimeStamp()); SqlCommandRunner.BackUpDb(_DbName, targetName); //删减数据库备份 TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}", Utility._Process_DelNonuseDbBackUp)); theRuningStatusInSession.AddInformationLine(DiskOperations.DelFilesFromDirectory(DiskOperations.DbBackUp_ForBackUpDirectory, _DbName, targetName, _DefaultBackUpDbCount)); //拷贝数据库用于数据筛选 string copyDbName = _DbName + _OrginCopyDbSuffix; TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}{1}", Utility._Process_CopyDb, copyDbName)); SqlCommandRunner.RestoreDbFromFile(copyDbName, DiskOperations.TempDirectory, targetName); //删除无用的表 TransferService.StartLittleProcess(theRuningStatusInSession, Utility._Process_DelNonUseTable); theRuningStatusInSession.AddInformationLine(DropNonUseTable(copyDbName)); //有用表数据筛选 foreach (TableTransfer tt in _TablesToTransfer) { tt.BackUpData(fromDay, toDay, theRuningStatusInSession); } //将筛选完毕的数据库备份到指定地点用于打包压缩 TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}{1}", Utility._Process_BackUpFiltedTable, copyDbName)); BackUpFilteredDb(copyDbName); //删除无用的数据库拷贝 TransferService.StartLittleProcess(theRuningStatusInSession, string.Format("{0}{1}", Utility._Process_DelNonUseDb, copyDbName)); SqlCommandRunner.DeleteDb(copyDbName); }
internal void CheckDbBackUpExist() { string dbBackUpFullName = string.Format("{0}{1}{2}.bak", DiskOperations.DataTemp_ForRestoreDirectory, _DbName, _OrginCopyDbSuffix); DiskOperations.AssertFileExist(dbBackUpFullName, Utility._Error_ExistTargetBackUpDb); }
internal void Construct() { _TableFilter = string.IsNullOrEmpty(_TableFilterName) ? new NullTableFilter() : DiskOperations.CreateTableFilterObj(_TableFilterName); }
public static TransferRule AnalyseRarData(string theRarFile, out DateTime?fromDay, out DateTime?toDay) { StaticConfigTable.ReadToTable(); DiskOperations.PrepareForBackUp(); return(TransferConfig.AnalyseRarData(theRarFile, out fromDay, out toDay, DiskOperations.TempDirectory, true, true)); }