Saya telah menyiapkan bukti konsep sistem yang memiliki ujung belakang SQL Server 2017.
Sistem menggunakan tabel temporal untuk mencatat konfigurasi aset dan melacak perubahan dari waktu ke waktu.
Saya memiliki tabel Data yang ditautkan ke tabel riwayat, sebut saja dbo.MSSQL_TemporaryHistoryFor_12345678900.
Sejauh ini bagus. Saya punya dua masalah:
Hari ini saya mematikan versi di atas meja sehingga saya bisa menambahkan kolom yang dihitung. Ini dilakukan dan dihidupkan kembali lagi tanpa kesalahan.
Sekarang saya menemukan bahwa saya tidak dapat meminta data historis apa pun dari sebelum perubahan. Data baru sedang ditambahkan ke histori, tetapi sebelumnya tidak ada.
Melihat ke dalam SSMS, sekarang saya bisa melihat ada beberapa tabel histori, semua dengan nama yang sama tetapi dengan akhiran hex, misalnya dbo.MSSQL_TentaraHistoryFor_12345678900_A0B1C2D3. Mereka tidak tertaut di bawah tabel data utama. Mereka hanya mengambang di dalam database mereka sendiri. Ketika saya tanya sys.tables, ini tidak ditampilkan sebagai tabel histori dan tidak ditautkan ke tabel data utama.
Tabel ini berisi data historis yang tidak ada.
Pertanyaan yang saya miliki adalah:
- Apa yang diwakili tabel tambahan ini?
- Bagaimana mereka diciptakan?
- Apakah ada cara untuk menghubungkan kembali ini ke dalam rantai sejarah utama sehingga saya bisa mendapatkan pelaporan historis saya kembali?
Ini sangat menyebalkan sehingga bantuan apa pun yang dapat Anda berikan akan diterima dengan penuh syukur. Terima kasih.
Jawaban:
Anda harus memberikan nama tabel histori untuk menjaga kesinambungan data saat mematikan dan menghidupkan versi sistem. Perilaku ini disebutkan dalam dokumentasi untuk ALTER TABLE :
Ini demo. Saya akan membuat tabel contoh dari dokumentasi:
Ini menghasilkan tabel sejarah bernama
MSSQL_TemporalHistoryFor_1253579504
. Sekarang saya akan menonaktifkan dan mengaktifkan versi sistem:Dan saya dalam situasi persis Anda:
Sekarang saya akan membersihkan semuanya:
Kemudian buat tabel dengan nama tabel riwayat spesifik:
Kemudian, matikan dan matikan versi sistem, tetapi lanjutkan tentukan nama tabel histori:
Catatan: dalam situasi spesifik Anda, Anda harus dapat menggunakan sintaks ini untuk "memasang kembali" satu tabel histori yang hilang ke tabel dasar Anda
Tidak ada meja tambahan:
Dibawa pulang
Selalu tentukan nama tabel riwayat secara eksplisit saat membuat tabel temporal atau mengaktifkan versi sistem.
Dokumen MS sekarang menyebutkan ini secara khusus pada Menghentikan Versi-Sistem pada halaman Tabel Temporal Versi Sistem :
sumber