SharePoint Remote-BLOB-Storage : Teil 5 – Daten aus dem RBS-Verzeichnis in die DB verschieben | Deaktivieren von RBS

Zugegeben, der Titel dieses Artikels ist etwas lang, dafür aber treffend. In Teil 5 der -Serie geht es nun um die Deaktivierung vom Remote Storage. Nicht zu verwechseln mit der Deinstallation! Dazu kommen wir im nächsten Artikel. Zur Deaktivierung gehört natürlich auch das Verschieben der Daten aus dem
RBS-Verzeichnis in die Datenbank. Dieser Artikel zeigt wie man vorgeht, was im Hintergrund geschieht und wie man diese Aktion in den Datenbanktabellen verfolgen kann.

Wie immer ist eine Sicherung empfohlen, Sie kennen das 😉
Sichern Sie Ihre Websitesammlung, die SQL Datenbank und sicherheitshalber das
RBS-Verzeichnis noch einmal extra. Für die letzte Aktion ist es sinnvoll den SQL Dienst vorher zu beenden.

Dann deaktivieren Sie den RBS für diese Inhaltsdatenbank und verschieben (migrieren) den Inhalt aus dem RBS-Verzeichnis in die SQL Datenbank. Wie das funktioniert, wird im Folgenden erläutert.
Nach dem Deaktivieren werden die Daten wieder in der Inhaltsdatenbank gespeichert. Um dies zu erreichen muss der Providername durch einen leeren String ersetzt werden. Diese Aktion ändert nichts an dem RBS Speicherort und den Daten, die dort schon gespeichert sind. Es sei denn, Sie nutzen Migrate(), womit dann auch bestehende Daten in die DB transferiert werden. Wundern Sie sich aber nicht, dass die Daten im RBS-Verzeichnis nicht gleich gelöscht werden.

Wenn man das Ganze in der Datenbank verfolgen möchte, dann sollte man sich auch hier wieder die Tabellen dbo.allDocs und dbo.allDocStreams ansehen. Vor der Migration der Daten kann man erkennen, dass die Spalte Content in der Tabelle allDocStreams den Wert NULL hat und RbsID dafür einen Wert. Nach der Migration sollte das genau andersherum sein.

RBS DB Tabellen allDocs und allDocStreams

Hinweis:     Nutzen Sie zum Deaktivieren nicht den Befehl Disable() in Zusammenhang mit den RemoteBlobStorageSettings. Damit deinstallieren Sie den RBS, was für die Deaktivierung nicht erforderlich ist.

Um den RBS bzw. den File Stream Provider zu deaktivieren, öffnen Sie auf einem der Webserver die Microsoft SharePoint-Verwaltungsshell und geben folgende Befehle ein:

$contentDB = Get-SPContentDatabase <Ihre-Inhaltsdatenbank>
    oder $contentDB = Get-SPContentDatabase –WebApplication http://Ihre-SharePointURL
$rbss = $contentDB.RemoteBlobStorageSettings
$rbss.SetActiveProviderName(„“) oder … ($NULL)#ab jetzt ist der RBS deaktiviert
$rbss.Migrate() #Daten aus dem RBS-Verzeichnis in die DB kopieren

RBS DB Tabellen - Inhalt der Spalte Content

 

Die RBS-Funktion ist nun deaktiviert und alles, was im RBS-Verzeichnis liegt, wurde in die Inhaltsdatenbank kopiert. Obwohl der RBS also nun deaktiviert ist und die Daten in die Datenbank geschrieben wurden, liegen die Daten noch immer im RBS-Verzeichnis. Warum?
Wie wird der RBS verwaltet? Dazu wurde bei der RBS-Installation das Programm Microsoft.Data.SqlRemoteBlobs.Maintainer.exe unter C:\Program Files\Microsoft SQL Remote Blob Storage 10.50\Maintainer mit installiert. Im selben Verzeichnis befindet sich auch die XML-Datei, die die Konfiguration enthält. Diese XML (*.config) wird von dem Maintainer abgearbeitet. Sie enthält die Verbindungsdaten (connection string) zur ersten Datenbank, die nach der RBS-Installation festgelegt wurde.
Ein kurzer Blick in die XML zeigt eine Verschlüsselung.

 

RBS XML Connection String

 

Also entschlüsseln wir per ASP.NET IIS-Registrierungstool (Aspnet_regiis.exe). Die Parameter dazu kann man sich hier ansehen. Der Parameter -pdf entschlüsselt dabei den angegebenen Abschnitt.
Vorher sichern wir aber die originale XML bzw. erstellen eine Kopie namens web.config. Das muss so sein, denn sonst wäre es zu einfach 😉 Benennt man die Datei nicht in web.config um, so wird zwar eine Datei mit diesem Namen erstellt, aber sie enthält dann nicht die entschlüsselten Werte unserer Originaldatei.
Die nun erstellte Kopie namens web.config entschlüsseln wir über den folgenden Befehl:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -pdf connectionStrings.

 

RBS XML config decrypt

 

In der nun entschlüsselten web.config sieht man die Verbindungsdaten (connection string). An dieser Stelle können auch weitere Verbindungen hinzugefügt oder bestehende geändert werden. Im Anschluss daran muss man die Datei natürlich wieder in den ursprünglichen Zustand versetzen, also verschlüsselt unter dem alten Namen speichern. Der Befehl zur Verschlüsselung ist ähnlich dem der Entschlüsselung:

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\aspnet_regiis.exe -pef connectionStrings . –prov DataProtectionConfigurationProvider

Im Anschluss bitte noch in den alten Namen Microsoft.Data.SqlRemoteBlobs.Maintainer.exe.config umbenennen.

Als nächstes sind weitere Einstellungen bei den Inhaltsdatenbanken vorzunehmen, damit der Garbage Collector die zu löschenden Informationen auch finden und behandeln kann. Außerdem muss das Zeitfenster für die Aktion angepasst werden. Standardmäßig gibt es beim RBS drei Aktionen, wo erst 30 Tage vergehen müssen, bevor die Aktion ausgeführt wird. Generell hat man sich dabei etwas gedacht, keine Frage. Im SharePoint haben wir aber einen Papierkorb, der uns die Sachen 30 Tage speichert und dann noch einmal 30 im Papierkorb des Administrators. Also können wir uns die 30 Tage extra vom RBS auch sparen. Was gelöscht werden soll, soll auch aus dem RBS raus!

Was ist also zu tun? Für die folgenden Einstellungen öffnen Sie im SQL Management Studio eine neue Abfrage und führen die Anweisungen aus. Damit gewährleisten Sie, dass die Daten gelöscht werden, sobald sie vom System freigegeben werden.

use WSS_Content

— Zeitfenser für RBS Garbage Collector der Inhaltsdatenbank auf 0 setzen
exec mssqlrbs.rbs_sp_set_config_value ‚garbage_collection_time_window‘,’time 00:00:00′

— Zeitfenser für RBS Delete-Scan auf 0 setzen
exec mssqlrbs.rbs_sp_set_config_value ‚delete_scan_period‘,’time 00:00:00′

— Zeitfenser für RBS Verwaist-Scan auf 0 setzen
exec mssqlrbs.rbs_sp_set_config_value ‚orphan_scan_period‘,’time 00:00:00′

Wer möchte, kann sich die Tabelle mssqlrbs_resources.rbs_internal_config und die darin enthaltenen Konfigurationen auch mal genau ansehen.

Jetzt wird es Zeit, das RBS-Maintainer Tool auszuführen.
Hilfe dazu gibt es auch direkt bei Microsoft: http://technet.microsoft.com/de-de/library/ff943565.aspx

Auf dem Webserver (dort wo das RBS-Maintainance Tool installiert ist) die Eingabeaufforderung (CMD) mit Administratorrechten öffnen und folgenden Befehl ausführen:

„C:\Program Files\Microsoft SQL Remote Blob Storage 10.50\Maintainer\Microsoft.Data.SqlRemoteBlobs.Maintainer.exe“ ConnectionStringName RBSMaintainerConnection -Operation ConsistencyCheck GarbageCollection Maintenance -ConsistencyCheckForStores ForceFinalize -GarbageCollectionPhases rdo -ConsistencyCheckMode b -ConsistencyCheckForStores

Im RBS-Verzeichnis sollten sich, trotz der Aktion eben, noch immer die Daten befinden. Das ist bis jetzt noch in Ordnung 😉 Sicher, der RBS ist deaktiviert und die Inhaltsdatenbank verweist, in Sachen Datenspeicherung, nicht mehr auf den RBS. Schuld ist also das Transaktionsprotokoll. Dieses enthält noch den Verweis. Erst recht, wenn es im Full Recovery Modus läuft.
Um die Sache zu klären, den Verweis also zu entfernen, muss das Transaktionsprotokoll gesichert werden und danach folgende Befehle ausgeführt werden, die sicherstellen, dass die Transaktionen ordnungsgemäß abgeschlossen wurden:

 

— Vorher Logs sichern… über SQL Management Studio
— entweder per SQL-Befehl oder über Management-Back up…

USE WSS_Content — Name der Inhaltsdatenbank
CHECKPOINT


Im Anschluss werfen wir einen Blick in unser RBS-Verzeichnis und prüfen, ob alles geklappt hat und das Verzeichnis leer
ist.
Natürlich nicht! 😉 Warum?
Wir haben das Transaction Log gesichert und damit die Verweise gelöscht, nehmen wir an. Leider hängt aber noch ein letzter Eintrag im Protokoll, der alles aufhält. Truncate! Um also das Abschneiden des Transaktionsprotokolls noch zu erzwingen, sind die Aktionen (Log sichern – CHECKPOINT) oben noch einmal durchzuführen.

Kommentar verfassen

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.