Pertimbangan dan batasan ledger
Berlaku untuk: SQL Server 2022 (16.x) Azure SQL Database Azure SQL Managed Instance
Ada beberapa pertimbangan dan batasan yang perlu diperhatikan saat bekerja dengan tabel ledger karena sifat penerapan versi sistem dan data yang tidak dapat diubah.
Pertimbangan dan batasan umum
Pertimbangkan hal berikut saat bekerja dengan ledger.
- Database ledger, database dengan properti ledger diatur ke aktif, tidak dapat dikonversi ke database biasa, dengan properti ledger diatur ke nonaktif.
- Pembuatan otomatis dan penyimpanan hash database saat ini tersedia di Azure SQL Database, tetapi tidak didukung di SQL Server.
- Manajemen hash otomatis dengan tabel ledger dengan menggunakan blob yang tidak dapat diubah Azure Storage tidak menawarkan kemampuan bagi pengguna untuk menggunakan akun penyimpanan redundan lokal (LRS ).
- Saat database ledger dibuat, semua tabel baru yang dibuat secara default (tanpa menentukan klausul
APPEND_ONLY = ON
) dalam database akan menjadi tabel ledger yang dapat diperbarui. Untuk membuat tabel ledger khusus tambahan, gunakanAPPEND_ONLY = ON
klausa dalam pernyataan CREATE TABLE (Transact-SQL). - Transaksi dapat memperbarui hingga 200 tabel ledger.
Pertimbangan dan batasan tabel ledger
- Tabel yang sudah ada dalam database yang bukan tabel ledger tidak dapat dikonversi ke tabel ledger. Untuk informasi selengkapnya, lihat Memigrasikan data dari tabel reguler ke tabel ledger.
- Setelah tabel ledger dibuat, tabel tidak dapat dikembalikan ke tabel yang bukan merupakan tabel ledger.
- Menghapus data yang lebih lama dalam tabel ledger khusus tambahan, atau tabel riwayat tabel ledger yang dapat diperbarui tidak didukung.
TRUNCATE TABLE
tidak didukung.- Saat sebuah tabel ledger yang dapat diperbarui dibuat, itu menambahkan empat kolom DIHASILKAN SELALU ke tabel ledger. Sebuah Tabel ledger khusus tambahan menambahkan dua kolom ke tabel ledger. Kolom baru ini dihitung terhadap jumlah kolom maksimum yang didukung di Azure SQL Database (1.024).
- Tabel dalam memori tidak didukung.
- Set kolom jarang tidak didukung.
- Partisi SWITCH IN/OUT tidak didukung.
- DBCC CLONEDATABASE tidak didukung.
- Tabel ledger tidak dapat memiliki indeks teks lengkap.
- Tabel ledger tidak boleh berupa tabel grafik.
- Tabel ledger tidak boleh FileTables.
- Tabel ledger tidak dapat memiliki indeks non-kluster rowstore saat memiliki indeks penyimpan kolom berkluster.
- Pelacakan perubahan tidak diizinkan pada tabel riwayat tetapi diizinkan pada tabel ledger.
- Mengubah pengambilan data tidak diperbolehkan pada tabel riwayat, tetapi diizinkan pada tabel ledger.
- Replikasi transaksional tidak didukung untuk tabel ledger.
- Pencerminan database tidak didukung.
- Azure Synapse Link didukung tetapi hanya untuk tabel ledger, bukan tabel riwayat.
- Ubah jalur hash secara manual setelah pemulihan asli cadangan database ke Azure SQL Managed Instance.
- Ubah jalur hash secara manual setelah tautan Instans Terkelola dibuat ke Azure SQL Managed Instance.
- Sinkronisasi Data SQL tidak didukung dengan tabel ledger.
Jenis data yang tidak didukung
- XML
- SqlVariant
- Jenis data yang ditentukan pengguna
- FILESTREAM
Batasan tabel temporal
Tabel ledger yang dapat diperbarui didasarkan pada teknologi tabel temporal dan mewarisi sebagian besar batasan tetapi tidak semuanya. Di bawah ini adalah daftar batasan yang diwarisi dari tabel temporal.
- Jika nama tabel riwayat ditentukan selama pembuatan tabel riwayat, Anda harus menentukan skema dan nama tabel dan juga nama tampilan ledger.
- Secara default, tabel riwayat dikompresi HALAMAN.
- Jika tabel saat ini dipartisi, tabel riwayat dibuat pada grup file default karena konfigurasi partisi tidak direplikasi secara otomatis dari tabel saat ini ke tabel riwayat.
- Tabel temporal dan riwayat tidak dapat berupa FILETABLE dan dapat berisi kolom jenis data apa pun yang didukung selain FILESTREAM. FILETABLE dan FILESTREAM memungkinkan manipulasi data di luar SQL Server, dan dengan demikian penerapan versi sistem tidak dapat dijamin.
- Simpul atau tabel tepi tidak dapat dibuat sebagai atau diubah ke tabel temporal. Grafik tidak didukung dengan ledger.
- Sementara tabel temporal mendukung jenis data blob, seperti
(n)varchar(max)
, ,varbinary(max)
(n)text
, danimage
, tabel tersebut akan dikenakan biaya penyimpanan yang signifikan dan memiliki implikasi performa karena ukurannya. Dengan demikian, saat merancang sistem Anda, perawatan harus dilakukan saat menggunakan jenis data ini. - Tabel riwayat harus dibuat dalam database yang sama dengan tabel saat ini. Kueri temporal melalui Server Tertaut tidak didukung.
- Tabel riwayat tidak boleh memiliki batasan (Kunci Primer, Kunci Asing, tabel, atau batasan kolom).
- Opsi online (
WITH (ONLINE = ON
) tidak berpengaruh dalamALTER TABLE ALTER COLUMN
kasus tabel temporal versi sistem.ALTER COLUMN
tidak dilakukan sebagai online terlepas dari nilai mana yang ditentukan untuk opsi tersebutONLINE
. INSERT
danUPDATE
pernyataan tidak dapat mereferensikan kolom GENERATED ALWAYS . Upaya untuk menyisipkan nilai langsung ke dalam kolom ini akan diblokir.UPDATETEXT
danWRITETEXT
tidak didukung.- Pemicu pada tabel riwayat tidak diizinkan.
- Penggunaan teknologi replikasi terbatas:
- Always On: Didukung penuh
- Rekam jepret, penggabungan, dan replikasi transaksional: Tidak didukung untuk tabel temporal
- Tabel riwayat tidak dapat dikonfigurasi sebagai tabel saat ini dalam rantai tabel riwayat.
- Objek atau properti berikut ini tidak direplikasi dari tabel saat ini ke tabel riwayat saat tabel riwayat dibuat:
- Definisi periode
- Definisi identitas
- Indeks
- Statistik
- Periksa batasan
- Pemicu
- Konfigurasi partisi
- Izin
- Predikat keamanan tingkat baris
Pertimbangan perubahan skema
Menambahkan kolom
Menambahkan kolom nullable didukung. Menambahkan kolom yang tidak dapat diubah ke null tidak didukung. Ledger dirancang untuk mengabaikan nilai NULL saat menghitung hash versi baris. Berdasarkan itu, ketika kolom nullable ditambahkan, ledger akan memodifikasi skema ledger dan tabel riwayat untuk menyertakan kolom baru, namun, ini tidak berdampak pada hash baris yang ada. Menambahkan kolom dalam tabel ledger diambil dalam sys.ledger_column_history.
Menghilangkan kolom dan tabel
Biasanya, menghilangkan kolom atau tabel sepenuhnya menghapus data yang mendasar dari database dan pada dasarnya tidak kompatibel dengan fungsionalitas ledger yang mengharuskan data tidak dapat diubah. Alih-alih menghapus data, ledger hanya mengganti nama objek yang dihilangkan sehingga dihapus secara logis dari skema pengguna, tetapi secara fisik tetap berada dalam database. Setiap kolom yang dihilangkan juga disembunyikan dari skema tabel ledger, sehingga tidak terlihat oleh aplikasi pengguna. Namun, data objek yang dihilangkan tersebut tetap tersedia untuk proses verifikasi ledger, dan memungkinkan pengguna untuk memeriksa data historis apa pun melalui tampilan ledger yang sesuai. Menghilangkan kolom dalam tabel ledger diambil dalam sys.ledger_column_history. Menjatuhkan tabel ledger diambil dalam sys.ledger_table_history. Menghilangkan tabel ledger dan objek dependennya ditandai sebagai dihilangkan dalam tampilan katalog sistem dan diganti namanya:
- Tabel ledger yang dihilangkan ditandai sebagai dihilangkan oleh pengaturan
is_dropped_ledger_table
dalam sys.tables dan diganti namanya menggunakan format berikut:MSSQL_DroppedLedgerTable_<dropped_ledger_table_name>_<GUID>
. - Tabel riwayat yang dihilangkan untuk tabel ledger yang dapat diperbarui diganti namanya menggunakan format berikut:
MSSQL_DroppedLedgerHistory_<dropped_history_table_name>_<GUID>
. - Tampilan ledger yang dihilangkan ditandai sebagai dihilangkan oleh pengaturan
is_dropped_ledger_view
dalam sys.views dan diganti namanya menggunakan format berikut:MSSQL_DroppedLedgerView_<dropped_ledger_view_name>_<GUID>
.
Catatan
Nama tabel ledger yang dihilangkan, tabel riwayat, dan tampilan ledger mungkin dipotong jika panjang tabel atau tampilan yang diganti namanya melebihi 128 karakter.
Mengubah Kolom
Setiap perubahan yang tidak berdampak pada data yang mendasar dari tabel ledger didukung tanpa penanganan khusus karena tidak memengaruhi hash yang diambil dalam ledger. Berbagai perubahan ini meliputi:
- Mengubah nullability
- Kolas untuk untai (karakter) Unicode
- Panjang kolom panjang variabel
Namun, operasi apa pun yang mungkin memengaruhi format data yang ada, seperti mengubah jenis data tidak didukung.