Takipçi veritabanlarını kullanma

Takipçi veritabanı özelliği, Farklı bir kümede bulunan bir veritabanını Azure Veri Gezgini kümenize eklemenize olanak tanır. İzleyen veritabanısalt okunur modda eklendiğinden, verileri görüntülemeyi ve öncü veritabanına alınan veriler üzerinde sorgu çalıştırmayı mümkün hale getirir. Takip eden veritabanı, öncü veritabanlarındaki değişiklikleri eşitler. Eşitleme nedeniyle, veri kullanılabilirliği içinde birkaç saniye ile birkaç dakika arasında bir veri gecikmesi vardır. Gecikme süresi, öncü veritabanı meta verilerinin genel boyutuna bağlıdır. Öncü ve takipçi veritabanları, verileri getirmek için aynı depolama hesabını kullanır. Depolama, öncü veritabanına aittir. Takip eden veritabanı, verileri almaya gerek kalmadan görüntüler. Ekli veritabanı salt okunur bir veritabanı olduğundan, önbelleğe alma ilkesi, sorumlular ve izinler dışında veritabanındaki veriler, tablolar ve ilkeler değiştirilemez. Eklenen veritabanları silinemez. Öncü veya takip eden tarafından ayrılmaları gerekir ve ancak o zaman silinebilirler.

İzleme özelliğini kullanarak farklı bir kümeye veritabanı eklemek, kuruluşlar ve ekipler arasında veri paylaşmak için altyapı olarak kullanılır. Bu özellik, üretim ortamını üretim dışı kullanım örneklerinden korumak için işlem kaynaklarını ayırmada yararlıdır. Takip eden, Azure Veri Gezgini kümesinin maliyetini veriler üzerinde sorgu çalıştıran tarafla ilişkilendirmek için de kullanılabilir.

Önceki SDK sürümlerini temel alan kod örnekleri için arşivlenmiş makaleye bakın.

Hangi veritabanları takip edilir?

  • Bir küme bir veritabanını, birkaç veritabanını veya öncü kümenin tüm veritabanlarını izleyebilir.
  • Tek bir küme birden çok öncü kümeden veritabanlarını takip edebilir.
  • Küme hem takipçi veritabanlarını hem de öncü veritabanlarını içerebilir.

Önkoşullar

Veritabanı ekleme

Veritabanı eklemek için kullanabileceğiniz çeşitli yöntemler vardır. Bu makalede C#, Python, PowerShell veya Azure Resource Manager şablonu kullanarak veritabanı eklemeyi ele aacağız. Veritabanı eklemek için öncü kümede ve takipçi kümesinde en az katkıda bulunan rolüne sahip kullanıcı, grup, hizmet sorumlusu veya yönetilen kimliğe sahip olmanız gerekir. Azure portal, PowerShell, Azure CLI ve ARM şablonunu kullanarak rol atamaları ekleyin veya kaldırın. Azure rol tabanlı erişim denetimi (Azure RBAC) ve farklı roller hakkında daha fazla bilgi edinin.

Tablo düzeyinde paylaşım

Veritabanının tüm tabloları eklenirken dış tablolar ve gerçekleştirilmiş görünümler de izlenir. 'TableLevelSharingProperties' öğesini yapılandırarak belirli tabloları/dış tabloları/gerçekleştirilmiş görünümleri paylaşabilirsiniz.

'TableLevelSharingProperties' sekiz dize dizisi içerir: tablesToInclude, tablesToExclude, externalTablesToInclude, externalTablesToExclude, materializedViewsToInclude, materializedViewsToExclude, functionsToInclude, ve functionsToExclude. Tüm dizilerdeki en fazla girdi sayısı 100'dür.

Not

  • '*' tüm veritabanları gösterimi kullanılırken tablo düzeyinde paylaşım desteklenmez.
  • Gerçekleştirilmiş görünümler dahil edildiğinde, kaynak tabloları da eklenir.

Örnekler

  1. Tüm tabloları dahil edin. Tüm tablolar varsayılan olarak takip ettiğinden '*' gerekli değildir:

    tablesToInclude = []
    
  2. "Günlükler" ile başlayan adlara sahip tüm tabloları ekleyin:

    tablesToInclude = ["Logs*"]
    
  3. Tüm dış tabloları dışla:

    externalTablesToExclude = ["*"]
    
  4. Tüm gerçekleştirilmiş görünümleri hariç tut:

    materializedViewsToExclude=["*"]
    

Veritabanı adını geçersiz kılma

İsteğe bağlı olarak, takipçi kümesindeki veritabanı adını öncü kümeden farklı yapabilirsiniz. Örneğin, birden çok öncü kümeden aynı veritabanı adını bir takipçi kümesine eklemek isteyebilirsiniz. Farklı bir veritabanı adı belirtmek için 'DatabaseNameOverride' veya 'DatabaseNamePrefix' özelliğini yapılandırın.

C kullanarak veritabanı ekleme#

Gerekli NuGet paketleri

C# örneği

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "followerResourceGroup";
var followerClusterName = "follower";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfigurations = cluster.GetKustoAttachedDatabaseConfigurations();
var attachedDatabaseConfigurationName = "attachedDatabaseConfiguration"
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var leaderResourceGroup = "leaderResourceGroup";
var leaderClusterName = "leader";
var attachedDatabaseConfigurationData = new KustoAttachedDatabaseConfigurationData
{
    ClusterResourceId = new ResourceIdentifier($"/subscriptions/{leaderSubscriptionId}/resourceGroups/{leaderResourceGroup}/providers/Microsoft.Kusto/Clusters/{leaderClusterName}"),
    DatabaseName = "<databaseName>", // Can be a specific database name in a leader cluster or * for all databases
    DefaultPrincipalsModificationKind = KustoDatabaseDefaultPrincipalsModificationKind.Union,
    Location = AzureLocation.NorthCentralUS
};
// Table level sharing properties are not supported when using '*' all databases notation.
if (attachedDatabaseConfigurationData.DatabaseName != "*")
{
    // Set up the table level sharing properties - the following is just an example.
    attachedDatabaseConfigurationData.TableLevelSharingProperties = new KustoDatabaseTableLevelSharingProperties();
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToInclude.Add("table1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.TablesToExclude.Add("table2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToExclude.Add("exTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.ExternalTablesToInclude.Add("exTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToInclude.Add("matTable1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.MaterializedViewsToExclude.Add("matTable2");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToInclude.Add("func1");
    attachedDatabaseConfigurationData.TableLevelSharingProperties.FunctionsToExclude.Add("func2");
}
await attachedDatabaseConfigurations.CreateOrUpdateAsync(WaitUntil.Completed, attachedDatabaseConfigurationName, attachedDatabaseConfigurationData);

Veritabanının başarıyla eklendiğini doğrulayın

Veritabanının başarıyla eklendiğini doğrulamak için ekli veritabanlarınızı Azure portal bulun. Veritabanlarının takipçi veya öncü kümelere başarıyla eklendiğini doğrulayabilirsiniz.

Takipçi kümenizi denetleme

  1. Takipçi kümesine göz atın ve Veritabanları'nı seçin.

  2. Veritabanı listesinde yeni salt okunur veritabanlarını arayın.

    Portalda salt okunur takipçi veritabanlarının ekran görüntüsü.

    Bu listeyi veritabanı genel bakış sayfasında da görüntüleyebilirsiniz:

    İzleyici kümelerinin listesini içeren veritabanlarına genel bakış sayfasının ekran görüntüsü.

Öncü kümenizi denetleme

  1. Öncü kümeye gidin ve Veritabanları'nı seçin

  2. İlgili veritabanlarının BAŞKALARıYLA> PAYLAŞILDI olarak işaretlendiğini denetleyinEvet

  3. Ayrıntıları görüntülemek için ilişki bağlantısını değiştirin.

    Öncü kümeyi denetlemek için başkalarıyla paylaşılan veritabanlarının ekran görüntüsü.

    Bunu veritabanı genel bakış sayfasında da görüntüleyebilirsiniz:

    Başkalarıyla paylaşılan veritabanlarının listesini içeren genel bakışın ekran görüntüsü.

Takipçi veritabanını ayırma

Not

Bir veritabanını takip eden veya öncü tarafından ayırmak için, veritabanını ayırdığınız kümede en az katkıda bulunan rolüne sahip kullanıcı, grup, hizmet sorumlusu veya yönetilen kimliğe sahip olmanız gerekir. Aşağıdaki örnekte hizmet sorumlusunu kullanıyoruz.

C#** kullanarak ekli takipçi veritabanını takipçi kümesinden ayırma

Takipçi kümesi, bağlı olan herhangi bir takipçi veritabanını aşağıdaki gibi ayırabilir:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, followerSubscriptionId);
var followerResourceGroupName = "testrg";
//The cluster and database attached database configuration are created as part of the prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(followerResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(followerClusterName)).Value;
var attachedDatabaseConfiguration = (await cluster.GetKustoAttachedDatabaseConfigurationAsync(attachedDatabaseConfigurationsName)).Value;
await attachedDatabaseConfiguration.DeleteAsync(WaitUntil.Completed);

C kullanarak ekli takipçi veritabanını öncü kümeden ayırma#

Öncü küme, bağlı tüm veritabanlarını aşağıdaki gibi ayırabilir:

var tenantId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Directory (tenant) ID
var clientId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx"; //Application ID
var clientSecret = "PlaceholderClientSecret"; //Client Secret
var leaderSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var credentials = new ClientSecretCredential(tenantId, clientId, clientSecret);
var resourceManagementClient = new ArmClient(credentials, leaderSubscriptionId);
var leaderResourceGroupName = "testrg";
var leaderClusterName = "leader";
var subscription = await resourceManagementClient.GetDefaultSubscriptionAsync();
var resourceGroup = (await subscription.GetResourceGroupAsync(leaderResourceGroupName)).Value;
var cluster = (await resourceGroup.GetKustoClusterAsync(leaderClusterName)).Value;
var followerSubscriptionId = "xxxxxxxx-xxxxx-xxxx-xxxx-xxxxxxxxx";
var followerResourceGroupName = "followerResourceGroup";
//The cluster and attached database configuration that are created as part of the Prerequisites
var followerClusterName = "follower";
var attachedDatabaseConfigurationsName = "attachedDatabaseConfiguration";
var followerDatabaseDefinition = new KustoFollowerDatabaseDefinition(
    clusterResourceId: new ResourceIdentifier($"/subscriptions/{followerSubscriptionId}/resourceGroups/{followerResourceGroupName}/providers/Microsoft.Kusto/Clusters/{followerClusterName}"),
    attachedDatabaseConfigurationName: attachedDatabaseConfigurationsName
);
await cluster.DetachFollowerDatabasesAsync(WaitUntil.Completed, followerDatabaseDefinition);

Sorumluları, izinleri ve önbelleğe alma ilkesini yönetme

Sorumluları yönetme

Veritabanı eklerken "varsayılan sorumlu değiştirme türünü" belirtin. Varsayılan ayar geçersiz kılma yetkili sorumlularını yetkili sorumluların öncü veritabanı koleksiyonuyla birleştirmektir

Tip Açıklama
Birliği Eklenen veritabanı sorumluları her zaman özgün veritabanı sorumlularını ve takipçi veritabanına eklenen diğer yeni sorumluları içerir.
Değiştir Özgün veritabanından sorumlu devralma yok. Ekli veritabanı için yeni sorumlular oluşturulmalıdır.
Hiçbiri Eklenen veritabanı sorumluları yalnızca özgün veritabanının sorumlularını içerir ve başka sorumlu içermez.

Yetkili sorumluları yapılandırmak için yönetim komutlarını kullanma hakkında daha fazla bilgi için bkz. Bir takipçi kümesini yönetmek için yönetim komutları.

İzinleri yönetme

Salt okunur veritabanı iznini yönetmek, tüm veritabanı türleriyle aynıdır. İzinleri atamak için bkz. Azure portal veritabanı izinlerini yönetme veya yönetim komutlarını kullanarak Veritabanı güvenlik rollerini yönetme.

Önbelleğe alma ilkesini yapılandırma

Takip eden veritabanı yöneticisi, ekli veritabanının veya barındırma kümesindeki tablolarından herhangi birinin önbelleğe alma ilkesini değiştirebilir. Varsayılan ayar, öncü küme veritabanındaki kaynak veritabanını ve tablo düzeyinde önbelleğe alma ilkelerini veritabanında tanımlanan ilkelerle ve tablo düzeyinde geçersiz kılma ilkeleriyle birleştirmektir. Örneğin, öncü veritabanında aylık raporlamayı çalıştırmak için 30 günlük bir önbelleğe alma ilkesi ve sorun giderme için yalnızca son verileri sorgulamak üzere takip eden veritabanında üç günlük önbelleğe alma ilkesi kullanabilirsiniz. İzleme veritabanında veya tablosunda önbelleğe alma ilkesini yapılandırmak üzere yönetim komutlarını kullanma hakkında daha fazla bilgi için bkz. Takipçi kümesini yönetmek için yönetim komutları.

Notlar

  • Öncü/takip eden küme veritabanları arasında çakışmalar varsa, tüm veritabanlarının ardından takipçi kümesi geldiğinde, bunlar aşağıdaki gibi çözülür:
    • takipçi kümesinde oluşturulan DB adlı veritabanı, öncü kümede oluşturulan aynı ada sahip bir veritabanından önceliklidir. Bu nedenle, takip eden kümedeki veritabanı veritabanının , liderin veritabanı veritabanını içermesi için takipçi kümesi için kaldırılması veya yeniden adlandırılması gerekir.
    • İki veya daha fazla öncü kümeden takip edilen DB adlı veritabanı, öncü kümelerden birinden rastgele seçilir ve birden çok kez takip edilmeyecektir.
  • Bir takipçi kümesinde küme etkinlik günlüğünü ve geçmiş çalıştırmasını göstermeye yönelik komutlar, takipçi kümesindeki etkinliği ve geçmişi gösterir ve sonuç kümeleri öncü kümenin veya kümelerin sonuçlarını içermez.
    • Örneğin: takipçi kümesindeki bir .show queries komut çalıştırması yalnızca veritabanlarında çalıştırılan sorguları ve ardından takipçi kümesini gösterir; öncü kümedeki aynı veritabanında çalıştırılan sorguları göstermez.

Sınırlamalar

  • İzleyici ve öncü kümelerin aynı bölgede olması gerekir.
  • Takip edilen bir veritabanında Akış alımı kullanılıyorsa, akış alma verilerinin izlenmesine izin vermek için Akış Alımı için takipçi kümesinin etkinleştirilmesi gerekir.
  • Müşteri tarafından yönetilen anahtarlar (CMK) kullanılarak veri şifrelemesi ile bir kümenin takipi aşağıdaki sınırlamalarla desteklenir:
    • Ne takipçi kümesi ne de öncü küme diğer kümeleri takip ediyor.
    • Bir takipçi kümesi, CMK etkinleştirilmiş bir öncü kümeyi izliyorsa ve öncü'nün anahtara erişimi iptal edilirse, hem öncü hem de takipçi kümeleri askıya alınır. Bu durumda, CMK sorununu çözebilir ve ardından takipçi kümesini sürdürebilir veya takipçi veritabanlarını takipçi kümesinden ayırabilir ve öncü kümeden bağımsız olarak sürdürebilirsiniz.
  • Farklı bir kümeye bağlı veritabanını ayırmadan önce silemezsiniz.
  • Farklı bir kümeye bağlı veritabanı olan bir kümeyi ayırmadan önce silemezsiniz.
  • Tablo düzeyinde paylaşım özellikleri tüm veritabanları takip edildiğinde desteklenmez.
  • Takip eden veritabanlarında, kimlik doğrulama yöntemi olarak Yönetilen Kimlik kullanan dış tabloları sorgulamak için Yönetilen Kimlik'in takipçi kümesine eklenmesi gerekir. Öncü ve takipçi kümeleri farklı kiracılarda sağlandığında bu özellik çalışmaz.

Sonraki adım