Tabel ledger yang dapat diperbarui

Berlaku untuk: SQL Server 2022 (16.x) Azure SQL DatabaseAzure SQL Managed Instance

Tabel ledger yang dapat diperbarui adalah tabel versi sistem tempat pengguna dapat melakukan pembaruan dan penghapusan sekaligus menyediakan kemampuan identifikasi perubahan data (temper-evidence). Saat pembaruan atau penghapusan terjadi, semua versi baris sebelumnya disimpan dalam tabel sekunder yang dikenal dengan tabel riwayat. Tabel riwayat mencerminkan skema tabel ledger yang dapat diperbarui. Saat suatu baris diperbarui, versi terbaru baris tersebut tetap berada di tabel ledger, sementara versi sebelumnya dimasukkan ke dalam tabel riwayat oleh sistem secara transparan ke aplikasi tersebut.

Tabel ledger yang dapat diperbarui dan tabel temporal adalah tabel versi sistem, di mana mesin database mengambil versi baris historis dalam tabel riwayat sekunder. Setiap teknologi tersebut memberikan keuntungan yang unik. Tabel ledger yang dapat diperbarui memungkinkan perubahan pada data saat ini dan data historis dapat diidentifikasi. Tabel temporal mendukung permintaan kueri ke data yang disimpan kapan saja, bukan hanya data yang benar pada saat ini saja. Anda dapat menggunakan kedua teknologi tersebut secara bersamaan dengan membuat tabel ledger yang dapat diperbarui sekaligus temporal.

Diagram that shows ledger table architecture.

Anda dapat membuat tabel ledger yang dapat diperbarui dengan menentukan LEDGER = ON argumen dalam pernyataan CREATE DATABASE (Transact-SQL) Anda.

Tip

LEDGER = ON bersifat opsional saat membuat tabel ledger yang dapat diperbarui dalam database ledger. Secara default, setiap tabel adalah tabel ledger yang dapat diperbarui dalam database ledger.

Untuk informasi mengenai opsi yang tersedia saat menyebutkan argumen LEDGER pada pernyataan T-SQL Anda, lihat BUAT TABEL (Transact-SQL).

Penting

Setelah tabel ledger dibuat, tabel tidak dapat dikembalikan ke tabel yang bukan merupakan tabel ledger. Oleh karena itu, penyerang tidak dapat menghapus kemampuan ledger secara sementara pada tabel ledger, membuat perubahan, dan kemudian mengaktifkan kembali fungsionalitas ledger.

Skema tabel ledger yang dapat diperbarui

Tabel ledger yang dapat diperbarui perlu memiliki kolom GENERATED ALWAYS berikut yang berisi metadata yang mencatat transaksi mana yang membuat perubahan pada tabel serta urutan operasi pembaruan baris oleh transaksi tersebut. Data ini berguna untuk tujuan forensik dalam memahami cara data dimasukkan seiring waktu.

Jika Anda tidak menyebutkan kolom GENERATED ALWAYS yang diperlukan untuk tabel ledger dan tabel riwayat ledger pada pernyataan BUAT TABEL (Transact-SQL), sistem akan secara otomatis menambahkan kolom dan menggunakan nama default berikut. Untuk informasi selengkapnya, lihat contoh di Membuat tabel ledger yang dapat diperbarui.

Nama kolom default Jenis data Deskripsi
ledger_start_transaction_id bigint ID transaksi yang membuat versi baris
ledger_end_transaction_id bigint ID transaksi yang menghapus versi baris
ledger_start_sequence_number bigint Nomor urut suatu operasi dalam suatu transaksi yang membuat versi baris
ledger_end_sequence_number bigint Nomor urut suatu operasi dalam suatu transaksi yang menghapus versi baris

Tabel riwayat

Tabel riwayat dibuat secara otomatis saat tabel ledger yang dapat diperbarui dibuat. Tabel riwayat mencatat nilai historis baris yang diubah karena pembaruan dan menghapusnya di tabel ledger yang dapat diperbarui. Skema tabel riwayat mencerminkan skema tabel ledger yang dapat diperbarui yang berkaitan.

Saat membuat tabel ledger yang dapat diperbarui, Anda dapat menyebutkan nama skema yang akan memuat tabel riwayat dan nama tabel riwayat atau meminta sistem menghasilkan nama tabel riwayat dan menambahkannya ke skema yang sama dengan tabel ledger. Tabel riwayat dengan nama yang dihasilkan sistem disebut tabel riwayat anonim. Konvensi penamaan untuk tabel riwayat anonim adalah <schema>.<updatableledgertablename>.MSSQL_LedgerHistoryFor_<GUID>.

Tampilan ledger

Untuk setiap tabel ledger yang dapat diperbarui, sistem secara otomatis menghasilkan tampilan yang disebut tampilan ledger. Tampilan ledger adalah gabungan dari tabel ledger yang dapat diperbarui dengan tabel riwayat terkait. Tampilan ledger melaporkan semua perubahan baris yang terjadi pada tabel ledger yang dapat diperbarui dengan menggabungkan data historis pada tabel riwayat. Tampilan ini memungkinkan pengguna, mitra mereka, atau auditor untuk menganalisis semua operasi historis dan mendeteksi potensi pengubahan data (tampering). Setiap operasi baris disertai dengan ID dari transaksi tindakan, sekaligus operasi tersebut adalah DELETE atau INSERT. Pengguna dapat mengambil lebih banyak informasi mengenai waktu pelaksanaan transaksi dan identitas pengguna yang melakukannya, serta menghubungkannya dengan operasi lain yang dilakukan oleh transaksi ini.

Misalnya, jika Anda ingin melacak riwayat transaksi untuk skenario perbankan, tampilan ledger memberikan kronik transaksi dari waktu ke waktu. Dengan menggunakan tampilan ledger, Anda tidak perlu melihat tabel ledger dan tabel riwayat yang dapat diperbarui secara independen atau membuat tampilan Anda sendiri untuk melakukannya.

Untuk contoh penggunaan tampilan ledger, lihat Membuat dan menggunakan tabel ledger yang dapat diperbarui.

Skema tampilan ledger mencerminkan kolum yang ditentukan dalam ledger yang dapat diperbarui dan tabel riwayat, namun kolom GENERATED ALWAYS berbeda dengan yang ada pada ledger yang dapat diperbarui maupun tabel riwayat.

Skema tampilan ledger

Catatan

Nama kolom tampilan ledger dapat diubah saat Anda membuat tabel menggunakan parameter <ledger_view_option> dengan pernyataan BUAT TABEL (Transact-SQL). Untuk mengetahui informasi selengkapnya, lihat opsi tampilan ledger dan contoh terkait dalam CREATE TABLE (Transact-SQL).

Nama kolom default Jenis data Deskripsi
ledger_transaction_id bigint ID transaksi yang membuat atau menghapus versi baris.
ledger_sequence_number bigint Jumlah urutan operasi tingkat baris di dalam transaksi pada tabel.
ledger_operation_type tinyint Berisi 1 (INSERT) atau 2 (DELETE). Memasukkan baris ke dalam tabel ledger akan menghasilkan baris baru pada tampilan ledger yang berisi 1 pada kolom ini. Menghapus baris dari tabel ledger akan menghasilkan baris baru pada tampilan ledger yang berisi 2 pada kolom ini. Memperbarui baris pada tabel ledger menghasilkan dua baris baru pada tampilan ledger. Satu baris berisi 2 (DELETE) dan baris lainnya berisi 1 (INSERT) pada kolom ini.
ledger_operation_type_desc nvarchar(128) Berisi INSERT atau DELETE. Untuk informasi selengkapnya, lihat baris sebelumnya.