Fix/restore options issues (#515)

* fixed the bug with tail log option

* fix the bug with the tail gate file name

* closing connections before restore
This commit is contained in:
Leila Lali
2017-10-25 10:22:03 -07:00
committed by GitHub
parent ed5b68bcf9
commit fc3cbe0a69
3 changed files with 35 additions and 17 deletions

View File

@@ -73,8 +73,8 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
private DatabaseRestorePlanner restorePlanner;
private string tailLogBackupFile;
private BackupSetsFilterInfo backupSetsFilterInfo = new BackupSetsFilterInfo();
private bool? isTailLogBackupPossible = false;
private bool? isTailLogBackupWithNoRecoveryPossible = false;
private bool? isTailLogBackupPossible = null;
private bool? isTailLogBackupWithNoRecoveryPossible = null;
private string backupMediaList = string.Empty;
private Server server;
@@ -520,6 +520,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
{
if (!isTailLogBackupPossible.HasValue)
{
//TODO: get the value from DatabaseRestorePlanner.IsTailLogBackupPossible
if (this.Server.Version.Major < 9 || String.IsNullOrEmpty(this.restorePlanner.DatabaseName))
{
isTailLogBackupPossible = false;
@@ -566,6 +567,7 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
{
if (!isTailLogBackupWithNoRecoveryPossible.HasValue)
{
//TODO: get the value from DatabaseRestorePlanner.IsTailLogBackupWithNoRecoveryPossible
string databaseName = this.RestorePlanner.DatabaseName;
if (!IsTailLogBackupPossible)
{
@@ -748,11 +750,6 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
{
string currentDatabaseName = this.RestorePlanner.DatabaseName;
this.RestorePlanner.DatabaseName = value;
if (string.Compare(currentDatabaseName, value, StringComparison.InvariantCultureIgnoreCase) != 0)
{
ResetOptions();
}
}
}
}
@@ -961,6 +958,10 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
this.RestorePlan = new RestorePlan(this.Server);
this.Util.AddCredentialNameForUrlBackupSet(this.RestorePlan, this.CredentialName);
}
else
{
ResetOptions();
}
}
public bool ShouldCreateNewPlan()

View File

@@ -8,6 +8,7 @@ using System.Collections.Generic;
using System.Data;
using Microsoft.SqlServer.Management.Sdk.Sfc;
using Microsoft.SqlServer.Management.Smo;
using System.Globalization;
namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
{
@@ -57,16 +58,13 @@ namespace Microsoft.SqlTools.ServiceLayer.DisasterRecovery.RestoreOperation
{
DateTime dt = DateTime.MinValue;
//TODO: the code is moved from ssms and used for restore differential backups
//Uncomment when restore operation for differential backups is supported
/*
string query = "SELECT GETDATE()";
DataSet dataset = this.server.ExecutionManager.ExecuteWithResults(query);
DataSet dataset = this.server.ExecutionManager.ConnectionContext.ExecuteWithResults(query);
if (dataset != null && dataset.Tables.Count > 0 && dataset.Tables[0].Rows.Count > 0)
{
dt = Convert.ToDateTime(dataset.Tables[0].Rows[0][0], SmoApplication.DefaultCulture);
dt = Convert.ToDateTime(dataset.Tables[0].Rows[0][0], CultureInfo.CurrentCulture);
}
*/
return dt;
}

View File

@@ -6,6 +6,7 @@
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlTools.ServiceLayer.Connection;
using Microsoft.SqlTools.Utility;
using System;
namespace Microsoft.SqlTools.ServiceLayer.TaskServices
{
@@ -83,20 +84,38 @@ namespace Microsoft.SqlTools.ServiceLayer.TaskServices
public bool GainAccessToDatabase()
{
bool result = false;
if (LockedDatabaseManager != null)
{
return LockedDatabaseManager.GainFullAccessToDatabase(ServerName, DatabaseName);
result = LockedDatabaseManager.GainFullAccessToDatabase(ServerName, DatabaseName);
}
return false;
if(result && SourceDatabas != null && string.Compare(DatabaseName , SourceDatabas, StringComparison.InvariantCultureIgnoreCase) != 0)
{
result = LockedDatabaseManager.GainFullAccessToDatabase(ServerName, SourceDatabas);
}
return result;
}
public bool ReleaseAccessToDatabase()
{
bool result = false;
if (LockedDatabaseManager != null)
{
return LockedDatabaseManager.ReleaseAccess(ServerName, DatabaseName);
result = LockedDatabaseManager.ReleaseAccess(ServerName, DatabaseName);
}
if (result && SourceDatabas != null && string.Compare(DatabaseName, SourceDatabas, StringComparison.InvariantCultureIgnoreCase) != 0)
{
result = LockedDatabaseManager.ReleaseAccess(ServerName, SourceDatabas);
}
return result;
}
private string SourceDatabas
{
get
{
return Server?.ConnectionContext.DatabaseName;
}
return false;
}
}
}