Accéder au contenu principal

SharePoint : Déplacement de plusieurs collections de sites entre les bases de données de contenu

 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 :

image

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 $ContentDataBaseSource

    Write-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:", $URLLenght

            Write-Host " MOVE SHAREPOINT SPSite $SPSiteName - $SPSiteURL"

            Write-Host " BACKUP SPSite $SPSiteURL to $BackUpFilePath"
            stsadm -o backup -url $SPSiteURL -filename $BackUpFilePath -overwrite

            Write-Host " DELETE SPSite $SPSiteURL"
            stsadm -o deletesite -url $SPSiteURL

            Write-Host " RESTORE SPSite $SPSiteURL"
            stsadm -o restore -url $SPSiteURL  -filename $BackUpFilePath -overwrite

            Write-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()
    #cls

    Write-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 :

Romelard Fabrice [MVP]

Commentaires

Posts les plus consultés de ce blog

Série de vidéos sur le montage d'une serre horticole ACD

 Episode 1: Préparation du terrain Episode 2: Montage de la serre en elle même Episode 3: Finalisation avec le montage électrique alimentant la serre Bon visionnage Fab

Présentation des outils utiles pour l'entretien de ses haies vives

Afin de gérer les haies vives, il est nécessaire d'avoir recourt à un matériel adapté. Les solutions à batteries sont bien adaptées pour un usage personnel avec des dimensions raisonnables. Ainsi dans mon cas précis, j'utilise les outils suivants de la Gamme Ryobi 18V ONE+ électroportatif: Petit taille-haies simple mais efficace -  RYOBI OHT1855R Un modèle plus puissant qui fonctionne très bien -  RYOBI RY18HTX60A Pour les parties hautes de vos haies, voici un outil très utile -  RYOBI OPT1845 Enfin lorsque vous devez élaguer certains arbres ou certaines partie hautes de vos haies, ce dernier outil est très utile -  RYOBI OPP1820 Ces outils font parti maintenant de mon arsenal de base pour maintenir notre maison chaque saison de taille. Fab

Série de Videos sur Home Assistant intégrant la production Photovoltaïque

 Un certain nombre de vidéos sont en ligne pour intégrer sa production photovoltaïque dans Home Assistant en partant de la base. Installation de Home Assistant: On peut ensuite intégrer les composant des Micro-Onduleurs Enphase, mais aussi les batteries Enphase: Ou encore le composant de contrôle Ecojoko: Ce qui permet alors de faire des comparaisons entre les valeurs capturées: Des videos seront encore publiés dans les prochaines semaines sur différents aspects de cette solution. Fab