Tra le molteplici nuove features introdotte in Sharepoint 2010, vi è la "Gradual Site Delete". Grazie a questa feature una site collection eliminata da un utente con privilegi amministrativi, non viene rimossa dal content DB di appartenenza in un'unica operazione monolitica, ma in numerose tranches più piccole.

Nella versione precedente del prodotto, accadeva infatti che quando una site collection veniva cancellata, lato SQL Server il GUID di tale site collection veniva ricercato in diverse tabelle del Content DB di appartenenza ( circa 35 tabelle venivano interessate ) e tutte le righe che contenevano il riferimento alla site collection venivano rimosse in un'unica complessiva operazione di DELETE effettuata da un'apposita stored procedure. Se la site collection era particolarmente corposa, questo si traduceva in un elevato numero di righe da eliminare dalle rispettive tabelle. Quando tale numero supera una precisa soglia ( default 5000 ), l'engine di SQL Server passa da un "row lock" ad un "table lock"  per non degradare troppo le performance ( lock escalation ). Ma se da un lato questo salvaguarda le prestazioni del DB server, dall'altro si traduce nel fatto che l'intera tabella viene resa indisponibile ad ulteriori operazioni di lettura/scrittura, fino ad operazione ultimata.

In SharePoint 2010 questo procedimento è stato migliorato. Vediamo in dettaglio cosa accade quando viene eliminata una site collection:

  • L'entry relativa alla site collection viene rimossa dalla tabella dbo.SiteMaps del Configuration Database
  • L'entry viene anche rimossa dalla tabella dbo.Sites del content DB di appartenenza

Dal punto di vista dell'utente finale questo significa di fatto che la site collection non esiste più, e risulta impossibile raggiungerla tramite il suo URL. Il contenuto della site collection in questa fase non viene intaccato. Dopodichè:

  • Una nuova entry relativa alla site collection viene inserita nella tabella dbo.SiteDeletion del content DB
  • Il timer job "Gradual SIte Delete" ( uno per web application ) si attiva una volta al giorno e al tempo stabilito scandisce tale tabella e comincia l'operazione di gradual delete, che prevede la cancellazione del contenuto della site collection a pacchetti di massimo 1000 righe per tabella ciascuno. In questo modo si previene la lock escalation
  • E' previsto che il job riesca a riprendere automaticamente il lavoro nel caso si sia interrotto per qualche motivo ( riavvio server, etc. )

Alla fine di questa operazione, il contenuto della site collection risulta definitivamente rimosso dal content DB.

Notiamo a questo punto come nel periodo che va dal momento in cui l'amministratore elimina la site collection alla attivazione del timer job, il contenuto sia intatto.

Questo fatto viene sfruttato da un set di cmdlet PowerShell, introdotte nella Service Pack 1 di SharePoint 2010, che aiuta a gestire le site collection eliminate:

  • Get-SPDeletedSite  - Elenca tutte le site collection eliminate
  • Restore-SPDeletedSite - Consente di ripristinare una site collection eliminata, specificando l'URL relativo ( es. /sites/wiki )
  • Remove-SPDeletedSite - Elimina definitivamente la site collection. In questo caso il comando Restore-SPDeletedSite fallirebbe per questa site collection. ( Il contenuto viene eliminato in modo frazionato dal timer job al tempo di attivazione schedulato )

Il vantaggio dell'utilizzo della cmdlet Restore-SPDeletedSite lo si apprezza ad esempio nel caso di site collections eliminate accidentalmente. Grazie a tale cmdlet il ripristino è estremamente rapido ed evita di dover ricorrere al restore di un backup precedente del content DB o della specifica site collection, operazioni queste che nel caso di site collection particolarmente corpose potrebbero essere onerose in termini di tempo. Resta valido il fatto che all'attivazione del timer job, il contenuto viene gradualmente rimosso e pertanto un tentativo di rirpristino con la cmdlet suddetta avrebbe esito negativo.

Infine vorrei segnalare l'utile tool Sharepoint Site Recycle Bin scaricabile da Codeplex che introduce un recycle bin con cui è possibile gestire i siti e le site collection cancellate (il tool non è supportato da Microsoft )