סימפטומים
נניח שאתה משתמש ב- Microsoft SQL Server 2012 או ב- SQL Server 2014. בעת הפעלת 'מתחזק אחסון BLOB מרוחק (RBS)', כלי התחזוקה של RBS נכשל ואתה מקבל את הודעת השגיאה הבאה:
הערה
הפעלת משימות תחזוקה.
התחלת איסוף אשפה.
הפעלת סריקת העיון.
סריקת הפניות הושלמה עבור מסד נתונים זה.
סרק 113 כתמים. מחיקת 0 נקודות Blob בטווח שבין 0x000000000000000000000000(לא כולל) עד 0x00000000000000b600000002(כולל).
משימה זו הסתיימה. עובד 1 יחידות עבודה בסך הכל. 0 יחידות עבודה לא הושלמו.
התחלת הפצת מחיקה.
אין עבודה זמינה כעת.
ייתכן שלקוחות, תהליכים או שרשורים אחרים עובדים כעת על משימות אחרות.
דילוג על יחידת העבודה הנוכחית עקב שגיאה. לקבלת מידע נוסף, עיין ביומן RBS Maintainer.
[..]
משימה זו הסתיימה. עיבדו 102 יחידות עבודה בסך הכל. 101 יחידות עבודה לא הושלמו. נדרש למחיקת 0 כתמים. הצליח למחוק 0 כתמים, 0 כתמים לא נמצאו במאגר הכתמים.
משימה זו הסתיימה.
משימה זו הסתיימה.
בעת שימוש ב-Profiler כדי לעקוב אחר הבעיה, מתקבלת הודעת השגיאה הבאה:
הערה
Msg 50000, רמה 16, מצב 0, נוהל rbs_sp_rethrow_error, שורה 38
שגיאת RBS. שגיאה מקורית: מספר 535, חומרה 16, מצב 0, נוהל rbs_sp_count, שורה 52,
הודעה: הפונקציה datediff גרמה לגלישה. מספר חלקי התאריך המפרידים בין שני מופעי תאריך/שעה גדול מדי. נסה להשתמש ב-datediff עם datepart פחות מדויק.
גורם
בעיה זו מתרחשת מכיוון ששאילתה הבודקת את הזמן מאז הביצוע האחרון עלולה לגלוש בעת המרת ערך לאלפיות שניה. פעולה זו גורמת לשאילתה להיכשל ולסיום המשימה ללא עיבוד הנתונים.
פתרון
התיקון לבעיה זו זמין בהורדת ערכת התכונות העדכנית ביותר עבור RBS.msi. אם כבר יש לך התקנה קיימת של RBS, מומלץ להפעיל את קובץ ה- Script הכלול בסעיף "פתרון" כדי לפתור את הבעיה באופן זמני.
הורד את ערכת התכונות Microsoft SQL Server 2014 Service Pack 2 (SP2)
הורד את ערכת התכונות Microsoft SQL Server 2012 Service Pack 4 (SP4)
פתרון
אם יש לך התקנה קיימת של RBS ב- SQL Server 2012 או SQL Server 2014 שלא מותקן בה התיקון, באפשרותך להשתמש בשלבי הפתרון הבאים:
ב- SSMS, פתח את קובץ ה- Script משלב 3 ולאחר מכן התחבר למופע של SQL Server המארח את מסד הנתונים של לקוח RBS שעליו ברצונך להחיל את התיקון.
בקובץ ה- Script, החלף את המחרוזת "your_RBS_client_database" בשם בפועל של מסד הנתונים של לקוח RBS.
הפעל את קובץ ה- Script כדי להחיל את התיקון.
השתמש ב- [your_RBS_client_database]
בצעאם object_id(N'mssqlrbs_resources.rbs_sp_count') אינו Null
פרוצדורת שחרור mssqlrbs_resources.rbs_sp_count
בצע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
)
כ
התחלההצהר @type tinyint,
@secondsUsed סיביות,
@seconds לצוףDeclaration @maxDays int = 10;
if not exists (
בחר * מתוך mssqlrbs_resources.rbs_internal_counters
כאשר פעולה = @operation ואובייקט = @object ותיאור = @description
)
raiserror (N'שגיאה פנימית ב-RBS. ניסיון לספור מונה ביצועים לא חוקי. מונה: <%d>.<%ד>.<%s>.',
16, 101, @operation, @object, @description)בחר
@type = סוג,
@secondsUsed = seconds_used
מ-
mssqlrbs_resources.rbs_internal_counters
כאשר
operation = @operation and
אובייקט = @object וגם
תיאור = @descriptionif @object != 0
התחלה
if @value is null
raiserror (N'שגיאה פנימית ב-RBS. ערך שלא צוין עבור מונה <הביצועים %d>.<%ד>.<%s>.',
16, 103, @operation, @object, @description)
endif @secondsUsed = 1
התחלה
If (@start_time is null)
raiserror (N'שגיאה פנימית ב-RBS. שעת ההתחלה לא צוינה עבור מונה <הביצועים %d>.<%ד>.<%s>.',
16, 102, @operation, @object, @description)Set @end\_time = isnull(@end_time, getutcdate())
אם (@start_time >@end\_time)
raiserror (N'שגיאה פנימית ב-RBS. שעת ההתחלה היא לאחר שעת הסיום. מונה: <%d>.<%ד>.<%s>.',
16, 104, @operation, @object, @description)if (datediff(day, @start\_time, = @end\_time)>@maxDays)
התחלה
Set @seconds = convert(float, datediff(second, @start\_time, @end\_time))
end
אחר
התחלה
Set @seconds = convert(float, datediff(millisecond, @start\_time, @end\_time)) / 1000
end
endעדכון mssqlrbs_resources.rbs_internal_counters
הגדרה
count = count + 1,
ערך = ערך + @value,
squared_value = squared_value + square(@value),
min_value = רישיות
כאשר min_value הוא Null אז @value
כאשר (@value < min_value) אז @value
אחרת min_value
סוף,
max_value = מקרה
כאשר max_value הוא Null אז @value
כאשר (@value > max_value) אז @value
אחרת max_value
סוף,
last_value = @value,
שניות = שניות + @seconds,
squared_seconds = squared_seconds + square(@seconds),
min_seconds = מקרה
כאשר min_seconds הוא Null אז @seconds
כאשר (@seconds < min_seconds) אז @seconds
אחרת min_seconds
סוף,
max_seconds = מקרה
כאשר max_seconds הוא Null אז @seconds
כאשר (@seconds > max_seconds) אז @seconds
אחרת max_seconds
סוף,
last_seconds = @seconds,
last_update_time = getutcdate(),
last_message = @message
כאשר
operation = @operation and
אובייקט = @object וגם
תיאור = @descriptionend
בצע
מצב
Microsoft אישרה שזוהי בעיה במוצרי Microsoft המפורטים בסעיף "חל על".