У нас есть веб-приложение, которое из соображений безопасности, регулируемых государством, требует, чтобы у каждого клиента была собственная база данных. В результате у нас есть несколько тысяч небольших баз данных с одинаковой схемой (сейчас каждая база данных имеет размер от 10 МБ до 50 МБ, но никогда не будет больше ~ 400 МБ).
У нас есть программа, которая автоматически просматривает каждую базу данных и обновляет схему по мере внесения изменений в нашу главную копию, которая отлично работает. Однако у нас не выполняется никакого обслуживания по сценариям, кроме ночного резервного копирования.
Есть предложения по поводу того, что еще мы должны запустить? Проверка целостности, обновление статистики, восстановление индексов? Независимо от того, что мы запускаем, нам нужно будет убедиться, что мы можем легко получить от сценария «прошел / не прошел», чтобы мы могли легко сообщить о сбоях для расследования позже на следующее утро (поскольку мы не собираемся смотреть сценарий, который повторяется тысячи раз).
Powershell будет здесь вашим другом. Экспромтом:
$server = new-object "Microsoft.SqlServer.Management.Smo.Server" "your-server-name-here"
foreach ($db in $server.Databases) {
foreach ($table in $db.Tables) {
foreach ($index in $table.Indexes) {
$index.Rebuild()
}
}
}
Могу ли я использовать этот сценарий без изменений? Нет (например, он просто слепо перестраивает каждую таблицу в каждой базе данных в экземпляре, независимо от того, нужно это или нет). Но он показывает, насколько мощным это может быть при очень небольшом количестве кода.