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

Redonner vie à une Microsoft Surface RT : le guide ultime vers Linux !

Vous avez une vieille Microsoft Surface RT qui traîne dans un tiroir ? Vous savez, cette tablette de 2012 devenue inutilisable depuis l'abandon officiel de Windows RT par Microsoft ? Ne la jetez surtout pas ! Dans ma dernière vidéo, je vous montre comment transformer cet appareil, autrefois considéré comme un "presse-papier", en une tablette Linux moderne et parfaitement fonctionnelle . Pourquoi ce projet ? L'objectif est simple : transformer ce matériel pour en faire un dashboard dédié à mon système Home Assistant. En installant postmarketOS , une version de Linux spécialement conçue pour les appareils ARM abandonnés, on redonne une seconde jeunesse à cette machine . Ce que vous allez apprendre dans ce tutoriel complet : La libération du matériel : Comment réinstaller la version d'origine pour passer outre les blocages de Windows 8.1 . Jailbreak & Secure Boot : La procédure indispensable pour déverrouiller la machine et permettre l'installation d...

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

Mixer les batteries Enphase et Zendure : La solution ultime pour l'autoconsommation ?

Introduction Vous avez déjà une installation solaire équipée de micro-onduleurs Enphase , mais vous trouvez que le stockage officiel de la marque est trop coûteux ou difficile à installer en DIY ? Vous n'êtes pas seul. Aujourd'hui, je vous partage mon retour d'expérience complet sur une configuration qui intrigue beaucoup de monde : le couplage d'un système Zendure SolarFlow avec un environnement Enphase existant. Pourquoi vouloir mixer ces deux marques ? Le système Enphase est une référence en termes de fiabilité, mais l'ajout de batteries IQ Battery peut représenter un investissement lourd. À l'inverse, Zendure propose avec le SolarFlow une solution de stockage plug-and-play extrêmement flexible et souvent plus abordable. L'idée est simple : utiliser le SolarFlow comme "tampon" entre vos panneaux et vos micro-onduleurs pour stocker l'excédent de la journée et le réinjecter la nuit. Le montage : Est-ce vraiment compliqué ? Dans ma dernière ...