gifts2017

Восстановление потерянных пакетов обмена для распределенных баз данных 8.1

Опубликовал Сергей Сиренко (ssn1978) в раздел Администрирование - Распределенная БД (УРИБ, УРБД)

Фоновому обмену 1с 8.1 посвящается...
Обработка предназначена для полуавтоматической регистрации по журналу регистрации в плане обмена измененных объектов базы данных


Ситуация: Сделали точную копию рабочей базы, а установить блокировку фоновых заданий в свойствах базы на 1С-Сервере забыли...
В результате копия базы подменила файлы выгрузок для переферийной базы, которые успешно подхватились переферийной базой. В результате получили рассинхронизацию распределенных баз.

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

Для правильной работы Настроить фильтр журнала регистрации таким образом, чтобы в нем остались записи работы пользователей текущей базы данных. Исключить фоновый обмен и работу пользователя, под которым происходит обмен данными!!!

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

Наименование Файл Версия Размер Кол. Скачив.
-
.1210748492 8,65Kb
06.02.13
99
.1210748492 8,65Kb 99 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Алексей Штепа (unknownDaemon) 01.10.08 07:33
Пасип за идею!!! Друже чесслово, идея супер... Плюсанул :)
Вот те подарочек за это - это "нормализованая" твоя функция парсинга ;-) :
Код
 
Функция ПарситьВСписок(ИмяФайла) Экспорт
   Список = Новый СписокЗначений;
   Чтение = Новый ЧтениеXML;
   Чтение.ОткрытьФайл(ИмяФайла);
   Пока Чтение.Прочитать() Цикл
      Чтение.ПрочитатьАтрибут();
      Если Чтение.Имя = "xmlns" Тогда
         ЗначениеАтрибута = Чтение.ЗначениеАтрибута(1);
         Чтение.Прочитать();
         Значение = XMLЗначение(Тип(ЗначениеАтрибута),Чтение.Значение);
         Список.Добавить(Значение);
      КонецЕсли;
        //
      ОбработкаПрерыванияПользователя();
   КонецЦикла;
   //
   Возврат Список;
КонецФункции
Показать полностью


ЗЫ С регистрами тоже мона колдонуть, если вышкрести тип из поля "Метаданные", у мя где-то валяется функция готовая
Еще раз пасиб :)
2. Алексей Штепа (unknownDaemon) 01.10.08 07:55
Еще одно ЗЫ (смеха ради) - Мы напоролись на ту же ситуацию, тока хуже :(
Мы в девелоперской базе забыли автообмен вырубить :D Последствия крайней плачевности: уходили обмены с обновлением конфы причем по нескольку раз в сутки есссно конфа менялась - как итог: переферийка напрочь отказалась меняца - говорит "конфа левая", дык! Короче спасся новым первоначальным образом + обменом с "подохшей" копией переферийки посредством твоей идеи :)
3. Сергей Сиренко (ssn1978) 01.10.08 09:48
Спасибо за коментарии!
Для исключения такой ситуации я немного модифицировал конфу БП общий модуль ПроцедурыОбменаДанными

//добавлено
Функция ПолучитьИмяИнформационнойБазы()
ОпредИнфБ = СтрокаСоединенияИнформационнойБазы();
ДлнСтроки = СтрДлина(ОпредИнфБ);
ЧслНачСтр = Найти(ОпредИнфБ,"Ref=");
ЧслСимволов = ДлнСтроки-ЧслНачСтр-6;
ОпредИнфБ = СокрЛП(Сред(ОпредИнфБ,ЧслНачСтр+5,ЧслСимволов));
Возврат ОпредИнфБ;
КонецФункции
//добавлено

Процедура ВыполнитьОбменДаннымиПоПроизвольнойНастройке(НастройкаОбменаДанными, РучнойЗапускОбменов = Истина, ОбработкаАвтообменаНаКлиенте = Неопределено) Экспорт

//изменено
ИмяТекущейИБ = ПолучитьИмяИнформационнойБазы();
Если ИмяТекущейИБ <> "buh_81" и ИмяТекущейИБ <> "buh_fr81" Тогда
Сообщить("Ошибка!!! Обмен данными возможен только для рабочих баз!",СтатусСообщения.Важное);
Возврат;
КонецЕсли;
//..изменено

В условие нужно будет добавить названия всех баз с которыми разрешен обмен, теперь нам не страшно что кто то забудет за эту галку
4. Алексей Штепа (unknownDaemon) 01.10.08 10:33
5. Алексей Штепа (unknownDaemon) 10.10.08 01:18
Но все же я поступил иначе, ибо конфа копирутся 1 в 1 и обмен шурует по полной, если речь идет о копии для разработки например... и опять-таки, у меня типовуха и менять не желательно ничего, добавлять можно, иначе при обновлении будут вилы, а нам - ленивым людям они нафиг не нужны ;-)
Потому я, когда катал свой инструмент обмена(а он свелся к добавлению общ. модуля+справочника - все остальное родное) - то сделал иначе: у меня в архив с сообщением рисуется текстовый файйлег с двумя строками: СтрокаСоединенияИнформационнойБазы() и имя юзера(оно так на всякий случай, чтобы знать кому давать по попе ;-) ) ... А в спарвочнике настройки обмена указано какая строка должна быть с той стороны...
Итого: если развернуть базу даже на том же серваке копию 1 в 1 - то один фиг - изменится строка подключения, вот тут-то механизьм будет справедливо футболить левые сообщения обмена :)
6. Алексей Штепа (unknownDaemon) 10.10.08 01:22
ЗЫ Просто, если я буду брать тока ИМЯ ИБ - то, к примеру, развернув базу с точ таким же именем на другой машине, или на этой же, но под другой системной учеткой - то имена как раз могут быть одинаковыми... а вот полная строка всегда будет разная...
7. Сергей Сиренко (ssn1978) 10.10.08 15:01
Ну с тем же именем как у рабочих я никогда копию базы не сделаю, может если бы у меня их было штук 100. Конечно подстраховаться никогда лишним не бывает ;)
8. Евгений (JohnnySE) 22.08.09 16:54
9. Сергей Сиренко (ssn1978) 22.08.09 23:03
Прямо из журнала регистрации Сохранить в формате XML
10. Alex AlexX (_iAlex) 04.10.11 13:29
А есть что-то типа документации ?!
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа