In diesem Beitrag möchte ich euch zeigen, wie man verwaiste SharePoint Datenbanken entfernen kann.
Es kann immer mal wieder vorkommen, dass verwaiste Inhaltsdatenbanken beim eigentlichen Entfernen entstehen. Somit ist ein Zugriff nicht mehr möglich, SharePoint ist aber immer noch anderer Meinung. Dadurch kann es zu Problemen bei Updates, Hinzufügen der Datenbank aus dem Backup etc. kommen.
Um verwaiste SharePoint Datenbanken entfernen zu können, gibt es zwei Möglichkeiten. Die erste und einfachere Variante ist, dass die verwaiste Inhaltsdatenbank zumindest über den Befehl Get-SPDatabase
noch auffindbar ist. Das Entfernen dieser Datenbank kann dann mit folgenden Befehlen durchgeführt werden:
$contentDatabase = Get-SPDatabase -Identity "<GUID>" $contentDatabase.Delete() $contentDatabse.Unprovision()
Allerdings kann es auch passieren, dass die Inhaltsdatenbank mit dem Befehl Get-SPDatabase
nicht mehr angezeigt wird. Somit muss man nun zur zweiten Möglichkeit greifen. Dazu benötigt man aber zwingend die GUID
der Inhaltsdatenbank. Dann kann man mit folgenden Befehlen mögliche verwaiste SharePoint Datenbanken entfernen:
$wa = Get-SPWebApplication -Identity http://sharepoint.intra $wa.ContentDatabases.Delete("<GUID>")
Aber Achtung, das Löschen der Datenbank wird mit einem Fehler quittiert. Dies ist allerdings in Ordnung und SharePoint entfernt die verwaiste Inhaltsdatenbank trotzdem.
Möchte man die Fehlermeldung näher analysieren und das Ergebnis selbst validieren, kann man dies natürlich auch tun. Dazu muss man allerdings eine SQL-Abfrage auf der Konfigurationsdatenbank der SharePoint Farm ausführen. Also am Besten vorher eine Kopie erstellen und dort die Abfrage ausführen:
USE SP_Config SELECT ID, CAST(Properties as XML) AS 'Properties' FROM Objects WHERE ID = '<GUID>' -- GUID of the Web Application
Die GUID der Webanwendung kann man recht einfach über PowerShell herausfinden. In unserem Beispiel geht dies einfach über das Kommando $wa.Id
. Das Ergebnis der SQL-Abfrage wird als XML ausgegeben, was für den normalen Benutzer wesentlich einfacher zu verstehen ist. 🙂
Das Ergebnis dieser Abfrage sieht dann folgendermaßen aus (Auszug vom Anfang):
<object type="Microsoft.SharePoint.Administration.SPWebApplication, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"> <sFld type="Boolean" name="m_RequireContactForSelfServiceSiteCreation">False</sFld> <sFld type="Int32" name="m_StorageMetricsProcessingDuration">30</sFld> <sFld type="Boolean" name="m_EventHandlersEnabled">False</sFld> <sFld type="Boolean" name="m_SendLoginCredentialsByEmail">True</sFld> <fld type="Microsoft.SharePoint.SPBasePermissions, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" name="m_RightsMask">FullMask</fld> <fld type="Microsoft.SharePoint.SPBasePermissions, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" name="m_ApplicationPrincipalMaxRights">ViewListItems, AddListItems, EditListItems, DeleteListItems, ApproveItems, OpenItems, ViewVersions, DeleteVersions, CancelCheckout, Open, ViewPages, BrowseUserInfo, UseRemoteAPIs</fld> <fld type="Microsoft.SharePoint.Administration.SPContentDatabaseCollection, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c" name="m_ContentDatabases"> <object type="Microsoft.SharePoint.Administration.SPContentDatabaseCollection, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c"> <fld type="System.Collections.Generic.Dictionary`2[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Microsoft.SharePoint.Administration.SPContentDatabase, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" name="m_Databases"> <sFld type="Guid">0a555dd6-f40f-4ede-ae29-c4a154653760</sFld> <fld type="Microsoft.SharePoint.Administration.SPContentDatabase, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">0a555dd6-f40f-4ede-ae29-c4a154653760</fld> <sFld type="Guid">4c36cbec-313e-42e2-a9e1-58ba3d407ca4</sFld> <fld type="Microsoft.SharePoint.Administration.SPContentDatabase, Microsoft.SharePoint, Version=15.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c">4c36cbec-313e-42e2-a9e1-58ba3d407ca4</fld> </fld> </object> </fld>
Interessant sind dabei die Informationen ab Zeile 10. Dort sind alle Inhaltsdatenbanken der Webanwendung zu finden. Dadurch kann man prüfen, ob das PowerShell-Kommando auch wirklich erfolgreich war und die verwaiste Inhaltsdatenbank auch nicht mehr aufgeführt ist.
In diesem Sinne,
Happy SharePointing…