2009-10-26 35 views
17

Tôi đã thiết lập thành công FILESTREAM trên máy chủ SQL 2008 của mình; tuy nhiên tôi đã nhận thấy rằng ngay cả khi tôi đã xóa các hàng chứa dữ liệu FILESTREAM, tệp dữ liệu vật lý dường như không bị xóa.FILESTREAM tệp bị bỏ lại sau khi hàng bị xóa

Bởi tệp vật lý, tôi có nghĩa là tệp trong thư mục được quản lý của SQLServer có một uniqueidentifer làm tên tệp không phải tệp gốc được thêm vào dbase.

Có ai biết liệu SQLServer có xóa tệp cuối cùng không? Nếu có rất nhiều tập tin lớn bị loại bỏ khỏi dbase tôi mong đợi để có thể đòi lại không gian một cách nhanh chóng đó là tất cả.

Cảm ơn,

Dale

Trả lời

20

FILESTREAM dữ liệu phụ thuộc vào kiểm soát giao dịch và do đó không bị xóa ngay lập tức.

Thay vào đó, SQL Server chạy bộ thu gom rác để xóa dữ liệu cũ khi chắc chắn rằng dữ liệu đã bị xóa cuối cùng.

Từ documentation:

FILESTREAM thu gom rác thải là một nhiệm vụ nền mà được kích hoạt bởi các quá trình cơ sở dữ liệu trạm kiểm soát. Một trạm kiểm soát được tự động chạy khi đủ nhật ký giao dịch được tạo ra. Để biết thêm thông tin, hãy xem Sách SQL Server 2008 trực tuyến chủ đề “CHECKPOINT và Phần hoạt động của Nhật ký” (http://msdn.microsoft.com/en-us/library/ms189573.aspx). Do các hoạt động tệp FILESTREAM được ghi nhật ký tối thiểu trong nhật ký giao dịch của cơ sở dữ liệu, có thể mất một lúc trước khi số lượng bản ghi nhật ký giao dịch tạo ra kích hoạt quy trình điểm kiểm tra và thu thập rác xảy ra. Nếu điều này trở thành một vấn đề, bạn có thể ép buộc thu gom rác bằng cách sử dụng câu lệnh CHECKPOINT.

2

DELETE FROM tbl_XXX DECLARE CHECKPOINT @test @test = 0

Run này trong máy chủ sql của bạn và Bạn có thể quan sát các tập tin bị xóa khỏi hệ thống tập tin cũng ..

Bạn có thể đặt số phút hoặc giây để đợi bộ thu gom rác dọn dẹp các tệp từ hệ thống tệp sau khi thực hiện thao tác xóa.

Cảm ơn

haranath

+0

dễ dàng hơn: DELETE FROM tên_bảng CHECKPOINT – DanDan

+1

@DanDan Tôi biết điều này cũng giống như năm trước nhưng tôi chỉ muốn cảnh báo những người dùng khác về nguy cơ vô tình xóa tất cả các hàng trong bảng của bạn khi lệnh 'DELETE FROM table CHECKPOINT' là đã sử dụng. Tôi đã thử nó và nó đã xóa tất cả các hàng trong bảng của tôi. May mắn thay bảng của tôi chỉ chứa dữ liệu mẫu. – corix010

13

sử dụng

sp_filestream_force_garbage_collection 

tiếc là chỉ có công trình> = SQL Server 2012 này

+2

FYI - Đây chỉ dành cho SQL 2012 – NotMe

+0

Có, cảm ơn. Tôi cũng cần điều đó. Một lý do chính đáng để nâng cấp lên năm 2012! – LaBracca

+0

Tôi đã thử điều này trên SQL Server 2012 Express cục bộ của tôi và nó dường như không hoạt động. – corix010

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