/// <summary> /// Creates a new export request /// </summary> /// <param name="exportRequest">Export request parameters</param> /// <returns>Operation response including the OperationStatusLink to get the operation status</returns> public AzureSqlDatabaseImportExportBaseModel Export(AzureSqlDatabaseImportExportBaseModel exportRequest) { ExportDatabaseDefinition parameters = new ExportDatabaseDefinition() { AdministratorLogin = exportRequest.AdministratorLogin, AdministratorLoginPassword = AzureSqlServerAdapter.Decrypt(exportRequest.AdministratorLoginPassword), StorageKey = exportRequest.StorageKey, StorageKeyType = exportRequest.StorageKeyType.ToString(), StorageUri = exportRequest.StorageUri.ToString() }; if (exportRequest.AuthenticationType != AuthenticationType.None) { parameters.AuthenticationType = exportRequest.AuthenticationType.ToString().ToLowerInvariant(); } Uri azureAsyncOperation = null; ImportExportOperationResult response; response = Communicator.BeginExport( exportRequest.ResourceGroupName, exportRequest.ServerName, exportRequest.DatabaseName, parameters, out azureAsyncOperation); return(CreateImportExportResponse(response, exportRequest, azureAsyncOperation)); }
/// <summary> /// Creates a new export request /// </summary> /// <param name="exportRequest">Export request parameters</param> /// <returns>Operation response including the OperationStatusLink to get the operation status</returns> public AzureSqlDatabaseImportExportBaseModel Export(AzureSqlDatabaseImportExportBaseModel exportRequest) { ExportDatabaseDefinition parameters = new ExportDatabaseDefinition() { AdministratorLogin = exportRequest.AdministratorLogin, AdministratorLoginPassword = AzureSqlServerAdapter.Decrypt(exportRequest.AdministratorLoginPassword), StorageKey = exportRequest.StorageKey, StorageKeyType = exportRequest.StorageKeyType.ToString(), StorageUri = exportRequest.StorageUri.ToString(), NetworkIsolation = null }; if (!string.IsNullOrEmpty(exportRequest.NetworkIsolationSettings.SqlServerResourceId) || !string.IsNullOrEmpty(exportRequest.NetworkIsolationSettings.StorageAccountResourceId)) { parameters.NetworkIsolation = new Management.Sql.Models.NetworkIsolationSettings() { SqlServerResourceId = exportRequest.NetworkIsolationSettings.SqlServerResourceId, StorageAccountResourceId = exportRequest.NetworkIsolationSettings.StorageAccountResourceId }; } if (exportRequest.AuthenticationType != AuthenticationType.None) { parameters.AuthenticationType = exportRequest.AuthenticationType.ToString().ToLowerInvariant(); } Uri azureAsyncOperation = null; ImportExportOperationResult response; response = Communicator.BeginExport( exportRequest.ResourceGroupName, exportRequest.ServerName, exportRequest.DatabaseName, parameters, out azureAsyncOperation); return(CreateImportExportResponse(response, exportRequest, azureAsyncOperation)); }
public void TestImportExport(bool preexistingDatabase, string testName, bool useNetworkIsolation) { using (SqlManagementTestContext context = new SqlManagementTestContext(this, testName)) { ResourceGroup resourceGroup = context.CreateResourceGroup(); Server server = context.CreateServer(resourceGroup); SqlManagementClient sqlClient = context.GetClient <SqlManagementClient>(); string storageAccountName = SqlManagementTestUtilities.GenerateName(prefix: "sqlcrudtest"); // Begin creating storage account and container Task <StorageContainerInfo> storageContainerTask = CreateStorageContainer(context, resourceGroup, storageAccountName); string login = SqlManagementTestUtilities.DefaultLogin; string password = SqlManagementTestUtilities.DefaultPassword; string dbName = SqlManagementTestUtilities.GenerateName(); string dbName2 = SqlManagementTestUtilities.GenerateName(); Dictionary <string, string> tags = new Dictionary <string, string>() { { "tagKey1", "TagValue1" } }; // set server firewall rule sqlClient.FirewallRules.CreateOrUpdate(resourceGroup.Name, server.Name, SqlManagementTestUtilities.GenerateName(), new FirewallRule() { StartIpAddress = "0.0.0.0", EndIpAddress = "255.255.255.255" }); // Create 1 or 2 databases sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName, new Database() { Location = server.Location }); if (preexistingDatabase) { sqlClient.Databases.CreateOrUpdate(resourceGroup.Name, server.Name, dbName2, new Database() { Location = server.Location }); // Verify existence of new database Assert.NotNull(sqlClient.Databases.Get(resourceGroup.Name, server.Name, dbName2)); } // Get Storage container credentials StorageContainerInfo storageContainerInfo = storageContainerTask.Result; string exportBacpacLink = string.Format( CultureInfo.InvariantCulture, "{0}/{1}.bacpac", storageContainerInfo.StorageContainerUri, dbName); string sqlServerResourceId = $"/subscriptions/{sqlClient.SubscriptionId}/resourceGroups/{resourceGroup.Name}/providers/Microsoft.Sql/servers/{server.Name}"; string storageAccountResourceId = $"/subscriptions/{sqlClient.SubscriptionId}/resourcegroups/{resourceGroup.Name}/providers/Microsoft.Storage/storageAccounts/{storageAccountName}"; var exportDatabaseDefinition = new ExportDatabaseDefinition() { AdministratorLogin = login, AdministratorLoginPassword = password, AuthenticationType = "SQL", StorageKey = storageContainerInfo.StorageAccountKey, StorageKeyType = StorageKeyType.StorageAccessKey.ToString(), StorageUri = exportBacpacLink }; if (useNetworkIsolation) { exportDatabaseDefinition.NetworkIsolation = new NetworkIsolationSettings() { SqlServerResourceId = sqlServerResourceId, StorageAccountResourceId = storageAccountResourceId }; } // Export database to bacpac sqlClient.Databases.Export(resourceGroup.Name, server.Name, dbName, exportDatabaseDefinition); // Import bacpac to new/existing database if (preexistingDatabase) { var importDatabaseDefinition = new ImportExistingDatabaseDefinition() { AdministratorLogin = login, AdministratorLoginPassword = password, AuthenticationType = "SQL", StorageKey = storageContainerInfo.StorageAccountKey, StorageKeyType = StorageKeyType.StorageAccessKey.ToString(), StorageUri = exportBacpacLink }; if (useNetworkIsolation) { importDatabaseDefinition.NetworkIsolation = new NetworkIsolationSettings() { SqlServerResourceId = sqlServerResourceId, StorageAccountResourceId = storageAccountResourceId }; } // Import bacpac to existing database sqlClient.Databases.ImportWithHttpMessagesAsync(resourceGroup.Name, server.Name, dbName2, importDatabaseDefinition).Wait(); } else { var importDatabaseDefinition = new ImportNewDatabaseDefinition() { AdministratorLogin = login, AdministratorLoginPassword = password, AuthenticationType = "SQL", StorageKey = storageContainerInfo.StorageAccountKey, StorageKeyType = StorageKeyType.StorageAccessKey.ToString(), StorageUri = exportBacpacLink, DatabaseName = dbName2, Edition = SqlTestConstants.DefaultDatabaseEdition, ServiceObjectiveName = ServiceObjectiveName.Basic, MaxSizeBytes = (2 * 1024L * 1024L * 1024L).ToString(), }; if (useNetworkIsolation) { importDatabaseDefinition.NetworkIsolation = new NetworkIsolationSettings() { SqlServerResourceId = sqlServerResourceId, StorageAccountResourceId = storageAccountResourceId }; } sqlClient.Servers.ImportDatabase(resourceGroup.Name, server.Name, importDatabaseDefinition); } } }
/// <summary> /// Creates new export request /// </summary> public ImportExportOperationResult BeginExport(string resourceGroupName, string serverName, string databaseName, ExportDatabaseDefinition parameters, out Uri operationStatusLink) { LastLocationHeader = null; LocationHeaderResetEvent.Reset(); ImportExportOperationResult result = GetCurrentSqlClient().Databases.BeginExport(resourceGroupName, serverName, databaseName, parameters); LocationHeaderResetEvent.WaitOne(3000); operationStatusLink = LastLocationHeader; return(result); }