Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
Всем привет не выполняется скрипт выдает вот такую ошибку :

Сообщение 3044, уровень 16, состояние 2, строка 64
Недопустимое имя устройства нулевой длины. Повторите инструкцию BACKUP с допустимым именем устройства.
Сообщение 3013, уровень 16, состояние 1, строка 64
BACKUP DATABASE прервано с ошибкой.

Сам скрипт :

EXEC sp_configure 'show advanced options', 1
go
RECONFIGURE
EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE

DECLARE
@DataBaseName SYSNAME, -- имя текущей базы данных (в процессе перебора)
@BackUpPath SYSNAME, -- полный путь к bak-файлу резервной копии текущей базы данных
@BackUpArcPath SYSNAME, -- полный путь к bak-файлу резервной копии текущей базы данных
@DirPath SYSNAME, -- полный путь к каталогу резервных копий баз данных
@FileName SYSNAME, -- Имя файла
@BackUpPrefix SYSNAME, -- автоматически добавляемый к именам bak-файла и cab-файла суффикс, содержащий текущую дату
@year varchar (4), @month varchar (2), @day varchar (2), -- год, месяц и день текущей даты для формирования префикса
@hour varchar (2), @min varchar (2), -- час и минута префикса
@FtpServer SYSNAME,
@FtpUser SYSNAME,
@FtpPassword SYSNAME,
@FtpPort SYSNAME,
@FtpFolder SYSNAME
,
@Command SYSNAME,
@S SYSNAME,
@result int
,
@MailForError SYSNAME,
@ServerName SYSNAME

SET @DirPath = 'C:\DBBackUp\' -- Директория для временных файлов
SET @FtpServer = '87.XXX.43.XXX' -- Имя FTP-сервера
SET @FtpUser = 'master' -- Логин пользователя FTP-сервера
SET @FtpPassword = 'ftppass' -- Пароль пользователя FTP-сервера
SET @FtpPort = '21' -- Порт FTP-сервера
SET @FtpFolder = 'Volume_1/backup/' -- Папка на FTP куда будет сливаться бэкап
SET @MailForError = 'info@office.lan' -- Email куда отправиться письмо в случае не удачи
SET @ServerName = 'database' -- Сервер на котором выполняется скрипт

EXEC sp_configure 'show advanced options', 1
EXEC sp_configure 'xp_cmdshell', 1

-- Формирование префикса для имён файлов, содержащего текущую дату:
EXEC xp_sprintf @BackUpPrefix OUTPUT, '%04s%01s%02s%01s%02s%01s%02s%01s%02s', 'daily'

SET @Command = 'echo -------------------------------------------------------> "' + @DirPath + 'Log.txt"'
EXEC master..xp_cmdshell @Command

-- Открытие курсора и перебор всех существующих баз данных:
DECLARE Step_cursor CURSOR FOR SELECT [Name] FROM master..sysdatabases WHERE

-- Список баз которое НЕ БУДУТ участвовать в бэкапе
([Name]<>'tempdb') AND ([Name]<>'master') AND ([Name]<>'model') AND ([Name]<>'ReportServer$SQLASKUD') and ([Name]<>'123456') AND ([Name]<>'portal') AND ([Name]<>'test') AND ([Name]<>'ReportServer$SQLASKUDTempDB') AND ([Name]<>'ReportServer') AND ([Name]<>'ReportServerTempDB') AND ([Name]<>'msdb')

OPEN Step_cursor
FETCH NEXT FROM Step_cursor INTO @DataBaseName
WHILE @@FETCH_STATUS = 0 BEGIN
-- Делаем запись в логах что начали резервное копирование базы
-- Формирование префикса для имён файлов, содержащего текущую дату:
EXEC xp_sprintf @S OUTPUT, '%04s%01s%02s%01s%02s%01s%02s%01s%02s', 'daily'
SET @Command = 'echo --- Start backup ' + @DataBaseName + '---' + @S + '>> "' + @DirPath + 'Log.txt"'
EXEC master..xp_cmdshell @Command

-- Имя файла резервной копии
SET @BackUpPath = @DirPath + @BackUpPrefix + '_' + @DataBaseName + '.bak'
SET @BackUpArcPath = @DirPath + @BackUpPrefix + '_' + @DataBaseName + '.zip'
-- Резервное копирование базы данных (получение bak-файла):
BACKUP DATABASE @DataBaseName TO DISK = @BackUpPath WITH NOFORMAT, COMPRESSION, INIT, SKIP

--Архивируем бэкап
SET @Command = 'echo archivate daily_*.bak'
EXEC master..xp_cmdshell @Command
SET @Command = '"C:\Program Files (x86)\IZArc\izarc" -m -cn "' + @BackUpArcPath + '" ""' + @BackUpPath + '"'
EXEC master..xp_cmdshell @Command

-- Отправляем сжатый файл на FTP
SET @Command = 'echo open "' + @FtpServer + '"> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command
-- вводим имя пользователя
SET @Command = 'echo quote user ' + @FtpUser + '>> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command
-- водим праволь
SET @Command = 'echo quote pass ' + @FtpPassword+ '>> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command
-- делаем текущую папку активной
SET @Command = 'echo lcd "' + @DirPath + '">> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command

-- создаем папку с названием базы (если она есть будет выдана ошибка но нам все равно)
SET @Command = 'echo mkdir "' + @FtpFolder + '">> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command
-- переходим в папку с базами
SET @Command = 'echo cd "' + @FtpFolder + '">> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command

-- создаем папку с названием базы (если она есть будет выдана ошибка но нам все равно)
SET @Command = 'echo mkdir "' + @ServerName + '">> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command
-- переходим в папку с базами
SET @Command = 'echo cd "' + @ServerName + '">> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command

-- создаем папку с названием базы (если она есть будет выдана ошибка но нам все равно)
SET @Command = 'echo mkdir "' + @DataBaseName + '">> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command
-- переходим в папку с архивами баз
SET @Command = 'echo cd "' + @DataBaseName + '">> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command

-- устанавливаем режим передачи бинарный
SET @Command = 'echo bin>> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command
-- отправляем архив в текущую папку
SET @Command = 'echo mput "' + @BackUpPath + '" >> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command

-- пока, увидимся на следующей итерации или в другой раз...
SET @Command = 'echo bye>> "' + @DirPath + 'Script.txt"'
EXEC master..xp_cmdshell @Command


-----------------------------------------------------------------------------------------
-- Делаем запись в логах что начали резервное копирование базы
-- Формирование префикса для имён файлов, содержащего текущую дату:
EXEC xp_sprintf @S OUTPUT, '%04s%01s%02s%01s%02s%01s%02s%01s%02s', 'daily'
SET @Command = 'echo --- Send to FTP ' + @DataBaseName + ' --- ' + @S + '>> "' + @DirPath + 'Log.txt"'
EXEC master..xp_cmdshell @Command


-- отправка на ftp через командную строку
SET @Command = 'ftp -i -n -s:"' + @DirPath + 'Script.txt" ' + @FtpServer + ':' + @FtpPort + '>> "' + @DirPath + 'Log.txt"'
EXEC @result = master..xp_cmdshell @Command

-----------------------------------------------------------------------------------------
-- Перенос на фтп прошел успешно, проверка результата?
IF( @result = 0)
BEGIN
-----------------------------------------------------------------------------------------
-- Удаляем оригинал выгрузки
SET @Command = 'del "' + @BackUpPath + '" /Q' + ' /F'
EXEC master..xp_cmdshell @Command

-- Письмо успеха
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'sqlaskud',
@recipients = '7722131@gmail.com',
@body = 'Сохранение базы данных была успешно сохранена',
@subject = 'Automated Success Message_ASKUD'



END
ELSE
BEGIN
-- Отправляем письмо
-- Письмо успеха
EXEC msdb.dbo.sp_send_dbmail
@profile_name = 'sqlaskud',
@recipients = '7722131@gmail.com',
@body = 'Сохранение базы данных было завершенно с ошибками',
@subject = 'Automated UNSuccess Message_ASKUD'

-- Удаляем оригинал выгрузки
SET @Command = 'del "' + @DirPath + 'Script.txt"' + '" /Q' + ' /F'
EXEC master..xp_cmdshell @Command
END

FETCH NEXT FROM Step_cursor INTO @DataBaseName
END
CLOSE Step_cursor
DEALLOCATE Step_cursor


EXEC sp_configure 'show advanced options', 0
EXEC sp_configure 'xp_cmdshell', 0

EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
EXEC sp_configure 'show advanced options', 0
RECONFIGURE


Конфигурация сервера :
Железо:
Тип ЦП 2x QuadCore Intel Xeon E5430, 2666 MHz (8 x 333)
Системная плата Intel Star Lake S5000PSL (2 PCI-E x4, 2 PCI-E x8, 2 PCI-X, 8 FB-DIMM, Video, Dual Gigabit LAN)
Чипсет системной платы Intel Blackford 5000P
Системная память 16377 Мб (DDR2-667 Fully Buffered ECC DDR2 SDRAM)
ОС:
Windows 2008R2 std
Установлено на сервере :
Сервер 1С 8.1 х64, SQL 2008R2 x64, Dr.WEB x64
15 июл 11, 17:33    [10981597]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Justbox
Сообщение 3044, уровень 16, состояние 2, строка 64
Недопустимое имя устройства нулевой длины. Повторите инструкцию BACKUP с допустимым именем устройства.
Сообщение 3013, уровень 16, состояние 1, строка 64
BACKUP DATABASE прервано с ошибкой.

Ну так вы проверили что в сроке 64 вашего скрипта передается команде BACKUP DATABASE в качестве имени устройства ?
15 июл 11, 17:38    [10981622]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
пробовал добавить устройство не получилось , подскажите как правильно изменить скрипт .

Заранее благодарен !!!
15 июл 11, 17:40    [10981632]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Justbox,

EXEC xp_sprintf @BackUpPrefix OUTPUT, '%04s%01s%02s%01s%02s%01s%02s%01s%02s', 'daily'

эта конструкция правда работает?
15 июл 11, 17:41    [10981637]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
Shakill
Justbox,

EXEC xp_sprintf @BackUpPrefix OUTPUT, '%04s%01s%02s%01s%02s%01s%02s%01s%02s', 'daily'

эта конструкция правда работает?


Да работает , скрипт писался не мной мы переставили скуль и бэкапы делаем пока локально но хочется на фтп .
15 июл 11, 17:45    [10981660]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Justbox

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

Ну так вы узнали уже, как полностью выглядит команда BACKUP, которая вызывает ошибку ?
15 июл 11, 17:48    [10981676]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
Glory
Justbox
Да работает , скрипт писался не мной мы переставили скуль и бэкапы делаем пока локально но хочется на фтп .

Ну так вы узнали уже, как полностью выглядит команда BACKUP, которая вызывает ошибку ?


BACKUP DATABASE @DataBaseName TO DISK = @BackUpPath WITH NOFORMAT, COMPRESSION, INIT, SKIP
15 июл 11, 17:49    [10981681]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Justbox
Shakill
Justbox,

EXEC xp_sprintf @BackUpPrefix OUTPUT, '%04s%01s%02s%01s%02s%01s%02s%01s%02s', 'daily'

эта конструкция правда работает?


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


интересно
вам уже посоветовали проверить, какие значения переменных передаются в BACKUP DATABASE. заодно и @BackUpPrefix помониторьте
15 июл 11, 17:51    [10981692]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Justbox
Glory
пропущено...

Ну так вы узнали уже, как полностью выглядит команда BACKUP, которая вызывает ошибку ?


BACKUP DATABASE @DataBaseName TO DISK = @BackUpPath WITH NOFORMAT, COMPRESSION, INIT, SKIP

Это копия из скрипта, а не команда, которая реально выполняется
15 июл 11, 17:51    [10981694]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
Shakill
Justbox
пропущено...


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


интересно
вам уже посоветовали проверить, какие значения переменных передаются в BACKUP DATABASE. заодно и @BackUpPrefix помониторьте


Закоментировал, провожу выдает туже ошибку .
15 июл 11, 17:53    [10981707]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Justbox
Shakill
пропущено...


интересно
вам уже посоветовали проверить, какие значения переменных передаются в BACKUP DATABASE. заодно и @BackUpPrefix помониторьте


Закоментировал, провожу выдает туже ошибку .


а зачем комментировать, разве об этом речь была?
15 июл 11, 17:56    [10981723]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
Shakill
Justbox
пропущено...


Закоментировал, провожу выдает туже ошибку .


а зачем комментировать, разве об этом речь была?


помогите разобраться каким запросом можно понять где я ошибся ?
15 июл 11, 18:03    [10981772]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Glory
Member

Откуда:
Сообщений: 104751
Justbox

помогите разобраться каким запросом можно понять где я ошибся ?

Вы текст сообщения вообще читали ?


Сообщение 3044, уровень 16, состояние 2, строка 64
Недопустимое имя устройства нулевой длины. Повторите инструкцию BACKUP с допустимым именем устройства.
Сообщение 3013, уровень 16, состояние 1, строка 64
BACKUP DATABASE прервано с ошибкой.
15 июл 11, 18:07    [10981790]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Justbox
помогите разобраться каким запросом можно понять где я ошибся ?

добавьте перед командой BACKUP DATABASE строки PRINT ISNULL(@DataBaseName, 'пусто') PRINT ISNULL(@BackUpPath, 'пусто') PRINT ISNULL(@BackUpPrefix, 'пусто')
и запустите скрипт
15 июл 11, 18:07    [10981791]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
Shakill
Justbox
помогите разобраться каким запросом можно понять где я ошибся ?

добавьте перед командой BACKUP DATABASE строки PRINT ISNULL(@DataBaseName, 'пусто') PRINT ISNULL(@BackUpPath, 'пусто') PRINT ISNULL(@BackUpPrefix, 'пусто')
и запустите скрипт


Спасибо, надо было дописать в SET BackUpPath и SET BackUpPrefix
15 июл 11, 18:18    [10981840]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Shakill
Member

Откуда: мск
Сообщений: 1887
Justbox, SET @BackupPath в скрипте и так уже был, а почему @BackUpPrefix пустой оказался, лучше разберитесь
15 июл 11, 18:24    [10981869]     Ответить | Цитировать Сообщить модератору
 Re: Не выполняется скрипт  [new]
Justbox
Member

Откуда: Москва
Сообщений: 97
Если запускаю скрипт через послать запрос все работает как надо , но если делаю задание в агенте вылетает ошибка и все =(
22 июл 11, 15:59    [11013609]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить