Tapereport zeigt keine Expired Tapes mehr an nach Update auf DPM 2012

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.

DPM 2012 und SQL 2005

Eigentlich sollte es ja unter Microsoft Produkten eine Testphase geben , in denen Probleme und Bugs behoben werden, wenn sie der Entwicklungsabteilung bekannt werden, doch leider nicht in diesem Falle.

Seit der DPM 2012 Beta und RC Version ist es Microsoft bekannt, das SQL 2005 Server nicht (mehr) gesichert werden können. Auch ein entsprechender Call bei Microsoft wurde mit der Info geschlossen, das es sich hierbei um einen offiziellen Bug handelt, der erst mit dem nächsten QFE (Quick Fix Engeneering) gelöst wird.

Ergo heißt es nun erst einmal einen Workaround finden. Hierzu habe ich einmal die entsprechenden Vorgehensweise Schritt für Schritt dargestellt.

–> Starten des SQL Server Agent(s) für die entsprechende Instanz
–> Öffnen des SQL Management Studio und gegen die Instanz verbinden
–> Nun den Tab Management erweitern und mit einem Rechtsklick den Maintenance Plan Wizard öffnen

Als Nächstes treffen wir nun die Auswahl des Namens für den Plan und die Zeiten wann er ausgeführt werden soll.

Hierbei ist es wichtig die Auswahl des „Schedulers“ entsprechend an zu passen. Ich habe hier (später seht ihr es noch genauer) ein tägliches „Full-Backup“ geplant, bei sehr großen Datenbanken würde ich jedoch empfehlen, 2 Pläne an zu legen und nur am Wochenende ein „Full-Backup“ zu machen und unter der Woche mit dem zweiten Plan ein „Incremental-Backup“ machen zu lassen. Entsprechend solltet ihr die Zeiten dann anpassen. Im nächsten Schritt könnt ihr die Auswahl vornehmen.

Wie bereits gesagt empfiehlt es sich bei größeren Datenbanken ein wöchentliches Full und ein Daily Incremental als Plan an zu legen. Hier jedoch – da meine Datenbank nur sehr klein ist – verzichte ich darauf und lege ein tägliches Full-Backup an.

 — > WICHTIG !!!

Bei dem Pull Down Menü Database(s) “ ALL DATABASES“ auswählen, da sonst unter Umständen nicht alle Datenbanken in die Sicherung mit aufgenommen werden.

Ansonsten „nur“ noch den Sicherungspfad eintragen

Hier kann noch der Pfad für das LOG File und eine Email Adresse für einen Report eingetragen werden.

 

So … Nun ist es geschafft 😉

Den Datenpfad dann nur noch aufnehmen in eine Protection-Group und schon habt ihr vorerst wieder eine Sicherung eures SQL Server 2005.

Wir informieren euch, wenn das QFE verfügbar ist.