09.08.2016, 08:45 | #1 |
Участник
|
sqlDataDictionary.tableReindex
Добрый день.
Столкнулся с такой проблемой. При вызове sqlDataDictionary.tableReindex с параметрами не всегда на SQL отправляет команду на удаление и создание индекса. sqlDataDictionary.tableReindex возвращает 0, что согласно MSDN означает, что нет ошибки Что также наблюдается через форму "Администрирование SQL" -> "Действия над индексами" -> "Переиндексация". Как на группе таблиц, так и на группе индексов. Что я делаю не так? Вот пример джоба, который нужно запускать через пункт меню с параметром запуска на server. X++: static server void ReIndex(Args _args) { SqlDataDictionary sqlDataDictionary; ; sqlDataDictionary = new SqlDataDictionary(); new SqlDataDictionaryPermission(methodstr(SqlDataDictionary, tableReindex)).assert(); info(int2str(sqlDataDictionary.tableReindex(tableId, IndexId))); CodeAccessPermission::revertAssert(); } |
|
09.08.2016, 09:17 | #2 |
Участник
|
А таблица над которой вы пытаетесь выполнить операцию точно физически существует на SQL сервере? Может быть она временная или выключена конфигурационным ключём?
|
|
09.08.2016, 09:25 | #3 |
Участник
|
Цитата:
На индексах я не вижу конфигурационных ключей. я правильно понимаю, что Id индекса этот то значение, которое прописано в свойства индекса в АОТ? |
|
09.08.2016, 09:54 | #4 |
Участник
|
Я вижу. AX2009. И ещё на самих полях есть.
похоже на то. Ещё его можно по имени указать через IndexNum, по аналогии с TableNum, FieldNum и т.д. |
|
09.08.2016, 10:05 | #5 |
Участник
|
Если дело в ключах, то почему sqlDataDictionary.tableReindex(tableId) выполняется, а sqlDataDictionary.tableReindex(tableId, indexId) нет?
Вот например таблица 865 CustTransOpen и индекс 3 AccountDateIdx Нормально выполняется sqlDataDictionary.tableReindex(865, 3) - процент фрагментации на SQL приближен к 0? |
|
10.08.2016, 08:41 | #6 |
Участник
|
Еще заметил, что не отрабатывает
X++: sqlDataDictionary.indexDrop(tableId, indexId); X++: sqlDataDictionary.indexCreate(tableId, indexId) Может какие-то настройки я упустил? |
|
10.08.2016, 11:29 | #7 |
Участник
|
Экспериментальным путем выяснил, что sqlDataDictionary.indexDrop и sqlDataDictionary.tableReindex не выполняются у индексов, которые прописаны в свойствах таблицы PrimaryIndex и ClusterIndex.
Отсюда вопрос, как их можно программно переиндексировать? |
|
|
За это сообщение автора поблагодарили: S.Kuskov (2). |
10.08.2016, 11:53 | #8 |
Модератор
|
Да все. Не надо обслуживание SQL Server-а автоматизировать в AX
__________________
-ТСЯ или -ТЬСЯ ? |
|
|
За это сообщение автора поблагодарили: mazzy (2). |
10.08.2016, 12:25 | #9 |
Участник
|
maintanance plan в SQL.
если уж очень хочется запланировать выполнение из аксапты, то вызывайте sql-агента, чтобы он запустил maintanance plan. согласен с Vadik. оставьте задачи обслуживания базы администраторам SQL. Последний раз редактировалось mazzy; 10.08.2016 в 12:28. |
|
10.08.2016, 12:28 | #10 |
Участник
|
Цитата:
Сообщение от demianimp
При вызове sqlDataDictionary.tableReindex с параметрами не всегда на SQL отправляет команду на удаление и создание индекса. sqlDataDictionary.tableReindex возвращает 0, что согласно MSDN означает, что нет ошибки
скорее аксапта отправляет, а SQL ее не слушается. если вы таки будете настаивать на именно таком подходе, то проверьте права пользователей. тот пользователь SQL, который принимает команды из аксапты, имеет права на выполнение обслуживающих команд? Последний раз редактировалось mazzy; 10.08.2016 в 12:34. |
|
10.08.2016, 12:50 | #11 |
Участник
|
Тема "А нафига тогда эти функции есть в X++, если ни фига не работают так как ожидается" - не раскрыта.
По-моему они сделаны изначально для джобов по конвертации базы, чтобы можно было из кода все же делать эти операции. А для обычной работы конечно удобнее средствами БД все сделать. |
|
10.08.2016, 12:58 | #12 |
Участник
|
Цитата:
|
|
|
За это сообщение автора поблагодарили: mazzy (2). |
10.08.2016, 14:43 | #13 |
Участник
|
Цитата:
еще с тех времен, когда эта платформа поддерживала около 20 различных баз данных. включая собственный формат в файле. функции еще были актуальны, когда аксапта работала на двух базах - Оракл и МС СКЛ. Сейчас не актуальны от слова совсем. Используйте инструменты обслуживания самой бд |
|
|
За это сообщение автора поблагодарили: Logger (1), S.Kuskov (2). |
12.08.2016, 07:33 | #14 |
Administrator
|
Цитата:
В далекое-далекое время, когда приезжал в Россию Эрик Дамгаард - он говорил (я сам не был - инфа со слов товарищей, которые там были), что они систему создают для работы пользователей, а не для разработчиков. Поэтому у них в планах не стоит вычищение такого рода мусора.
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 12.08.2016 в 07:55. |
|
|
За это сообщение автора поблагодарили: Logger (1), S.Kuskov (2). |