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

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 07.08.2008, 13:12   #1  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
В очередной раз о ошибках синхронизации
Доброго времени суток. При попытке синхронизации чере Администрирование\Периодические операции выдает ошибку:

Невозможно выполнить команду языка определения данных в ().
База данных SQL обнаружила ошибку.


Таких строк много. В итоге выдает строку:

Невозможно выполнить команду языка определения данных в ().
База данных SQL обнаружила ошибку.

Каким образом получить более информативные сообщения: в каких таблицах, почему?

И вообще как с этим бороться? переиндексирование не помогло.

P.S. AX 4.0. SP 2
Старый 07.08.2008, 13:16   #2  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
А в EventLog что?
За это сообщение автора поблагодарили: greench (1).
Старый 07.08.2008, 13:34   #3  
greench is offline
greench
Участник
Oracle
 
425 / 74 (3) ++++
Регистрация: 12.07.2007
Адрес: Киев
Цитата:
Сообщение от belugin Посмотреть сообщение
А в EventLog что?
Вот это мне и нужно было, не знал просто где смотреть. Думал такие ошибки аксапта пишет в какие-то свои логи.

Спасибо.
Старый 07.08.2008, 13:42   #4  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Вот простенький джобец, который позволяет локализовать проблемную таблицу.

X++:
//DSPIC
static void synchronizationCheck(Args _args)
{
    Dictionary              dictionary = new Dictionary();
    TableId                 tableId;
    RunbaseProgress         runbaseProgress = new RunbaseProgress();
    ;


    tableId = dictionary.tableNext(tableId);

    runbaseProgress.setTotal(dictionary.tableCnt());
    runbaseProgress.setCaption("SynchronizationCheck");

    while (tableId)
    {
        appl.dbSynchronize(tableId, false, true, false);

        runbaseProgress.setText(tableId2Name(tableId));

        info (strfmt("Table '%1' - OK", tableId2Name(tableId)));

        runbaseProgress.incCount();

        tableId = dictionary.tableNext(tableId);
    }
}
Старый 07.08.2008, 14:34   #5  
sukhanchik is offline
sukhanchik
Administrator
Аватар для sukhanchik
MCBMSS
Злыдни
Лучший по профессии 2015
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
3,326 / 3556 (125) ++++++++++
Регистрация: 13.06.2004
Адрес: Москва
Поставьте в настройках АОСа на закладке Tracing галку Allow client tracing on Application Object Server instance. И будет Аксапта все вам писать в инфолог сразу. Только после установки галки нужен будет рестарт АОСа и как следствие - повторный запуск синхронизации
__________________
Возможно сделать все. Вопрос времени
Старый 08.08.2008, 11:12   #6  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Вот простенький джобец, который позволяет локализовать проблемную таблицу.
По-моему, некорректный джобец. Во-первых, он работает до первой ошибки, во-вторых, имя таблицы с ошибкой как раз не выводится, а в инфологе только куча строк "Table xxx - ОК".

Вчера как раз тоже написал подобный джоб, может кому пригодится:
X++:
// Синхронизация с выводом наименований "неправильных" таблиц
static void DbSynchronize(Args _args)
{
    #AviFiles
    Dictionary              dictionary;
    DictTable               dictTable;
    int                     i;
    SysOperationProgress    progress;
    ;
    dictionary = new Dictionary();
    progress = SysOperationProgress::newGeneral(#AviUpdate, "Синхронизация", dictionary.tableCnt());
    for (i = 1; i <= dictionary.tableCnt(); i++)
    {
        dictTable = new DictTable(dictionary.tableCnt2Id(i));
        if  (dictTable.isSql() &&
                (
                    !dictTable.configurationKeyId()    ||
                    isConfigurationkeyEnabled(dictTable.configurationKeyId())
                )
            )
        {
            try
            {
                progress.setText(dictTable.name());
                progress.setCount(i);
                if (!appl.dbSynchronize(dictTable.id(), false, true, false))
                {
                    warning(strfmt("Проблемы с таблицей %1 (Id = %2)!", dictTable.name(), dictTable.id()));
                }
            }
            catch (Exception::Error)
            {
                warning(strfmt("Проблемы с таблицей %1 (Id = %2)!", dictTable.name(), dictTable.id()));
            }
        }
    }
    info("Синхронизация завершена");
}
По опыту, проблемы при синхронизации возникают в основном в двух случаях:
- некорректные данные в таблице SqlDictionary (чаще всего - их отсутствие),
- нарушение уникального индекса (самая "попса" - табличка InventDim при отключении складской аналитики)
За это сообщение автора поблагодарили: DarLord (0).
Старый 08.08.2008, 11:42   #7  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
По-моему, некорректный джобец. Во-первых, он работает до первой ошибки, во-вторых, имя таблицы с ошибкой как раз не выводится, а в инфологе только куча строк "Table xxx - ОК".
Не то чтобы некорректный, просто красивости делать не предполагалось. Просто запустил, он вывалился на ошибке, посмотрел в инфологе последнюю удачно засинхронизированную таблицу, нашел в АОТ следующую-проблемную. + помнится, когда я этот джоб писал, у меня не отрабатывал catch при ошибке синхронизации - я уж не стал разбираться почему - и так понятно где проблема. А у вас он отрабатывает?!

Цитата:
Вчера как раз тоже написал подобный джоб...
Старый 08.08.2008, 12:07   #8  
Bishop is offline
Bishop
Участник
 
89 / 60 (3) ++++
Регистрация: 12.08.2004
Адрес: Москва
Цитата:
Сообщение от DSPIC Посмотреть сообщение
Просто запустил, он вывалился на ошибке, посмотрел в инфологе последнюю удачно засинхронизированную таблицу, нашел в АОТ следующую-проблемную.
Интересно - как это? Синхронизация не в алфавитном порядке же идет...

Цитата:
Сообщение от DSPIC Посмотреть сообщение
+ помнится, когда я этот джоб писал, у меня не отрабатывал catch при ошибке синхронизации - я уж не стал разбираться почему - и так понятно где проблема. А у вас он отрабатывает?!
Отрабатывает , но возможно что не во всех случаях. Вчера была проблема с отсутствием данных в SqlDictionary - там выкидывается Exception::Error (соответственно, ловится).
Старый 08.08.2008, 12:23   #9  
DSPIC is offline
DSPIC
Боец
 
1,077 / 1243 (44) ++++++++
Регистрация: 11.04.2008
Цитата:
Интересно - как это? Синхронизация не в алфавитном порядке же идет...
А, да - каюсь. Собственно проблема решается элементарно - строку с info(...) поставить сразу после while, непосредственно перед синхронизацией и текст "OK" поменять на "Processing" (Наверное это не последний релиз джоба)
В общем пример будем считать лабораторным - как найти проблему синхронизации програмно - понятно. Спасибо за бдительность и уточнение.
Теги
ax4.0

 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Пересоздание таблицы при синхронизации Serg16 DAX: Администрирование 1 26.08.2009 13:55
Ошибка при синхронизации таблицы Eldar9x DAX: Программирование 2 27.02.2009 15:19
ошибки синхронизации Azat DAX: Программирование 1 14.01.2005 13:32
Проблема синхронизации при установке SP3 на SP2 v3.0 ravil DAX: Администрирование 6 23.06.2004 17:20
Влияет ли содержимое таблицы SQLSTORAGE на процесс синхронизации? Maxim Gorbunov DAX: Администрирование 1 21.06.2004 17:59

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

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

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 08:56.