Почему MS SQL server 2008 R2 добавляет в TSQL сценарий лишние символы?
Здравствуйте!
У нас резервное копирование БД осуществляется с помощью сценария (bukh - название БД, '\\192.168.10.2\bukh\bukh - сетевой ресурс )
DECLARE @Nw3 NVARCHAR(512)
SET @Nw3 = '\\192.168.10.2\bukh\bukh_' + Convert(varchar(8), GETDATE(), 112) + '.bak'
BACKUP DATABASE [bukh] TO DISK = @Nw3 WITH NOFORMAT, INIT, NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD,compression, STATS = 10
на сетевой ресурс. В последнее время сценарий перестал работать. Смотрю в логи, а в них
Сбой выполнения запроса "DECLARE @Nw3 NVARCHAR(512)
SET @Nw3 = '\\\\192.168.10..." со следующей ошибкой: "Невозможно открыть устройство резервного копирования '\\\\192.168.10.2\\bukh\\bukh_20170720.bak'. Ошибка операционной системы 64(Указанное сетевое имя более недоступно.).
BACKUP DATABASE прервано с ошибкой.". Возможные причины сбоя: проблемы с этим запросом, свойство "ResultSet" установлено неправильно, параметры установлены неправильно или соединение было установлено неправильно.
Как видно, добавлены лишние слэш. Почему так происходит?
Бэкап баз SQL на сетевой ресурс. Backup SQL database on a network share.
Вопрос бэкапов актуален всегда, об этом хорошо знает каждый, кто хоть раз безвозвратно терял свои данные. Базы данных SQL Server не исключение. Поэтому, хотелось бы обезопасить себя от возможного падения сервера и потерь баз.
Поставлю задачу.
Встроенными средствами SQL Server, настроить бэкапы на локальном диске. Для устойчивости, эти же бэкапы необходимо делать и на дублирующем сервере, чтобы не потерять базы в случае падения SQL Server. Обязательно, чтобы бэкап файлы SQL Server и файлы на дублирующем сервере были синхронизированы (т.е. если на SQL Server старые бэкапы почищены, то и на резервном сервере их также не должно быть) и все это должно работать на автомате.
Созрело следующее изящное решение:
1. Если стоит Windows Server 2003, то установим утилиту robocopy.
Windows Server 2008 уже имеет на борту данную утилиту.
2. Напишем скрипт, организующий копирование Backup баз SQL сервера
на сетевой ресурс с применением утилиты robocopy.
Возможности скрипта:
- Копирование подкаталогов исключая пустые
- Удаление в резервной папке файлов/директорий, которые уже не существуют в источнике
- Проверка изменения файлов с 2 секундной точностью
- Вывод в лог-файл
3. Создадим автоматическое выполнение задания
с помощью планировщика заданий.
P.S. Файл сервер, сетевой диск и шАры должны быть созданы и настроены.
Сам скрипт, который можно скопировать себе
(не забудь поменять пути к папкам на свои):
@echo off
rem "M:\Program Files\Microsoft SQL Server\MSSQL\BACKUP" - исходная папка
rem "\\freenas\data-sql\sql" - резервная папка
rem /S - копировать подкаталоги исключая пустые
rem /PURGE - Удалить в резервной папке файлы/директории, которые уже не существуют в источнике
rem /FFT - assume FAT File Times - проверяем изменения файлов с 2 секундной точностью
rem /LOG+:file :: вывод в лог-файл (добавить к существующему логу)
echo ****************************** >>\\freenas\data-sql\LogSQL.txt
C:\Backup\robocopy "C:\Program Files\Microsoft SQL Server\MSSQL\BACKUP" "\\freenas\data-sql\sql" /S /purge /FFT /Log+:\\freenas\data-sql\LogSQL.txt
echo ****************************** >>\\freenas\data-sql\LogSQL.txt
Андрей Скоржинский: Когда задание выполняю в SQL Agent, то получаю следующую ошибку:
Executed as users: DOMEN\admin. 'compression' is not a recognized BACKUP option. [SQLSTATE 42000](Error 155). The step failed.
DECLARE @Nw3 NVARCHAR(512)
SET @Nw3 = '\\192.168.10.2\bukh\bukh_' + Convert(varchar(8), GETDATE(), 112) + '.bak'
BACKUP DATABASE [bukh] TO DISK = @Nw3 WITH FORMAT, COMPRESSION, CHECKSUM;
Когда задание выполняю в SQL Agent, то получаю следующую ошибку:
Executed as users: DOMEN\admin. 'compression' is not a recognized BACKUP option. [SQLSTATE 42000](Error 155). The step failed.
Executing the query "DECLARE @Nw3 NVARCHAR(512)
SET @Nw3 = N'\\\\192.168.10.2\\bukh\\bukh_' + Convert(varchar(8), GETDATE(), 112) + N'.bak'
BACKUP DATABASE [bukh] TO DISK = @Nw3 WITH NOFORMAT, INIT, NAME = N'db_backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10" failed with the following error: "Cannot open backup device '\\\\192.168.10.2\\bukh\\bukh_20170724.bak'. Operating system error 5(Отказано в доступе.).
BACKUP DATABASE is terminating abnormally.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.