gifts2017

Резервное копирование баз SQL Server на базе 1С.

Опубликовал Евгений Быстров (bystrov-e) в раздел Администрирование - Архивирование (backup)

Конфигурация предназначенная для резеврного копирования баз SQL Server. Может использоваться как автономно, так и объединяться с любой конфигурацией. Код полностью открыт и доступен для редактирования.

Конфигурация предназначенная для резеврного копирования баз SQL Server. Может использоваться как автономно, так и объединяться с любой конфигурацией. Код полностью открыт и доступен для редактирования.

В конфигурацию включен подробный HELP, вызываемый из справочника "Информационные базы".

Предназначение: Использование  как основной/резервный механизм архивации БД. Использование при невозможности использования стандартных механизмов SQL Server (например, в Express версии). Удаленное создание и удаление резервных копий, настройка архивации (в случае работы через Web-сервер).

Возможности:

1. Настройка резервного копирования как одной, так и нескольких баз по индивидальному расписанию

2. Возможность настройки строки соединения и SQL-запроса архивации БД.

3. Возможность указания произвольного имени файла архива, в том числе и вычисляемого. (Например, зависящего от даты)

4. Возможность архивации выгруженного файла с помощью RAR и встроенного в 1С механизма ZIP-архивации. Возможность установки пароля для файла.

5. Ведение истории выгруженных файлов.

Об ошибках просьба сообщать в личку. Несмотря на то, что писалась конфигурация под SQL Server, возможно она будет и работать и с другими СУБД (для этого можно настроить строку соединения и, возможно, скрипт выгрузки). Эта возможность не тестировалась. О таком опыте - успешном или неудачном просьба также сообщать в личку.

 

upd: ver. 1.1 : Исправлена ошибка прерывания исполнения запроса по таймауту и добавлена возможность устанавливать таймаут запроса самостоятельно.

ver. 1.4 Добавлена возможность очистки лог-файла после создания резервной копии. Добавлена гиперссылка для просмотра справочной информации прямо из конфигурации.

Скачать файлы

Наименование Файл Версия Размер
Rezerv_1.4.cf 149
.cf 582,15Kb
28.11.12
149
.cf 582,15Kb Скачать

См. также

Подписаться Добавить вознаграждение
Комментарии
1. Юрий Хрипачёв (hrip) 24.05.12 15:44
Оригинальная идея. Надо будет протестировать.
Под SQL Server имеется ввиду MS SQL Server?
2. Евгений Быстров (bystrov-e) 24.05.12 15:48
Да, именно MS SQL Server :). Разработка проверялась на 2008, 2008 R2, 2005
3. Юрий Хрипачёв (hrip) 24.05.12 15:58
Протестировал. Всё отлично работает.
Только надо наверное переименовать "папка для выгрузок" в "папка для выгрузок (на сервере СУБД)", а то я backup запустил на локальной машине и указал соответственно папку свою, а там появился только пустой архив, а бекап лежал в такой же папке но на сервере.
4. Евгений Быстров (bystrov-e) 24.05.12 16:03
Да, возможно, в следующей версии я переименую этот реквизит. Я знаю об этой особенности работы и написал о ней в хелпе и прилагающемся описании. Спасибо)
5. Евгений Быстров (bystrov-e) 24.05.12 16:08
Да, забыл сказать. В случае, если база создается в файловом варианте, то её нужно создавать на сервере, потому что выполнение команды архивации происходит в среде машины, на которой запущен процесс, соответственно заархивировать базу она не сможет - будут различаться папки на сервере (куда сохраняется архив) и на клиенте (откуда архиватор пытается заархивировать его). Проблему можно также решить расшариванием папки, куда делается архив и указанием сетевого пути к ней.
6. taurus taurus (taurus_) 14.06.12 06:19
А что происходит с пользователями, которые на момент архивации работают в базе? Отключаются?
7. Worf 14.06.12 06:52
(6) taurus_, SQL же всё делает на горячую, ну может кроме переименования баз )
8. Евгений Быстров (bystrov-e) 14.06.12 09:05
Нет, ничего не происходит. При копировании средствами SQL Server пользователи не отключаются
9. Федор Сумкин (ShamanNet) 15.06.12 12:43
Тысяча извинений! Всё сделал по инструкции, но при попытке сделать архивную копию базы выдаётся сообщение:
Ошибка создания резервной копии: {ОбщийМодуль.БКП_Сервер.Модуль(211)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания истекло
10. Евгений Быстров (bystrov-e) 15.06.12 14:21
Добрый день!

Какого размера у вас база SQL? Судя по всему, тут какая-то ошибка по таймауту.
11. Федор Сумкин (ShamanNet) 18.06.12 08:46
Немногим больше одного гигабайта. База совсем небольшая ведь, но архивация не проходит. Архивный файлик создаётся, но практически сразу "удаляется" и выдаётся сообщение об ошибке архивации.
12. Андрей Антипенко (Kopman) 18.06.12 08:51
Интересная штуковина, + заочно. Надо будет ознакомиться на досуге:-)
13. Евгений Быстров (bystrov-e) 18.06.12 09:11
Я посмотрю в чем может быть причина такой ошибки как у вас, либо поправлю либо предложу решение)
ShamanNet; +1 Ответить
14. Евгений Быстров (bystrov-e) 19.06.12 09:41
Ошибка была из-за таймаута исполнения запроса для ADO - по умолчанию 30 сек. Исправил в новой версии.
15. Алекс Ю (AlexO) 19.06.12 10:08
(1) hrip,
Под SQL Server имеется ввиду MS SQL Server?

а что - есть еще какой-то SQL с названием SQL Server? :)
__________________________________________
Народ, когда научитесь использовать средства программ - а не изобретать костыли?
MS SQL прекрасно настраивает бэкапы любых баз, по расписанию и куда угодно. Плюс - еще и регламентные операции с базой.
Один раз настроил - и получай альтернативный бэкап хоть каждую минуту.
16. Юрий Хрипачёв (hrip) 19.06.12 10:35
(15) AlexO, в чем смысл придирок к словам то? :-)
Или по вашему про PostgreSQL, IBM DB2, MySQL и т.д. нельзя написать что это SQL Server?
а вот MS SQL Server - это как раз название конкретного программного продукта от Майкрософт.
Ну и в немного в защиту автора.
Никто же не заставляет вас использовать эту разработку если она вам не нравится?
А вот ознакомиться с технологией, как автор использует соединение с СУБД и делает бекапы, вредно точно никому не будет.
Так что автору однозначно плюс!
17. Евгений Быстров (bystrov-e) 19.06.12 10:39
Ну вы почитайте внимательно описание конфигурации и поймете, что я не призываю использовать её вместо стандартных средств :) Ситуации разные бывают и разные средства могут использоваться.
18. Федор Сумкин (ShamanNet) 19.06.12 13:45
(17) Огромное вам спасибо! После исправления проблемы с таймаутом всё заработало, как часы!
19. sumixam (sumixam) 20.06.12 12:15
Протестировал работает спасибо, с таймаутом поначалу тоже была заморочка.
20. Федор Сумкин (ShamanNet) 20.06.12 16:21
Тысяча извинений! Это опять я :( Настроил автоматическое резервное копирование по расписанию. Однако по какой-то причине базы автоматически не резервируются. Подскажите, пожалуйста, что я делаю не так?
21. Евгений Быстров (bystrov-e) 20.06.12 16:35
Скажите, у вас файловая ИБ или серверная
22. Федор Сумкин (ShamanNet) 20.06.12 16:58
23. Евгений Быстров (bystrov-e) 20.06.12 17:18
В базе случайно не стоит "Блокировка регламентных заданий"? Это можно посмотреть в консоли кластера серверов 1С:Предприятия
24. Федор Сумкин (ShamanNet) 20.06.12 19:32
(23) Нет, блокировка регламентных заданий была отключена (не включалась) ещё на этапе настройки сервера 1С.
25. Евгений Быстров (bystrov-e) 20.06.12 22:04
Там в конфигурацию включена простенькая консоль для просмотра активных заданий. Посмотрите, есть ли там регламентное задание и активно ли оно. Можно также проверить расписание. При выполнении регламентного задания остаются записи в журнале регистрации, можете ещё и туда заглянуть на предмет того, когда проходили регламентные задания и что происходило в них.
26. Федор Сумкин (ShamanNet) 21.06.12 14:04
Да, конечно, регламентное задание есть и активно, но не выполняется. В журнале регистрации только записи о резервированиях, сделанных вручную (нажатием соответствующей кнопки). Расписание проверял и перепроверял. Беда какая-то!
27. Евгений Быстров (bystrov-e) 21.06.12 15:40
Ну это тогда точно у вас проблема с планировщиком заданий. Проверьте в консоли кластера. Настройка задается для каждой базы в отдельности. При создании базы для резервного копирования могли случайно поставить/забыть снять галку блокировки заданий.
28. Гость 06.07.12 13:43
Вот такую http://infostart.ru/public/121407/ систему посмотри значительно функциональнее. Не ново!
29. Евгений Быстров (bystrov-e) 06.07.12 13:52
(28) Гость, 12000 стоит та разработка, а эта - бесплатная. Вы наверное свою разработку рекламировать пытаетесь? :)
30. Гость 06.07.12 15:03
Может она того стоит! ) Думаю за демкой можно к разработчику обратиться.
31. Евгений Быстров (bystrov-e) 06.07.12 15:18
(30) Гость, Обратитесь, попробуете, можете мне в личку написать о результатах:).

Та конфигурация, судя по описанию, не делает резервную копию базы SQL, а выгружает базу средствами 1С. Это применимо далеко не во всех случаях, занимает гораздо больше времени и восстановленная из такой резервной копии база не будет полной копией существующей - будет иметь другие индексы итд итп. Так что оптимальный вариант, если база серверная - именно выгрузка средствами СУБД, а не 1С.

Там заявлено больше функций чем у меня, но я и не претендую на то, что моя конфигурация - самая функциональная. Доработки функциональности планируются, но не скоро и они в первую очередь будут направлены на поддержку других СУБД, потому что именно в этом суть разработки.
32. Гость 06.07.12 15:24
Проде как SQL сам деалет копии и снапшоты, зачем еще что-то придумывать?
33. Евгений Быстров (bystrov-e) 06.07.12 15:46
(32) Гость, Я на этот вопрос выше где-то отвечал.
34. Семён (wert453) 09.07.12 07:54
Ошибка подключения: {ОбщийМодуль.БКП_Сервер.Модуль(379)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.

вот такая ошибка, что делать?
35. Евгений Быстров (bystrov-e) 09.07.12 08:06
(34) wert453, Нужно проверить пользователя, пароль, правильность написания пути для подключения к серверу.
36. Семён (wert453) 09.07.12 10:21
так - отсюда по подробнее,

у меня на сервере крутится база - см. картинку.

Мне вместо базы - Прописать "База1" , имя "Серв1"

или можно указать путь к базе?
Прикрепленные файлы:
Светлый ум; +1 Ответить 1
37. Константин Куликов (Светлый ум) 09.07.12 10:23
Аналогичная проблема: при нажатии кнопки "проверить соединение" та же ошибка.
38. Евгений Быстров (bystrov-e) 09.07.12 10:47
(36) wert453, Тут небольшая путаница в понятиях. В качестве сервера нужно указывать сервер, на котором крутится SQL, лучше также в явном виде указать путь к instance SQL сервера. Имя базы, пользователя и пароль также относятся к SQL серверу. Т.е. в виде сервера должно быть что-то вроде

SERVER или SERVER\MSSQLSERVER, где MSSQLSERVER - имя инстанса.

В качестве базы указывается имя базы - BASE, например.

пользователь (если выбрана аутентификация SQL) - обычно sa. Пароль - пароль входа SQL.

Имя сервера и базы 1С не обязательно должны совпадать с именем базы и сервера SQL, но обычно их настраивают одинаковыми, отсюда и путаница.
39. Семён (wert453) 09.07.12 11:09
40. Denis Ilin (vi.rus) 18.07.12 09:57
Вот бы если в конфигурации еще была возможность восстановления из файлов бэкапа, было бы замечательно
41. Евгений Быстров (bystrov-e) 18.07.12 10:50
(40) vi.rus, Планируется в будущем )
42. Константин Куликов (Светлый ум) 20.07.12 08:25
Объясните пожалуйста, по подробней на счет пути каталога "Папка для выгрузок":

- у меня пишет что выгрузка произошла успешно, но архива в папке нет - даже пустого, а в "истории резервных копий" пишет что архив сформировался тут же и размер его "0"
43. Сергей Чернышов (fadaserw) 31.08.12 16:42
Ошибка подключения: {ОбщийМодуль.БКП_Сервер.Модуль(379)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка входа пользователя "admin".

КАК ВЫЛЕЧИТЬ
44. Сергей Чернышов (fadaserw) 31.08.12 16:45
45. Серж Драт (vervolf9) 31.08.12 18:05
Хм, интересно, скачаю потестировать себе, затея прикольная.
46. Константин Куликов (Светлый ум) 28.09.12 09:11
Автоматически (по указанному расписанию) не создает архив, по кнопке "создать сейчас делает".

Как нужно заполнять закладки "настройки автоматического сохранения" - все четыре можно заполнить и всеравно должен работать, или по одной как-то?.. всё уже перепробовал.
47. Сергей Лактионов (lavrov) 27.11.12 23:32
Спасибо автору , сильно пригодилась, встроил строку подключения в свою конфигурацию.
Обратите внимание на права доступа к папкам с архивами пользователя под котором запущена служба sql , из за этого архивация можеn не проходить.
kaliningrad06; +1 Ответить
48. Vladimir Pavlenko (kaliningrad06) 18.12.12 16:38
Кто может поделиться а то на счету 0 а то очень нужно.
49. Vladimir Pavlenko (kaliningrad06) 20.12.12 01:59
Есть вопрос а как открыть исходный кот
50. Никита Андреев (hestoeaug) 08.12.16 14:27
Автору респект !!!!! отличная работа ! Спасибо огромное!!!!
51. klom klom (klom) 08.12.16 14:44
"Использование при невозможности использования стандартных механизмов SQL Server (например, в Express версии)."

Данная разработка чем лучше двух файлов
один с расширением backup.sql, в котором строки вида
BACKUP DATABASE [Base_naim] TO DISK = N'i:\sql_backup\Base_naim.bak' WITH NOFORMAT, NOINIT, NAME = N'Base_naim-Полная База данных Резервное копирование', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
Второй backup.bat со строкой вида
sqlcmd -S SERVER -E -i I:\sql_backup\backup.sql

Это все для Express версии.
Vecjh2008; +1 Ответить
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа