Saya mencoba mendefinisikan cara bekerja dengan database pengujian (dalam SQL Server) untuk pengujian integrasi kami.
Gagasan saya adalah melakukan langkah-langkah ini pada peluncuran perakitan uji integrasi:
- buat database yang benar-benar kosong
- jalankan skrip "buat objek basis data" untuk membuat semua objek basis data yang relevan (tabel, tampilan, urutan, dll.)
- isi "data dasar" (nilai pencarian dll.)
- mengambil snapshot basis data yang disebut
(db)_Basis
sebagai "garis dasar" untuk pengujian integrasi di masa depan
Sekarang sebelum setiap kelas uji (berisi tes 1-n), saya berencana untuk melakukan "restore from snapshot" untuk kembali ke keadaan database yang didefinisikan dengan baik, kurang lebih "kosong". Bekerja seperti pesona sejauh ini.
Namun, ada satu set tes integrasi yang perlu beroperasi pada database uji besar - jadi saya berharap untuk melakukan ini sebelum masing-masing perlengkapan tes (kelas dengan n tes individu)
- pulihkan database dari
(db)_Basis
snapshot - masukkan 50'000 + baris data ke dalam basis data
- buat snapshot
(db)_With_Testdata
snapshot lain
dan kemudian untuk setiap tes, setel ulang database ke (db)_With_Testdata
versi snapshot yang terdefinisi dengan baik , jalankan tes, verifikasi hasilnya dan sebagainya.
Masalahnya adalah: Saya sepertinya tidak dapat memiliki dua snapshot db secara bersamaan - begitu saya melakukannya, saya tidak dapat mengembalikan basis data saya ke salah satu dari mereka .... Saya terus mendapatkan kesalahan ini:
Msg 3137, Level 16, Status 4, Baris 9
Basis Data tidak dapat dikembalikan. Entah nama utama atau foto tidak ditentukan dengan benar, semua foto lain belum dijatuhkan, atau ada file yang hilang.Msg 3013, Level 16, State 1, Line 9
KEMBALIKAN DATABASE berakhir secara tidak normal.
Apakah itu benar-benar cara kerja snapshot basis data SQL Server ?? Tampak sangat membatasi ..... Saya akan mengerti jika saya tidak dapat kembali langsung ke snapshot "(db) _Basis" asli mungkin - tetapi hanya karena saya sekarang memiliki dua snapshot, saya bahkan tidak dapat kembali ke yang terbaru ?!?!?
sumber
Jawaban:
Sayangnya, ini karena desain.
Diambil dari halaman BOL " Kembalikan Database ke Snapshot Database ":
Sebagai alternatif, Anda dapat menjatuhkan snapshot pertama
(db)_Basis
. Saya dapat memahami bahwa ini tampaknya sangat terbatas tetapi lihat dengan cara ini: snapshot adalah file yang jarang berdasarkan pada file data asli, jadi kembali ke snapshot tertentu akan membatalkan semua snapshot tertentu (file data dasar akan diubah oleh operasi pengembalian) . Keterbatasan itu bisa mengganggu, tetapi tidak terlihat tidak masuk akal.sumber
Perspektif lain adalah mengambil cadangan dan memulihkan - karena Anda hanya membuat database dan skema kosong dengan beberapa nilai pencarian.
Juga, hanya menyisipkan baris 50K, basis data tidak akan sebesar itu. Jika Anda menggunakan kompresi, ukuran cadangan juga akan lebih sedikit.
Anda dapat memiliki pekerjaan Agen TSQL atau hanya skrip (mungkin Anda dapat membuat prosedur tersimpan dan hanya memanggilnya setelah tes Anda berdasarkan pada output yang Anda dapatkan).
(db)_Basis
(db)_With_Testdata
Agar skrip integrasi Anda berjalan dan berdasarkan pada hasil akhir, Anda dapat menjalankan salah satu dari pekerjaan di atas untuk kembali ke titik apa pun yang Anda inginkan.
Saya merasa bahwa metode backup / restore jauh lebih elegan dalam skenario Anda karena Anda menekan batasan snapshot database . Juga, Paul Randal membuat blog tentang bug jahat di semua versi hingga dan termasuk SQL Server 2012 (tidak yakin apakah itu diperbaiki di CU yang lebih baru)
sumber