コード例 #1
0
        public ActionResult Restore(RestoreDatabaseModel data)
        {


            ViewBag.RestorePermissionServerList = GetRestorePermissionServerList();
            ViewBag.ServersWithDefaultRecoveryToSimple = DatabaseServerSettings.Instance.DatabaseServerSettingsMap.Where(server => (bool)server.Value.GetSetting(DatabaseServerSettings.Setting.SetRecoveryModelToSimpleDefault)).Select(server => server.Key).ToList();


            if (!UserPermissions.Instance.UserSpecificPermissions[HttpContext.Request.LogonUserIdentity.Name.ToUpper()].RestoreToServerList.Contains(data.TargetDatabaseServer))
            {
                throw new Exception("You are unable to restore on this server.");
            }

            if (ModelState.IsValid)
            {
                var result = DatabaseContext.ValidateRestoreOperation(data.TargetDatabaseServer, data.TargetDatabaseName, HttpContext.Request.LogonUserIdentity.Name.ToUpper(), data.BackupType, decimal.Parse(data.FirstLSN), decimal.Parse(data.LastLSN), decimal.Parse(data.DatabaseBackupLSN));
                if (result.CanOverwrite.HasValue)
                {
                    if (result.CanOverwrite.Value)
                    {
                        ViewBag.WarningMessage = String.Format("Warning ! You already have a database/snapshot named [{0}] on server [{1}], please confirm if you wish to overwrite it.", data.TargetDatabaseName, data.TargetDatabaseServer);
                        if (data.LastWarningMessage != (string)ViewBag.WarningMessage)
                        {
                            data.LastWarningMessage = (string)ViewBag.WarningMessage;
                            return View("RestoreGetDetails", data);
                        }
                    }
                    else
                    {
                        ModelState.AddModelError("TargetDatabaseName ", "A database with specified Target Database Name already exists, please provide a different name.");
                        return View("RestoreGetDetails", data);
                    }
                }

                if (!String.IsNullOrEmpty(result.CustomErrorMessage))
                {
                    ModelState.AddModelError("TargetDatabaseName ", result.CustomErrorMessage);
                    return View("RestoreGetDetails", data);
                }
            }
            else
            {
                data.LastWarningMessage = null;
                return View("RestoreGetDetails", data);
            }


            IBgTask task = new RestoreDatabaseTask(data.TargetDatabaseServer, data.TargetDatabaseName, User.Identity.Name, data.BackupServerName, data.BackupDatabaseName, data.DatabaseComment, data.BackupFileList, data.RecoveryModelChangeToSimple, data.PositinInFileCollection, data.BackupType, data.RestoreWithRecovery);

            task.Start();
            TaskContainer.Instance.AddTask(task);

            return RedirectToAction("GetProgress", "Task", new { taskGuid = task.ID });

        }
コード例 #2
0
        public ActionResult RestoreGetDetails(RestoreDatabaseModel data)
        {
            List<SelectListItem> list = GetRestorePermissionServerList();
            ViewBag.RestorePermissionServerList = list;
            ViewBag.ServersWithDefaultRecoveryToSimple = DatabaseServerSettings.Instance.DatabaseServerSettingsMap.Where(server => (bool)server.Value.GetSetting(DatabaseServerSettings.Setting.SetRecoveryModelToSimpleDefault)).Select(server => server.Key).ToList();

            bool preselectedDatabaseServerChangeRecoveryToSimple = false;
            if (list.Count > 0)
            {
                preselectedDatabaseServerChangeRecoveryToSimple = (ViewBag.ServersWithDefaultRecoveryToSimple as List<string>).Contains(list.First().Value) ? true : false;
            }

            data.RecoveryModelChangeToSimple = preselectedDatabaseServerChangeRecoveryToSimple;
            data.RestoreWithRecovery = true;

            //clear any errors
            ModelState.Clear();
            return View(data);
        }