Apakah mungkin untuk mengembalikan bak sql-server dan menyusutkan log pada saat yang sama?

26

Kami memiliki file bak dari klien yang telah kami transfer ke kantor pengembang kami untuk penyelidikan masalah. Cadangan saat ini 25GB dan database yang dipulihkan sekitar ukuran yang sama namun perlu 100GB untuk dipulihkan. Saya percaya ini karena ada database yang diatur untuk memiliki ukuran log transaksi 75GB. Setelah memulihkan database, kita dapat mengecilkan file log tetapi apakah ada cara untuk melakukan ini di restore?

Adam Butler
sumber
3
Bahwa saya tahu Anda tidak dapat mengubah database sampai selesai pemulihan.
Shawn Melton
3
Saya berada dalam situasi yang sama dan saya menantikan jawabannya. Sekedar berkomentar, ada sebuah produk: SQL virtual red-gate's restore. Saya tidak pernah menggunakan ini, tetapi menurut situs: 'Basis data yang dipasang memerlukan penyimpanan tambahan hampir nol di atas file cadangan'.
StanleyJohns

Jawaban:

16

Tidak ada cara untuk mengecilkan cadangan sebagai bagian dari proses pemulihan. Basis data yang dipulihkan harus persis seperti basis data sumber dengan satu-satunya pengecualian adalah Anda dapat mengubah huruf dan folder drive.

mrdenny
sumber
34

Ada peretasan do-not-do-do-this-in-a-live-environment yang dapat Anda gunakan di mana ruang terbatas, dengan mengembalikan file log ke folder terkompresi. Coba ini dengan mengompresi folder yang ada dan mengembalikannya akan menghasilkan kesalahan, jadi Anda harus menipu dengan tautan simbolik.

  1. Buat folder terkompresi D:\LogCompressed\
  2. Buat tautan simbolis ke folder terkompresi mklink /D /J D:\Log\ D:\LogCompressed\

  3. Kembalikan database Anda dengan menunjuk file ldf D:\Log\

  4. Kecilkan file log ke ukuran yang sesuai

  5. Lepaskan database, pindahkan file log ke folder yang tidak terkompresi, lampirkan

Itu kotor, curang, JANGAN PERNAH MELAKUKANNYA LANGSUNG , tetapi berhasil. Uji cepat dari database yang baru dibuat dengan file log 32MB menunjukkannya sebagai menempati 330kb pada disk ketika dikompresi, mendekompres folder dan pada ukuran disk kembali ke 32MB.

Mark Storey-Smith
sumber
2
@ Mark: Retasan ini berfungsi, tetapi tidak sempurna. Bahkan jika file log mengambil ruang jauh lebih sedikit daripada ukuran aslinya, Anda tidak dapat mengembalikan database kecuali disk benar-benar memiliki ruang kosong sebanyak ukuran sebenarnya dari database. Selain itu, ketika memulihkan, ukuran sebenarnya dari file log turun perlahan dari ukuran sebenarnya, itu menyakitkan. Namun, ini masih merupakan hack yang sangat bagus. Terima kasih.
chenwq
9

Saya percaya bahwa alasan cadangan Anda adalah 25 GB dan basis data yang dipulihkan adalah 100 GB bukan karena log transaksi Anda. Yang saya duga adalah, file database Anda memiliki 100 GB ruang yang dialokasikan dan ada 25 GB data aktual dalam database.

Ada perbedaan antara ruang file database yang dialokasikan dan ruang data yang digunakan . Dalam hal ini, yang pertama adalah 100 GB dan yang terakhir adalah 25 GB.

Thomas Stringer
sumber
1
Klien mengalokasikan 75GB ke log transaksi mereka. Setelah memulihkan saya saat ini mengubah alokasi log menjadi 1GB. Jika memungkinkan saya ingin mengembalikan database ini ke server di mana drive memiliki ruang kosong kurang dari 100GB. Tanpa harus mengembalikan ke server lain, potong, cadangan, dan pulihkan kembali.
Adam Butler
@ Adam Butler, mungkinkah mengembalikan ke server pertama sementara sehingga Anda dapat mengecilkan ukuran file, kemudian membuat cadangan dari salinan dan mengembalikannya di server tujuan?
DForck42