Cara terbaik untuk mencadangkan & memotong log transaksi sesuai jadwal

9

Saya bukan DBA, tetapi karena semuanya itu, saya harus memakai topi DBA dan mengatur rencana pemeliharaan pada instance SQL Server saya.

Jadi untuk sementara saya sudah memiliki proses semalam SSIS saya menjalankan Tugas SQL Execute untuk melakukan backup - pada dasarnya berjalan master.dbo.xp_create_subdiruntuk memastikan folder tujuan ada, dan kemudian BACKUP DATABASE [DbName] TO DISK = 'G:\Backups\DbName\DbName.bak' WITH INIT.

Setiap kali tugas itu gagal, sisa proses akan dibatalkan dan saya akan menerima pemberitahuan, dan datang keesokan paginya untuk melihat drive untuk log transaksi terisi penuh, jadi saya secara manual memotongnya dan melanjutkan. .. sampai cerita terulang kembali dan log transaksi lebih besar dari ruang disk yang tersedia.

Skrip "truncate manual" terlihat seperti ini:

use Staging;
alter database Staging set recovery simple
alter database Staging set recovery full
dbcc shrinkfile ('Staging_log', 0, truncateonly);
go

Jadi saya semakin bosan dengan ini, dan saya memutuskan untuk mencoba dan melakukan hal-hal dengan benar , dan ikuti langkah-langkah di sini dan membuat rencana pemeliharaan yang sebenarnya :

Paket pemeliharaan SQL Server

Masalahnya, saya belum pernah melakukan ini sebelumnya, jadi saya punya beberapa pertanyaan:

  • Akankah mencadangkan log transaksi seperti ini secara otomatis memotongnya, atau ada hal lain yang perlu saya lakukan?
  • Apakah saya tetap bisa menjalankan backup data dan log transaksi secara bersamaan? Jika tidak, lalu apa cara yang tepat untuk melakukan ini?
  • File cadangan diambil dalam semalam oleh proses lain yang mengambil semua file di server dan menyimpannya di tempat lain - apakah itu ide yang baik untuk mengakhiri cadangan yang ditetapkan setelah 2 hari? Apakah saya perlu membuat mereka kedaluwarsa sama sekali?
  • Tugas pembersihan masing-masing menghapus file .bak dan .trn "lama" di bawah subfolder dari G:\Backups. Apakah itu masuk akal?
  • Apakah lebih baik melakukan ini di SSIS, jadi saya bisa gagal ETL saya jika / ketika cadangan gagal? Atau haruskah proses ETL saya peduli?

Maaf jika ini terlalu banyak pertanyaan untuk satu posting, jika perlu saya akan mengedit dan mengajukan beberapa pertanyaan sebagai gantinya - Saya pikir mereka semua terkait erat.

Mathieu Guindon
sumber
3
Bisakah Anda menjelaskan apa yang Anda maksud dengan "memotong"? Apakah maksud Anda mengharapkan cadangan log untuk mengecilkan file log? Untuk tujuan apa? Jadi bisa tumbuh lagi?
Aaron Bertrand
3
Juga, saya sarankan Anda membaca pertanyaan ini dan jawabannya sebagai latar belakang sebelum melangkah lebih jauh: dba.stackexchange.com/q/29829/1186
Aaron Bertrand
3
Jika Anda hanya perlu pemulihan harian, maka tetap menggunakan mode sederhana. (Mengapa Anda berubah menjadi sederhana, lalu kembali ke penuh? Menurut Anda apa yang dicapai?) Tetapi jika semua siang hari dibaca, log Anda seharusnya tidak berubah pada siang hari. Bagaimanapun, tidak, membuat cadangan log tidak akan pernah menyusutkan file log.
Aaron Bertrand
3
Jika Anda pergi 6 bulan dalam mode pemulihan penuh tanpa pernah mengambil cadangan log, ya, file log Anda akan tumbuh. Namun jika, seperti yang Anda katakan, aktivitas membaca Anda hanya sepanjang hari, menggunakan mode pemulihan penuh adalah hal yang sia-sia, buatlah sederhana. Maka file log umumnya tidak akan tumbuh sama sekali (karena dalam mode pemulihan sederhana, ruang untuk semua transaksi yang aktif dapat digunakan kembali). DBA yang mengetahui apa yang mereka lakukan umumnya menggunakan mode pemulihan penuh (sehingga mereka dapat mengembalikan ke titik waktu), mengukur file log mereka dengan tepat, dan melakukan pencadangan log cukup sering sehingga file log tidak tumbuh.
Aaron Bertrand
3
Karena Anda mengatakan Anda tidak perlu pemulihan point-in-time, saya tidak yakin mengapa Anda bahkan mempertimbangkan model pemulihan penuh sebagai pilihan.,
Aaron Bertrand

Jawaban:

7

Hanya semalam SSIS yang membuat menulis, siang hari semua membaca - Saya hanya perlu pemulihan harian.

Anda harus memilih model pemulihan berdasarkan kebutuhan bisnis Anda:

  • Berapa banyak bisnis data yang bisa lepas dan pada saat yang sama bertahan?

Berdasarkan jawaban di atas, Anda harus hati-hati memilih model pemulihan basis data Anda .

Secara sederhana (tidak membahas model pemulihan penebangan massal) ,

  • Model pemulihan penuh memungkinkan cadangan log yang memungkinkan pemulihan point-in-time.
    • Pemotongan log dapat terjadi ketika Anda mengambil cadangan log transaksi, yaitu ruang file Log akan digunakan kembali setelah setiap cadangan log dan tidak akan menggembung!
  • Model pemulihan sederhana hanya memungkinkan Anda mengambil cadangan FULL. Pemulihan titik waktu tidak mungkin dilakukan.
    • Pemotongan log hanya dapat terjadi ketika sebuah pos pemeriksaan terjadi (secara manual atau otomatis) yaitu karena Anda melakukan pencadangan penuh secara teratur, Anda tidak perlu khawatir tentang log transaksi karena CHECKPOINT akan mengurus penggunaan kembali bagian yang tidak aktif dari file log.

Ingat bahwa pemotongan log BUKAN pengurangan fisik dalam ukuran file log transaksi. Ini berarti bahwa bagian tidak aktif dari file log transaksi ditandai sebagai dapat digunakan kembali .

Karenanya Anda harus mengatur dengan benar file log transaksi Anda (dan file data). Menumbuhkan file log akan memulai aktivitas autogrowth (jika database Anda disetel ke autogrow sebagai upaya terakhir). Periksa jawaban saya - Autogrowth - Persentase Penggunaan?


Saya akan sangat menyarankan Anda untuk membuang rencana perawatan dan mengimplementasikan [solusi perawatan cerdas - yang mudah, fleksibel dan mengikuti praktik terbaik] - 5 . - Solusi cadangan Ola (dan solusi pemeliharaan Indeks juga).


mari kita jawab pertanyaan Anda:

Akankah mencadangkan log transaksi seperti ini secara otomatis memotongnya, atau ada hal lain yang perlu saya lakukan?

Harap jangan tambahkan cadangan atau setel agar kedaluwarsa. Mereka membuat kekacauan besar. Gunakan INITdan ambil cadangan log terpisah dengan stempel datetime. Mudah dirawat. Gunakan solusi cadangan Ola untuk itu. Solusinya fleksibel untuk menghapus cadangan lama juga.

Apakah saya tetap bisa menjalankan backup data dan log transaksi secara bersamaan? Jika tidak, lalu apa cara yang tepat untuk melakukan ini?

Cadangan lengkap tidak berpengaruh pada cadangan T-log. Cadangan lengkap hanya berisi cukup log transaksi yang diperlukan sehingga jika terjadi pemulihan, database dapat konsisten secara transaksi dengan waktu di mana bagian pembacaan data dari cadangan lengkap selesai. Periksa - berapa banyak transaksi log termasuk cadangan lengkap?

Juga, cadangan log selama cadangan penuh tidak akan memotong log transaksi. Cadangan ( setelah beberapa) log setelah cadangan lengkap selesai akan memotong log.

File cadangan diambil dalam semalam oleh proses lain yang mengambil semua file di server dan menyimpannya di tempat lain - apakah itu ide yang baik untuk mengakhiri cadangan yang ditetapkan setelah 2 hari? Apakah saya perlu membuat mereka kedaluwarsa sama sekali?

Tugas pembersihan masing-masing menghapus file .bak dan .trn "lama" di bawah subfolder G: \ Backups. Apakah itu masuk akal? Apakah lebih baik melakukan ini di SSIS, jadi saya bisa gagal ETL saya jika / ketika cadangan gagal? Atau haruskah proses ETL saya peduli?

Untuk keduanya, gunakan solusi pemeliharaan cadangan Ola. Ini akan menghapus file-file lama.

Kin Shah
sumber
Luar biasa. Jadi saya telah mengubah model pemulihan ke 'Sederhana' untuk semua database saya, dan menjalankan skrip Ola. Sepertinya yang perlu saya lakukan sekarang adalah benar-benar menjadwalkan pekerjaan yang dibuat?
Mathieu Guindon
Ya silahkan. Juga, jangan lupa untuk menandai sebagai jawaban / upvote jika jawabannya adalah solusi atau membantu - dengan cara ini tidak akan ditandai sebagai tidak dijawab.
Kin Shah