Основная информация

Зачастую для баз RK7 используется MSSQL Express и его вполне достаточно для выполнения всех задач. Но одна из проблем – это то, что у Express версии нет SQL Agent службы, при помощи которой можно делать некоторые задачи по расписанию. Взамен можно использовать SQLCMD и стандартный Task Scheduler от Windows.

Для начала приведем несколько скриптов, которые могут понадобиться для профилактики и резервного копирования базы:

Примечание: Во всех скриптах вместо RK_BASE нужно подставить название вашей базы.

Сжатие базы

DBCC SHRINKDATABASE (RK_BASE, 10);
GO

Проверка:

  1. Перевести в single user:
ALTER DATABASE RK_BASE
SET SINGLE_USER
WITH ROLLBACK IMMEDIATE;
GO

Проверка базы на ошибки

DBCC CHECKDB (RK_BASE, REPAIR_REBUILD)
  1. Если остались ошибки, можно их исправить с потерей данных:
DBCC CHECKDB (RK_BASE, REPAIR_ALLOW_DATA_LOSS)
  1. Перевести в multi user:
ALTER DATABASE RK_BASE
SET MULTI_USER;
GO

Переиндексация всех таблиц

USE RK_BASE
DECLARE @TableName char(32)
DECLARE SysCur CURSOR FOR SELECT name FROM sysobjects WHERE type='U'
OPEN SysCur
FETCH NEXT FROM SysCur INTO @TableName
WHILE @@FETCH_STATUS=0 BEGIN
DBCC DBREINDEX(@TableName)
FETCH NEXT FROM SysCur INTO @TableName
END
CLOSE SysCur
DEALLOCATE SysCur
DBCC FREEPROCCACHE
GO

Выполнение бэкапа

В имени файла бэкапа используется дата для удобства

  1. Полный, обычно делается 1 раз в сутки:
DECLARE @pathName NVARCHAR(512)
SET @pathName = 'D:\Backup\RK_BASE_backup_' + Convert(varchar(8), GETDATE(), 112) + '.bak'
BACKUP DATABASE [RK_BASE] TO  DISK = @pathName WITH NOFORMAT, NOINIT,  NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD,  STATS = 10
  1. Дифференцированный, можно делать раз в 1-2 часа:
DECLARE @pathName NVARCHAR(512)
SET @pathName = 'D:\Backup\RK_BASE_backup_' + Convert(varchar(8), GETDATE(), 112) + '.bak'
BACKUP DATABASE [RK_BASE] TO DISK = @pathName WITH DIFFERENTIAL, NOFORMAT, INIT, NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD, STATS = 1  

Выполнение комманд

Для того, чтобы воспользоваться любой из указанных выше команд, необходимо выполнить ряд действий. Рассмотрим их на примере выполнения бэкапа.

  1. Берем скрипт полного бэкапа, копируем в текстовый файл и сохраняем его под именем, например full_backup.sql и закидываем в папку, допустим c:\scheduled_tasks.
  2. Создаем и закидываем в ту же папку bat-файл следующего содержания:
sqlcmd -S SERVERNAME -U UserName -P Password -i full_backup.sql
"C:\Program Files\7-Zip\7z.exe" a -tzip -ssw -mx7 D:\Backup\RK_BASE_%date%.zip D:\Backup\RK_BASE_backup_*.bak
del d:\Backup\RK_BASE_backup_*.bak

- где, - SERVERNAME, UserName и Password соответственно имя севера, имя пользователя и пароль этого пользователя.

Вторая строка — команда для архивирования файла бэкапа. При этом необходимо установить архиватор 7zip и указать полный путь до 7z.exe.

  • Немного о ключах 7z:
  • tzip - формат архива установлен в zip, без этого ключа будет формат 7z;
  • ssw - принудительная упаковка файлов, которые в данный момент открыты для записи;
  • mx7 - высокая степень сжатия (7), можно поставить и 5 (нормальное сжатие), тогда процесс пойдет побыстрее;
  1. После выполнения осталось проверить работоспособность сделанного и добавить запуск bat-файла в Task Scheduler Windows.

 

 

За предоставленную информацию, отдельное спасибо Кокореву Дмитрию