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


Конфигурация предназначенная для резеврного копирования баз 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 Добавлена возможность очистки лог-файла после создания резервной копии. Добавлена гиперссылка для просмотра справочной информации прямо из конфигурации.

52 Comments

  1. hrip

    Оригинальная идея. Надо будет протестировать.

    Под SQL Server имеется ввиду MS SQL Server?

    Reply
  2. bystrov-e

    Да, именно MS SQL Server :). Разработка проверялась на 2008, 2008 R2, 2005

    Reply
  3. hrip

    Протестировал. Всё отлично работает.

    Только надо наверное переименовать «папка для выгрузок» в «папка для выгрузок (на сервере СУБД)», а то я backup запустил на локальной машине и указал соответственно папку свою, а там появился только пустой архив, а бекап лежал в такой же папке но на сервере.

    Reply
  4. bystrov-e

    Да, возможно, в следующей версии я переименую этот реквизит. Я знаю об этой особенности работы и написал о ней в хелпе и прилагающемся описании. Спасибо)

    Reply
  5. bystrov-e

    Да, забыл сказать. В случае, если база создается в файловом варианте, то её нужно создавать на сервере, потому что выполнение команды архивации происходит в среде машины, на которой запущен процесс, соответственно заархивировать базу она не сможет — будут различаться папки на сервере (куда сохраняется архив) и на клиенте (откуда архиватор пытается заархивировать его). Проблему можно также решить расшариванием папки, куда делается архив и указанием сетевого пути к ней.

    Reply
  6. taurus_

    А что происходит с пользователями, которые на момент архивации работают в базе? Отключаются?

    Reply
  7. Worf

    (6) taurus_, SQL же всё делает на горячую, ну может кроме переименования баз )

    Reply
  8. bystrov-e

    Нет, ничего не происходит. При копировании средствами SQL Server пользователи не отключаются

    Reply
  9. ShamanNet

    Тысяча извинений! Всё сделал по инструкции, но при попытке сделать архивную копию базы выдаётся сообщение:

    Ошибка создания резервной копии: {ОбщийМодуль.БКП_Сервер.Модуль(211)}: Ошибка при вызове метода контекста (Execute): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Время ожидания истекло

    Reply
  10. bystrov-e

    Добрый день!

    Какого размера у вас база SQL? Судя по всему, тут какая-то ошибка по таймауту.

    Reply
  11. ShamanNet

    Немногим больше одного гигабайта. База совсем небольшая ведь, но архивация не проходит. Архивный файлик создаётся, но практически сразу «удаляется» и выдаётся сообщение об ошибке архивации.

    Reply
  12. Kopman

    Интересная штуковина, + заочно. Надо будет ознакомиться на досуге:-)

    Reply
  13. bystrov-e

    Я посмотрю в чем может быть причина такой ошибки как у вас, либо поправлю либо предложу решение)

    Reply
  14. bystrov-e

    Ошибка была из-за таймаута исполнения запроса для ADO — по умолчанию 30 сек. Исправил в новой версии.

    Reply
  15. AlexO

    (1) hrip,

    Под SQL Server имеется ввиду MS SQL Server?

    а что — есть еще какой-то SQL с названием SQL Server? 🙂

    __________________________________________

    Народ, когда научитесь использовать средства программ — а не изобретать костыли?

    MS SQL прекрасно настраивает бэкапы любых баз, по расписанию и куда угодно. Плюс — еще и регламентные операции с базой.

    Один раз настроил — и получай альтернативный бэкап хоть каждую минуту.

    Reply
  16. hrip

    (15) AlexO, в чем смысл придирок к словам то? 🙂

    Или по вашему про PostgreSQL, IBM DB2, MySQL и т.д. нельзя написать что это SQL Server?

    а вот MS SQL Server — это как раз название конкретного программного продукта от Майкрософт.

    Ну и в немного в защиту автора.

    Никто же не заставляет вас использовать эту разработку если она вам не нравится?

    А вот ознакомиться с технологией, как автор использует соединение с СУБД и делает бекапы, вредно точно никому не будет.

    Так что автору однозначно плюс!

    Reply
  17. bystrov-e

    Ну вы почитайте внимательно описание конфигурации и поймете, что я не призываю использовать её вместо стандартных средств 🙂 Ситуации разные бывают и разные средства могут использоваться.

    Reply
  18. ShamanNet

    (17) Огромное вам спасибо! После исправления проблемы с таймаутом всё заработало, как часы!

    Reply
  19. sumixam

    Протестировал работает спасибо, с таймаутом поначалу тоже была заморочка.

    Reply
  20. ShamanNet

    Тысяча извинений! Это опять я 🙁 Настроил автоматическое резервное копирование по расписанию. Однако по какой-то причине базы автоматически не резервируются. Подскажите, пожалуйста, что я делаю не так?

    Reply
  21. bystrov-e

    Скажите, у вас файловая ИБ или серверная

    Reply
  22. ShamanNet

    (21) Серверная

    Reply
  23. bystrov-e

    В базе случайно не стоит «Блокировка регламентных заданий»? Это можно посмотреть в консоли кластера серверов 1С:Предприятия

    Reply
  24. ShamanNet

    (23) Нет, блокировка регламентных заданий была отключена (не включалась) ещё на этапе настройки сервера 1С.

    Reply
  25. bystrov-e

    Там в конфигурацию включена простенькая консоль для просмотра активных заданий. Посмотрите, есть ли там регламентное задание и активно ли оно. Можно также проверить расписание. При выполнении регламентного задания остаются записи в журнале регистрации, можете ещё и туда заглянуть на предмет того, когда проходили регламентные задания и что происходило в них.

    Reply
  26. ShamanNet

    Да, конечно, регламентное задание есть и активно, но не выполняется. В журнале регистрации только записи о резервированиях, сделанных вручную (нажатием соответствующей кнопки). Расписание проверял и перепроверял. Беда какая-то!

    Reply
  27. bystrov-e

    Ну это тогда точно у вас проблема с планировщиком заданий. Проверьте в консоли кластера. Настройка задается для каждой базы в отдельности. При создании базы для резервного копирования могли случайно поставить/забыть снять галку блокировки заданий.

    Reply
  28. Гость

    Вот такую http://infostart.ru/public/121407/ систему посмотри значительно функциональнее. Не ново!

    Reply
  29. bystrov-e

    (28) Гость, 12000 стоит та разработка, а эта — бесплатная. Вы наверное свою разработку рекламировать пытаетесь? 🙂

    Reply
  30. Гость

    Может она того стоит! ) Думаю за демкой можно к разработчику обратиться.

    Reply
  31. bystrov-e

    (30) Гость, Обратитесь, попробуете, можете мне в личку написать о результатах:).

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

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

    Reply
  32. Гость

    Проде как SQL сам деалет копии и снапшоты, зачем еще что-то придумывать?

    Reply
  33. bystrov-e

    (32) Гость, Я на этот вопрос выше где-то отвечал.

    Reply
  34. ivan453

    Ошибка подключения: {ОбщийМодуль.БКП_Сервер.Модуль(379)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): [DBNETLIB][ConnectionOpen (Connect()).]SQL Server не существует, или доступ запрещен.

    вот такая ошибка, что делать?

    Reply
  35. bystrov-e

    (34) wert453, Нужно проверить пользователя, пароль, правильность написания пути для подключения к серверу.

    Reply
  36. ivan453

    так — отсюда по подробнее,

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

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

    или можно указать путь к базе?

    Reply
  37. Светлый ум

    Аналогичная проблема: при нажатии кнопки «проверить соединение» та же ошибка.

    Reply
  38. bystrov-e

    (36) wert453, Тут небольшая путаница в понятиях. В качестве сервера нужно указывать сервер, на котором крутится SQL, лучше также в явном виде указать путь к instance SQL сервера. Имя базы, пользователя и пароль также относятся к SQL серверу. Т.е. в виде сервера должно быть что-то вроде

    SERVER или SERVERMSSQLSERVER, где MSSQLSERVER — имя инстанса.

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

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

    Имя сервера и базы 1С не обязательно должны совпадать с именем базы и сервера SQL, но обычно их настраивают одинаковыми, отсюда и путаница.

    Reply
  39. ivan453

    Теперь ясно. спасибо

    Reply
  40. vi.rus

    Вот бы если в конфигурации еще была возможность восстановления из файлов бэкапа, было бы замечательно

    Reply
  41. bystrov-e

    (40) vi.rus, Планируется в будущем )

    Reply
  42. Светлый ум

    Объясните пожалуйста, по подробней на счет пути каталога «Папка для выгрузок»:

    — у меня пишет что выгрузка произошла успешно, но архива в папке нет — даже пустого, а в «истории резервных копий» пишет что архив сформировался тут же и размер его «0»

    Reply
  43. fadaserw

    Ошибка подключения: {ОбщийМодуль.БКП_Сервер.Модуль(379)}: Ошибка при вызове метода контекста (Open): Произошла исключительная ситуация (Microsoft OLE DB Provider for SQL Server): Ошибка входа пользователя «admin».

    КАК ВЫЛЕЧИТЬ

    Reply
  44. fadaserw

    все разобрался

    Reply
  45. vervolf9

    Хм, интересно, скачаю потестировать себе, затея прикольная.

    Reply
  46. Светлый ум

    Автоматически (по указанному расписанию) не создает архив, по кнопке «создать сейчас делает».

    Как нужно заполнять закладки «настройки автоматического сохранения» — все четыре можно заполнить и всеравно должен работать, или по одной как-то?.. всё уже перепробовал.

    Reply
  47. lavrov

    Спасибо автору , сильно пригодилась, встроил строку подключения в свою конфигурацию.

    Обратите внимание на права доступа к папкам с архивами пользователя под котором запущена служба sql , из за этого архивация можеn не проходить.

    Reply
  48. kaliningrad06

    Кто может поделиться а то на счету 0 а то очень нужно.

    Reply
  49. kaliningrad06

    Есть вопрос а как открыть исходный кот

    Reply
  50. hestoeaug

    Автору респект !!!!! отличная работа ! Спасибо огромное!!!!

    Reply
  51. klom

    «Использование при невозможности использования стандартных механизмов SQL Server (например, в Express версии).»

    Данная разработка чем лучше двух файлов

    один с расширением backup.sql, в котором строки вида

    BACKUP DATABASE [Base_naim] TO DISK = N’i:sql_backupBase_naim.bak’ WITH NOFORMAT, NOINIT, NAME = N’Base_naim-Полная База данных Резервное копирование’, SKIP, NOREWIND, NOUNLOAD, STATS = 10

    GO

    Второй backup.bat со строкой вида

    sqlcmd -S SERVER -E -i I:sql_backupackup.sql

    Это все для Express версии.

    Reply
  52. Finn71

    Работает хорошо! Только один вопрос, не думали добавить возможность ввода данных доступа к ресурсу, куда копировать данные? Для копирования на сетевой ресурс.

    Reply

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *