Создание резервной копии базы SQL средствами 1С (используя ADO)

База знаний
  1. 9 г. назад

    Если у Вас возникла необходимость создавать резервную копию (backup, бэкап) средствами 1С, то проще всего воспользоваться объектами ADO. Это легко, довольно быстро и удобно.

    // Процедура выполняет комманду создания резервной копии базы SQL в файл
    //
    // Параметры:
    //  СерверSQL			- <Строка> - сетевое имя сервера SQL или IP-адрес
    //  ПользовательSQL		- <Строка> - имя пользователя SQL для подключения
    //  ПарольSQL			- <Строка> - пароль пользователя SQL для подключения (не обязательный)
    //  ИмяБазыSQL			- <Строка> - имя базы SQL, резервную копию которой необходимо сделать
    //  ИмяФайлаБак			- <Строка> - имя файла резервной копии базы
    //
    Процедура БэкапБазыSQL(СерверSQL, ПользовательSQL, ПарольSQL = "", ИмяБазыSQL, ИмяФайлаБак) Экспорт
    	
    	// Инициализируем Объекты ADO
    	objConnection = Новый COMОбъект("ADODB.Connection");
    	objCommand = Новый COMОбъект("ADODB.Command");
    	
    	// Устанавливаем соединение с SQL
    	ConnectionString = "Provider=SQLOLEDB.1;Data Source=" + СерверSQL + ";User Id=" + ПользовательSQL;
    	Если ЗначениеЗаполнено(ПарольSQL) Тогда
    		ConnectionString = ConnectionString + ";Password=" + ПарольSQL;
    	КонецЕсли;
    	objConnection.Open(ConnectionString);
    	
    	// Выполняем комманду создания бэкапа
    	objCommand.ActiveConnection = objConnection;
    	objCommand.CommandTimeout = 0;
    	objCommand.CommandType = 1;
    	objCommand.CommandText = "BACKUP DATABASE " + ИмяБазыSQL + " TO DISK = '" + ИмяФайлаБак + "'";
    	objCommand.Execute();
    	
    КонецФункции
    
    Ответы: (1)
  2. (0) лучше вызывать асинхронно если неохота ждать завершения.

    Ответы: (2)
  3. (1) а в каком событии мне ловить завершение? Нет, удобнее дождаться конца и далее выполнять необходимые действия

    Ответы: (3) (4) (9)
  4. (2) см свойстов State команды и соединения.

    Ответы: (5)
  5. (2) Это Вам удобнее, но отнюдь не всегда это правильно :)

  6. (3) Кажется, Вы не поняли вопрос

    Ответы: (6)
  7. (5) Кажется, Вы не поняли технологию :)

  8. (7) что за бред? Выгрузка - это не бэкап

  9. (2) в таске на старте записывается контрольное значение в спецтаблицу, на финише значение ресетится.
    1С через то же адо может опрашивать это значение с каким то интервалом в своем задании, вызывая нужную функцию 1с по окончании.
    Преимущество в том, что бд бэкапиться и при этом 1с не висит все это время, позволяя работать параллельно

или зарегистрируйтесь чтобы ответить!