Dans le cadre de l’administration d’une ferme SharePoint, il existe une situation qui peut être compliquée à gérer.
En effet, lorsque l’on crée sa ferme SharePoint, une base de données de contenu est automatiquement créée, sans que l’on y prète vraiment attention. On ajoute au fil du temps de nouvelles collections de sites qui chacune va croitre à son propre rythme.
Le cas classique se présente alors au bout de quelques mois par des complications lors des taches de sauvegarde ou autres taches d’administration. En effet, on se retrouve alors au bout d’un certain temps avec notre base de données par défaut qui atteint une taille critique pour son administration.
Nous avions vu dans un précédent article comment gérer correctement les bases de données de contenu SharePoint :
La solution est donc bien évidemment de créer une nouvelle base de données de contenu. Le soucis est que celle-ci ne sera utile que pour les futures collections de sites à créer et non pour celles existantes.
Déplacement d’une collection spécifique de sites
On peut alors utiliser la méthode expliquée dans cette page :
Cette méthode fonctionne parfaitement si on ne possèpde qu’une seule collection de sites à bouger, mais devient rapidement impossible si notre base de contenu contient plusieurs dizaines de collections.
Déplacement automatique de plusieurs collections
Cette question s’est donc posée face à une ferme WSS V3 de production possédant une seule base de contenu avec une centaine de collections de sites. Cette base dépassait les 500 GB de volume et posait de réels problèmes lors des sauvegardes.
L’idée a donc été de créer un script permettant de déplacer les collections de sites les plus légères de cette grosse base de contenu vers une nouvelle créée spécifiquement pour l’occasion.
Pour cela il faut commencer par créer une nouvelle base de données de contenu depuis le site SharePoint (ou via STSADM) en donnant une valeur limite Maximale de collection plus élevée que celles déjà existantes.
En effet, SharePoint placera la collection dans la base de données ayant la valeur la plus élevée :
- Différentiel = [Maximum Number of Sites] - [Current Number of Sites]
Cela donnera quelque chose proche de :
A ce stade, notre ferme placera toute nouvelle collection de sites dans la base de données Content_DB5. On doit définir de quelle base voulons nous passer les collections dans la nouvelle Content_DB5.
Il nous suffit maintenant d’utiliser un script PowerShell développé pour l’occasion :
function Move-SmallSiteCollections([string]$WebApplicationURL, [string]$ContentDataBaseSource, [int]$SPSiteSizeLimit, [string]$RootPathTostore)
{
[xml]$SPSiteList = stsadm -o enumsites -url $WebApplicationURL -databasename $ContentDataBaseSourceWrite-Host " Web Application URL $WebApplicationURL - ContentDB: $ContentDataBaseSource - Total Site Collection:", $SPSiteList.Sites.Site.Count
$SPSitesFromDBToMove = $SPSiteList.Sites.Site | Sort-Object { [int]$_.StorageUsedMB } | Where-Object { [int]$_.StorageUsedMB -lt $SPSiteSizeLimit }
Write-Host " Site Collections to move (less than $SPSiteSizeLimit MB) :", $SPSitesFromDBToMove.Count
if ($SPSitesFromDBToMove.Count -gt 0)
{
foreach ($mySPSiteToMove in $SPSitesFromDBToMove)
{
Write-Host " ------ "
[string]$SPSiteURL = $mySPSiteToMove.Url
[int]$LastSlashIndex = $SPSiteURL.LastIndexOf("/") + 1
[int]$URLLenght = $SPSiteURL.length
[int]$SPSiteSize = $mySPSiteToMove.StorageUsedMB
[string]$SPSiteName = $SPSiteURL.Substring($LastSlashIndex, ($URLLenght - $LastSlashIndex) )
[string]$BackUpFilePath = $RootPathTostore + $SPSiteName + ".DAT"Write-Host " SPSite $SPSiteName - Size: $SPSiteSize"
#Write-Host " Last Slash Index:", $LastSlashIndex, "- URL Lenght:", $URLLenghtWrite-Host " MOVE SHAREPOINT SPSite $SPSiteName - $SPSiteURL"
Write-Host " BACKUP SPSite $SPSiteURL to $BackUpFilePath"
stsadm -o backup -url $SPSiteURL -filename $BackUpFilePath -overwriteWrite-Host " DELETE SPSite $SPSiteURL"
stsadm -o deletesite -url $SPSiteURLWrite-Host " RESTORE SPSite $SPSiteURL"
stsadm -o restore -url $SPSiteURL -filename $BackUpFilePath -overwriteWrite-Host " ------ "
}
}
Write-Host "------------------------------------------------------------------"}
function StartProcess()
{
[string]$MyWebApplicationURL = "
[string]$MyContentDataBaseSource = "MyContentDBSource01"
[int]$MySPSiteSizeLimit = 100
[string]$MyRootPathTostore = "C:\Temp\BackupRestoreTemp\"# Create the stopwatch
[System.Diagnostics.Stopwatch] $sw;
$sw = New-Object System.Diagnostics.StopWatch
$sw.Start()
#clsWrite-Host "------------------------------------------------------------------"
Move-SmallSiteCollections $MyWebApplicationURL $MyContentDataBaseSource $MySPSiteSizeLimit $MyRootPathTostore
Write-Host "------------------------------------------------------------------"
$sw.Stop()
# Write the compact output to the screen
write-host "Site collection moved - Time: ", $sw.Elapsed.ToString()
}StartProcess
Il vous suffit dès lors de fournir les valeurs pour votre ferme :
- $MyWebApplicationURL : URL de la Web App
- $MyContentDataBaseSource : Content DB où se trouvent les collections à déplacer
- $MySPSiteSizeLimit : Taille maximale des collections qui doivent être déplacées
- $MyRootPathTostore : Répertoire permettant le Backup des collections durant le transfert
Dans notre exemple, le script fera le déplacement de toutes les collections présentes dans la base de données “MyContentDBSource01” dont la taille ne dépasse pas 100 MB.
ATTENTION :
Comme toutes les taches d’administration, il faut absolument effectuer ce travail avec une grande prudence et surtout bien vérifier que vos collections soient bien restaurées. En effet, dans des fermes ayant encore des traces de WSS V2, cette restauration peut poser problème et vous risquer de ne pas pouvoir remonter celle-ci.
Conclusion
Ce travail permet de répartir la charge entre différentes bases de données indépendantes les unes des autres. Cela aura aussi pour conséquence d’améliorer les performances globales de votre ferme, car le moteur SQL travaillera sur des volumes plus raisonnables.
Il est aussi primordial d’isoler les collections qui sont susceptibles de dépasser les 50 GB de contenu (valeur empirique). L’idée étant de laisser chaque grosse collection dans sa base de données de contenu. Vous aurez alors une meilleure souplesse en cas d’évolution de cette collection vers une éventuelle ferme dédiée.
Le script PowerShell est ajouté dans le projet CodePlex dédié :
Liens utiles :
- Architecture logique SharePoint 2007
- Gérer les bases de contenu SharePoint
- SharePoint 2007 – Move Content and Configuration Databases
- Déplacer les bases de données de contenu et de configuration
- Backup: Stsadm operation (Office SharePoint Server)
- Deletesite: Stsadm operation (Office SharePoint Server)
- Restore: Stsadm operation (Office SharePoint Server)
- Setconfigdb: Stsadm operation (Office SharePoint Server)
- Deleteconfigdb: Stsadm operation (Office SharePoint Server)
Romelard Fabrice [MVP]
Commentaires
Enregistrer un commentaire