10.12.2008, 12:51 | #1 |
MCTS
|
Ошибка дублирования индекса
Помогите решить задачу.
На одной из недавно созданных таблиц при попытке ее синхронизации выдается следующее: Цитата:
Невозможно выполнить команду языка определения данных в "" ("").
База данных SQL обнаружила ошибку. Описание ошибки SQL: ORA-00955: имя уже задействовано для существующего объекта Оператор SQL: CREATE UNIQUE INDEX I_50958RECID ON AA_BATCHTESTINGLOG (SUBSTR(NLS_LOWER(DATAAREAID),1,3),RECID) COMPUTE STATISTICS TABLESPACE STDIDXTS Ошибки во время синхронизации базы SQL со словарем данных системы. Операция закончилась неудачно. Синхронизация 1 таблиц закончилась неудачно Удаляю индекс через SQL Plus, синхронизирую - все нормально. Повторно синхронизирую - та же ошибка. Что можно сделать, кроме того как просто удалить таблицу или программно удалять индекс перед синхронизацией? Oracle 10g Ax 3.0 SP5 KR3 В итоге, удалил таблицу. Странно, импортировал, другую таблицу с тем же идентификатором, ее синхронизация проходит нормально. Последний раз редактировалось Eldar9x; 10.12.2008 в 13:20. |
|
10.12.2008, 13:49 | #2 |
Программатор
|
Если данные в тадлице есть, то оставить в таблице только одну запись, которая соответствует уникальному индексу. Удалить руками или джобом дублируемые записи. Система врать не будет Записи дублируются.
Либо грохнуть таблицу в АОТе и потом руками на Оракле(если оракл такое позволяет) и по новой залить таблу. Либо руками создать таблицу, и возможно, найдете косяк. Последний раз редактировалось Sada; 10.12.2008 в 13:53. |
|
|
За это сообщение автора поблагодарили: Eldar9x (2). |
10.12.2008, 14:19 | #3 |
MCTS
|
Записи и на самом деле дублировались, вроде как. После удаления все синхронизируется. Таблица находится в коллекции и создана виртуальная компания. После создания нескольких строк таблица опять не синхронизируется. Что можно тут сделать?
Последний раз редактировалось Eldar9x; 10.12.2008 в 14:21. |
|
10.12.2008, 14:22 | #4 |
Программатор
|
Ну тут дебагер Вам в помощь . Мучайте класс, который пихает туда данные. Другого в голову не приходит....
|
|
10.12.2008, 14:25 | #5 |
MCTS
|
А извиняюсь, пакетник не причем. При ручном создании записей происходит то же самое.
|
|
10.12.2008, 14:32 | #6 |
Программатор
|
Нуэ мне отсуда не видать, Вы уж тоже меня простите. Но проанализировать данные - какие поля чем и как заполняются, то мы Вам не поможем. Тем более все поля смотреть не нада, а тока поля с индекса.
|
|
10.12.2008, 14:33 | #7 |
Программатор
|
ЗЫ: Может они просто пустыми значениями заполняются. Вот вторая строка с пустыми значениями будет ругаться.
|
|
10.12.2008, 14:35 | #8 |
Участник
|
Добрый день. У вас случайно recid на второй круг не пошли,
т.е. при создании новой записи смотрит что запись с таким recid есть вот и ругается Если да то тогда дефрагментация recid |
|
10.12.2008, 14:40 | #9 |
MCTS
|
Цитата:
У вас случайно recid на второй круг не пошли,
Цитата:
Может они просто пустыми значениями заполняются
|
|
10.12.2008, 14:43 | #10 |
MCITP
|
Мне кажется что-то тут не о том речь идёт...
Цитата:
ORA-00955 name is already used by an existing object
Cause: An attempt was made to create a database object (such as a table, view, cluster, index, or synonym) that already exists. A user’s database objects must have distinct names. Action: Enter a unique name for the database object or modify or drop the existing object so it can be reused. А если бы проблема была в дублировании уникального значения в поле таблице, то при создании уникального индексы вы бы получили совсем другую ошибку: Цитата:
ORA-01452 cannot CREATE UNIQUE INDEX; duplicate keys found
Cause: A CREATE UNIQUE INDEX statement specified one or more columns that currently contain duplicate values. All values in the indexed columns must be unique by row to create a UNIQUE INDEX. Action: If the entries need not be unique, remove the keyword UNIQUE from the CREATE INDEX statement, then re-execute the statement. If the entries must be unique, as in a primary key, then remove duplicate values before creating the UNIQUE index.
__________________
Zhirenkov Vitaly |
|
10.12.2008, 14:48 | #11 |
MCITP
|
какая-то фантастика, похоже на баг какой-то со стороны аксапты...
а вы пробовали пересоздать эту таблицу? должно наверное помочь... а индекс этот на recid вы сами создаёте, или он создаётся автоматом потому что CreateRecIdIndex = Да или нет других индексов на таблице?можно ещё с этим попробовать поиграццо...
__________________
Zhirenkov Vitaly |
|
10.12.2008, 14:49 | #12 |
Участник
|
Попробуйте тогда запустить. Синхронизацию с проверкой(Администрирование,Переодические операции, SQL администрирование, Таблицы, Проверить/Сихронизировать)
Снять галки на "Только диагностика","Управляемая пользователем проверка","Упрощенная проверка массивов","Печатать отчет","Печатать неисправленные ошибки", хотя печать можно оставить. Все остальные должны стоять |
|
10.12.2008, 14:53 | #13 |
MCITP
|
Check/Syncronyze ещё есть кстати, может он поможет...
ЗЫ Упс...
__________________
Zhirenkov Vitaly |
|
10.12.2008, 14:56 | #14 |
MCTS
|
Цитата:
Мне кажется что-то тут не о том речь идёт...
Цитата:
а вы пробовали пересоздать эту таблицу?
|
|
10.12.2008, 15:00 | #15 |
Роман Долгополов (RDOL)
|
Вы кажется по поводу "Долгой синхронизации" делали как я писал в этой теме. И кажется чуть чуть подправили мой код, который вызывает обновление материализованных вьюшек. Может дело в этом "чуть чуть"?
|
|
10.12.2008, 15:06 | #16 |
MCTS
|
Цитата:
Вы кажется по поводу "Долгой синхронизации" делали как я писал в этой теме. И кажется чуть чуть подправили мой код, который вызывает обновление материализованных вьюшек. Может дело в этом "чуть чуть"?
Последний раз редактировалось Eldar9x; 10.12.2008 в 15:08. |
|
10.12.2008, 15:11 | #17 |
Роман Долгополов (RDOL)
|
так вьюхи эти материализованные то в базе есть что ли? тогда если в приложении вызовов обновления нету, то и аксапта видит "малость" не то, что есть на самом деле. либо удалите вьюхи, либо вызываете обновление
|
|
|
За это сообщение автора поблагодарили: Eldar9x (2). |
10.12.2008, 15:32 | #18 |
MCTS
|
Цитата:
так вьюхи эти материализованные то в базе есть что ли? тогда если в приложении вызовов обновления нету, то и аксапта видит "малость" не то, что есть на самом деле. либо удалите вьюхи, либо вызываете обновление
|
|
10.12.2008, 15:41 | #19 |
Роман Долгополов (RDOL)
|
"малость не то" - это состояние индексов на момент последнего обновления вьюшек, а не их текущеее состяние Индекса давно нет, а во вьюшках он еще есть например, или наоборот - нет во вьюшках, а есть на самом деле, ну и.т.д
а вообще эти вьюшки и три строчки кода работают уже пару лет на 8 разных промышленных инсталляциях и хз скока тестовых/девелоперских. кроме как подтормаживания сохранения объектов побочных эффектов не было. Я потому и спросил про доработки с вызовом обновления - уже не помню какие точно, но изначально проблемы были с условным вызовом обновления. Я то же пытался вызывать в зависимости от параметров dbSynchronize, но потом нарвавшись на подобные грабли оставил безусловное обновление |
|
10.12.2008, 15:43 | #20 |
MCITP
|
какие интересные подробности выясняются....
__________________
Zhirenkov Vitaly |
|