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 を使用していることを前提としています。 リモート BLOB ストレージ (RBS) を実行すると、RBS のメンテナツールが失敗し、次のエラーメッセージが表示されます。

メンテナンス担当者のタスクを開始する。 ガベージコレクションを開始しています。 リファレンススキャンを開始しています。 このデータベースの参照スキャンが完了しました。 113 blob をスキャンします。 0x000000000000000000000000 (exclusive) から 0x00000000000000b600000002 (包括) までの blob を0個削除しました。 このタスクは終了しました。 1作業単位の合計が処理されました。 0作業単位が不完全でした。 削除の反映を開始します。 現時点で利用可能な作業はありません。 他のクライアント、プロセス、またはスレッドが、現在他のタスクを処理している可能性があります。 エラーのため、作業の現在の単位をスキップします。 詳細については、「RBS のメンテナログ」を参照してください。 [..] このタスクは終了しました。 102作業単位の合計が処理されました。 101の作業単位が不完全でした。 0 blob を削除する必要があります。 0個の blob の削除に成功しました。 blob ストアで0個の blob が見つかりませんでした。 このタスクは終了しました。このタスクは終了しました。

プロファイラーを使用して問題を追跡すると、次のエラーメッセージが表示されます。

Msg 5万、レベル16、状態0、プロシージャ rbs_sp_rethrow_error、行38RBS エラー。 元のエラー: 数値535、重大度16、状態0、プロシージャ rbs_sp_count、行52、メッセージ: datediff 関数の結果がオーバーフローしました。 2つの日付/時刻インスタンスを区切る dateparts の数が大きすぎます。 より正確な datepart を持つ datediff を使用してみてください。

原因

この問題は、最後の実行が値をミリ秒に変換したときに、前回の実行以降に発生した時間を確認するクエリが原因で発生します。 これにより、クエリは失敗し、タスクはデータを処理せずに終了します。

解決方法

この問題の修正プログラムは、RBS 用の最新機能パックのダウンロードで入手できます。 既に RBS がインストールされている場合は、「回避策」セクションで説明されているスクリプトを実行して、問題を一時的に解決することをお勧めします。

MICROSOFT Sql server 2014 Service pack 2 (SP2) 機能パックのダウンロード microsoft Sql Server 2012 service PACK 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

状態

マイクロソフトでは、この問題をこの資料の対象製品として記載されているマイクロソフト製品の問題として認識しています。

ヘルプを表示

その他のオプションが必要ですか?

サブスクリプションの特典の参照、トレーニング コースの閲覧、デバイスのセキュリティ保護方法などについて説明します。

コミュニティは、質問をしたり質問の答えを得たり、フィードバックを提供したり、豊富な知識を持つ専門家の意見を聞いたりするのに役立ちます。