Die Amerikaner arbeiten ja nicht so viel mit Bändern wie wir Europäer, daher ist ihnen dieser Bug vermutlich einfach nicht aufgefallen. DPM bietet ja einen Report, der einem anzeigt welche Bänder entnommen werden können und welche nun fällig bzw. überfällig sind und in die Library eingelegt werden sollten.
Dieser Report funktioniert nicht mehr korrekt nach einem Update auf DPM 2012. Bei uns hat sich das so geäußert, dass nur Bänder angezeigt wurden, die sich zum Zeitpunkt des Updates in der Tapelibrary befunden haben. Sämtliche Informationen über in der Zukunft ablaufende Tapes fehlten, obwohl wir diese Informationen in der DPM 2012 Datenbank durchaus finden konnten. Wir haben dies Microsoft gemeldet. Allerdings wurde dort bislang keine Lösung gefunden. Also haben wir uns tiefer damit beschäftigt und haben den Fehler gefunden und stellen hier einen Workaround zur Verfügung mit dem man sich behelfen kann, bis Microsoft hierfür einen Fix bereitstellt.
Der Tapereport benutzt einen Datenbankview in der DPM Datenbank mit dem Namen dbo.vw_DPM_Media:

Dieser Datenbankview zeigt bei uns unterschiedliche Ergebnisse, je nachdem ob wie die Datenbank von DPM2010 oder von DPM2012 benutzen. Also haben wir uns angeschaut ob der View sich geändert hat. Allerdings ist dieser gleich in beiden Versionen:
SELECT DISTINCT Media.SlotNum + 1 AS MediaSlotNumber, Media.BarcodeValue AS MediaBarcode, Media.Label AS MediaLabel, Media.Location AS IsOnline, Library.UserFriendlyName AS LibraryName, dbo.ufn_MM_GetPgLabels(Media.MediaId) AS ProtectedGroupName, MAX(Dataset.ExpiryDate) AS MediaExpiryDate FROM dbo.tbl_MM_Media AS Media INNER JOIN dbo.tbl_MM_ArchiveMedia AS ArchiveMedia ON ArchiveMedia.MediaId = Media.MediaId INNER JOIN dbo.tbl_MM_MediaMap AS MediaMap ON MediaMap.MediaId = ArchiveMedia.MediaId INNER JOIN dbo.tbl_MM_PhysicalDataset AS Dataset ON Dataset.DatasetId = MediaMap.DatasetId LEFT OUTER JOIN dbo.tbl_MM_Library AS Library ON Library.LibraryId = Media.LibraryId WHERE (Dataset.LifeStatus = 1 OR Dataset.LifeStatus = 2) AND (Dataset.Vault = 1 OR Dataset.Vault = 3 OR Dataset.Vault = 4 OR Dataset.Vault = 5) AND (dbo.ufn_MM_IsOffsiteReadyTape(Media.MediaId) = 1) GROUP BY Media.SlotNum, Media.BarcodeValue, Media.Label, Media.Location, Library.UserFriendlyName, dbo.ufn_MM_GetPgLabels(Media.MediaId)
Also sind wir noch einen Schritt tiefer gegangen und haben uns die Funktionen dazu angeschaut und sind dabei fündig geworden. Die Funktion dbo.ufn_MM_IsOffsiteReadyTape ist nicht vollständig übernommen werden. Die Funktion findet sich in beiden Datenbanken unter Functions -> Scalar-valued Function:

Diese Funktion sieht in DPM 2012 so aus:
USE [DPMDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ALTER FUNCTION [dbo].[ufn_MM_IsOffsiteReadyTape](@MediaId Guid) RETURNS bit AS BEGIN DECLARE @IsOffsiteReady bit; SELECT @IsOffsiteReady = OffsiteReady FROM tbl_MM_ArchiveMedia WHERE MediaId = @MediaId RETURN @IsOffsiteReady; END
während sie in der vorherigen Version DPM 2010 deutlich länger ist und wie man am Code sieht auch deutlich mehr macht:
USE [DPMDB] GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER OFF GO ALTER FUNCTION [dbo].[ufn_MM_IsOffsiteReadyTape](@MediaId Guid) RETURNS bit AS BEGIN DECLARE @OptimizeTapeUsage bit DECLARE @CurrentDateTime DateTime DECLARE @WritePeriodRatio float DECLARE @IsOffsiteReady bit SET @CurrentDateTime = GetUTCDate() SET @IsOffsiteReady = 0; SELECT @OptimizeTapeUsage = CAST(CAST (PropertyValue as NVarChar(10))as bit) FROM dbo.tbl_DLS_GlobalSetting WHERE PropertyName = N'OptimizeTapeUsage' IF(@OptimizeTapeUsage IS NULL) BEGIN SET @OptimizeTapeUsage = 0 END ELSE BEGIN SELECT @WritePeriodRatio = CAST(CAST (PropertyValue as NVarChar(256))as float) FROM dbo.tbl_DLS_GlobalSetting WHERE PropertyName = N'TapeWritePeriodRatio' ...... gekürzt (vollständige Version -> siehe DPM2010 DB) ....... WHERE Media.MediaId = @MediaId AND (Dataset.LifeStatus = 1 OR Dataset.LifeStatus = 2) AND -- 0=BeingCreated, 1=Created, 2=Reclaimed, 3=Invalid, 4=intermediate (Dataset.Vault = 1 OR Dataset.Vault = 3 OR Dataset.Vault = 4 OR Dataset.Vault = 5) --1 = offsite, 3 = offsite1, 4 = offsite2, 5 = offsite3 ) BEGIN SET @IsOffsiteReady = 1 END END RETURN @IsOffsiteReady; END
Workaround ist also einfach die Funktion aus der DPM 2010 Datenbank kopieren und damit die Funktion in der DPM 2012 Datenbank überschreiben.
Anschließend zeigt der Datenbankview dbo.vw_DPM_Media wieder korrekte Ergebnisse und da dieser die Basis des Tapereports ist, wird auch im Tapereport wieder die richtigen Bänder angezeigt.
Wer Hilfe braucht beim Umsetzen: einfach melden.





