Konfigurieren von Remote Blob Storeage (RBS) auf SharePoint 2010
UPDATE: This Blog is also available in English. See here
Mit SharePoint 2010 wurde das Thema Remote Blob Storage neu aufgerollt, welches einem es ermöglicht, die Dokumente statt in der Datenbank auf dem Filesystem abzulegen. Dazu wird der jeweiligen Content-Datenbank ein Speicherbereich auf dem File-System zugewiesen, in dem die Dokumente abgelegt werden. Diese werden jedoch weiterhin durch den SharePoint verwaltet und die Metadaten zu den jeweiligen Dokumenten werden weiterhin in der Datenbank gepflegt.
Die hier aufgezeigten Schritte basieren auf den Quellen aus Technet und den Blogs von Jie Li und Todd Klindts
Die Installationen wurden auf Windows Server 2008 R2 und Microsoft SQL Server 2008 R2 gemacht, RBS ist unter Microsoft SQL Server 2005 nicht supported.
Als erstes musste FILESTREAM auf der SQL-Instanz aktiviert werden.
- Verbinden auf den SQL-Server
- Start –> All Programs –> Microsoft SQL Server 2008 R2 –> Configuration Tools –> SQL Server Configurations Manager
- In der Liste der Services auf “SQL Server Services” klicken.
- Wählen Sie in der Auflistung die SQL-Instanz, in welcher die SharePoint-Daten liegen (hier “SQL Server (MSSQLSERVER) ”) und klicken Sie mit der rechten Maustaste –> Properties.
- Wechseln Sie auf den Reiter FILESTREAM und aktivieren Sie die drei Checkboxen
- Klicken Sie auf Apply –> OK
- Wechseln sie in das SQL Server Management Studio
Start –> All Programs –> Microsoft SQL Server 2008 R2 –>SQL Server Management Studio Öffnen Sie eine neue Query und führen Sie folgenden Befehl aus Hier noch zum kopieren:
EXEC sp_configure filestream_access_level, 2
RECONFIGURE
Somit ist FILESTREAM aktiviert und die nächsten Schritte können in Angriff genommen werden.
Für die weiteren Arbeiten setzen wir voraus, dass SharePoint bereits komplett installiert ist und bereits eine WebApplikation erstellt wurde. Die Content-Datenbank habe ich dazu per PowerShell angelegt:
- Verbinden auf den Web-Front-End Server
Start –> Microsoft SharePoint 2010 Products –> SharePoint 2010 Management Shell Erstellen Sie eine Content-Datenbank Hier noch zum kopieren:
New-SPContentDatabase –name WSS_Content_Blob_001 –WebApplication https://sp2010 –MaxSiteCount 1 –WarningSiteCount 0
Die Content-Datenbank (hier “WSS_Content_Blob_001”) muss nun für die Verwendung vorbereitet werden.
- Verbinden auf den SQL-Server
- Start –> All Programs –> Microsoft SQL Server 2008 R2 –>SQL Server Management Studio
Öffnen Sie eine neue Query und führen Sie folgende Befehle aus. Ersetzen Sie dabei den Pfad “C:\Blobstore” durch den Pfad, auf dem die Files abgelegt werden sollen. Das Verzeichnis darf nicht existieren, da sonst ein Fehler ausgegeben wird (Verzeichnis besteht schon)
Hier noch zum kopieren:
use [WSS_Content_Blob_001]
if not exists (select * from sys.symmetric_keys where name = N'##MS_DatabaseMasterKey##')create master key encryption by password = N'Admin Key Password !2#4'
use [WSS_Content_Blob_001]
if not exists (select groupname from sysfilegroups where groupname=N'RBSFilestreamProvider')alter database [WSS_Content_Blob_001] add filegroup RBSFilestreamProvider contains filestream
use [WSS_Content_Blob_001]
alter database [WSS_Content_Blob_001] add file (name = RBSFilestreamFile, filename = 'c:\Blob_001') to filegroup RBSFilestreamProvider
Nach diesen Aktionen wurde das Verzeichnis für den Blobstorage unter C:\Blob_001 erstellt.
Als nächstes muss das EXE für RBS heruntergeladen werden (bitte nicht umbenennen). Dieses muss auf jeden Web-Front-End-Server kopiert werden.
Bei den nächsten Schritten muss immer darauf geachtet werden, dass die ausgegebenen Logs gut kontrolliert werden, ob darin Fehler enthalten sind.
- Verbinden auf den ersten Web-Front-End Server (der mit der Zentaladministration)
- Öffnen Sie eine Command Line mit lokalen Administratoren Rechten (ganz Wichtig)
- Wechseln Sie in das Verzeichnis, in dem das RBS.msi liegt
- Löschen oder Benennen Sie eine allfällig vorhandene “rbs_install_log.txt”-Datei um.
Führen Sie folgenden Befehl aus, ersetzen Sie dabei DBNAME durch die Datenbank und DBINSTANCE durch die SQL-Instanz. Wichtig ist, dass dieses Script nur beim ersten mal funktioniert, wenn Sie eine zweite Datenbank am konfigurieren sind, gehen Sie weiter zum Punkt “Zusätzliche Datenbank konfigurieren”:
msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi TRUSTSERVERCERTIFICATE=true FILEGROUP=PRIMARY DBNAME="WSS_Content_Blob_001" DBINSTANCE="DC" FILESTREAMFILEGROUP=RBSFilestreamProvider FILESTREAMSTORENAME=FilestreamProvider_1
Wenn der Prozess fertiggestellt ist (kann eine Minute gehen, im Log steht dann “Verbose Logging stopped”), prüfen Sie das Log “rbs_install_log.txt”, ob darin der folgende Text enthalten ist (ca. 21 Zeilen vor dem Ende):
"Product: SQL Remote Blob Storage -- Configuration completed successfully"
Ist dies nicht der Fall, ist etwas falsch gelaufen.
- Sind Sie im richtigen Verzeichnis
- Haben Sie sich vertippt
- Ist die Command Line als Administrator ausgeführtWenn Sie mehr als einen Web-Front-End-Server in der Farm haben, müssen Sie nun auf den zweiten Server wechseln und dort folgenden Befehl ausführen: Hier noch zum kopieren:
msiexec /qn /lvx* rbs_install_log.txt /i RBS.msi DBNAME="WSS_Content_Blob_001" DBINSTANCE="DC" ADDLOCAL="Client,Docs,Maintainer, ,FilestreamClient,FilestreamServer"
Prüfen Sie das Log “rbs_install_log.txt”, ob darin der folgende Text enthalten ist (ca. 21 Zeilen vor dem Ende):
"Product: SQL Remote Blob Storage -- Configuration completed successfully"
- Führen Sie die Schritte ab Punkt 7 auf jedem zusätzlichen Front-End-Server aus. Dies ist sehr wichtig, da sonst Probleme auftreten können.
Das Script hat nun in der Datenbank einige Tabellen in der Datenbank erstellt. Prüfen sie nun diese, ob diese vorhanden sind.
- Verbinden auf den SQL-Server
- Start –> All Programs –> Microsoft SQL Server 2008 R2 –>SQL Server Management Studio
Geben Sie den folgenden Befehl ein Hier noch zum kopieren:
use WSS_Content_Blob_001
Als Resultat müssten die RBS-Tabellen nun angezeigt werden. Dies kann wieder einen Augenblick dauern.
select * from dbo.sysobjects
where name like ‘rbs%’
Als letzter Schritt muss nun auf dem SharePoint bekannt gemacht werden, dass diese Content-Datenbank RBS verwendet. Dazu muss dies aktiviert werden
Verbinden auf den Web-Front-End Server
Start –> Microsoft SharePoint 2010 Products –> SharePoint 2010 Management Shell
Geben Sie folgende Befehle nacheinander ein: Hier noch zum kopieren:
$cdb = Get-SPContentDatabase WSS_Content_Blob_001
$rbss = $cdb.RemoteBlobStorageSettings
$rbss.Installed()
$rbss.Enable()
$rbss.SetActiveProviderName($rbss.GetProviderNames()[0])
$rbss
Nun ist alles soweit vorbeitet, dass die Funktionalität getestet werden kann. Dazu muss eine Site Collection eingerichtet werden und dabei sichergestellt sein, dass diese in der Datenbank WSS_Content_Blob_001 liegt.
- Verbinden auf den Web-Front-End Server
- Start –> Microsoft SharePoint 2010 Products –> SharePoint 2010 Central Administration
- Application Management – Manage Content Databases
- Die korrekte Web Application auswählen
- Die Content-Datenbank so einstellen, dass die nächste Site Collection in der WSS_Content_Blob_001 erstellt wird
- Sind mehrere Datenbanken vorhanden, bei allen die “Maximum Numbers of Site Collections” auf die aktuelle Anzahl Sites setzen.
- Die WSS_Content_DB_001 sollte noch keine Site Collection enthalten - Zurück zur Einstiegsseite der Central Administration
- Application Management – Create Site Collection
- Alle relevanten Daten eingeben
- OK - Wenn die Site Collection erstellt ist, diese aufrufen und in einer Dokumentenbibliothek Dokumente hochladen.
Diese Dokumente sollten jetzt in dem Verzeichnis des Blob’s auftauchen
Hinweis:
Dokumente unter 100kb werden nicht in den BLOB-Storage verschoben, sondern in der Datenbank gespeichert.
Wenn Sie diesen Wert verändern wollen, können Sie folgenden Befehl verwenden (hier auf 1MB):
$cbd = Get-SPContentDatabase “WSS_Content”
$cbd.RemoteBlobStorageSettings.MinimumBlobStorageSize=1048576
$cbd.Update()
Zusätzliche Datenbank konfigurieren
Wenn mehr als eine Content-Datenbank mit RBS konfiguriert werden sollen, müssen sie die oben genannten Schritte genau gleicht für jede Configurations-Datenbank machen. Der Unterschied liegt jedoch beim Befehl, welcher bei Punkt 5 ausgeführt wird. Dieser funktioniert so nicht, es werden die RBS-Tabellen nicht angelegt. Verwenden Sie daher den nachfolgenden Befehl:
msiexec /qn /i rbs.msi REMOTEBLOBENABLE=1 FILESTREAMPROVIDERENABLE=1 DBNAME=WSS_Content_Blob_002 FILESTREAMSTORENAME=FilestreamProvider_1 ADDLOCAL=EnableRBS,FilestreamRunScript DBINSTANCE=CD
Hinweis zum Thema Backup
Wenn eine Content-Datenbank mit SQL FILESTREAM Provider konfiguriert ist, muss der RBS Provider auf beiden SQL Servern installiert sein (Server für Backup und Server für Restore)
Referenzen :
- Overview of Remote BLOB Storage (SharePoint Foundation 2010)
- Plan for remote BLOB storage (RBS) (SharePoint Foundation 2010)
- Manage Remote BLOB Storage (SharePoint Foundation 2010)
- Microsoft® SQL Server® 2008 R2 Feature Pack
- SQL Server 2008 R2 Remote BLOB Storage Overview
- How to: Enable FILESTREAM
- Install and configure Remote BLOB Storage (RBS) with the FILESTREAM provider(SharePoint Foundation 2010)
Vorsicht, der erste Befehl unter “To enable RBS” funktioniert so nicht, verwenden Sie den oben aufgeführten Befehl) - Install and configure Remote BLOB Storage (RBS) without the FILESTREAM provider (SharePoint Foundation 2010)
Vorsicht, der erste Befehl unter “To enable RBS” funktioniert so nicht, verwenden Sie den oben aufgeführten Befehl) - Set a content database to use Remote Blob Storage (RBS) (SharePoint Foundation 2010)
Beschreibt das Vorgehen für zusätzliche Datenbanken
Updates:
07. März 2011:
- Alter Name des Files RBS_X64.exe, neu heisst dieses RBS.msi - in allen Texten und Befehlen geändert
- Neuer Link zu einem interessanten Dokument hinzugefügt : "SQL Server 2008 R2 Remote BLOB Storage Overview"
13. September 2011:
- Einfügen des Befehls zum verändern der Grösse, ab wann die Dokumente in den Blob geschoben werden
Comments
- Anonymous
June 11, 2013
Danke für die Super Anleitung! Funktioniert alles wunderbar. LG Thomas