2010-02-02 41 views
13

Tôi có một bản sao lưu cơ sở dữ liệu mà SQL Server Management Studio cho biết có ba tệp trong đó: tệp .mdf, tệp .ndf và một tệp .ldf. Tệp dữ liệu thứ cấp này (.ndf) được tạo ra không có lý do rõ ràng, vì vậy tôi muốn xóa hoàn toàn (không mất dữ liệu), tốt nhất là trong khi cơ sở dữ liệu đang được khôi phục từ bản sao lưu.Xóa (hợp nhất) tệp dữ liệu thứ cấp của cơ sở dữ liệu SQL Server

Điều này có thể thực hiện được không?

+0

Mục đích của NDF là phân phối tệp IO. Nếu bạn sống máy chủ có NDF không tinker với lược đồ. Tại sao NDF lại làm phiền bạn? –

+3

@Hassan Nó được tạo ra chỉ để vượt qua phân mảnh ổ đĩa NTFS và nó không có lý do khác cho sự tồn tại của nó. Mặc dù tôi đồng ý rằng NDF là tốt, nhưng việc tạo NDF bất cẩn là điều xấu. –

Trả lời

14

Ok, đã tìm được giải pháp.

Đầu tiên sao lưu cơ sở dữ liệu.

Execute này:

USE database_name; 

Sau đó thực hiện điều này, và thay thế logical_ndf_file_name với tên logic của tập tin NDF của bạn (mà bạn có thể dễ dàng tìm hiểu qua Database-> Properties_Files):

DBCC SHRINKFILE('logical_ndf_file_name', EMPTYFILE); 
ALTER DATABASE database_name REMOVE FILE logical_ndf_file_name; 
+0

có dữ liệu nào trong tệp của bạn không? và nếu như vậy phải mất bao lâu, và là DB sống? –

+0

@Hassan NDF khoảng 8 Gb, trong khi MDF khoảng 60 Gb. Tất cả mất khoảng 20 phút. Bạn không chắc chắn về ý nghĩa của từ "sống". Tôi đã không mang nó ngoại tuyến, nhưng không có truy vấn nào được chạy với nó. –

+0

thông tin thú vị. Bởi Live tôi có nghĩa là sử dụng sản xuất hoặc khách hàng phải đối mặt. –

0

Tôi chạy các sản phẩm nào theo sau là thả ndf trong quá trình tải produciton thành công. Tôi nghĩ rằng điều quan trọng là chạy ndf thả trong cùng một giao dịch như là rỗng để đảm bảo cơ sở dữ liệu không cố ghi vào tệp bạn đang xóa, nhưng sau khi cơ sở dữ liệu trống đánh dấu các tệp không sử dụng được, được chứng minh bằng cách thử trống rỗng sau đó.

Các vấn đề liên quan