पॉइंट में समय से नया डाटाबेस बनाने के लिए संभव Azure ARMs SqlManagementClient का उपयोग करके पुनरारंभ करें?




azure-sql-database azure-resource-manager (2)

विशेष रूप से एक नया डाटाबेस में बहाल करने के लिए एक समय के लिए बिंदु की तलाश में, मूल डेटाबेस को संरक्षित करें; REST API या टेम्पलेट के बजाय प्रबंधित API का उपयोग कर

मुझे अभी तक कोड है:

    public async Task CreateDatabaseFromRestorePointAsync(
       string resourceGroupName, string serverName, 
       string databaseName, DateTime time) {

        using (SqlManagementClient sqlMgmtClient = GetSqlManagementClient())
        {
            DatabaseInner myDb = await sqlMgmtClient.Databases.GetAsync(
               resourceGroupName, serverName, databaseName);            

            var newDb = new DatabaseInner
            {
                Location = myDb.Location,
                CreateMode = CreateMode.PointInTimeRestore,
                // RestorePointInTime = time; 
                Edition = "Basic",
                SourceDatabaseId = myDb.Id                   
            };

            var result = await sqlMgmtClient.Databases.CreateOrUpdateAsync(
               resourceGroupName, serverName, "BackUpRestoreTestDb", newDb);               

            // Throws "The point in time was not specified for restoring live database...'"
        }
    }

निम्नलिखित मिला:

और एक ही लिंक एक new Database बजाय एक new Database संदर्भ देता है डाटाबेस ऑब्जेक्ट्स नेमस्पेस खोज न करें

1 संपादित करें: विशेष रूप से ब्रैंडो झांग के जवाब से पुनर्स्थापना विधि की कोशिश की, लेकिन जाहिरा तौर पर नाम स्थान परिवर्तन होते हैं। मैं उपयोग कर रहा हूँ:

  • नेट 4.6.1

  • Microsoft.Azure.Management.Sql संस्करण 1.6.0- पूर्वावलोकन

  • Microsoft.Azure.Management.Sql.Models

  • Microsoft.Azure.Management.Sql.Fluent संस्करण 1.2.0

  • Microsoft.Azure.Management.Sql.Fluent.Models

DatabaseCreateOrUpdateParameters , DatabaseCreateOrUpdateProperties , DatabaseCreateMode , DatabaseCreateOrUpdateResponse लिए नामस्थान प्राप्त नहीं किया जा सका

SqlManagementClient दोनों ..sql और ..slq.fluent नामस्थानों में मौजूद है, जिसमें से दोनों के लिए नेमस्पेस नहीं मिलती है। sqlMgmtClient.Servers.Get(resourceGroupName, serverName).Server; में लाइन sqlMgmtClient.Servers.Get(resourceGroupName, serverName).Server;

नसीब के साथ माइक्रोसॉफ्ट के नीला प्रबंधन नामस्थान खोजे

लेकिन Google ने एक डोमेन एमएसडीएन साइट पर डाटाबेसक्रेट ऑरअपडेट पैरामीटर और इसके नेमस्पेस पाया, जो ऊपर से लिंक करता है।


आपके विवरण के अनुसार, मेरा सुझाव है कि आप इस नूगेट पैकेज का उपयोग करने की कोशिश कर सकते हैं।

माइक्रोसॉफ्ट Azure एसक्यूएल प्रबंधन पुस्तकालय

फिर आप पॉइंट इन टाइम रिस्टोर को प्राप्त करने के लिए नीचे कोड का उपयोग कर सकते हैं।

इस तरह कोड:

नोटिस, आपको रजिस्ट्रेशन की ज़रूरत है कि आप किरायेदार आईडी, आवेदन आईडी, गुप्तकी, प्राप्त करने के लिए आवेदन कर सकते हैं, तो प्रमाणन टोकन प्राप्त करने के लिए सदस्यता के साथ।

कैसे रजिस्टर करने के बारे में, आप इन कोड का संदर्भ ले सकते हैं:

मुख्य विधि:

        var subscriptionId = "subscriptionId ";
        var clientId = "clientId ";
        var tenantId = "tenantId ";
        var secretKey = "secretKey ";
        var azureSqlDatabase = "azureSqlDatabase ";
        var resourceGroup = "resourceGroup ";
        var azureSqlServer = "azureSqlServer "; 
        var databaseEdition = DatabaseEditions.Standard;
        var databasePerfLevel = "S1";

        SqlManagementClient sqlManagementClient = new SqlManagementClient(new Microsoft.Azure.TokenCloudCredentials(subscriptionId, GetAccessToken(tenantId, clientId, secretKey)));

        CreateOrUpdateDatabase(sqlManagementClient, resourceGroup, azureSqlServer, azureSqlDatabase, databaseEdition, databasePerfLevel);

प्राप्त ऑथ टोकन विधि:

    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;
    }

बहाल विधि:

    static DatabaseCreateOrUpdateResponse CreateOrUpdateDatabase(SqlManagementClient sqlMgmtClient, string resourceGroupName, string serverName, string databaseName, string databaseEdition, string databasePerfLevel)
    {
        // Retrieve the server that will host this database
        Server currentServer = sqlMgmtClient.Servers.Get(resourceGroupName, serverName).Server;

        // Create a database: configure create or update parameters and properties explicitly
        DatabaseCreateOrUpdateParameters newDatabaseParameters = new DatabaseCreateOrUpdateParameters()
        {
            Location = currentServer.Location,
            Properties = new DatabaseCreateOrUpdateProperties
            {
                CreateMode = DatabaseCreateMode.PointInTimeRestore,
                //DatabaseEditions.Standard;
                Edition = databaseEdition,
                SourceDatabaseId = "/subscriptions/{yoursubscriptionid}/resourceGroups/{yourgroupid}/providers/Microsoft.Sql/servers/{sqlservername}/databases/{sqldatabasename}",
                RestorePointInTime = DateTime.Parse("2017-09-22T02:32:08Z"),//Restore Point time
                //S1
                RequestedServiceObjectiveName = databasePerfLevel
            }
        };

        DatabaseCreateOrUpdateResponse dbResponse = sqlMgmtClient.Databases.CreateOrUpdate(resourceGroupName, serverName, databaseName, newDatabaseParameters);
        return dbResponse;
    }

परिणाम:


भ्रम यहाँ है क्योंकि 3 अलग एपीआई हैं:

  1. Microsoft.Azure.Management.Sql संस्करण <1.0
  2. Microsoft.Azure.Management.Sql संस्करण> = 1.0 (एपीआई संदर्भ: https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.sql?view=azure-dotnet )
  3. Microsoft.Azure.Management.Sql.Fluent , जो Microsoft.Azure.Management.Sql संस्करण> = 1.0 पर आधारित है और इसका उद्देश्य एक अधिक मानव-अनुकूल डिजाइन होना है लेकिन इसमें आधार के रूप में ज्यादा सुविधा नहीं है। SQL पुस्तकालय । (एपीआई संदर्भ: https://docs.microsoft.com/en-us/dotnet/api/microsoft.azure.management.sql.fluent?view=azure-dotnet )

ब्रैंडो का जवाब # 1 एपीआई के लिए है नए एपीआई (# 2) के लिए कोड को अपडेट करने के लिए, यह इस प्रकार दिखना चाहिए:

    // Create a database: configure create or update parameters and properties explicitly
    Database newDatabaseParameters = new Database()
    {
        Location = currentServer.Location,
        CreateMode = DatabaseCreateMode.PointInTimeRestore,
        Edition = databaseEdition,
        SourceDatabaseId = "/subscriptions/{yoursubscriptionid}/resourceGroups/{yourgroupid}/providers/Microsoft.Sql/servers/{sqlservername}/databases/{sqldatabasename}",
        RestorePointInTime = DateTime.Parse("2017-09-22T02:32:08Z"),//Restore Point time
    };

    Database db = sqlMgmtClient.Databases.CreateOrUpdate(resourceGroupName, serverName, databaseName, newDatabaseParameters);
    return db;

मुख्य अंतर हैं:

  1. अब DatabaseCreateOrUpdateParameters क्लाइंट ऑरअपडेट DatabaseCreateOrUpdateParameters , डेटाबेसक्रेट ऑरअपडेट DatabaseCreateOrUpdateParameters , डाटाबेसक्रेट ऑरअपडेट रेस्पॉन्स्पस जैसी अलग कक्षाएं नहीं हैं। सिर्फ एक क्लास Database
  2. Database गुणों को "चपटा" किया जाता है ताकि सेट करने के लिए कोई आंतरिक Properties हो।