Apa yang terjadi selama cadangan SQL Server langsung?

18

Beberapa rekan kerja saya terkejut ketika saya mengatakan kepada mereka bahwa saya dapat membuat cadangan database SQL Server saat masih berjalan dan bertanya-tanya bagaimana itu mungkin. Saya tahu bahwa SQL Server mampu membuat cadangan database saat ini masih online tetapi saya tidak yakin bagaimana menjelaskan mengapa itu mungkin. Pertanyaan saya adalah apa efeknya pada database?

Jika data diubah (dengan menyisipkan, memperbarui, atau menghapus) saat cadangan berjalan, apakah cadangan berisi perubahan-perubahan itu atau akankah itu ditambahkan ke basis data setelahnya?

Saya berasumsi bahwa file log memainkan peran penting di sini tapi saya tidak yakin bagaimana caranya.

sunting: Sama seperti catatan, kasus saya melibatkan pencadangan basis data menggunakan SQL Server Agent dan efek modifikasi basis data selama proses ini.

Sean Howat
sumber

Jawaban:

24

Cadangan penuh berisi data dan log. Untuk data, itu hanya menyalin setiap halaman dari database ke dalam cadangan, seperti saat ini membaca halaman. Kemudian ditambahkan ke dalam media cadangan semua log 'relevan'. Ini termasuk, paling tidak, semua log antara LSN pada awal operasi cadangan dan LSN pada akhir operasi cadangan. Pada kenyataannya ada lebih banyak log biasanya, karena harus memasukkan semua transaksi aktif pada awal cadangan dan log diperlukan oleh replikasi. Lihat Membongkar beberapa mitos seputar cadangan basis data lengkap .

Ketika database dipulihkan, semua halaman data disalin ke dalam file database, maka semua halaman log disalin ke file log. Basis data tidak konsisten saat ini, karena berisi gambar halaman data yang mungkin tidak sinkron satu sama lain. Tapi sekarang pemulihan normal dijalankan. Karena log berisi semua log selama cadangan, pada akhir pemulihan database konsisten.

Remus Rusanu
sumber
1
Pos yang bagus dan tautannya membantu memberikan contoh yang bagus. Terima kasih.
Sean Howat
Sangat singkat. Kerja bagus!
allen1
2

Selama pencadangan, snapshot akan dibuat untuk database dan data akan dibaca untuk cadangan dari snapshot itu. Operasi DB langsung yang sebenarnya tidak akan memengaruhi operasi cadangan.

Aravind
sumber
1

Anda tidak bisa hanya menyalinnya karena mungkin ada perubahan pada pertengahan salinan database seperti yang Anda singgung dalam pertanyaan.

Itu harus dilakukan dengan agen yang mengetahui fungsi database dan kemudian mengambil "snapshot" melalui fungsi OS atau dapat menggunakan utilitas untuk membuang database dalam keadaan aman (seperti mysqldump, jika menggunakan mysql).

Kalau tidak, Anda mendapatkan cadangan yang dapat rusak dan Anda tidak akan mengetahuinya sampai Anda mengembalikannya. Saya pikir Joel dan Jeff baru-baru ini berbicara sedikit tentang podcast StackOverflow baru-baru ini.

Dan Anda benar bahwa file log itu penting. Jika file jurnal / log tidak sinkron dengan data aktual, mengembalikan file akan menghasilkan korupsi.

Itu bermuara pada cadangan yang diambil menggunakan keadaan aman dari database, baik melalui agen yang sadar database atau aplikasi snapshot atau aplikasi yang menyadari bagaimana cara menghubungkan database dengan benar ke dalam menjatuhkan data tanpa mengganggu pembaruan selama dump data kemudian mendukung file yang dihasilkan.

Bart Silverstrim
sumber
Ini adalah jawaban yang lebih umum tetapi saya lupa untuk memasukkan bahwa saya bekerja melalui SQL Server Agent pada awalnya. Itu masih memberikan beberapa detail yang baik tentang apa yang mungkin terjadi selama proses ini terlepas dari metode sehingga membantu! Terima kasih.
Sean Howat
0

Ada begitu banyak cara untuk melakukan ini (secara umum, tidak tahu bagaimana MSSQL biasanya melakukannya) seperti hanya membuang database ke file sambil menambahkan setiap perubahan ke file log yang dilakukan setelah dump selesai - untuk memanfaatkan snapshot sistem file tertentu fitur seperti VSS di Windows.

Oskar Duveborn
sumber
Juga basis data yang berbasis MVCC dari bawah ke atas (seperti PostGres) dapat memanfaatkan serangkaian perilaku untuk mempertahankan snapshot dari salinan cadangan sementara masih memungkinkan pembaruan ke datafile dengan transaksi yang dimulai selama proses pencadangan. Seperti yang Anda katakan ada beberapa metode, yang digunakan tergantung pada desain inti dari mesin penyimpanan data dan fitur pemrosesan transaksi.
David Spillett
-1

Anda dapat mengambil apa yang dikenal sebagai cadangan hanya salinan. Tidak akan mempengaruhi database saat online

darotweiler
sumber
Apa itu cadangan hanya salinan? Bagaimana cara kerjanya? Apakah ada peringatan untuk dipertimbangkan? Adakah tautan ke contoh binatang seperti itu sedang dijalankan? Jika Anda akan mengirimkan jawaban, bayangkan apa yang mungkin bisa membantu jika seseorang memiliki pertanyaan ini dalam 2-3 tahun.
rnxrx