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 2016 (13.x) dan versi
yang lebih baru Azure SQL Database
Azure SQL Managed Instance SQL database
di Microsoft Fabric
Ada beberapa pertimbangan dan batasan yang perlu diperhatikan saat bekerja dengan tabel temporal, karena sifat penerapan versi sistem:
Tabel temporal harus memiliki kunci utama yang ditentukan, untuk menghubungkan rekaman antara tabel saat ini dan tabel riwayat. Tabel riwayat tidak dapat memiliki kunci utama yang ditentukan.
Kolom
SYSTEM_TIMEperiode yang digunakan untuk merekamValidFromnilai danValidToharus ditentukan dengan jenis data datetime2.Sintaksis temporal berfungsi pada tabel atau tampilan yang disimpan secara lokal dalam database. Dengan objek jarak jauh seperti tabel di server tertaut, atau tabel eksternal, Anda tidak dapat menggunakan
FORklausa atau predikat periode secara langsung dalam kueri.Jika nama tabel riwayat ditentukan selama pembuatan tabel riwayat, Anda harus menentukan skema dan nama tabel.
Secara default, tabel riwayat dikompresi
PAGE.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 menggunakan FileTable atau FILESTREAM. FileTable dan FILESTREAM memungkinkan manipulasi data di luar SQL Server, sehingga penerapan versi sistem tidak dapat dijamin.
Simpul atau tabel tepi tidak dapat dibuat sebagai atau diubah ke tabel temporal.
Sementara tabel temporal mendukung jenis data blob, seperti (n)varchar(max), varbinary(max), (n)teks, dan gambar, mereka 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).
Tampilan terindeks tidak didukung di atas kueri temporal (kueri yang menggunakan
FOR SYSTEM_TIMEklausa).Opsi online (
WITH (ONLINE = ON) tidak berpengaruh dalamALTER TABLE ALTER COLUMNtabel temporal versi sistem.ALTERkolom tidak dilakukan sebagai operasi online, terlepas dari nilai mana yang ditentukan untuk opsi tersebutONLINE.INSERTpernyataan danUPDATEtidak dapat mereferensikanSYSTEM_TIMEkolom periode. Upaya untuk menyisipkan nilai langsung ke dalam kolom ini diblokir.TRUNCATE TABLEtidak didukung saatSYSTEM_VERSIONINGadalahON.Modifikasi langsung data dalam tabel riwayat tidak diizinkan.
-
ON DELETE CASCADEdanON UPDATE CASCADEtidak diizinkan pada tabel saat ini. Dengan kata lain, ketika tabel temporal mereferensikan tabel dalam hubungan kunci asingparent_object_id(sesuai dengan disys.foreign_key)CASCADEopsi tidak diizinkan. Untuk mengatasi batasan ini, gunakan logika aplikasi atau setelah pemicu untuk mempertahankan konsistensi pada penghapusan dalam tabel kunci primer (sesuai denganreferenced_object_iddisys.foreign_key). Jika tabel kunci utama bersifat temporal dan tabel referensi non-temporal, tidak ada batasan seperti itu.
INSTEAD OFpemicu tidak diizinkan pada tabel saat ini atau riwayat untuk menghindari pembatalan logika DML.AFTERpemicu hanya diizinkan pada tabel saat ini. Pemicu ini diblokir pada tabel riwayat untuk menghindari pembatalan logika DML.Penggunaan teknologi replikasi terbatas:
Grup ketersediaan: Didukung penuh
Mengubah penangkapan data dan pelacakan perubahan: Hanya didukung pada tabel saat ini
Rekam jepret dan replikasi transaksional: Hanya didukung untuk satu penerbit tanpa temporal diaktifkan, dan satu pelanggan dengan temporal diaktifkan. Penggunaan beberapa pelanggan tidak didukung karena dependensi pada jam sistem lokal, yang dapat menyebabkan data temporal yang tidak konsisten. Dalam hal ini, penerbit digunakan untuk beban kerja OLTP sementara pelanggan berfungsi untuk pelaporan offloading (termasuk
AS OFkueri). Ketika agen distribusi dimulai, agen distribusi membuka transaksi yang ditahan terbuka sampai agen distribusi berhenti.ValidFromdanValidTodiisi ke waktu mulai transaksi pertama yang dimulai oleh agen distribusi. Mungkin lebih baik menjalankan agen distribusi pada jadwal daripada perilaku default menjalankannya terus menerus, jika memilikiValidFromdanValidTodiisi dengan waktu yang dekat dengan waktu sistem saat ini penting untuk aplikasi atau organisasi Anda. Untuk informasi selengkapnya, lihat Skenario penggunaan tabel Temporal.Gabungkan replikasi: Tidak didukung untuk tabel temporal
Kueri reguler hanya memengaruhi data dalam tabel saat ini. Untuk mengkueri data dalam tabel riwayat, Anda harus menggunakan kueri temporal. Untuk informasi selengkapnya, lihat Mengkueri data dalam tabel temporal versi sistem.
Strategi pengindeksan yang optimal mencakup indeks penyimpanan kolom berkluster dan/atau indeks rowstore pohon B pada tabel saat ini, dan indeks penyimpan kolom berkluster pada tabel riwayat, untuk ukuran dan performa penyimpanan yang optimal. Jika Anda membuat/menggunakan tabel riwayat Anda sendiri, kami sangat menyarankan Anda membuat jenis indeks ini yang terdiri dari kolom periode yang dimulai dengan kolom akhir periode. Indeks ini mempercepat kueri temporal, dan mempercepat kueri yang merupakan bagian dari pemeriksaan konsistensi data. Tabel riwayat default memiliki indeks rowstore berkluster yang dibuat untuk Anda berdasarkan kolom titik (akhir, mulai). Minimal, indeks rowstore non-kluster direkomendasikan.
Objek/properti berikut ini tidak direplikasi dari tabel saat ini ke riwayat saat tabel riwayat dibuat:
- Definisi periode
- Definisi identitas
- Indexes
- Statistics
- Periksa batasan
- Triggers
- Konfigurasi partisi
- Permissions
- Predikat keamanan tingkat baris
Tabel riwayat tidak dapat dikonfigurasi sebagai tabel saat ini dalam rantai tabel riwayat.
Note
Dokumentasi menggunakan istilah pohon B umumnya dalam referensi ke indeks. Dalam indeks rowstore, Mesin Database mengimplementasikan pohon B+. Ini tidak berlaku untuk indeks penyimpan kolom atau indeks pada tabel yang dioptimalkan memori. Untuk informasi selengkapnya, lihat panduan arsitektur dan desain indeks SQL Server dan Azure SQL.
Konten terkait
- Tabel temporal
- Mulai menggunakan tabel temporal versi sistem
- Pemeriksaan konsistensi sistem tabel temporal
- Partisi dengan tabel temporal
- Keamanan tabel temporal
- Mengelola retensi data historis dalam tabel temporal versi sistem
- Tabel temporal versi sistem dengan tabel memori yang dioptimalkan
- Tampilan dan fungsi metadata tabel temporal