Aracılığıyla paylaş


Veritabanı kayıt defteri nedir?

Şunlar için geçerlidir: SQL Server 2022 (16.x) ve sonraki sürümleri Azure SQL VeritabanıAzure SQL Yönetilen Örneği

Veritabanı kayıt defteri, kayıt defteri özelliğinin bir parçasıdır. Veritabanı zaman içinde geliştikçe, güncellemeler kayıt defteri tablolarında gerçekleşirken veritabanı defteri veritabanının durumunu artımlı olarak kaydeder. Mantıksal olarak blok zinciri ve Merkle ağacı veri yapılarını kullanır.

Kayıt defteri tablosunu güncelleştiren tüm işlemlerin, geçmiş verileri korumak ve veritabanı kayıt defterinde yakalanan özetleri hesaplamak için bazı ek görevler gerçekleştirmesi gerekir. Özellikle, güncelleştirilen her satır için şunları yapmamız gerekir:

  • Geçmiş tablosunda satırın önceki sürümünü kalıcı hale döndürür.
  • İşlem kimliğini atayın ve uygun sistem sütunlarında kalıcı hale getirerek yeni bir sıra numarası oluşturun.
  • Bu işlem tarafından güncellenen tüm satırların karması hesaplanırken satır içeriğini seri hale getirip dahil edin.

Ledger bunu, kayıt defteri tablolarını hedefleyen tüm ekleme, güncelleştirme ve silme işlemlerinin Veri İşleme Dili (DML) sorgu planlarını genişleterek gerçekleştirir. İşlem kimliği ve yeni oluşturulan sıra numarası, satırın yeni sürümü için ayarlanır. Ardından sorgu planı operatörü, satır içeriğini seri hale getiren ve karmasını hesaplayan özel bir işlem yürütür. Bu işlem, bu hesap defteri tablosu için bu işlem tarafından güncelleştirilen tüm satır sürümlerinin karmalarını içeren ve işlem düzeyinde depolanan bir Merkle Ağacına eklenir. Ağacın kökü, bu kayıt defteri tablosunda bu işlem tarafından gerçekleştirilen tüm güncelleştirmeleri ve silmeleri temsil eder. İşlem birden çok tabloyu güncelleştirirse, her tablo için ayrı bir Merkle Ağacı korunur. Aşağıdaki şekilde, bir kayıt defteri tablosunun güncelleştirilmiş satır sürümlerini ve satırları serileştirmek için kullanılan biçimi depolayan bir Merkle Ağacı örneği gösterilmektedir. Her sütunun serileştirilmiş değeri dışında, satırdaki sütunların sayısı, tek tek sütunların sırası, veri türleri, uzunluklar ve değerlerin yorumlanma şeklini etkileyen diğer bilgilerle ilgili meta veriler içerir.

Bir kayıt defteri tablosunun güncelleştirilmiş satır sürümlerini ve satırları serileştirmek için kullanılan biçimi depolayan Merkle Ağacını gösteren diyagram

Veritabanının durumunu yakalamak için, veritabanı kayıt defteri her işlem için bir giriş depolar. İşleme zaman damgası ve bunu yürüten kullanıcının kimliği gibi işlemle ilgili meta verileri yakalar. Ayrıca her defter tablosunda güncellenen satırların Merkle ağacı kökünü de yakalar (yukarıya bakın). Daha sonra bu girdiler, gelecekte bütünlüğün doğrulanmasına olanak sağlamak için kurcalamaya karşı korumalı bir veri yapısına eklenir. Bir blok kapatılır:

Bir blok kapatıldığında, yeni işlemler yeni bir bloğa eklenir. Ardından blok oluşturma işlemi:

  1. Hem bellek içi kuyruktan hem de sys.database_ledger_transactions sistem kataloğu görünümünden kapalı bloğa ait tüm işlemleri alır.
  2. Merkle ağacı kökünü bu işlemler ve önceki bloğun karması üzerinden hesaplar.
  3. Sistem kataloğu görünümünde sys.database_ledger_blocks kapalı bloğu saklar.

Bu normal bir tablo güncelleştirmesi olduğundan sistem otomatik olarak dayanıklılığını garanti eder. Tek blok zincirini korumak için bu işlem tek iş parçacıklıdır. Ancak aynı zamanda verimlidir çünkü yalnızca işlem bilgileri üzerinden hash değerlerini hesaplar ve asenkron olarak gerçekleşir. İşlem performansını etkilemez.

Bir kayıt defteri tablosunun hareketlerini depolayan Merkle Ağacını gösteren diyagram.

Kayıt defterinin veri bütünlüğünü nasıl sağladığı hakkında daha fazla bilgi için Özet yönetimi ve Veritabanı doğrulaması makalelerine bakın.

Veritabanı işlemleri ve blok verileri nerede depolanır?

İşlemler ve bloklar için veriler fiziksel olarak iki sistem kataloğu görünümünde satır olarak depolanır:

  • sys.database_ledger_transactions: Veritabanı kayıt defterindeki her hareketin bilgilerini içeren bir satır tutar. Bilgiler, bu işlemin ait olduğu bloğun kimliğini ve bloğun içindeki işlemin sırasını içerir.
  • sys.database_ledger_blocks: Kayıt defterinde, her blok için, blok içindeki işlemler üzerinde bir Merkle ağacının kökünü ve blok zinciri oluşturmak için önceki bloğun karmasını içeren bir satır tutar.

Veritabanı kayıt defterini görüntülemek için SQL Server Management Studio'da veya SQL ServerGeliştirici Araçları'nda aşağıdaki T-SQL deyimlerini çalıştırın.

SELECT * FROM sys.database_ledger_transactions;
GO

SELECT * FROM sys.database_ledger_blocks;
GO

Aşağıdaki kayıt defteri tablosu örneği, veritabanı kayıt defterinin blok zincirinde bir blok oluşturan dört işlemden oluşur:

Örnek bir kayıt defteri tablosunun ekran görüntüsü.

Permissions

Veritabanı kayıt defterini görüntülemek için izin gerekir VIEW LEDGER CONTENT . Kayıt defteri tablolarıyla ilgili izinlerle ilgili ayrıntılar için bkz. İzinler.