Comment restaurer un site SharePoint supprimé ?

Attention

Au cours de cet article, nous allons exécuter des requêtes SQL directement dans les bases de données de SharePoint. Celles-ci me permettront d'illustrer mes propos et de vous aider à mieux comprendre ce que je vais faire. N'exécutez pas ces requêtes sur votre SharePoint sous peine de perdre votre garantie de support de la part de Microsoft : article sur les modifications de base de données prises en charge.

Ces manipulations ont eu lieu sur un SharePoint de tests qui aujourd'hui a été incinéré pour éviter toutes résurrections inopinées.

Mise en situation :
Lors d'une manipulation de routine sur votre intranet, vous supprimez malencontreusement le site web de votre Site Collection (aussi appelé le "Root Web"). J'écris "malencontreusement" mais nous savons que ce genre de manipulation nécessite plusieurs clics de validation et que cela n'arrive que rarement par accident.

Ce drame à eu lieu à 14h48 et la victime n'a pas survécu.

Heure du décès : 14h48

L'autopsie ne révèle rien de bon :

La famille nous demande de ne pas divulguer plus de photos



Comment résoudre le problème et surtout comment éviter un procès de longue haleine pour homicide involontaire ?
La solution la plus simple serait de passer par la Recycle Bin de la Site Collection pour restaurer le site :

Ici, nous voyons la corbeille de deuxième niveau (Second Stage Recycle Bin)

Mais, contrairement à l'écran ci-dessus qui montre que restaurer un sous-site est possible, cela ne l'est pas pour un "Root Web". En effet, celui-ci incarnant la Site Collection elle-même, il vous est impossible d'accéder à la corbeille. Nous allons donc devoir nous tourner vers nos bonnes vieilles sauvegardes SQL qui tournent au minimum une fois par jour (je l'espère pour vous).


Que restaurer pour rendre un peu de vie à notre site ?
Un site SharePoint étant contenu dans une base de données, commençons par l'identifier. Pour cela rendons-nous dans la centrale d'administration et vérifions quelle est la base de données liée à notre site :


Central Administration --> Application Management --> Manage Content Databases

Nous savons maintenant quelle base remettre en place pour résoudre notre problème :

    WSS_Contant_Share_89

Mais attention, pas seulement ! En effet, si on vérifie dans les bases de données SharePoint, on constate que SharePoint stocke d'autres informations capitales pour notre site. En exécutant la requête suivante sur la Content Database du site :

SELECT [SiteId] ,
       [FullURL] ,
       [Title]
FROM [WSS_Content_Share_89].[dbo].[AllWebs] 
WITH (nolock)

Nous pouvons récupérer le SiteID de notre site décédé (un simple GUID) :

SiteId                                  FullURL     Title 
559115E7-9944-4EB7-8AF3-8BBCE1499A24                Home 
559115E7-9944-4EB7-8AF3-8BBCE1499A24    subsite1    sub site 1

Ensuite en cherchant cet ID de site dans la bonne table (SiteMap) de la base de données de configuration de SharePoint (SharePoint_Config) :

SELECT [Id] ,
       [DeletionTime] ,
       [Path]
FROM [SharePoint_Config].[dbo].[SiteMap] 
WITH (nolock)
WHERE ID = '559115E7-9944-4EB7-8AF3-8BBCE1499A24'

On constate que SharePoint stocke l'information de la suppression du site :

Id                                       DeletionTime               Path 
559115E7-9944-4EB7-8AF3-8BBCE1499A24     2014-01-22 14:48:20.940    /

Il faut donc également restaurer cette table pour récupérer un site fonctionnel (Si vous ne le faites pas, le site ne marchera pas et vous renverra une erreur HTTP).


Comment le restaurer ?
Commençons par restaurer notre Content Database du site SharePoint mais avant, assurez-vous que votre serveur SharePoint est bien éteint. Cela vous évitera bien des soucis de connexions résiduelles empêchant la restauration.

Avant de lancer notre requête de restauration des données, un petit peu de réflexion s'impose (juste un peu), ça vous apprendra à avoir supprimé un site par erreur :

"Le site est décédé à 14h48 de cause indéterminée. Notre dernière sauvegarde date de 14h39 (on en a de la chance hein !). Malheureusement, nous ne pouvons pas nous permettre de perdre 9 minutes de données, il va donc falloir les récupérer."

Pour ce faire, nous allons sauvegarder le LOG SQL de notre Content Database en exécutant la requête suivante  (Cela implique que votre base de données est en FULL Recovery Mode) :

BACKUP LOG [WSS_Content_Share_89] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WSS_Content_Share_89_taillog.bak' WITH NO_TRUNCATE, NOFORMAT, NOINIT, NAME = N'WSS_Content_Share_89-Transaction Log  Backup', SKIP, NOREWIND, NOUNLOAD, NORECOVERY ,STATS = 10

Cette sauvegarde du LOG SQL laissera la base de donnée en mode "Restoring...", attendant que vous terminiez vos étapes de restauration. Cela est dû à notre "Tail-Log Backup". 


Il nous reste donc à restaurer la base de données à l'heure voulue, ici j'ai choisis 14h47. Pour se faire, il faut lancer ces requêtes :

RESTORE DATABASE [WSS_Content_Share_89]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WSS_Content_Share_89.bak' 
WITH FILE = 4, NORECOVERY, NOUNLOAD, STATS = 5 

RESTORE LOG [WSS_Content_Share_89]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\WSS_Content_Share_89_taillog.bak' 
WITH FILE = 1, NOUNLOAD, STATS = 5, STOPAT = N'2014-01-22T14:47:00' 

GO

Ensuite nous restaurons la base de données de configuration de SharePoint :

BACKUP LOG [SharePoint_Config] 
TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\SharePoint_Config_LogBackup_2014-01-22.bak'
WITH NOFORMAT, NOINIT, NAME = N'SharePoint_Config_LogBackup_2014-01-22', NOSKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 5 

RESTORE DATABASE [SharePoint_Config]
FROM DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup\SharePoint_Config.bak'
WITH FILE = 1, NOUNLOAD, STATS = 5 

GO

Si une de ces deux dernières étapes ne devait pas fonctionner, et que votre SQL vous dises qu'il n'arrive pas à avoir un accès exclusif à la base, il vous faudra alors aller voir dans le Activity Monitor afin d'identifier quel processus monopolise la connection avec la base. Et si vous n'arrivez pas à fermer cette connexion proprement, il vous faudra procéder à un nouveau meurtre :



Et voilà, vos bases restaurées, votre site est prêt à reprendre vie. Il ne vous reste plus qu'une chose à faire, redémarrer le serveur SharePoint que vous avez éteint il y a quelques minutes. Après cette étape et quelques longues minutes d'attente, vous devriez voir apparaître votre site comme si rien n'était arrivé : 


J'espère que ce tutoriel vous aidera dans la restauration de site SharePoint et vous évitera des peines souvent trop lourdes pour de si petits délits :)

Aucun commentaire:

Enregistrer un commentaire