Bagikan melalui


Menghentikan penerapan versi sistem pada tabel temporal versi sistem

Berlaku untuk: SQL Server 2016 (13.x) dan versi yang lebih baru Azure SQL DatabaseAzure SQL Managed Instance SQL databasedi Microsoft Fabric

Anda mungkin ingin berhenti membuat versi pada tabel temporal Anda baik untuk sementara atau permanen. Anda dapat melakukannya dengan mengatur SYSTEM_VERSIONING klausul ke OFF.

Setel SYSTEM_VERSIONING = NONAKTIF

Hentikan penerapan versi sistem jika Anda ingin melakukan operasi pemeliharaan tertentu pada tabel temporal atau tidak memerlukan tabel versi lagi. Karena operasi ini, Anda mendapatkan dua tabel independen:

  • Tabel saat ini dengan definisi periode
  • Tabel riwayat sebagai tabel biasa

Remarks

Tabel riwayat berhenti mengambil pembaruan selama SYSTEM_VERSIONING = OFF.

Tidak ada kehilangan data yang terjadi pada tabel temporal saat Anda mengatur SYSTEM_VERSIONING = OFF atau menghilangkan SYSTEM_TIME periode.

Saat Anda mengatur SYSTEM_VERSIONING = OFF dan tidak menghapus periode SYSTEM_TIME, sistem terus memperbarui kolom periode setiap kali ada operasi penyisipan dan pembaruan. Penghapusan pada tabel saat ini bersifat permanen.

Anda harus menghapus SYSTEM_TIME kolom periode untuk menghilangkan kolom tersebut. Untuk menghapus kolom periode, gunakan ALTER TABLE <table> DROP <column>;. Untuk informasi selengkapnya, lihat Mengubah skema tabel temporal versi sistem.

Saat Anda mengatur SYSTEM_VERSIONING = OFF, semua pengguna dengan izin yang memadai dapat mengubah skema dan konten tabel riwayat, atau bahkan menghapus tabel riwayat secara permanen.

Anda tidak dapat menetapkan SYSTEM_VERSIONING = OFF jika Anda memiliki objek lain yang dibuat dengan SCHEMABINDING menggunakan ekstensi kueri temporal, seperti mengacu pada SYSTEM_TIME. Pembatasan ini mencegah objek ini gagal jika Anda mengatur SYSTEM_VERSIONING = OFF.

Menghapus SYSTEM_VERSIONING secara permanen

Contoh ini menghapus SYSTEM_VERSIONING secara permanen dan menghapus kolom titik. Menghapus kolom periode bersifat opsional.

ALTER TABLE dbo.Department
SET (SYSTEM_VERSIONING = OFF);

-- Optionally, DROP PERIOD if you want to revert temporal table to a non-temporal
ALTER TABLE dbo.Department
DROP PERIOD FOR SYSTEM_TIME;

Hapus sementara SYSTEM_VERSIONING

Daftar berikut berisi daftar operasi yang mengharuskan versi sistem diatur untuk OFF:

  • Menghapus data yang tidak perlu dari riwayat (DELETE atau TRUNCATE)
  • Menghapus data dari tabel saat ini tanpa penerapan versi (DELETE, TRUNCATE)
  • Partisi SWITCH OUT dari tabel saat ini
  • Partisi SWITCH IN ke dalam tabel riwayat

Contoh ini menghentikan SYSTEM_VERSIONING untuk sementara guna memungkinkan Anda melakukan operasi pemeliharaan tertentu. Jika Anda berhenti membuat versi sementara sebagai prasyarat untuk pemeliharaan tabel, sebaiknya lakukan perubahan ini di dalam transaksi untuk menjaga konsistensi data.

Saat mengaktifkan kembali versi sistem, jangan lupa untuk menentukan argumen HISTORY_TABLE. Gagal melakukannya menghasilkan tabel riwayat baru yang dibuat dan dikaitkan dengan tabel saat ini. Tabel riwayat asli masih bisa ada sebagai tabel normal, tidak lagi terkait dengan tabel saat ini.

BEGIN TRANSACTION;

ALTER TABLE dbo.Department
SET (SYSTEM_VERSIONING = OFF);

TRUNCATE TABLE [History].[DepartmentHistory]
WITH (PARTITIONS(1, 2));

ALTER TABLE dbo.Department
SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.DepartmentHistory));

COMMIT;