根据我的测试中,sql Microsoft Azure SQL Management Library 0.51.0-prerelease支持SQL数据库.bacpac文件直接导出到Azure存储。
我们可以使用sqlManagementClient.ImportExport.Export(resourceGroup, azureSqlServer, azureSqlDatabase,exportRequestParameters)
来导出。 bacpac文件天蓝色存储。
但是我们在最新版本的Microsoft Azure SQL Management Library SDK中找不到ImportExport。所以我们只能使用SQL Microsoft Azure SQL Management Library 0.51.0-prerelease SDK。
有关如何使用sql Microsoft Azure SQL Management Library将sql备份导出到azure blob存储的更多详细信息,请参阅下面的步骤和代码。
先决条件:
注册一个App在Azure的AD并为它创建的服务原则。有关如何注册表应用程序和获取访问令牌的更多详细步骤请参阅document。
详细代码:
注意:更换的clientId,tenantId,秘密密钥,subscriptionId您注册蔚蓝AD信息。将azureSqlDatabase,resourceGroup,azureSqlServer,adminLogin,adminPassword,storageKey,storageAccount替换为您自己的sql数据库和存储。
static void Main(string[] args)
{
var subscriptionId = "xxxxxxxx";
var clientId = "xxxxxxxxx";
var tenantId = "xxxxxxxx";
var secretKey = "xxxxx";
var azureSqlDatabase = "data base name";
var resourceGroup = "Resource Group name";
var azureSqlServer = "xxxxxxx"; //testsqlserver
var adminLogin = "user";
var adminPassword = "password";
var storageKey = "storage key";
var storageAccount = "storage account";
var baseStorageUri = $"https://{storageAccount}.blob.core.windows.net/brandotest/";//with container name endwith "/"
var backName = azureSqlDatabase + "-" + $"{DateTime.UtcNow:yyyyMMddHHmm}" + ".bacpac"; //back up sql file name
var backupUrl = baseStorageUri + backName;
ImportExportOperationStatusResponse exportStatus = new ImportExportOperationStatusResponse();
try
{
ExportRequestParameters exportRequestParameters = new ExportRequestParameters
{
AdministratorLogin = adminLogin,
AdministratorLoginPassword = adminPassword,
StorageKey = storageKey,
StorageKeyType = "StorageAccessKey",
StorageUri = new Uri(backupUrl)
};
SqlManagementClient sqlManagementClient = new SqlManagementClient(new Microsoft.Azure.TokenCloudCredentials(subscriptionId, GetAccessToken(tenantId, clientId, secretKey)));
var export = sqlManagementClient.ImportExport.Export(resourceGroup, azureSqlServer, azureSqlDatabase,
exportRequestParameters); //do export operation
while (exportStatus.Status != Microsoft.Azure.OperationStatus.Succeeded) // until operation successed
{
Thread.Sleep(1000 * 60);
exportStatus = sqlManagementClient.ImportExport.GetImportExportOperationStatus(export.OperationStatusLink);
}
Console.WriteLine($"Export DataBase {azureSqlDatabase} to Storage {storageAccount} Succesfully");
}
catch (Exception exception)
{
//todo
}
}
private static string GetAccessToken(string tenantId, string clientId, string secretKey)
{
var authenticationContext = new AuthenticationContext($"https://login.windows.net/{tenantId}");
var credential = new ClientCredential(clientId, secretKey);
var result = authenticationContext.AcquireTokenAsync("https://management.core.windows.net/",
credential);
if (result == null)
{
throw new InvalidOperationException("Failed to obtain the JWT token");
}
var token = result.Result.AccessToken;
return token;
}
结果是这样的:
1.Send要求告诉SQL服务器开始出口到蔚蓝的Blob存储
2.Continue发送请求到监控数据库中导出运行状态。
3.Finish导出操作。
博览会怎么样将其关联到本地文件,然后通过Azure存储数据移动库将文件上传到Blob存储? https://www.nuget.org/packages/Microsoft.Azure.Storage.DataMovement –