/// <summary> /// Converts the response from the service to a powershell database object /// </summary> /// <param name="resourceGroupName">The resource group the server is in</param> /// <param name="serverName">The name of the Azure Sql Database Server</param> /// <param name="database">The service response</param> /// <returns>The converted model</returns> public static AzureSqlDatabaseModel CreateDatabaseModelFromResponse(string resourceGroup, string serverName, Management.Sql.Models.Database database) { AzureSqlDatabaseModel model = new AzureSqlDatabaseModel(); Guid id = Guid.Empty; DatabaseEdition edition = DatabaseEdition.None; model.ResourceGroupName = resourceGroup; model.ServerName = serverName; model.CollationName = database.Properties.Collation; model.CreationDate = database.Properties.CreationDate; model.CurrentServiceLevelObjectiveName = database.Properties.ServiceObjective; model.MaxSizeBytes = database.Properties.MaxSizeBytes; model.DatabaseName = database.Name; model.Status = database.Properties.Status; model.Tags = database.Tags as Dictionary <string, string>; model.ElasticPoolName = database.Properties.ElasticPoolName; model.Location = database.Location; Guid.TryParse(database.Properties.CurrentServiceObjectiveId, out id); model.CurrentServiceObjectiveId = id; Guid.TryParse(database.Properties.DatabaseId, out id); model.DatabaseId = id; Enum.TryParse <DatabaseEdition>(database.Properties.Edition, true, out edition); model.Edition = edition; Guid.TryParse(database.Properties.RequestedServiceObjectiveId, out id); model.RequestedServiceObjectiveId = id; return(model); }
/// <summary> /// Create the new database /// </summary> /// <param name="entity">The output of apply user input to model</param> /// <returns>The input entity</returns> protected override AzureSqlDatabaseCreateOrUpdateModel PersistChanges(AzureSqlDatabaseCreateOrUpdateModel entity) { // Use AutoRest Sdk AzureSqlDatabaseModel upsertedDatabase = ModelAdapter.UpsertDatabaseWithNewSdk(this.ResourceGroupName, this.ServerName, entity); return(new AzureSqlDatabaseCreateOrUpdateModel { Database = upsertedDatabase }); }
/// <summary> /// Send the restore request /// </summary> /// <returns>The list of entities</returns> protected override AzureSqlDatabaseModel GetEntity() { AzureSqlDatabaseModel model; DateTime restorePointInTime = DateTime.MinValue; string createMode; string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName); switch (ParameterSetName) { case FromPointInTimeBackupSetName: createMode = "PointInTimeRestore"; restorePointInTime = PointInTime; break; case FromDeletedDatabaseBackupSetName: createMode = "Restore"; restorePointInTime = PointInTime == DateTime.MinValue ? DeletionDate : PointInTime; break; case FromGeoBackupSetName: createMode = "Recovery"; break; case FromLongTermRetentionBackupSetName: createMode = "RestoreLongTermRetentionBackup"; break; default: throw new ArgumentException("No ParameterSet name"); } model = new AzureSqlDatabaseModel() { Location = location, ResourceGroupName = ResourceGroupName, ServerName = ServerName, DatabaseName = TargetDatabaseName, Edition = Edition, RequestedServiceObjectiveName = ServiceObjectiveName, ElasticPoolName = ElasticPoolName, CreateMode = createMode }; return(ModelAdapter.RestoreDatabase(this.ResourceGroupName, restorePointInTime, ResourceId, model)); }
/// <summary> /// Create the model from user input /// </summary> /// <param name="model">Model retrieved from service</param> /// <returns>The model that was passed in</returns> protected override AzureSqlDatabaseCreateOrUpdateModel ApplyUserInputToModel(AzureSqlDatabaseCreateOrUpdateModel model) { string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName); AzureSqlDatabaseCreateOrUpdateModel dbCreateUpdateModel = new AzureSqlDatabaseCreateOrUpdateModel(); AzureSqlDatabaseModel newDbModel = new AzureSqlDatabaseModel() { Location = location, ResourceGroupName = ResourceGroupName, ServerName = ServerName, CatalogCollation = CatalogCollation, CollationName = CollationName, DatabaseName = DatabaseName, MaxSizeBytes = MaxSizeBytes, Tags = TagsConversionHelper.CreateTagDictionary(Tags, validate: true), ElasticPoolName = ElasticPoolName, ReadScale = this.IsParameterBound(p => p.ReadScale) ? ReadScale : (DatabaseReadScale?)null, ZoneRedundant = this.IsParameterBound(p => p.ZoneRedundant) ? ZoneRedundant.ToBool() : (bool?)null, LicenseType = LicenseType, // note: default license type will be LicenseIncluded in SQL RP if not specified AutoPauseDelayInMinutes = this.IsParameterBound(p => p.AutoPauseDelayInMinutes) ? AutoPauseDelayInMinutes : (int?)null, MinimumCapacity = this.IsParameterBound(p => p.MinimumCapacity) ? MinimumCapacity : (double?)null, HighAvailabilityReplicaCount = this.IsParameterBound(p => p.HighAvailabilityReplicaCount) ? HighAvailabilityReplicaCount : (int?)null, RequestedBackupStorageRedundancy = BackupStorageRedundancy, SecondaryType = SecondaryType, MaintenanceConfigurationId = MaintenanceConfigurationId, EnableLedger = this.IsParameterBound(p => p.EnableLedger) ? EnableLedger.ToBool() : (bool?)null, }; if (ParameterSetName == DtuDatabaseParameterSet) { newDbModel.SkuName = string.IsNullOrWhiteSpace(RequestedServiceObjectiveName) ? AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition) : RequestedServiceObjectiveName; newDbModel.Edition = Edition; } else { newDbModel.SkuName = AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition, ComputeModel == DatabaseComputeModel.Serverless); newDbModel.Edition = Edition; newDbModel.Capacity = VCore; newDbModel.Family = ComputeGeneration; } dbCreateUpdateModel.Database = newDbModel; dbCreateUpdateModel.SampleName = SampleName; return(dbCreateUpdateModel); }
/// <summary> /// Create the model from user input /// </summary> /// <param name="model">Model retrieved from service</param> /// <returns>The model that was passed in</returns> protected override AzureSqlDatabaseCreateOrUpdateModel ApplyUserInputToModel(AzureSqlDatabaseCreateOrUpdateModel model) { string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName); AzureSqlDatabaseCreateOrUpdateModel dbCreateUpdateModel = new AzureSqlDatabaseCreateOrUpdateModel(); AzureSqlDatabaseModel newDbModel = new AzureSqlDatabaseModel() { Location = location, ResourceGroupName = ResourceGroupName, ServerName = ServerName, CatalogCollation = CatalogCollation, CollationName = CollationName, DatabaseName = DatabaseName, MaxSizeBytes = MaxSizeBytes, Tags = TagsConversionHelper.CreateTagDictionary(Tags, validate: true), ElasticPoolName = ElasticPoolName, ReadScale = ReadScale, ZoneRedundant = MyInvocation.BoundParameters.ContainsKey("ZoneRedundant") ? (bool?)ZoneRedundant.ToBool() : null, LicenseType = LicenseType, // note: default license type will be LicenseIncluded in SQL RP if not specified AutoPauseDelayInMinutes = MyInvocation.BoundParameters.ContainsKey("AutoPauseDelayInMinutes") ? AutoPauseDelayInMinutes : (int?)null, MinimumCapacity = MyInvocation.BoundParameters.ContainsKey("AutoPauseDelayInMinutes") ? MinimumCapacity : (double?)null, }; if (ParameterSetName == DtuDatabaseParameterSet) { newDbModel.SkuName = string.IsNullOrWhiteSpace(RequestedServiceObjectiveName) ? AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition) : RequestedServiceObjectiveName; newDbModel.Edition = Edition; } else { newDbModel.SkuName = AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition, ComputeModel == DatabaseComputeModel.Serverless); newDbModel.Edition = Edition; newDbModel.Capacity = VCore; newDbModel.Family = ComputeGeneration; } dbCreateUpdateModel.Database = newDbModel; dbCreateUpdateModel.SampleName = SampleName; return(dbCreateUpdateModel); }
/// <summary> /// Create the model from user input /// </summary> /// <param name="model">Model retrieved from service</param> /// <returns>The model that was passed in</returns> protected override AzureSqlDatabaseCreateOrUpdateModel ApplyUserInputToModel(AzureSqlDatabaseCreateOrUpdateModel model) { string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName); AzureSqlDatabaseCreateOrUpdateModel dbCreateUpdateModel = new AzureSqlDatabaseCreateOrUpdateModel(); AzureSqlDatabaseModel newDbModel = new AzureSqlDatabaseModel() { Location = location, ResourceGroupName = ResourceGroupName, ServerName = ServerName, CatalogCollation = CatalogCollation, CollationName = CollationName, DatabaseName = DatabaseName, MaxSizeBytes = MaxSizeBytes, Tags = TagsConversionHelper.CreateTagDictionary(Tags, validate: true), ElasticPoolName = ElasticPoolName, ReadScale = ReadScale, ZoneRedundant = MyInvocation.BoundParameters.ContainsKey("ZoneRedundant") ? (bool?)ZoneRedundant.ToBool() : null }; if (ParameterSetName == DtuDatabaseParameterSet) { newDbModel.SkuName = string.IsNullOrWhiteSpace(RequestedServiceObjectiveName) ? AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition) : RequestedServiceObjectiveName; newDbModel.Edition = Edition; } else { newDbModel.SkuName = AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition); newDbModel.Edition = Edition; newDbModel.Capacity = VCore; newDbModel.Family = ComputeGeneration; } dbCreateUpdateModel.Database = newDbModel; dbCreateUpdateModel.SampleName = SampleName; return(dbCreateUpdateModel); }
/// <summary> /// Send the restore request /// </summary> /// <returns>The list of entities</returns> protected override AzureSqlDatabaseModel GetEntity() { AzureSqlDatabaseModel model; DateTime restorePointInTime = DateTime.MinValue; string createMode; string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName); switch (ParameterSetName) { case FromPointInTimeBackupSetName: case FromPointInTimeBackupWithVcoreSetName: createMode = "PointInTimeRestore"; restorePointInTime = PointInTime; break; case FromDeletedDatabaseBackupSetName: case FromDeletedDatabaseBackupWithVcoreSetName: createMode = "Restore"; restorePointInTime = PointInTime == DateTime.MinValue ? DeletionDate : PointInTime; break; case FromGeoBackupSetName: case FromGeoBackupWithVcoreSetName: createMode = "Recovery"; break; case FromLongTermRetentionBackupSetName: case FromLongTermRetentionBackupWithVcoreSetName: createMode = "RestoreLongTermRetentionBackup"; break; default: throw new ArgumentException("No ParameterSet name"); } model = new AzureSqlDatabaseModel() { Location = location, ResourceGroupName = ResourceGroupName, ServerName = ServerName, DatabaseName = TargetDatabaseName, ElasticPoolName = ElasticPoolName, RequestedServiceObjectiveName = ServiceObjectiveName, Edition = Edition, CreateMode = createMode, LicenseType = LicenseType, RequestedBackupStorageRedundancy = BackupStorageRedundancy, Tags = TagsConversionHelper.CreateTagDictionary(Tag, validate: true), ZoneRedundant = this.IsParameterBound(p => p.ZoneRedundant) ? ZoneRedundant.ToBool() : (bool?)null, }; if (ParameterSetName == FromPointInTimeBackupWithVcoreSetName || ParameterSetName == FromDeletedDatabaseBackupWithVcoreSetName || ParameterSetName == FromGeoBackupWithVcoreSetName || ParameterSetName == FromLongTermRetentionBackupWithVcoreSetName) { string skuName = AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition); model.SkuName = skuName; model.Edition = Edition; model.Capacity = VCore; model.Family = ComputeGeneration; } else { model.SkuName = string.IsNullOrWhiteSpace(ServiceObjectiveName) ? AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition) : ServiceObjectiveName; model.Edition = Edition; } /// get auth headers for cross-sub and cross-tenant restore operations string targetSubscriptionId = ModelAdapter.Context?.Subscription.Id; string sourceSubscriptionId = ParseSourceSubscriptionIdFromResourceId(ResourceId); Dictionary <string, List <string> > auxAuthHeader = null; if (!string.IsNullOrEmpty(ResourceId) && targetSubscriptionId != sourceSubscriptionId) { List <string> resourceIds = new List <string>(); resourceIds.Add(ResourceId); var auxHeaderDictionary = GetAuxilaryAuthHeaderFromResourceIds(resourceIds); if (auxHeaderDictionary != null && auxHeaderDictionary.Count > 0) { auxAuthHeader = new Dictionary <string, List <string> >(auxHeaderDictionary); } } return(ModelAdapter.RestoreDatabase(this.ResourceGroupName, restorePointInTime, ResourceId, model, sourceSubscriptionId, auxAuthHeader)); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model) { DatabaseCreateOrUpdateParameters parameters = new DatabaseCreateOrUpdateParameters() { Location = model.Location, Properties = new DatabaseCreateOrUpdateProperties() { Edition = model.Edition == DatabaseEdition.None ? null : model.Edition.ToString(), RequestedServiceObjectiveId = model.RequestedServiceObjectiveId, ElasticPoolName = model.ElasticPoolName, RequestedServiceObjectiveName = model.RequestedServiceObjectiveName, SourceDatabaseId = resourceId, RecoveryServicesRecoveryPointResourceId = resourceId, RestorePointInTime = restorePointInTime, CreateMode = model.CreateMode } }; var resp = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, Util.GenerateTracingId(), parameters); return(AzureSqlDatabaseAdapter.CreateDatabaseModelFromResponse(resourceGroup, model.ServerName, resp)); }
/// <summary> /// Creates or updates an Azure Sql Database. /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="serverName">The name of the Azure Sql Database Server</param> /// <param name="model">The input parameters for the create/update operation</param> /// <returns>The upserted Azure Sql Database</returns> internal AzureSqlDatabaseModel UpsertDatabase(string resourceGroup, string serverName, AzureSqlDatabaseModel model) { var resp = Communicator.CreateOrUpdate(resourceGroup, serverName, model.DatabaseName, Util.GenerateTracingId(), new DatabaseCreateOrUpdateParameters() { Location = model.Location, Tags = model.Tags, Properties = new DatabaseCreateOrUpdateProperties() { Collation = model.CollationName, Edition = model.Edition == DatabaseEdition.None ? null : model.Edition.ToString(), MaxSizeBytes = model.MaxSizeBytes, RequestedServiceObjectiveId = model.RequestedServiceObjectiveId, ElasticPoolName = model.ElasticPoolName, RequestedServiceObjectiveName = model.RequestedServiceObjectiveName, ReadScale = model.ReadScale.ToString(), } }); return(CreateDatabaseModelFromResponse(resourceGroup, serverName, resp)); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model) { // Construct the ARM resource Id of the pool string elasticPoolId = string.IsNullOrWhiteSpace(model.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant( _subscription.Id, resourceGroup, model.ServerName, model.ElasticPoolName); // Restore database var dbModel = new Management.Sql.Models.Database() { Location = model.Location, CreateMode = model.CreateMode, RestorePointInTime = restorePointInTime, ElasticPoolId = elasticPoolId, Sku = string.IsNullOrWhiteSpace(model.SkuName) ? null : new Management.Sql.Models.Sku() { Name = model.SkuName, Tier = model.Edition, Family = model.Family, Capacity = model.Capacity }, LicenseType = model.LicenseType }; if (model.CreateMode.Equals(Management.Sql.Models.CreateMode.Recovery)) { dbModel.SourceDatabaseId = resourceId; dbModel.RecoverableDatabaseId = resourceId; dbModel.RecoveryServicesRecoveryPointId = resourceId; } else if (model.CreateMode.Equals(Management.Sql.Models.CreateMode.Restore)) { dbModel.RestorableDroppedDatabaseId = resourceId; dbModel.RecoveryServicesRecoveryPointId = resourceId; } else if (model.CreateMode.Equals(Management.Sql.Models.CreateMode.RestoreLongTermRetentionBackup) && resourceId.Contains("/providers/Microsoft.Sql")) { // LTR V2 dbModel.LongTermRetentionBackupResourceId = resourceId; dbModel.SourceDatabaseId = resourceId; } else { dbModel.SourceDatabaseId = resourceId; dbModel.RecoveryServicesRecoveryPointId = resourceId; } Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, dbModel); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); }
/// <summary> /// Send the restore request /// </summary> /// <returns>The list of entities</returns> protected override AzureSqlDatabaseModel GetEntity() { AzureSqlDatabaseModel model; DateTime restorePointInTime = DateTime.MinValue; string createMode; string location = ModelAdapter.GetServerLocation(ResourceGroupName, ServerName); switch (ParameterSetName) { case FromPointInTimeBackupSetName: case FromPointInTimeBackupWithVcoreSetName: createMode = "PointInTimeRestore"; restorePointInTime = PointInTime; break; case FromDeletedDatabaseBackupSetName: case FromDeletedDatabaseBackupWithVcoreSetName: createMode = "Restore"; restorePointInTime = PointInTime == DateTime.MinValue ? DeletionDate : PointInTime; break; case FromGeoBackupSetName: case FromGeoBackupWithVcoreSetName: createMode = "Recovery"; break; case FromLongTermRetentionBackupSetName: case FromLongTermRetentionBackupWithVcoreSetName: createMode = "RestoreLongTermRetentionBackup"; break; default: throw new ArgumentException("No ParameterSet name"); } model = new AzureSqlDatabaseModel() { Location = location, ResourceGroupName = ResourceGroupName, ServerName = ServerName, DatabaseName = TargetDatabaseName, ElasticPoolName = ElasticPoolName, RequestedServiceObjectiveName = ServiceObjectiveName, Edition = Edition, CreateMode = createMode, LicenseType = LicenseType }; if (ParameterSetName == FromPointInTimeBackupWithVcoreSetName || ParameterSetName == FromDeletedDatabaseBackupWithVcoreSetName || ParameterSetName == FromGeoBackupWithVcoreSetName || ParameterSetName == FromLongTermRetentionBackupWithVcoreSetName) { string skuName = AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition); model.SkuName = skuName; model.Edition = Edition; model.Capacity = VCore; model.Family = ComputeGeneration; } else { model.SkuName = string.IsNullOrWhiteSpace(ServiceObjectiveName) ? AzureSqlDatabaseAdapter.GetDatabaseSkuName(Edition) : ServiceObjectiveName; model.Edition = Edition; } return(ModelAdapter.RestoreDatabase(this.ResourceGroupName, restorePointInTime, ResourceId, model)); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model) { // Construct the ARM resource Id of the pool string elasticPoolId = string.IsNullOrWhiteSpace(model.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant( _subscription.Id, resourceGroup, model.ServerName, model.ElasticPoolName); // Restore database var dbModel = new Management.Sql.Models.Database() { Location = model.Location, CreateMode = model.CreateMode, RestorePointInTime = restorePointInTime, ElasticPoolId = elasticPoolId, Sku = string.IsNullOrWhiteSpace(model.SkuName) ? null : new Management.Sql.Models.Sku() { Name = model.SkuName, Tier = model.Edition, Family = model.Family, Capacity = model.Capacity }, LicenseType = model.LicenseType, StorageAccountType = MapExternalBackupStorageRedundancyToInternal(model.BackupStorageRedundancy), }; if (model.CreateMode == Management.Sql.Models.CreateMode.Recovery) { dbModel.RecoverableDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.Restore) { dbModel.RestorableDroppedDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.PointInTimeRestore) { dbModel.SourceDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.RestoreLongTermRetentionBackup) { dbModel.LongTermRetentionBackupResourceId = resourceId; } else { throw new ArgumentException("Restore mode not supported"); } Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, dbModel); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <param name="isCrossSubscriptionRestore">Is cross subscription restore</param> /// <param name="customHeaders">Custom headers</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model, bool isCrossSubscriptionRestore, Dictionary <string, List <string> > customHeaders = null) { // Construct the ARM resource Id of the pool string elasticPoolId = string.IsNullOrWhiteSpace(model.ElasticPoolName) ? null : AzureSqlDatabaseModel.PoolIdTemplate.FormatInvariant( _subscription.Id, resourceGroup, model.ServerName, model.ElasticPoolName); // Restore database var dbModel = new Management.Sql.Models.Database() { Location = model.Location, CreateMode = model.CreateMode, RestorePointInTime = restorePointInTime, ElasticPoolId = elasticPoolId, Sku = string.IsNullOrWhiteSpace(model.SkuName) ? null : new Management.Sql.Models.Sku() { Name = model.SkuName, Tier = model.Edition, Family = model.Family, Capacity = model.Capacity }, LicenseType = model.LicenseType, RequestedBackupStorageRedundancy = model.RequestedBackupStorageRedundancy, ZoneRedundant = model.ZoneRedundant, }; // check if restore operation is cross subscription or same subscription if (isCrossSubscriptionRestore) { // cross subscription path if (dbModel.CreateMode != Management.Sql.Models.CreateMode.Recovery && dbModel.CreateMode != Management.Sql.Models.CreateMode.Restore && dbModel.CreateMode != Management.Sql.Models.CreateMode.PointInTimeRestore) { throw new ArgumentException("Restore mode not supported for cross subscription restore. Supported restore modes for cross subscription are Recovery, Restore, PointInTimeRestore."); } dbModel.SourceResourceId = resourceId; } else { // same subscription path if (model.CreateMode == Management.Sql.Models.CreateMode.Recovery) { dbModel.RecoverableDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.Restore) { dbModel.RestorableDroppedDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.PointInTimeRestore) { dbModel.SourceDatabaseId = resourceId; } else if (model.CreateMode == Management.Sql.Models.CreateMode.RestoreLongTermRetentionBackup) { dbModel.LongTermRetentionBackupResourceId = resourceId; } else { throw new ArgumentException("Restore mode not supported"); } } Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, dbModel, customHeaders); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="serverName">The name of the Azure SQL Server</param> /// <param name="databaseName">The name of the Azure SQL database</param> /// <param name="parameters">Parameters describing the database restore request</param> /// <returns>Restored database object</returns> public Management.Sql.Models.Database RestoreDatabase(string resourceGroupName, string serverName, string databaseName, string resourceId, AzureSqlDatabaseModel model) { GenericResource resource = new GenericResource { Location = model.Location, Properties = new Dictionary <string, object> { { "LongTermRetentionBackupResourceId", resourceId }, { "CreateMode", model.CreateMode }, { "ElasticPoolName", model.ElasticPoolName }, } }; Sku sku = new Sku(); if (!string.IsNullOrWhiteSpace(model.RequestedServiceObjectiveName)) { sku.Name = model.RequestedServiceObjectiveName; } if (model.Edition != Database.Model.DatabaseEdition.None) { sku.Tier = model.Edition.ToString(); if (string.IsNullOrWhiteSpace(model.RequestedServiceObjectiveName)) { // If the customer only provided Edition, map to the default SLO. // switch (model.Edition) { case Database.Model.DatabaseEdition.Free: sku.Name = "Free"; break; case Database.Model.DatabaseEdition.Basic: sku.Name = "Basic"; break; case Database.Model.DatabaseEdition.Standard: sku.Name = "S0"; break; case Database.Model.DatabaseEdition.Premium: sku.Name = "P1"; break; case Database.Model.DatabaseEdition.PremiumRS: sku.Name = "PRS1"; break; case Database.Model.DatabaseEdition.DataWarehouse: sku.Name = "DW100"; break; case Database.Model.DatabaseEdition.Stretch: sku.Name = "DS100"; break; } } } if (!string.IsNullOrWhiteSpace(sku.Name) || !string.IsNullOrWhiteSpace(sku.Tier)) { resource.Sku = sku; } GenericResource database = GetCurrentResourcesClient().Resources.CreateOrUpdate(resourceGroupName, "Microsoft.Sql", string.Format("servers/{0}", serverName), "databases", databaseName, "2017-03-01-preview", resource); if (database != null) { return(GetCurrentSqlClient().Databases.Get(resourceGroupName, serverName, databaseName)); } else { return(null); } }
/// <summary> /// Restore a given Sql Azure Database /// </summary> /// <param name="resourceGroup">The name of the resource group</param> /// <param name="restorePointInTime">A point to time to restore to (for PITR and dropped DB restore)</param> /// <param name="resourceId">The resource ID of the DB to restore (live, geo backup, deleted database, long term retention backup, etc.)</param> /// <param name="model">An object modeling the database to create via restore</param> /// <returns>Restored database object</returns> internal AzureSqlDatabaseModel RestoreDatabase(string resourceGroup, DateTime restorePointInTime, string resourceId, AzureSqlDatabaseModel model) { if (model.CreateMode.Equals("RestoreLongTermRetentionBackup", StringComparison.OrdinalIgnoreCase) && CultureInfo.CurrentCulture.CompareInfo.IndexOf(resourceId, "/providers/Microsoft.Sql", CompareOptions.IgnoreCase) >= 0) { // LongTermRetentionV2 Restore // Management.Sql.Models.Database database = Communicator.RestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, resourceId, model); return(new AzureSqlDatabaseModel(resourceGroup, model.ServerName, database)); } else { DatabaseCreateOrUpdateParameters parameters = new DatabaseCreateOrUpdateParameters() { Location = model.Location, Properties = new DatabaseCreateOrUpdateProperties() { Edition = model.Edition == DatabaseEdition.None ? null : model.Edition.ToString(), RequestedServiceObjectiveId = model.RequestedServiceObjectiveId, ElasticPoolName = model.ElasticPoolName, RequestedServiceObjectiveName = model.RequestedServiceObjectiveName, SourceDatabaseId = resourceId, RecoveryServicesRecoveryPointResourceId = resourceId, RestorePointInTime = restorePointInTime, CreateMode = model.CreateMode } }; var resp = Communicator.LegacyRestoreDatabase(resourceGroup, model.ServerName, model.DatabaseName, parameters); return(AzureSqlDatabaseAdapter.CreateDatabaseModelFromResponse(resourceGroup, model.ServerName, resp)); } }