Applies ToSQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2012 Developer SQL Server 2012 Enterprise SQL Server 2012 Standard SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Developer - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Enterprise - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Standard - duplicate (do not use) SQL Server 2014 Service Pack 2 - duplicate (do not use)

증상

Microsoft SQL Server 2012 또는 SQL Server 2014를 사용 하 고 있다고 가정 합니다. RBS (원격 BLOB 저장소) 유지 관리자를 실행 하는 경우 RBS 유지 관리자 도구가 실패 하 고 다음 오류 메시지가 나타납니다.

유지 관리자 작업 시작 가비지 수집 시작 참조 검색을 시작 합니다. 이 데이터베이스에 대 한 참조 검사가 완료 되었습니다. 113 blob을 검색 했습니다. 0x000000000000000000000000 (exclusive) 범위의 0 개 blob을 0x00000000000000b600000002 (포함)로 삭제 했습니다. 이 작업은 종료 되었습니다. 1 개의 작업 단위 총을 처리 했습니다. 0 개의 작업 단위가 완료 되지 않았습니다. 삭제 전파를 시작 합니다. 지금은 작업을 사용할 수 없습니다. 다른 클라이언트, 프로세스나 스레드는 현재 다른 작업에 대해 작업 중일 수 있습니다. 오류가 발생 하 여 현재 작업 단위를 건너뜁니다. 자세한 내용은 RBS 유지 관리자 로그를 참조 하세요. [..] 이 작업은 종료 되었습니다. 처리 됨 102 총 작업 단위. 101 작업 단위가 완료 되지 않았습니다. 0 개 blob을 삭제 하는 데 필요 합니다. 0 blob을 삭제 했습니다. blob 저장소에서 0 개의 blob을 찾을 수 없습니다. 이 작업은 종료 되었습니다. 이 작업은 종료 되었습니다.

프로필러를 사용 하 여 문제를 추적 하는 경우 다음 오류 메시지가 나타납니다.

메시지 5만, 수준 16, 상태 0, 프로시저 rbs_sp_rethrow_error, 꺾은선형 38RBS 오류. 원본 오류: 숫자 535, 심각도 16, 상태 0, 프로시저 rbs_sp_count, 줄 52, 메시지: datediff 함수에서 오버플로가 발생 했습니다. 두 날짜/시간 인스턴스가 구분 되는 dateparts 수가 너무 큽니다. 보다 정확한 datepart를 사용 하 여 datediff를 사용해 봅니다.

원인

이 문제는 마지막 실행 이후 시간을 검사 하는 쿼리가 값을 밀리초로 변환할 때 오버플로될 수 있기 때문에 발생 합니다. 이로 인해 쿼리가 실패 하 고 작업이 데이터를 처리 하지 않고 종료 됩니다.

해결 방법

이 문제에 대 한 픽스는 RBS에 대 한 최신 기능 팩 다운로드에서 확인할 수 있습니다. 이미 기존 RBS가 설치 되어 있는 경우 "해결 방법" 섹션에 나와 있는 스크립트를 실행 하 여 문제를 일시적으로 해결 하는 것이 좋습니다.

MICROSOFT Sql server 2014 SP2 (서비스 팩 2) 기능 팩 다운로드 microsoft Sql Server 2012 서비스 팩 4(Sp4)의 기능 팩 다운로드

해결 방법

수정 프로그램이 설치 되지 않은 SQL Server 2012 또는 SQL Server 2014에 기존 RBS가 설치 되어 있는 경우 다음 해결 단계를 사용할 수 있습니다.

  1. SSMS에서 3 단계의 스크립트를 연 다음 수정 프로그램을 적용 하려는 RBS 클라이언트 데이터베이스를 호스트 하는 SQL Server 인스턴스에 연결 합니다.

  2. 스크립트에서 "your_RBS_client_database" 문자열을 RBS 클라이언트 데이터베이스의 실제 이름으로 바꿉니다.

  3. 스크립트를 실행 하 여 수정 프로그램을 적용 합니다.use [your_RBS_client_database]go if object_id(N'mssqlrbs_resources.rbs_sp_count') is not null drop procedure mssqlrbs_resources.rbs_sp_countgo create procedure mssqlrbs_resources.rbs_sp_count ( @operation smallint, @object smallint = 0, @value bigint = null, @start_time datetime = null, @end_time datetime = null, @description sysname = N'', @message nvarchar(max) = null)asbegin declare @type tinyint, @secondsUsed bit, @seconds float declare @maxDays int = 10; if not exists ( select * from mssqlrbs_resources.rbs_internal_counters where operation = @operation and object = @object and description = @description ) raiserror (N'Internal error in RBS. Attempt to count invalid performance counter. Counter: <%d>.<%d>.<%s>.', 16, 101, @operation, @object, @description) select @type = type, @secondsUsed = seconds_used from mssqlrbs_resources.rbs_internal_counters where operation = @operation and object = @object and description = @description if @object != 0 begin if @value is null raiserror (N'Internal error in RBS. Value not specified for performance counter <%d>.<%d>.<%s>.', 16, 103, @operation, @object, @description) end if @secondsUsed = 1 begin if (@start_time is null) raiserror (N'Internal error in RBS. Start time not specified for performance counter <%d>.<%d>.<%s>.', 16, 102, @operation, @object, @description) set @end_time = isnull(@end_time, getutcdate()) if (@start_time > @end_time) raiserror (N'Internal error in RBS. Start time is after end time. Counter: <%d>.<%d>.<%s>.', 16, 104, @operation, @object, @description) if (datediff(day, @start_time, @end_time) >= @maxDays) begin set @seconds = convert(float, datediff(second, @start_time, @end_time)) end else begin set @seconds = convert(float, datediff(millisecond, @start_time, @end_time)) / 1000 end end update mssqlrbs_resources.rbs_internal_counters set count = count + 1, value = value + @value, squared_value = squared_value + square(@value), min_value = case when min_value is null then @value when (@value < min_value) then @value else min_value end, max_value = case when max_value is null then @value when (@value > max_value) then @value else max_value end, last_value = @value, seconds = seconds + @seconds, squared_seconds = squared_seconds + square(@seconds), min_seconds = case when min_seconds is null then @seconds when (@seconds < min_seconds) then @seconds else min_seconds end, max_seconds = case when max_seconds is null then @seconds when (@seconds > max_seconds) then @seconds else max_seconds end, last_seconds = @seconds, last_update_time = getutcdate(), last_message = @message where operation = @operation and object = @object and description = @description endgo

상태

Microsoft는 "적용 대상" 절에 나열한 제품에서 이 문제를 확인했습니다.

도움이 더 필요하세요?

더 많은 옵션을 원하세요?

구독 혜택을 살펴보고, 교육 과정을 찾아보고, 디바이스를 보호하는 방법 등을 알아봅니다.

커뮤니티를 통해 질문하고 답변하고, 피드백을 제공하고, 풍부한 지식을 갖춘 전문가의 의견을 들을 수 있습니다.