Mencadangkan & memulihkan 10-20 database SQL Server ke kondisi ~ sinkron?

15

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.

bogdan
sumber
Apa versi server SQL untuk skenario ini dengan edisi? dan kira-kira berapa ukuran database yang kita bicarakan di sini?
KASQLDBA

Jawaban:

12

Saya perlu membuat cadangan hingga 10-20 SQL Server dbs yang digunakan secara bersamaan oleh satu aplikasi perusahaan, ketika mereka sedang online, sedemikian rupa untuk mengembalikannya ke keadaan yang sebagian besar disinkronkan di semua dbs

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):

Saat Anda membuat pembaruan terkait untuk dua atau lebih basis data, basis data terkait , Anda dapat menggunakan tanda transaksi untuk memulihkannya ke titik yang konsisten secara logis . Namun, pemulihan ini kehilangan transaksi apa pun yang dilakukan setelah tanda yang digunakan sebagai titik pemulihan. Menandai transaksi hanya cocok ketika Anda menguji basis data terkait atau ketika Anda ingin kehilangan transaksi yang baru-baru ini dilakukan.

masukkan deskripsi gambar di sini

Pastikan bahwa Anda mengambil cadangan log transaksi adhoc COPY_ONLY, jika tidak pemulihan Anda akan menyusahkan, karena cadangan log transaksi adhoc mana pun tanpa COPY_ONLYakan memutus rantai log. Sebagai tindakan pencegahan, Anda dapat membatasi pengguna untuk hanya menggunakan COPY_ONLYcadangan .

Saya memerlukan solusi untuk SQL Server versi 2008 R2 dan yang lebih baru. Ukuran Db hingga 50 GB per db dan waktu untuk mencadangkan semuanya kemungkinan lebih dari 1-2 jam.

Transaksi yang ditandai akan bekerja untuk situasi Anda. Satu-satunya hal untuk membuat cadangan paralel adalah untuk STRIPEmereka, tetapi kemudian Anda akhirnya memastikan bahwa Anda tidak kehilangan garis cadangan Anda. Untuk membuatnya lebih cepat, Anda dapat bermain dengan BUFFERCOUNTdan MAXTRANSFERSIZE.

Anda harus menggunakan kompresi cadangan serta mengaktifkan inisialisasi file Instan .

Mengacu pada

Kin Shah
sumber
1
Hanya sebuah catatan kecil, not usingkompresi cadangan dapat mempercepat cadangan bahkan lebih ... jika Anda memiliki ruang penyimpanan untuk itu.
4
Pada penyimpanan yang lebih lambat, saya menduga overhead kompresi akan lebih dari dibenarkan, karena waktu yang disimpan pada I / O akan lebih besar daripada waktu ekstra yang dihabiskan untuk CPU. Pada penyimpanan yang lebih cepat, manfaat kompresi jauh lebih berbobot untuk ruang penyimpanan.
Aaron Bertrand
@ ShawnMelton Saya setuju dengan Anda, tetapi saat mentransfer cadangan, cadangan terkompresi akan jauh lebih cepat untuk ditransfer. Cadangan akan cepat tanpa kompresi (tergantung pada subsistem penyimpanan) tetapi memikirkan keuntungan dari kompresi, saya cenderung untuk mengaktifkannya di lingkungan saya.
Kin Shah
@ Kin, saya tidak berpikir m-transaksi adalah solusi di sini karena: A) Mereka tampaknya tidak dirancang untuk bekerja pada server yang berbeda dari yang mana backup diambil. Beberapa menyiasatinya dengan mengembalikan baris ke logmarkhistory tapi saya tidak bisa menggunakan perilaku tidak berdokumen. B) Saya tidak dapat mengubah kode aplikasi saya untuk menambahkan dukungan untuk transaksi-m. Saya perlu memulai transaksi-m khusus dari skrip cadangan saya dan jika saya mengerti dengan benar , mereka menghentikan semua transaksi yang lebih baru sampai yang lebih tua dari tanda tersebut dilakukan. Ini memengaruhi ketersediaan aplikasi yang merupakan penghenti utama.
bogdan
3
Sudah agak tidak jelas apa yang sebenarnya Anda tanyakan di sini. Pertama Anda memiliki lingkungan dalam pemulihan penuh, maka Anda memiliki beberapa klien masing-masing dengan strategi cadangan mereka sendiri. Anda tidak ingin mengubah lapisan aplikasi, Anda tidak ingin mengambil cadangan sql, dan Anda tidak ingin ada replikasi tingkat blok, namun Anda mengharapkan solusi. Persyaratan terus mengubah segala sesuatu yang melibatkan 'pekerjaan' yang sebenarnya ditolak. Sayangnya kami tidak memiliki situs web magic.stackexchange.com.
Tom V - Team Monica
7

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

Tom V - Tim Monica
sumber
1

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.

Halaman Travis
sumber
Saya menganggap VSS sebagai alternatif untuk mengambil snapshot disk pada level hypervisor / SAN. Saya menyertakan kasus ini dalam solusi saya (diposting sekarang sebagai jawaban tambahan) untuk pelanggan yang menggunakan pemulihan sederhana.
bogdan
1

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_ONLYcadangan 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 sementara COPY_ONLYcadangan saya berjalan tanpa mempengaruhi koherensi mereka.

bogdan
sumber
0

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.

Membuang
sumber