Saya perlu membuat cadangan hingga 10-20 database SQL Server 2008 R2 dengan ukuran antara 10-50 GB, saat itu sedang online dan digunakan secara bersamaan oleh satu aplikasi perusahaan. Saya juga perlu mengembalikannya ke keadaan yang sebagian besar disinkronkan di semua basis data (saya mampu melakukan desync hingga beberapa detik di antara basis data). Tujuannya adalah untuk menangkap data produksi untuk lingkungan QA / DEV.
Saya sangat ingin tidak menuntut database berjalan dalam pemulihan penuh dan untuk datang dengan metode cadangan yang didedikasikan untuk menangkap data untuk lingkungan QA dan tetap independen dari proses cadangan utama yang tidak di bawah kendali saya.
Untuk pelanggan saya, akan dibutuhkan 1-2 jam untuk menangkap 20 backup penuh masing-masing ~ 30 GB. Ini membuat pengambilan cadangan lengkap secara berurutan tidak dapat diterima karena basis data akan terlalu tersinkronisasi ketika dijalankan dalam pemulihan sederhana.
Saya mencari ide yang lebih baik dari ini:
GAGASAN 1: snapshot SAN-level disk VM. xcopy MDF / LDF dari snapshot.
Setelah file yang disalin dilampirkan ke instance server yang berbeda, proses pemulihannya harus menghasilkan database konsisten yang snapshot cukup banyak secara bersamaan.
Googling sekitar meyakinkan saya ini adalah ide yang buruk, setidaknya karena saya mungkin mendapatkan desync vs master / msdb / etc.
IDEA 2: Buat cadangan & sinkronisasi-pengembalian yang kompleks di semua basis data
Ini mengharuskan saya menuntut basis data berjalan dalam pemulihan penuh, yang tidak saya inginkan. Mulai pencadangan paralel untuk semua basis data jauh sebelum batas waktu (T0). Setelah T0 tercapai, buat cadangan semua log (paling lama beberapa menit). Ambil segudang cadangan yang dihasilkan dan cobalah untuk mengembalikannya & gulung maju / mundur untuk mendapatkan keadaan yang agak konsisten di seluruh basis data, relatif terhadap T0.
Ini membutuhkan banyak perencanaan & skrip untuk menggunakannya secara andal sehingga saya akan berusaha keras untuk menghindarinya.
Apakah saya kehilangan beberapa solusi lain?
PS1: Saya akan senang bisa menggunakan snapshot db . Idenya adalah untuk memulai snapshot pada setiap db (yang seharusnya selesai dalam hitungan detik), kemudian sepenuhnya mencadangkan masing-masing secara berurutan selama menit / jam berikut. Kemudian kembalikan semuanya pada server yang berbeda dan kembalikan masing-masing ke snapshot. AFAIK skenario ini tidak dimungkinkan karena snapshot tidak dapat dicadangkan bersama dengan database. Mereka hanya dapat digulirkan kembali ke tempatnya, di server tempat mereka dibuat. Selain itu, mereka memerlukan Edisi Perusahaan yang tidak saya miliki untuk semua pelanggan.
PS2: Jika Anda tahu solusi pihak ke-3 yang mampu menghasilkan cadangan sinkronisasi lintas-db, harap sebutkan.
Jawaban:
Apa yang Anda cari adalah cadangan yang konsisten di semua basis data pelanggan Anda, Anda harus menggunakan cadangan LENGKAP bersama
Marked Transactions
(penekanan dalam huruf tebal ditambahkan):Pastikan bahwa Anda mengambil cadangan log transaksi adhoc
COPY_ONLY
, jika tidak pemulihan Anda akan menyusahkan, karena cadangan log transaksi adhoc mana pun tanpaCOPY_ONLY
akan memutus rantai log. Sebagai tindakan pencegahan, Anda dapat membatasi pengguna untuk hanya menggunakanCOPY_ONLY
cadangan .Transaksi yang ditandai akan bekerja untuk situasi Anda. Satu-satunya hal untuk membuat cadangan paralel adalah untuk
STRIPE
mereka, tetapi kemudian Anda akhirnya memastikan bahwa Anda tidak kehilangan garis cadangan Anda. Untuk membuatnya lebih cepat, Anda dapat bermain denganBUFFERCOUNT
danMAXTRANSFERSIZE
.Anda harus menggunakan kompresi cadangan serta mengaktifkan inisialisasi file Instan .
Mengacu pada
sumber
not using
kompresi cadangan dapat mempercepat cadangan bahkan lebih ... jika Anda memiliki ruang penyimpanan untuk itu.Jika Anda menjalankan pencadangan penuh serta pencadangan log transaksi (dan Anda harus jika Anda menganggap data ini penting), Anda bisa menyalin dari pencadangan dan pencadangan log transaksi ke sistem pengujian dan melakukan pengembalian waktu secara berkala untuk mengembalikan basis data ke + - waktu yang sama.
Bergantung pada apakah semua database berada pada mesin SQL Server yang sama atau seberapa baik jam server disinkronkan, Anda harus dapat mencocokkan target 'sinkronisasi beberapa detik'.
Ini mungkin sedikit solusi bantuan-band tetapi akan memenuhi persyaratan dan cukup sederhana dan murah.
Jika Anda tidak memiliki cadangan lengkap dan cadangan log transaksi dari basis data penting Anda (yang sedang dalam pemulihan penuh), Anda benar-benar perlu merevisi strategi cadangan Anda. Jepretan tingkat SAN benar-benar memperdebatkan titik memiliki basis data dalam mode pemulihan penuh karena Anda tidak akan dapat mengembalikan suatu titik waktu.
Silakan baca apa yang dikatakan MrDenny tentang itu
sumber
Dalam keadaan yang telah Anda indikasikan, apakah Anda telah melihat cadangan VSS melalui penyedia VSS yang berbasis pihak ketiga atau Microsoft? Anda dapat melakukan cadangan COPY_ONLY yang tidak akan memutus rantai pemulihan produksi Anda dan Anda harus berakhir dengan cadangan dari semua basis data yang dapat Anda pulihkan di tempat lain hingga dalam margin wajar Anda. Perlu diingat bahwa cadangan VSS memiliki beberapa mekanisme dan downfall yang sama seperti snapshots database dalam database yang sangat aktif dapat menyebabkan masalah ruang disk karena file jarang digunakan. Lihatlah sumber daya TechNet pada layanan SQL Writer di sini dan cadangan VSS dari SQL Server di sini .
Untuk melakukan ini melalui Windows Server Backup Anda akan mengikuti langkah-langkah wizard untuk cadangan manual memastikan bahwa Anda memilih VSS menyalin cadangan pada pengaturan konfigurasi khusus di bawah Pengaturan VSS. Ini akan memungkinkan cadangan Windows Server Anda untuk tidak mengganggu cadangan lain yang diambil di server. Lihat referensi Cadangan Server Windows untuk detailnya.
sumber
Saya akan memilih @ Kin sebagai jawabannya karena itu adalah jawaban pertama yang cocok dengan pertanyaan yang diajukan. Saya akhirnya menemukan jawaban tambahan dan saya akan menjelaskannya di bawah ini.
Untuk pelanggan yang menggunakan model pemulihan sederhana, saya akan memerlukan salinan MDF & LDF yang diekstraksi dari snapshot sementara yang diambil pada T0 di tingkat hypervisor atau SAN. Saya dapat menggunakan ini untuk memulihkan dbs di negara bagian dari T0.
Untuk pelanggan yang menggunakan model pemulihan penuh, saya akan membutuhkan:
Salinan dari proses pencadangan UTAMA dari pencadangan lengkap terbaru yang diselesaikan sebelum T0 + rantai minimum pencadangan log transaksi berikutnya yang mencakup T0. Saya kemudian dapat melakukan pemulihan titik waktu ke T0.
Akses untuk melakukan
COPY_ONLY
cadangan bantu saya sendiri . Saya akan memulai semuanya secara paralel pada T0, yang seharusnya tidak lebih dari beberapa detik dan merupakan perhatian utama saya. Kemudian, saat mengembalikan, saya akan melakukan pemulihan waktu ke FirstLSN dari setiap cadangan. Keindahan dari ini adalah saya tidak perlu berinteraksi sama sekali dengan proses pencadangan UTAMA, yang merupakan keprihatinan saya yang lain, mereka bahkan dapat memotong log sementaraCOPY_ONLY
cadangan saya berjalan tanpa mempengaruhi koherensi mereka.sumber
Saya melakukan ini beberapa kali setahun untuk QA dan lingkungan lain yang merupakan salinan produksi. Untuk mengembalikan, mode pemulihan penuh sangat diperlukan dan mengembalikan ke titik waktu berfungsi dengan baik. Ada juga banyak replikasi dan jarang ada kesalahan 'baris tidak ditemukan' setelah memulihkan ke titik waktu. Kami juga menggunakan metode klon / snapshot SAN untuk salinan produksi yang jauh secara geografis dan juga berfungsi dengan baik untuk menyinkronkan basis data.
sumber