Если со встроенными ограничениями приходится смиряться, то последнее ограничение можно свести на нет. В интернете наткнулся на одну хранимую процедуру, с помощью которой можно удобно выполнять следующие операции:
- Создание полных архивных копий
- Создание разностных копий
- Создание копий лога
- Проверка целостности баз
- Перестройка индексов
- Реорганизация индексов
- Формирование отчетов о выполнении операций
Как установить:
Извлечь из архива и поместить файл, например, в c:\expressmaint.sql , затем в Пуск-Выполнить набрать «sqlcmd -S .\SQLExpress -i c:\expressmaint.sql»
Как использовать:
Рассмотрим пример: пусть на нашем sql сервере у нас находятся 2 базы: «trade» и «buh». Необходимо настроить, чтобы каждый день в 7 утра делался полный backup баз и после этого делалась перестройка всех индексов. Также нужно, чтобы раз в час обновлялась статистика, и чистился процедурный кэш.
- Создаем три папки «C:\Backup\backups_sql», «C:\Backup\scripts_sql» и «C:\Backup\reports_sql». В первой будут храниться утренние бэкапы, во вторую поместим файлы скриптов, а в третью будут сохраняться отчеты о выполнении операций.
- Создаем следующие файлы и помещаем их в папку «C:\Backup\scripts_sql»:
Название файла | Содержимое |
FullDatabaseBackup.sql |
exec expressmaint @database = 'ALL_USER', @optype = 'DB', @backupfldr = 'C:\Backup\backups_sql', @reportfldr = 'C:\Backup\reports_sql', @verify = 1, @dbretainunit = 'copies', @dbretainval = 1, @rptretainunit = 'copies', @rptretainval = 1, @report = 1 |
Rebuild_all_indexes.sql |
exec expressmaint @database = 'ALL_USER', @optype = 'REINDEX', @reportfldr = 'C:\Backup\reports_sql', @rptretainunit = 'days', @rptretainval = 1, @report = 1 |
Update_statistics.sql |
USE [buh] exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN' go
USE [trade] exec sp_msforeachtable N'UPDATE STATISTICS ? WITH FULLSCAN' go |
Free_proc_cashe.sql |
USE [buh] DBCC FREEPROCCACHE go
USE [trade] DBCC FREEPROCCACHE go |
3. После этого нужно настроить планировщик задач, чтобы каждый скрипт выполнялся в свое время
Для добавления задачи нужно (простите за подробности):
· Дважды щелкнуть на «Добавить задание» для запуска мастера назначенных задач, а затем на кнопку «Далее» в первом диалоговом окне.
· Нажать кнопку «Обзор», найти SQLCMD.exe (по умолчанию, он в папке C:\Program Files\Microsoft SQL Server\90\Tools\binn), а затем нажать кнопку «Открыть».
· Ввести имя задачи, например «FullDatabaseBackup» и в параметрах выбрать ежедневно.
· Нажать кнопку «Далее», указать время 07:00, а затем нажать кнопку «Далее»
· Введите имя и пароль учетной записи, которые будет выполнять эту задачу.
· Нажмите кнопку «Далее», установите флажок, чтобы открыть дополнительные свойства для этого задачи и нажмите кнопку Готово
· В текстовом поле «Выполнить» добавить следующее содержание:
-S . \SQLExpress -i"C:\Backup\scripts_sql\FullDatabaseBackup.sql"
· Нажмите кнопку ОК.
Аналогично настраиваем для остальных. Перестройку индексов можно назначить на 8 утра, а обновление статистики и чистку кэша раз в час с 09:00 до 21:00.
4. Теперь каждое утро папка «C:\Backup\backups_sql» будет очищаться и туда будут помещаться новые бэкапы. Поэтому осталось настроить какую-нибудь программу для архивирования файлов для переноса бэкапов на резервный диск, комп, ..
Подробное описание и примеры здесь.
Где взять и как установить SQL Server 2005 Express Edition.
Процедура имеет следующие параметры:
Параметр |
обяз. |
по умолч. |
Описание |
|||
@database |
да |
NONE |
Служит для указания баз данных для которых будет выполняться операция. Может принимать значения
|
|||
@optype |
да |
NONE |
Указывает на операцию, которая должны выполняться. Может принимать значения:
|
|||
@backupwith |
нет |
NULL |
Служит для указания дополнительных параметров архивации ( как в BOL для команды BACKUP WITH ) |
|||
@backupfldr |
нет |
NULL |
Основная папка для записи архивов. Для каждой базы данных будет создана подпапка |
|||
@verify |
нет |
1 |
Указывает, следует ли проверять файл резервной копии. |
|||
@verifywith |
нет |
NULL |
Дополнительные параметры проверки ( как в BOL для команды VERIFY WITH) |
|||
@dbretainval |
нет |
1 |
Указывается период времени или количество копий старых архивных копий. |
|||
@dbretainunit |
нет |
NULL |
Единица измерения для параметра @dbretainval. Допустимыми значениями являются minutes, hours, days, weeks, months and copies. Сочетание этих двух параметров определяет, как долго или каким образом будут храниться старые архивные копии. |
|||
@report |
нет |
1 |
Указывает, следует ли формировать отчет о выполнении операции.
|
|||
@reportfldr |
нет |
NULL |
Указывается папка для отчет, если @report = 1 |
|||
@rptretainval |
нет |
1 |
Указывается период времени или количество копий старых отчетов. |
|||
@rptretainunit |
нет |
NULL |
Единица измерения для параметра @rptretainval. Может принимать значения: minutes, hours, days, weeks, months and copies. Сочетание этих двух параметров определяет, как долго или каким образом будут храниться копии старых отчетов. |
|||
@delfirst |
нет |
0 |
Указывает, следует ли удалить устаревшие резервные копии до выполнения резервного копирования. Допустимые значения: 1 и 0 с 1 = TRUE и 0 = FALSE |