Bagikan melalui


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.

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, dan image, 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 dalam ALTER TABLE ALTER COLUMN kasus tabel temporal versi sistem. ALTER COLUMN tidak dilakukan sebagai online terlepas dari nilai mana yang ditentukan untuk opsi tersebut ONLINE .
  • INSERT dan UPDATE pernyataan tidak dapat mereferensikan kolom GENERATED ALWAYS . Upaya untuk menyisipkan nilai langsung ke dalam kolom ini akan diblokir.
  • UPDATETEXT dan WRITETEXT 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.