Sharepoint dev machine - не даем базам SQL разрастись
Пора вернуться к написанию блога.
У меня был данный пост в старом блоге на gotdotnet, (RIP) и я с тех пор сожалею что никак не мог найти в интернете подходящий скрипт. Пришлось восстановить заново.
Я периодически создаю себе одноверверные фермы для разработки. Свеже установленный SharePoint конфигурирует кучу баз, и каждая со временем разрастается.Хуже того, я сейчас использую SSD в Azure (а там места совсем мало если брать за разумные деньги).
То есть, если машина исползуется для РАЗРАБОТКИ, то можно переключить модель восстановления в режим simple (recovery mode = simple).До 2012 SQL была специальная опция "truncate log on checkpoint", но начиная с SQL 2012 ее больше нет (см. https://technet.microsoft.com/en-us/library/ms187310(v=sql.105).aspx ).
Я нашел хороший блог пост тут https://microtechpoint.com/index.php?route=blog/article&article_id=10 с хорошим наборои команд (реально радует заголовок "Shrinking Ginormous SharePoint Database Transaction Log Files" :)), , но эти команды работают только с одной базой.
Я также нашел недокументированную хранимую процедуру sp_MSForEachDB (см. https://www.c-sharpcorner.com/UploadFile/63f5c2/sp_msforeachtable-stored-procedure-in-sql-server-2012/ или https://weblogs.sqlteam.com/joew/archive/2008/08/27/60700.aspx ), данная процедура может запустить некоторую команду для каждой базы.
Итого я использовал следующую команду.(Можно обсуждать, нужен ли тут shrinkdataase или нужно ли добавить autoshrink).
EXEC sp_MSforeachdb 'USE [?]; print ''?''; ALTER DATABASE [?] SET RECOVERY SIMPLE; CHECKPOINT; DBCC SHRINKDATABASE ([?],10); '
Disclaimer: Я нигде не сказал, что я рекомендую модель simple в production.