DPMSYNC bricht ab und hinterlässt DPM in einem invaliden Zustand

Heute hatte ich das folgende Problem bei einem Kunden:
Er ließ DPMSYNC im nicht elevated Prompt laufen und kassierte eine Fehlermeldung und einen Absturz.

Danach standen alle Backupjobs und die DPM Konsole ließ sich auch nicht mehr starten (Error 948).
Dazu muss man wissen, dass bevor DPMSYNC seine Arbeit aufnimmt, er die DPMDB entsprechend markiert, damit in der Zwischenzeit nicht andere Services dazwischenpfuschen.

Lässt man folgende Query durchlaufen und bekommt eine 1 als Value angezeigt, so befindet sich die DPMDB noch im Recovery Zustand. Die 1 bedeutet, dass DPMSYNC beendet wurde oder abgebrochen wurde noch bevor das Tool fertig war:

Select * from Tbl_dls_globalsetting where PropertyName='DBRecovery'

Dieser muss erst beendet werden.

Dafür gibt es zwei Möglichkeiten:
1. Man lässt DPMSYNC -Sync laufen
2. Man ändert die Property manuell. Dafür muss aber sichergestellt sein, dass sich die Datenbank ansonsten in einem einwandfreien Zustand befindet. Hatte man vorher also schon Probleme mit der DB und DPM, sollte man lieber Möglichkeit 1 benutzen.

Möglichkeit Nr. 1 ist auch die einzig dokumentierte und offizielle.

Hat man dies gemacht, so kann man den Status mit der SQL Abfrage erneut prüfen und nun sollte bei Value eine 0 stehen.

Überfällige Bänder aus der Datenbank entfernen (DPM 2010)

Oftmals gibt es das Problem, dass Bänder im Tape Report auftauchen, die eigentlich nicht mehr verwendet werden sollen oder können.
Diese tauchen jedoch bei jedem Report erneut auf und können über die GUI nicht gelöscht werden.

Um die Bänder zu entfernen ist es notwendig sie in der Datenbank zu löschen. Bisher habe ich das SQL Command jedoch nur für die MS DPM 2010  Datenbank verwendet. Über eine Info ob es auch im DPM 2012 klappt würden wir uns freuen.
Bitte denkt immer daran vor Eingriffen in die Datenbank ein Backup zu machen 😉

Um das Command aus zu führen öffnet ihr das SQL Management Studio und verbindet euch auf die SQL DB Meist

localhost\MSDPM2010

Als nächstes Müsst ihr eine neue SQL Abfrage ( SQL Query) erstellen:

New SQL Query

Nun einfach die folgende Abfrage kopieren und entsprechend wie folgt anpassen:

den ´TAPE LABEL NAME´ zwischen den 2 ‚ anpassen mit dem Tape Label Namen den ihr löschen wollt.
Es empfiehlt sich den Namen vorher aus dem DPM Tape Report zu kopieren, damit Fehler vermieden werden.

Bitte beachtet das es sich hierbei nicht um den Namen auf dem Tape sondern den Tape Label Namen auf dem Tape Report von DPM handelt der entsprechend gelöscht/eingetragen werden muss.

———- START COPY HERE ————-

— overdue tapes
— for clarity, set up the parameter as a variable
declare @paramTapeLabel as nvarchar(256)
set @paramTapeLabel = N’TAPE LABEL NAME‘

— keys
declare @vMediaId as guid
declare @vGlobalMediaId as guid

— if the delete gives trouble, add keyset after cursor
declare cur_label cursor
for select MediaId, GlobalMediaId
from tbl_MM_Media
where label = @paramTapeLabel;

open cur_label
while (0 = 0)
begin
fetch next from cur_label into @vMediaId, @vGlobalMediaId
— test for being done
if @@fetch_status <> 0 break;

print ‚Deleting MediaId = ‚ + cast(@vMediaId as varchar(36))
— do a set of deletes atomically
begin transaction;
delete from tbl_MM_TapeArchiveMedia
where MediaId = @vMediaId;

delete from tbl_MM_MediaMap
where MediaId = @vMediaId;

delete from tbl_MM_ArchiveMedia
where MediaId = @vMediaId;

delete from tbl_MM_Global_ArchiveMedia
where MediaId = @vGlobalMediaId;

delete from tbl_MM_Global_Media
where MediaId = @vGlobalMediaId;

delete from tbl_MM_Media
where current of cur_label;

commit transaction;

end
close cur_label
deallocate cur_label

————– END COPY HERE ———————-