|
![]() |
#1 |
Участник
|
Коллеги, первый раз ставлю Axapta на Oracle, та же проблема - слишком долгая синхронизация. Кто-нибудь выяснил причину этой беды?
|
|
![]() |
#2 |
Роман Долгополов (RDOL)
|
Цитата:
Причина - запрос, который выдает ядро аксапты для определения списков полей индексов таблицы, например SELECT a.index_name, b.column_name, c.column_expression, a.index_type, a.uniqueness FROM user_indexes a, user_ind_columns b, user_ind_expressions c WHERE b.table_name=UPPER('INVENTLOCATION') AND a.index_name=b.index_name AND b.index_name=c.index_name(+) AND b.column_position=c.column_position(+) ; 10-ка уходит в себя на 2-3 секунды на каждом таком запросе Помогло бы индексирование системных таблиц (OBJ$ и прочих) по которым построены эти вьюхи по полю NAME, но оракл на такие провокации не поддается "ORA-00701 object necessary for warmstarting database cannot be altered" В итоге создал материализованные вьюхи USER_INDEXES и USER_IND_COLUMNS и проиндексировал их прямо в схеме юзера под которым работает аксапта. Синхронизация после этого 4-5 минут. Никаких побочных эффектов пока не найдено, но гарантий дать не могу Скрипт для создания вьюшек PHP код:
|
|
|
За это сообщение автора поблагодарили: Dron AKA andy (3), Vadik (3), raz (3), Logger (6), Bars (1), ziva (2), Eldar9x (1), ring (1). |
![]() |
#3 |
Участник
|
|
|
![]() |
#4 |
Роман Долгополов (RDOL)
|
Цитата:
X++: boolean dbSynchronize(tableId tableId = 0, // 0 = all tables, non-zero is a valid table handle boolean syncAsNeeded = true, // true = objects touched in the AOT, false = unconditional synchronize boolean continueOnError = true, boolean showProgress = true ) // true = report all problems, but throw only after all tables are synchronized, false = stop synchronize after first error/problem { SqlSyncPending sqlSyncPending = new SqlSyncPending(); boolean ok; ; setPrefix("@SYS22807"); if (SqlSystem::databaseBackendId() == DataBaseId::Oracle) { new Connection().createStatement().executeUpdate("BEGIN DBMS_MVIEW.REFRESH('USER_IND_COLUMNS, USER_INDEXES'); END;"); } ok = super(tableId, syncAsNeeded, continueOnError, showProgress); if (ok && this.isRunningMode()) { SysApplicationSetup::saveApplicationVersion(SysApplicationSetupMode::Synhronize); } return ok; } |
|
|
За это сообщение автора поблагодарили: Logger (3), itfs (1). |
![]() |
#5 |
Участник
|
SYS.USER_INDEXES увы, всего лишь вьюха. На нее ON COMMIT не подействует. Но даже если сделать MV на основе скрипта этой veiw, у ON COMMIT - ограничение, действует только на "основную" таблицу запроса, так что ваш вариант по обновлению, видимо, единственный.
С уважением, itfs. |
|
Теги |
ax3.0, oracle, полезное, синхронизация баз, тормоза |
|
![]() |
||||
Тема | Ответов | |||
Синхронизация таблицы - проблема | 3 | |||
навязчивая синхронизация | 11 | |||
Синхронизация таблиц при изменении EDT | 1 | |||
Репликация и синхронизация | 12 | |||
синхронизация с outlook | 7 |
Опции темы | Поиск в этой теме |
Опции просмотра | |
|