AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Администрирование
DAX
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 09.12.2010, 07:43   #1  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Установка AX 2009 Rollup5 -> синхронизация БД
Установил Rollup5 для AX2009, прохожу контрольный список обновления, добрался до синхронизации БД, и тут ахтунг - в тех таблицах, в которых добавились поля система хочет удалить некоторые поля (добавленные нами) и вновь их создать
Почему это происходит, и можно ли это как-то избежать? Сейчас ставлю на тестовое приложение, но с таким же успехом это произойдет при обновлении рабочего
Старый 09.12.2010, 09:28   #2  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Разобрался в проблеме.
При изменении ID полей в таблицах система пересоздает их в БД, пришлось залезть в
SqlDictionary и ручками поправить ID полей со старых на новые.
Старый 09.12.2010, 09:44   #3  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Или еще так: Изменение идентификаторов(id) полей можно сделать
__________________
Возможно сделать все. Вопрос времени
За это сообщение автора поблагодарили: jonny (2).
Старый 13.12.2010, 11:51   #4  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?

Удалил строки из SqlDictionary, связанные с таблицами, на которые ругалась синхронизация, в итоге все-равно не могу синхронизировать базу.
Система пытается создать таблицы заново, а они, естественно в БД уже есть.
Насколько я понял должны вновь появиться строки в SQLDictionary, уже с верными Id-шниками? Так вот, у меня они не появляются.
Как исправить ситуацию, без удаления таблиц из БД?
Старый 13.12.2010, 11:56   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Процедуру
Цитата:
Сообщение от sukhanchik Посмотреть сообщение
Администрирование-Периодические операции-SQLАдминистрирование. Выберите нужную табличку(которую грохали в SQLDictionary) и нажмите кнопку Таблицы-Проверка/синхронизация.
выполняли? В диалоговом окне нужно снять все галки
__________________
Возможно сделать все. Вопрос времени
Старый 13.12.2010, 12:02   #6  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Да, конечно, правда там нет никакого диалога(??)
После нажатия на "Проверка\синхронизация" появляется стандартная форма синхронизации(SysSqlSync)
Быть может в 2009-й что-то изменилось относительно предыдущих версий? Сам не помню что там было раньше.
Старый 13.12.2010, 12:45   #7  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Ой... "замуровали, демоны" (с) ... Был классик SQLScanMain, который все делал. А теперь его нет .... Надо поковыряться в коде..
__________________
Возможно сделать все. Вопрос времени
Старый 13.12.2010, 12:59   #8  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Да, видимо что-то недопеределали в 2009-й версии...теперь непонятно в какой момент синхронизируются AOT и SQLDictionary.
Старый 13.12.2010, 13:14   #9  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Не... по коду-то все понятно. Теперь роль "Проверки" на себя взяло ядро (раньше эту роль выполнял класс SQLScanMain). Но если раньше класс восстанавливал SQLDictionary до состояния АОТа, то теперь предполагается, что восстанавливать SQLDictionary не нужно, а нужно БД подогнать под SQLDictionary. Но это и раньше умела делать синхронизация БД. Т.е. при запуске просто синхронизации - если в SQLDictionary чего-то не было - то синхронизация пыталась создать это в БД, после чего "дописать" в SQLDictionary. И если (по каким-то причинам) этого сделать было нельзя - вываливалось сообщение об ошибке.

Сейчас ввели режим "предварительной проверки" (с кнопкой Продолжить), который перед синхронизацией сообщает о расхождении АОТа с содержимом SQLDictionary, но который не дает пользователю возможности вместо изменений в БД внести изменения в SQLDictionary. Не хватает помимо кнопки "Продолжить" кнопки "Исправить в SQLDictionary"
__________________
Возможно сделать все. Вопрос времени
Старый 13.12.2010, 14:00   #10  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
Порылся в SqlScanMain, нашел что требовалось, в итоге все просто:
X++:
    SqldataDictionary   dict = new SqldataDictionary();
    ;
    dict.tableSynchronize(tableNum(xxx),true,true);
Синхронизирует таблицу в AOT и SqlDictionary
За это сообщение автора поблагодарили: fed (10), EVGL (10), db (8), sukhanchik (10), Logger (7), ziva (2), imir (2).
Старый 13.12.2010, 14:16   #11  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,273 / 3466 (122) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Обидно что теперь синхронизацию между АОТ и SqlDictionary штатно из интерфейса не сделать. Т.е. либо писать утилиту, либо писать джобы по необходимости
__________________
Возможно сделать все. Вопрос времени
Старый 14.12.2010, 07:57   #12  
jonny is offline
jonny
Участник
Аватар для jonny
Самостоятельные клиенты AX
 
217 / 124 (5) +++++
Регистрация: 10.02.2006
Адрес: СПб-Екб-?
В общем ковыряние в SQLDictionary относительно DAX 2009 нужно отнести к разряду вредных советов. Синхронизировать AOT и SQLDictionary можно, только если вы уверены, что в таблицах не добавилось\удалилось никаких полей, а только если изменились их Id-шники (например при переносе слоя между приложениями или)
Синхронизация работает теперь следующим образом:
1. Сравнивается AOT и описание таблицы в SQLDictionary(!!!)
2. Генерится и выполняется скрипт в котором
- Добавляются\удаляются поля по найденным расхождениям между AOT и SQLDictionary
- Удаляются и вновь создаются строки в SQLDictionary по изменяемым таблицам
Старый 29.12.2010, 22:00   #13  
EVGL is offline
EVGL
Banned
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
 
4,445 / 3001 (0) ++++++++++
Регистрация: 09.07.2002
Адрес: Parndorf, AT
Jonny, вы спасли мне день.
Мой вариант для всех таблиц:

X++:
static void Job14(Args _args)
{
    SqldataDictionary       dict = new SqldataDictionary();
    Dictionary              dictionary = new Dictionary();
    TableId                 tableId;
    SysOperationProgress    progress;
    ;
    
    progress = new SysOperationProgress();
    progress.setTotal(dictionary.tableCnt());
    
    tableId = dictionary.tableNext(0);
    while (tableId)
    {
        progress.setText(dictionary.tableName(tableId));
        
        dict.tableSynchronize(tableId, true, true);
        
        tableId = dictionary.tableNext(tableId);
        progress.incCount();
    }
}
За это сообщение автора поблагодарили: imir (2).
Теги
синхронизация

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
mbsturk: Ax 2009 Rollup 4 Version Checker Blog bot DAX Blogs 0 29.04.2010 17:05
emeadaxsupport: List of fixes that improve performance of certain features in Dynamics AX 2009 Blog bot DAX Blogs 0 13.10.2009 19:06
gatesasbait: Dynamics AX 2009 SSRS and SSAS Integration Tips Blog bot DAX Blogs 3 09.07.2009 13:07
axStart: Microsoft Dynamics AX 2009 Hot Topics Web Seminar Series Blog bot DAX Blogs 0 06.08.2008 12:05
Arijit Basu: AX 2009 - Quick Overview Blog bot DAX Blogs 4 19.05.2008 14:47
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 00:30.
Powered by vBulletin® v3.8.5. Перевод: zCarot
Контактная информация, Реклама.