Ini adalah posting DBA.SE pertama saya, jadi tolong beri tahu saya jika ada kesalahan, terima kasih!
Saya seorang DBA baru (bukan pro TI, tidak ada orang lain di perusahaan yang melakukannya), jadi semakin dasar penjelasannya, semakin baik. Saya telah membaca tentang strategi cadangan basis data (atau, sebagaimana saya telah belajar menyebutnya, "kembalikan strategi"). Saya memahami apa yang dilakukan cadangan Cadangan, Diferensial, dan Log Transaksi, tetapi saya ingin tahu mengapa cadangan diferensial hanya dapat didasarkan pada cadangan lengkap terbaru.
Jika cadangan diferensial adalah segalanya yang telah berubah sejak cadangan penuh terakhir, lalu mengapa diferensial tidak dapat didasarkan pada cadangan apa pun yang saya pilih? Agar lebih jelas, saya bertanya tentang menentukan basis saat cadangan diambil , bukan saat memulihkan. Saya mengasumsikan bahwa ketika memulihkan Anda akan memilih basis yang benar dan diferensial yang sesuai untuk melakukan pengembalian (tidak menggunakan diferensial yang dibuat dari basis B untuk memulihkan dari basis A).
Apa alasan yang mencegah kemungkinan fungsionalitas ini? Saya pikir pasti ada alasan, saya tidak tahu apa itu.
Catatan: Saya mengerti bahwa markas tidak dapat ditentukan, tetapi pertanyaan saya adalah mengapa tidak ? (Saya juga tidak tertarik berdiskusi tentang "mengapa Anda mau?")
Analogi
Berikut ini analogi tentang bagaimana saya memahami cadangan diferensial:
Saya memiliki file Excel dengan beberapa data dalam sel.
Pada hari 1, saya membuat salinan file ini dan menyimpannya di tempat lain ("full backup").
Pada hari 2, saya melihat file dan membandingkannya dengan salinan cadangan yang saya buat pada hari 1, dan saya perhatikan semua sel yang telah berubah dan apa nilai-nilai baru mereka ("cadangan diferensial"). Saya tidak mencatat setiap perubahan yang dilakukan pada sel, hanya apa nilai akhirnya. Jika sel A1 dimulai sebagai "Alfred", berubah menjadi "Betty", "Charlie", lalu "Dave", saya hanya akan mencatat bahwa "A1 sekarang Dave".
Pada hari 3, saya membandingkan file saat ini dengan file cadangan lagi dan perhatikan perubahan ("cadangan diferensial" lain dengan basis yang sama dengan hari 2). Sekali lagi, hanya mencatat nilai akhir per sel pada saat diamati, tidak semua nilai sel telah sepanjang hari.
Pada hari ke 4, saya membandingkan lagi dan mencatat perubahan lagi. Melanjutkan dengan sel A1, sekarang tertulis "Sarah", bahkan jika itu 10 nama lain sepanjang hari, dan yang saya perhatikan adalah "Sekarang A1 adalah Sarah".
Pada hari ke 5, file saya menjadi kacau; jadi, saya melihat salinan cadangan yang saya buat pada hari 1, kemudian menyatakan terakhir dicatat pada hari 4, dan saya menerapkan perubahan yang dicatat pada salinan cadangan dan sekarang saya memiliki file "dikembalikan" seperti pada hari 4 Jadi, saya melihat cadangan yang dibuat pada hari 1, melihat bahwa pada hari 4 sel A1 berakhir sebagai "Sarah", dan mengubah sel cadangan A1 menjadi "Sarah".
Mengapa penting jika saya membuat salinan cadangan lain ("penuh") dari file pada hari ke 2? Mengapa masih tidak mungkin membandingkan (baca, "ambil cadangan diferensial") file pada hari 3 atau 4 dengan salinan yang dibuat pada hari 1? Seperti yang saya pahami, SQL Server akan meminta saya untuk membandingkan (ketika mengambil cadangan diferensial lain) ke cadangan penuh yang dibuat pada hari ke 2 (jika ada yang dibuat) - tidak ada pilihan lain.
sumber
COPY_ONLY
- Jika OP akan mengambil pencadangan penuh reguler pada hari 1 danCOPY_ONLY
pencadangan penuh pada hari 2 maka masalah apa yang akan terjadi dengan menerapkan diferensial yang lebih baru dari basis yang sama ke cadangan hari 2?Fitur yang Anda inginkan bisa ada secara prinsip. Itu tidak akan efisien dengan struktur basis data saat ini (lihat jawaban Max Vernon). SQL Server harus memelihara satu set peta yang berbeda atau membandingkan konten DB saat ini dengan cadangan lengkap yang Anda tentukan sebagai basis.
Ada aplikasi yang mendupuplikasi file besar. Anda dapat membuat dua cadangan penuh dan hanya data yang diubah yang benar-benar akan disimpan. Ini seperti perbedaan dengan basis kustom.
exdupe
misalnya bisa melakukan itu.Yang menyenangkan tentang itu adalah ia bekerja dengan set file cadangan sama sekali. Bahkan dimulai dengan file cadangan lengkap ke-3 Anda hanya akan membayar tambahan penggunaan ruang (bukan diferensial). Penggunaan ruang adalah perbedaan dengan file cadangan sebelumnya (bukan yang pertama). Penyimpanan deduplicating memiliki perilaku yang sama.
Mengapa fitur yang Anda jelaskan tidak ada? Setiap fitur menghabiskan anggaran sehingga fitur lainnya tidak ada. Yang ini tampaknya tidak cukup jauh dalam daftar prioritas. Saya tidak yakin apa manfaatnya. Sepertinya persyaratan yang cukup esoteris untuk menggunakan pangkalan khusus.
sumber
Jangan bingung antara backup log transaksi dengan backup diferensial, mereka memiliki tujuan yang berbeda! Apa yang Anda sebut "cadangan diferensial", di mana Anda "mencatat semua perubahan pada sel", sebenarnya adalah log transaksi .
Tujuan cadangan diferensial adalah untuk menjaga ukuran file cadangan yang dihasilkan tetap kecil dengan hanya merekam informasi yang telah berubah sejak cadangan penuh terakhir, dan untuk menjaga waktu pemulihan sesuai dengan target waktu pemulihan (RTO).
Tujuan Sebuah transaksi log cadangan adalah untuk membiarkan Anda memutar ulang transaksi ke sembarang titik dalam waktu - sering, tapi pasti tidak perlu untuk "paling baru-baru ini sesuatu yang terjadi".
Apa yang Anda bicarakan sebenarnya mungkin - tetapi Anda perlu mengembalikan cadangan penuh, dan kemudian memulihkan log transaksi.
Jika Anda memiliki cadangan penuh hari 1 dan semua cadangan log transaksi antara hari 1 dan hari 5, tidak ada yang menghentikan Anda dari memulihkan cadangan hari 1 dan memutar ulang log transaksi hingga Anda memiliki data seperti pada hari 4. Anda bisa juga mulai dari cadangan hari 2, yang akan sedikit lebih cepat untuk dipulihkan, karena Anda akan memutar ulang lebih sedikit transaksi. Anda juga dapat mengembalikan cadangan penuh hari 1, cadangan diferensial hari 3, dan kemudian mengembalikan log transaksi ke hari 4.
Sunting: Oke, analogi Anda yang diedit lebih masuk akal. Jawabannya adalah "karena Anda sudah dapat mencapai apa yang Anda inginkan dengan backup log transaksi". Cadangan diferensial hanyalah cara murah dan nyaman untuk merekam sejumlah besar aktivitas log transaksi. Itu tidak menawarkan rincian pemulihan data bahwa cadangan log transaksi tidak menawarkan. Hanya ada begitu banyak fitur yang menawarkan "kenyamanan belaka" yang membuatnya menjadi produk.
sumber
Memberi analogi dengan Excel membandingkan apel dan jeruk. Mengapa Excel bukan database karena kurang integritas data. Excel adalah aplikasi spreadsheet yang cukup bagus dan mungkin menjadi pelengkap database.
SQL Server adalah sistem basis data relasional yang memungkinkan Anda untuk menyimpan semua data Anda dan menyediakan mekanisme untuk menanyakannya. Bagian yang penting adalah "Relasional" karena hubungan data penting bersama dengan integritas data (properti ACID).
Dasar-dasar:
Data dalam database disusun menjadi komponen logis (tabel, tampilan, procs, pemicu, dll) yang dapat dilihat oleh pengguna. Minimal, database juga secara fisik diimplementasikan sebagai dua (file data & log) atau lebih (file data sekunder) pada disk.
Berdasarkan analogi Anda tentang excel, apa yang Anda lakukan adalah menerapkan apa yang telah berubah menjadi yang pertama. Ini menerapkan semua transaksi yang dilakukan dari log transaksi
with STOP AT
(catatan: Pada hari ke 5 file menjadi kacau dan Anda berhenti pada hari ke 4)Di setiap bagian 4GB (disebut interval GAM) dari setiap file data ada halaman database khusus yang disebut bitmap diferensial yang melacak bagian mana (disebut luasan) dari bagian 4GB telah berubah sejak cadangan penuh terakhir, yang menunjukkan data yang telah berubah atau telah ditambahkan ke database.
Pencadangan diferensial memindai melalui bitmap ini dan hanya mencadangkan ekstensi file data yang ditandai sebagai diubah. Bitmap direset oleh cadangan lengkap berikutnya (karenanya cadangan diferensial hanya dapat didasarkan pada cadangan lengkap terbaru) , sehingga Anda dapat melihat bahwa semakin banyak perubahan database, semakin banyak yang akan ditandai dalam bitmap diferensial dan cadangan diferensial berturut-turut akan lebih besar dan lebih besar.
Anda bahkan dapat menggunakan skrip ini untuk mencari tahu Berapa banyak dari database telah berubah sejak cadangan penuh terakhir? .
Informasi dasar diferensial disimpan dalam
master
basis data -sys.database_file
atau (sys.master_files
- berguna ketika basis data read_only atau offline).Ada 3 kolom penting yang menyimpan info terkait basis diferensial .
differential_base_lsn
adalah basis untuk cadangan diferensial. Data luasan yang diubah setelahnyadifferential_base_lsn
akan dimasukkan dalam cadangan diferensial.differential_base_guid
adalah pengidentifikasi unik cadangan dasar yang menjadi dasar cadangan diferensial.differential_base_time
adalah waktu yang sesuai dengandifferential_base_lsn
Pencadangan diferensial berguna untuk mempercepat RTO (Waktu Pemulihan Objective = Waktu yang diperlukan untuk memulihkan basis data Anda) sebagai lawan dari pencadangan penuh yang lebih sering yang akan menjadi masalah bagi basis data besar atau memulihkan volume pencadangan log transaksi karena dapat tumbuh besar dari waktu ke waktu.
Catatan: Cadangan lengkap COPY_ONLY tidak mengatur ulang basis diferensial, sehingga cadangan COPY_ONLY tidak dapat berfungsi sebagai basis diferensial.
Referensi :
sumber