문제

SQL 2008 서버에서 Filestream을 성공적으로 설정했습니다. 그러나 Filestream 데이터가 포함 된 행을 삭제 한 경우에도 실제 데이터 파일이 삭제되지 않는 것 같습니다.

물리적 파일에 의해, 나는 Dioridenifer가 dbase에 추가 된 원본 파일이 아닌 filename으로 SqlServer의 Managed Directory의 파일을 의미합니다.

SQLServer가 결국 파일을 삭제할 것인지 아는 사람이 있습니까? DBase에서 큰 파일이 많이 제거되면 공간을 빨리 되 찾을 수있을 것으로 예상됩니다.

도움이 되었습니까?

해결책

FILESTREAM 데이터는 트랜잭션 제어의 적용을 받으므로 즉시 삭제되지 않습니다.

대신에, SQL Server 궁극적으로 삭제되었을 때 이전 데이터를 제거하는 쓰레기 수집기를 실행합니다.

로부터 선적 서류 비치:

FILESTREAM 쓰레기 수집은 데이터베이스 체크 포인트 프로세스에 의해 트리거되는 배경 작업입니다. 충분한 트랜잭션 로그가 생성 될 때 체크 포인트가 자동으로 실행됩니다. 자세한 내용은 SQL Server 2008 책 온라인 주제 "CHECKPOINT 그리고 로그의 활성 부분”(http://msdn.microsoft.com/en-us/library/ms189573.aspx). 을 고려하면 FILESTREAM 파일 운영은 데이터베이스의 트랜잭션 로그에 최소 로그인되며, 트랜잭션 로그 레코드 수가 트리거되고 체크 포인트 프로세스가 발생하고 쓰레기 수집이 발생하기까지 시간이 걸릴 수 있습니다. 이것이 문제가되면 CHECKPOINT성명.

다른 팁

사용

sp_filestream_force_garbage_collection

불행히도 이것은> = SQL Server 2012 만 작동합니다

tbl_xxx에서 삭제 @test checkpoint @test = 0을 삭제하십시오

SQL Server에서 이것을 실행하면 파일 시스템에서 파일이 삭제되는 것을 관찰 할 수 있습니다.

삭제 작업을 수행 한 후 쓰레기 수집기가 파일 시스템에서 파일을 정리할 때까지 대기 할 때까지 몇 분 또는 초를 설정할 수 있습니다.

감사

하라 나트

먼저 당신은 a를 만들어야합니다 검문소쓰레기 수집가 일하다. 행을 삭제 한 후이 코드를 실행하여 행에 속하지 않은 모든 파일을 제거 할 수 있습니다.

USE [DataBaseName]
GO

-- Create a checkpoint on current database
CHECKPOINT
GO 

-- Execute Garbage Collector after a checkpoint created
EXEC sp_filestream_force_garbage_collection  'DataBaseName'
GO
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top