Cara mengecualikan indeks dari cadangan di SQL Server 2008

19

Cadangan malam penuh (dan diferensial berkala) kami menjadi cukup besar, sebagian besar karena jumlah indeks di tabel kami; kira-kira setengah ukuran cadangan terdiri dari indeks.

Kami menggunakan model pemulihan sederhana untuk cadangan kami.

Apakah ada cara, melalui penggunaan FileGroupsatau metode pemartisian file lainnya, untuk mengecualikan indeks dari cadangan?

Akan lebih baik jika ini dapat diperluas ke katalog teks lengkap, juga.

Jarrod Dixon
sumber

Jawaban:

15

Jika Anda beralih ke mode pemulihan penuh, Anda dapat melakukan ini dengan filegroup, tetapi itu benar-benar canggung. Anda meninggalkan data dalam filegroup utama, dan menempatkan indeks dalam filegroup terpisah (non-default, itulah kuncinya).

Kemudian Anda mengatur cadangan Anda sehingga Anda melakukan cadangan filegroup dari primer setiap malam, dan cadangan log transaksi setiap X menit.

Ketika bencana terjadi, Anda mengembalikan filegroup utama dengan sendirinya. Data tiba-tiba online, tetapi indeksnya tidak. Namun, untuk kembali normal, Anda harus mengekspor data itu ke database bersih baru dan menambahkan indeks dari sana. Anda tidak dapat membawa basis data sepenuhnya online tanpa memulihkan semua filegroup, dan Anda tidak bisa mengatakan "Lagi pula saya tidak membutuhkan filegroup lain."

Untuk selengkapnya tentang cara kerjanya, lihat tutorial video saya tentang pemulihan filegroup.

Brent Ozar
sumber
Hehe, saya telah memindahkan indeks non-clustered ke filegroup mereka sendiri; model Pemulihan Sederhana benar-benar menghalangi saya. Indeks sebenarnya lebih besar dari data - bagaimana itu mengejek saya! Oh well, mungkin beberapa pihak ke-3 akan merilis petunjuk petunjuk peluru ajaib :)
Jarrod Dixon
1
Dan mungkin, mungkin saja, Anda akan mendapatkan lisensi gratis untuk itu. ;-)
Brent Ozar
5

Jujur, Anda benar-benar tidak ingin melakukan ini, bahkan jika Anda mengatasi masalah lain yang diangkat orang lain di sini.

Ketika Anda mengembalikan cadangan dalam keadaan darurat, Anda tidak ingin menunggu indeks untuk dibangun kembali, dan Anda akan mengalami kinerja yang buruk sampai Anda melakukannya.

Saya tidak dapat memikirkan situasi di mana Anda ingin mengembalikan cadangan tanpa indeks, jadi dalam semua kasus Anda benar-benar ingin mencadangkannya secara bersamaan.

Anda mungkin perlu mencari solusi lain untuk masalah ini ...

-Adam

Adam Davis
sumber
1
"Anda tidak ingin menunggu indeks untuk membangun kembali" sangat dugaan, IMO
Jeff Atwood
2
Ya, tetapi perlu diingat saya menggeneralisasi di sini. Saya belum yakin bahwa ada lebih banyak situasi di mana lebih baik untuk membuang indeks dan membangun kembali daripada ada situasi di mana lebih baik untuk membuat cadangan indeks dan menghindari membangun kembali. Dengan kata lain, satu kasus umumnya lebih baik, dan kecuali situasi tertentu memerlukannya, ia harus melakukan kesalahan dengan mendukungnya. Yang sedang berkata, setiap situasi berbeda. Saya ingin tahu berapa lama waktu yang diperlukan untuk membangun kembali indeks SO, dan berapa banyak kinerja situs menderita sampai mereka selesai (dengan asumsi terserah selama membangun kembali).
Adam Davis
Pencadangan arsip jangka panjang adalah kasus penggunaan khusus yang saya lihat sekarang yang mengarahkan saya ke pertanyaan ini. Saya memiliki proyek yang lengkap dan tidak lagi menginginkan database online, tetapi juga tidak perlu mengacaukan drive jaringan kami dengan file cadangan yang lebih besar dari yang diperlukan. Saya tidak ingin kehilangan definisi indeks, tetapi tidak keberatan membangunnya kembali jika saya harus mengembalikan ini lagi.
richardtallent
3

Sepertinya ini tidak didukung. Dari info laporan bug ini :

Ada banyak minat dalam hal ini, jadi saya akan membahas sedikit lebih detail tentang apa yang terjadi di balik layar, dan apa artinya menerapkan fungsi ini. Beberapa jenis halaman indeks dipisahkan menjadi unit alokasi yang terpisah, sementara yang lain dicampur dengan halaman data. Di mana saat ini kami hanya melihat bitmap alokasi untuk melihat apakah suatu tingkat dialokasikan, sekarang kami harus masuk dan menafsirkan apa yang disimpan di setiap unit alokasi. Lebih jauh, kita sekarang tidak bisa hanya melakukan pemindaian linear dari file data menyalin data, kita akan melewatkan di dalam file. Semua interpretasi ini dari struktur data akan secara drastis memperlambat cadangan. Kembalikan menjadi lebih menarik, karena ada banyak struktur yang harus diperbaiki untuk memperhitungkan lubang di cadangan. Kalau tidak, Anda akan memiliki peta alokasi yang menunjuk ke halaman yang tidak didukung, dan ada sampah di dalamnya, dll. Jadi, menerapkan ini akan berarti bahwa kami menyimpan lebih sedikit data, lebih lama melakukannya, dan mengambil banyak lagi memulihkannya. Aspek lain yang perlu dipertimbangkan adalah bahwa ini akan membutuhkan sejumlah besar upaya rekayasa untuk menyelesaikannya. Meskipun itu bukan masalah Anda di permukaan, pertimbangkan bahwa itu berarti bahwa fitur lain yang mungkin ingin Anda lihat tidak akan dibangun.

Jon Galloway
sumber
Ini tidak akan menjadi masalah untuk indeks teks lengkap, bukan? Mereka cenderung cukup besar.
Michael Teper
1

mungkin ide yang gila, tapi begini saja.

  1. jatuhkan indeks non-cluster Anda yang memakan banyak ruang
  2. lakukan backup
  3. buat kembali indeks yang Anda jatuhkan

Tentu saja Anda hanya dapat benar-benar melakukan ini jika basis data Anda memungkinkan untuk down-time dalam sehari.

Juga, jangan jatuhkan indeks berkerumun Anda karena SQL Server akan membuang banyak waktu untuk mengonversikannya menjadi tumpukan.

Apakah membeli ruang disk tambahan itu sepertinya solusi yang lebih mudah?

Sudahkah Anda mempertimbangkan untuk melakukan backup terkompresi ? ini adalah fitur baru tahun 2008, mungkin ini menjadi pilihan bagi Anda.

Nick Kavadias
sumber
Ya, kami telah mengaktifkan kompresi untuk cadangan, tetapi kompresi bawaan tidak terlalu bagus. Kami benar-benar memiliki cadangan akhir minggu yang tidak dikompresi yang diambil dan kemudian 7zip untuk kami devs untuk dihancurkan; ukurannya sekitar 1/3, tapi butuh beberapa saat untuk berlari!
Jarrod Dixon
Sedangkan untuk downtime DB, bisakah kita benar-benar hidup tanpa serverfault.com dan stackoverflow.com sebanyak mungkin? Aku bergidik memikirkan itu :)
Jarrod Dixon
Saya belum mengujinya sendiri, tetapi saya curiga. Itu tidak bisa dikonfigurasi. Jika Anda masih melihat kompresi sebagai opsi lihatlah SQL Lightspeed (mahal, tetapi mengagumkan, tetapi harganya sangat bisa dinegosiasikan) dan RedGate's SQL Backup. Sangat dapat dikonfigurasi & hasil yang sangat baik
Nick Kavadias