Tại sao kích thước tệp .bak tăng / nhân đôi với mỗi lần sao lưu liên tiếp trên SQL Server?


10

Tôi đang chạy một DB đơn giản trên SQL Server 2012 Express.

Mới hôm nay, khi tôi sao lưu cơ sở dữ liệu, .bakkích thước tệp tăng gấp đôi so với bản sao lưu trước đó chỉ vài phút trước đó. Tôi đã thực hiện một số bản sao lưu ngày hôm nay (thông qua SQL Server Management Studio -> loại sao lưu: đầy đủ) và với mỗi bản sao, .baktệp sẽ tiếp tục nhân đôi.

Trong SQL Server Mgmt Studio, khi tôi nhấp chuột phải vào DB của tôi -> 'Báo cáo' -> 'Sao lưu và khôi phục sự kiện' -> mở rộng 'Hoạt động sao lưu thành công':

Báo cáo ở đây cho thấy kích thước sao lưu mới nhất được ghi .baklà 55 MB , nhưng khi tôi đi đến tệp thực tế thì nó là 260 MB. Mỗi bản sao lưu khác ngày hôm nay cũng được ghi là kích thước 55 MB, trong khi các .baktệp tương ứng của chúng lớn hơn nhiều lần (và tăng lên với mỗi hoạt động sao lưu).

Điều gì có thể đi sai? Tôi đã không thực hiện bất kỳ thay đổi nào đối với cơ sở dữ liệu kể từ khi điều này bắt đầu xảy ra.

Câu trả lời:


12

Tệp sao lưu chứa nhiều bản sao của cơ sở dữ liệu vì nó không được "khởi tạo" hoặc "định dạng" với mỗi bản sao lưu.

Chuyển đến tab 'Tùy chọn' trên hộp thoại "Sao lưu cơ sở dữ liệu" và chọn "Ghi đè tất cả các bộ sao lưu hiện có":

nhập mô tả hình ảnh ở đây


8

Tôi giả sử bạn đang sao lưu cùng một tệp mỗi lần. Có một tùy chọn để INIThoặc NOINITkhi bạn chạy một bản sao lưu. NOINIT(là mặc định) bảo nó chỉ cần thêm một bản sao lưu bổ sung vào tệp.

Mỗi BOL:

{NOINIT | TRONG ĐÓ }

Kiểm soát xem hoạt động sao lưu có thêm hoặc ghi đè lên các bộ sao lưu hiện có trên phương tiện sao lưu hay không. Mặc định là nối thêm vào bộ sao lưu gần đây nhất trên phương tiện truyền thông (NOINIT).

Vì vậy, mỗi lần bạn chạy bản sao lưu 55 MB, tệp sẽ lớn hơn ~ 55 MB.

Nếu bạn bao gồm INITmệnh đề trong lệnh sao lưu của mình thì nó sẽ ghi đè lên bản sao lưu hiện có mỗi lần.

Tất nhiên, tùy chọn khác là chạy các bản sao lưu của bạn vào các tệp mới mỗi lần và dọn sạch các tệp cũ. Đây thường là một ý tưởng tốt trong trường hợp một trong các bản sao lưu hiện tại là xấu, hoặc bạn cần khôi phục vào lịch sử.


2

Nếu bạn đang làm điều đó trong SQL không sử dụng thuật sĩ phòng thu quản lý máy chủ sql. Bạn phải chỉ định "NOINT" hoặc "INIT" khi sao lưu để nói thêm vào tệp hoặc ghi đè lên tương ứng.

Đây là SQL cho nó

BACKUP DATABASE <data_base_name> TO DISK = <File_Path> WITH INIT
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.