public void RestoreDB(DBConnectionInfo dbConnectionInfo, DBBackupFileType dbBackupFileType) { using (var dbConnection = _dbCommandsFactory.CreateDBConnection(dbConnectionInfo)) { using (var dbBackupRestoreCommands = _dbCommandsFactory.CreateDBBackupRestoreCommands(dbConnectionInfo)) { string dbTestsBaseLocation = Path.Combine(FileSystemPathUtils.CommonApplicationData, "AutoVersionsDB.IntegrationTests", "TestsDBs"); if (!Directory.Exists(dbTestsBaseLocation)) { Directory.CreateDirectory(dbTestsBaseLocation); } string filename = _dbBackupFilesProvider.GetDBBackupFilePath(dbBackupFileType, dbConnectionInfo.DBType); dbBackupRestoreCommands.RestoreDBFromBackup(filename, dbConnection.DataBaseName, dbTestsBaseLocation); } } }
public override void Execute(DBVersionsProcessContext processContext) { processContext.ThrowIfNull(nameof(processContext)); string timeStampStr = DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss", CultureInfo.InvariantCulture); string targetFileName; using (var dbCommands = _dbCommandsFactory.CreateDBCommand(processContext.ProjectConfig.DBConnectionInfo)) { targetFileName = $"bu_{ dbCommands.DataBaseName}_{timeStampStr}.bak"; } string targetFileFullPath = Path.Combine(processContext.ProjectConfig.BackupFolderPath, targetFileName); FileSystemPathUtils.ResloveFilePath(targetFileFullPath); //notificationExecutersProvider.SetStepStartManually(100, "Backup process"); using (var dbBackupStatusNotifyer = _dbCommandsFactory.CreateDBProcessStatusNotifyer(typeof(DBBackupStatusNotifyer), processContext.ProjectConfig.DBConnectionInfo).AsDisposable()) { //DBProcessStatusNotifyerBase dbBackupStatusNotifyer = _dbProcessStatusNotifyerFactory.Create(, dbQueryStatus.Instance) as DBBackupStatusNotifyer; List <ActionStepBase> internalSteps = new List <ActionStepBase>(); for (int internalStepNumber = 1; internalStepNumber <= 100; internalStepNumber++) { ExternalProcessStatusStep externalProcessStatusStep = new ExternalProcessStatusStep(internalStepNumber); internalSteps.Add(externalProcessStatusStep); } Exception processExpetion = null; dbBackupStatusNotifyer.Instance.Start( (precents) => { //notificationExecutersProvider.ForceStepProgress(Convert.ToInt32(precents)); foreach (ExternalProcessStatusStep step in internalSteps) { if (!step.IsCompleted) { step.SetProcessState((int)Math.Floor(precents), processExpetion); } } }); Task.Run(() => { try { using (var dbCommands = _dbCommandsFactory.CreateDBCommand(processContext.ProjectConfig.DBConnectionInfo)) { using (var dbBackupRestoreCommands = _dbCommandsFactory.CreateDBBackupRestoreCommands(processContext.ProjectConfig.DBConnectionInfo)) { dbBackupRestoreCommands.CreateDBBackup(targetFileFullPath, dbCommands.DataBaseName); foreach (ExternalProcessStatusStep step in internalSteps) { if (!step.IsCompleted) { step.SetProcessState(100, processExpetion); } } } } } catch (Exception ex) { processExpetion = ex; } }); ExecuteInternalSteps(internalSteps, false); dbBackupStatusNotifyer.Instance.Stop(); if (processExpetion != null) { throw processExpetion; //new Exception("CreateBackupStep", processExpetion); } processContext.DBBackupFileFullPath = targetFileFullPath; } }
public override void Execute(DBVersionsProcessContext processContext) { processContext.ThrowIfNull(nameof(processContext)); //notificationExecutersProvider.SetStepStartManually(100, "Restore process"); using (var dbRestoreStatusNotifyer = _dbCommandsFactory.CreateDBProcessStatusNotifyer(typeof(DBRestoreStatusNotifyer), processContext.ProjectConfig.DBConnectionInfo).AsDisposable()) { List <ActionStepBase> internalSteps = new List <ActionStepBase>(); for (int internalStepNumber = 1; internalStepNumber <= 100; internalStepNumber++) { ExternalProcessStatusStep externalProcessStatusStep = new ExternalProcessStatusStep(internalStepNumber); internalSteps.Add(externalProcessStatusStep); } Exception processExpetion = null; dbRestoreStatusNotifyer.Instance.Start((precents) => { // notificationExecutersProvider.ForceStepProgress(Convert.ToInt32(precents)); foreach (ExternalProcessStatusStep step in internalSteps) { if (!step.IsCompleted) { step.SetProcessState((int)Math.Floor(precents), processExpetion); } } }); Task.Run(() => { try { using (var dbCommands = _dbCommandsFactory.CreateDBCommand(processContext.ProjectConfig.DBConnectionInfo)) { using (var dbBackupRestoreCommands = _dbCommandsFactory.CreateDBBackupRestoreCommands(processContext.ProjectConfig.DBConnectionInfo)) { dbBackupRestoreCommands.RestoreDBFromBackup(processContext.DBBackupFileFullPath, dbCommands.DataBaseName); foreach (ExternalProcessStatusStep step in internalSteps) { if (!step.IsCompleted) { step.SetProcessState(100, processExpetion); } } } } } catch (Exception ex) { processExpetion = new NotificationProcessException(StepName, ex.Message, CoreTextResources.RestoreDBFailInstructionsMessage, NotificationErrorType.Error, ex); } }); ExecuteInternalSteps(internalSteps, true); dbRestoreStatusNotifyer.Instance.Stop(); } }