C# で Azure SQL Databaseの長期バックアップ保有期間を変更する

Azure.ResourceManager.Sql を使って、SQL Database の長期バックアップも設定できる。

www.nuget.org

毎月 1 回目のフルバックアップを 2 ヶ月保有するように変更するサンプルは次の通り。

using Azure.Identity;
using Azure.ResourceManager;
using Azure.ResourceManager.Sql;
using Azure.ResourceManager.Sql.Models;

const string subscriptionId = "サブスクリプション ID";
const string resourceGroupName = "リソースグループ名";
const string serverName = "Azure SQL Server リソース名";
const string databaseName = "データベース名";
const string monthlyRetention = "P2M"; // 2 か月保管

var armClient = new ArmClient(new DefaultAzureCredential());

var id = SqlDatabaseResource.CreateResourceIdentifier(
    subscriptionId: subscriptionId,
    resourceGroupName: resourceGroupName,
    serverName: serverName,
    databaseName: databaseName);
SqlDatabaseResource sqlDatabase = await armClient.GetSqlDatabaseResource(id).GetAsync();
Console.WriteLine(sqlDatabase.Data.Name);

LongTermRetentionPolicyResource policy = await sqlDatabase.GetLongTermRetentionPolicyAsync(
    new LongTermRetentionPolicyName("default"));
Console.WriteLine($"Name: {policy.Data.Name}");
Console.WriteLine($"WeeklyRetention: {policy.Data.WeeklyRetention}");
Console.WriteLine($"MonthlyRetention: {policy.Data.MonthlyRetention}");
Console.WriteLine($"WeekOfYear: {policy.Data.WeekOfYear}");
Console.WriteLine($"YearlyRetention: {policy.Data.YearlyRetention}");

if (policy.Data.MonthlyRetention != monthlyRetention)
{
    policy.Data.MonthlyRetention = monthlyRetention;
    // WeekOfYear は 1 以上 52 以下でないといけない
    if (policy.Data.WeekOfYear == 0)
    {
        policy.Data.WeekOfYear = 1;
    }

    var operation = await policy.UpdateAsync(
        Azure.WaitUntil.Completed,
        data: policy.Data);
    var response = await operation.WaitForCompletionAsync();
    policy = response.Value;
    Console.WriteLine($"Name: {policy.Data.Name}");
    Console.WriteLine($"WeeklyRetention: {policy.Data.WeeklyRetention}");
    Console.WriteLine($"MonthlyRetention: {policy.Data.MonthlyRetention}");
    Console.WriteLine($"WeekOfYear: {policy.Data.WeekOfYear}");
    Console.WriteLine($"YearlyRetention: {policy.Data.YearlyRetention}");
}

Console.ReadLine();