Log Transaksi dan mirroring - mencari penjelasan paling bodoh mungkin

8

Pertama-tama saya harus mengakui bahwa saya berjuang dengan konsep Log Transaksi. Maksud saya - saya mengerti bahwa ini adalah Log dari semua Transaksi yang terjadi pada basis data, tetapi ketika harus memasukkannya ke dalam konteks dengan benar dalam beberapa tugas, saya jelas tidak memiliki sesuatu. Jadi, bagi siapa pun yang akan menjawab pertanyaan - jangan ragu untuk memperluas teori di balik Transaction Log.

Pertanyaan utamanya adalah - Saya memiliki SQL Server 2008 dan basis data 2 GB yang saya perlu mirrored (memiliki log transaksi 12GB). Jika saya tidak mirroring database itu saya kira saya bisa beralih ke mode Sederhana atau memotong log setelah cadangan. Tetapi dalam hal ini - apa yang harus saya lakukan jika saya ingin menjaga agar log transaksi tetap terkendali? Seperti yang saya mengerti - Saya perlu menyimpan seluruh transaksi log jika saya ingin dapat dengan mudah mirror database (lakukan saja pencadangan penuh).

Apakah ada jalan keluarnya? Idealnya saya berharap dimungkinkan untuk melakukan pencadangan yang membuat baik MDF dan LDF dalam 1 file setiap kali dan setelah pencadangan dilakukan Transaction Log (LDF) pada basis data dikurangi menjadi 0. Masalah dengan skenario ini adalah pencadangan tambahan - jika pencadangan pertama saya log terpotong, saya berasumsi bahwa cadangan kedua perlu referensi pertama jika saya ingin melakukan mirroring nanti (yaitu saya akan terjebak dengan menyimpan banyak file, bukan hanya satu).

Jadi - adakah yang bisa memberi tahu saya tentang hal ini? Saya mengerti bahwa saya mencoba untuk mengisi banyak lubang di sini dan bahwa "solusi" yang saya usulkan mungkin bukan yang terbaik, tetapi saya akan sangat menghargai jika seseorang dapat mendorong saya ke arah yang benar pada Transaction Logs, bagaimana mereka berdampak mirroring dan terbaik berlatih dengan mereka berdua.

nikib3ro
sumber

Jawaban:

5

Log transaksi adalah metode penting untuk memulihkan database Anda dalam waktu tertentu. Jika Anda memiliki basis data besar> 500 GB dan jika Anda harus memulihkan basis data Anda dari cadangan penuh, ini akan menghabiskan banyak waktu. Juga jika Anda membuat cadangan penuh basis data setiap kali, pikirkan berapa lama cadangan ini dapat berlangsung.

Konsep yang sangat mudah untuk SQL Server dapat berupa: Set Recover Model dari Database Anda Lengkap

Buat Paket Perawatan (1) di SQL Server:

  • Lakukan FullBackup setiap Minggu mungkin dalam D: \ yourbackup \ FullDBBackup.bak
  • Lakukan Diferensial Cadangan setiap dua hari dalam D: \ yourbackup \ DiffBackup.bak
  • Lakukan setiap 2 jam Cadangkan log Transaksi Anda di D: \ Yourbackup \ Tranlogbackup.trn

Buat Rencana Perawatan (2) di SQL Server:

  • Hapus semua File lama 8 hari dari D: \ yourBackup * .bak
  • Hapus semua File lama 3 Hari dari D: \ yourBackup * .trn

Dalam hal ini, Anda dapat memulihkan Database Anda dalam waktu tertentu, sangat cepat sangat mudah. SQL Server akan secara otomatis mengelola file "Cadangan" Anda, file yang lebih lama akan dihapus setelah rentang waktu spesifik Anda.

Saya menyarankan agar Anda membaca tentang SQL Server Transaction Log di sini:

http://www.sqlservercentral.com/articles/Design+and+Theory/63350/

Untuk menggunakan Rencana Pemeliharaan di SQL Server tanyakan saja BING / google: D

Anda harus membuat test db kecil dan menguji ini sebelum Anda mulai berproduksi

Shanky
sumber
Saya tidak punya masalah dengan backup & waktu penuh karena saya bisa menghentikan seluruh sistem sampai selesai. Satu pertanyaan pada jawaban Anda - apakah saya memotong log Transaksi dalam skenario ini? Jika tidak, maka saya mengerti bahwa saya hanya perlu FullDBBackup.bak terbaru untuk mengembalikan database? Saya tidak peduli tentang titik waktu tertentu - yang saya pedulikan adalah versi terbaru dari DB yang saya dapatkan ketika saya melakukan backup. Artinya - Saya tidak perlu log transaksi; Saya hanya menyimpannya hanya karena mirroring. Apakah ada jalan keluarnya?
nikib3ro
2
1. Anda tidak dapat memotong log Anda: D 2. Jika Anda mengambil cadangan dari tran log Anda, SQL Server akan memberikan ruang ini gratis untuk digunakan kembali dalam logfile Anda. cukup uji sederhana dbcc sqlperf ('logpsace') sebelum cadangan dan kemudian lakukan hal yang sama setelah cadangan Anda. dan pada akhirnya, Anda perlu log transaksi ... hanya menguji contoh saya
Saya akhirnya harus menerapkan saran Anda di lingkungan pengujian dan sejauh ini saya menyukai apa yang saya lihat. Tolong beri tahu saya jika saya memahami hal ini dengan benar - jika sekarang saya perlu mengembalikan basis data, saya pertama-tama akan menggunakan cadangan LENGKAP yang telah saya buat, dan kemudian menggunakan kombinasi cadangan diferensial dan log transaksi, saya akan dapat mengembalikan basis data saya ke titik waktu tertentu? Apakah saya benar? Dan saya juga berasumsi bahwa untuk mirroring, saya hanya perlu menghentikan server dan mengambil cadangan penuh? Atau apakah saya perlu Log Transaksi untuk menyiapkan mirroring? Sekali lagi terima kasih atas semua bantuan dan jawaban Anda!
nikib3ro
3

Untuk memanfaatkan mirroring Anda harus memiliki database dalam mode pemulihan LENGKAP dan perlu mengambil cadangan log transaksi untuk menjaga file log dari tumbuh. Jika Anda tidak memerlukan cadangan log, maka bersihkan setelah x jumlah jam dengan rencana pemeliharaan, tetapi harus diambil.

Untuk membersihkan lingkungan, Anda harus menghapus mirroring, alihkan mode pemulihan ke sederhana, turunkan ukuran file log melalui Paul Randal Way yang disarankan , beralih kembali ke mode pemulihan penuh, atur penuh dan log cadangan, lalu inisialisasi ulang Anda cermin. Anda dapat mencoba menurunkan ukuran log saat mirroring berada di tempatnya tetapi akan lebih mudah untuk menghapusnya terlebih dahulu. 1 GB seharusnya tidak terlalu buruk dari db untuk diinisialisasi ulang.

Jason Cumberland
sumber