Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Berlaku untuk: SQL Server 2022 (16.x) dan versi
yang lebih baru Azure SQL Database
Azure SQL Managed Instance
Ledger database adalah bagian dari fitur ledger. Ledger database secara bertahap mencatat status database seiring database berkembang dari waktu ke waktu, sementara pembaruan terjadi pada tabel ledger. Secara logis, ini menggunakan blockchain dan struktur data pohon Merkle.
Setiap operasi yang memperbarui tabel ledger perlu melakukan beberapa tugas tambahan untuk menjaga data historis dan menghitung digest yang dicatat dalam ledger database. Secara khusus, untuk setiap baris yang diperbarui, kita harus:
- Simpan versi sebelumnya dari baris tersebut dalam tabel riwayat.
- Tetapkan ID transaksi dan buat nomor urutan baru, pertahankan di kolom sistem yang sesuai.
- Serialisasi konten baris dan sertakan saat menghitung hash untuk semua baris yang diperbarui oleh transaksi ini.
Ledger mewujudkannya dengan memperluas Data Manipulation Language (DML) rencana kueri untuk semua operasi penyisipan, pembaruan, dan penghapusan yang ditujukan ke tabel ledger. ID transaksi dan nomor sekuens yang baru dihasilkan ditetapkan pada versi baru baris tersebut. Kemudian, operator rencana kueri menjalankan ekspresi khusus yang menserialisasikan konten baris dan menghitung hashnya, menambahkannya ke Pohon Merkle yang disimpan di tingkat transaksi dan berisi hash semua versi baris yang diperbarui oleh transaksi ini untuk tabel ledger ini. Akar pohon mewakili semua pembaruan dan penghapusan yang dilakukan oleh transaksi ini dalam tabel ledger ini. Jika transaksi memperbarui beberapa tabel, Pohon Merkle terpisah dipertahankan untuk setiap tabel. Gambar di bawah ini menunjukkan contoh Pohon Merkle yang menyimpan versi baris yang diperbarui dari tabel ledger dan format yang digunakan untuk membuat serialisasi baris. Selain nilai yang diserialisasikan dari setiap kolom, kami menyertakan metadata mengenai jumlah kolom dalam baris, ordinal kolom individual, jenis data, panjang, dan informasi lainnya yang memengaruhi bagaimana nilai ditafsirkan.
Untuk merekam keadaan database, ledger database menyimpan entri untuk setiap transaksi. Basis data ledger tersebut mencatat metadata tentang transaksi, seperti stempel waktu commit dan identitas pengguna yang mengeksekusinya. Ini juga menangkap akar pohon Merkle dari baris yang diperbarui di setiap tabel ledger (lihat di atas). Entri-entri ini kemudian ditambahkan ke struktur data yang menunjukkan jika terjadi manipulasi agar integritasnya dapat diverifikasi di kemudian hari. Blok ditutup:
- Kira-kira setiap 30 detik, saat database Anda dikonfigurasi untuk penyimpanan ringkasan database otomatis
- Saat pengguna membuat digest database secara manual dengan menjalankan prosedur tersimpan sys.sp_generate_database_ledger_digest
- Ketika berisi transaksi 100K.
Saat blok ditutup, transaksi baru akan disisipkan dalam blok baru. Proses pembuatan blok kemudian:
- Mengambil semua transaksi yang termasuk dalam blok tertutup dari antrean dalam memori dan tampilan katalog sistem sys.database_ledger_transactions.
- Menghitung akar pohon Merkle atas transaksi ini dan hash dari blok sebelumnya.
- Mempertahankan blok tertutup dalam tampilan katalog sistem sys.database_ledger_blocks.
Karena ini adalah pembaruan tabel reguler, sistem secara otomatis menjamin durabilitasnya. Untuk mempertahankan rantai blok tunggal, operasi ini adalah operasi beralur tunggal (single-threaded). Namun, operasi ini tetap efisien karena hanya menghitung hash atas informasi transaksi dan terjadi secara asinkron. Operasi ini tidak memengaruhi performa transaksi.
Untuk informasi selengkapnya tentang bagaimana ledger menyediakan integritas data, lihat artikel Manajemen digest dan Verifikasi database.
Di mana transaksi database dan data blokir disimpan?
Data untuk transaksi dan blok disimpan secara fisik sebagai baris dalam dua tampilan katalog sistem:
- sys.database_ledger_transactions: Mempertahankan baris dengan informasi dari setiap transaksi dalam ledger database. Informasi termasuk ID blok tempat transaksi ini berada dan urutan transaksi di dalam blok.
- sys.database_ledger_blocks: Mempertahankan baris untuk setiap blok dalam ledger, termasuk akar pohon Merkle atas transaksi di dalam blok, dan hash blok sebelumnya untuk membentuk blockchain.
Untuk melihat ledger database, jalankan pernyataan T-SQL berikut di SQL Server Management Studio, atau SQL Server Developer Tools.
SELECT * FROM sys.database_ledger_transactions;
GO
SELECT * FROM sys.database_ledger_blocks;
GO
Di bawah ini adalah contoh tabel ledger yang memuat empat transaksi yang terdiri dari satu blok dalam blockchain ledger database:
Izin
Menampilkan ledger database memerlukan VIEW LEDGER CONTENT izin. Untuk detail tentang izin yang terkait dengan tabel ledger, lihat Izin.