2009-07-07 2 views
0

Я использую DBVisualizer для извлечения DDL из базы данных Oracle 10.2. Я получаю нечетные экземпляры повторяющихся столбцов в ограничениях или повторяющиеся ограничения в сгенерированном DDL. Сначала я записал ошибку в DBVisualizer, но я попытался использовать Apache DDLUtils против БД, и он начал бросать ошибки, которые, как выяснилось, были вызваны одной и той же проблемой. Метаданные таблицы, возвращаемые Oracle, по-видимому, содержат несколько записей для некоторых ограничений FK.Почему оракул извергает плохие таблицы метаданных?

Я не могу найти ссылку на подобные вещи из моих поисковых запросов Google, и мне было интересно, видел ли кто-нибудь еще одно и то же. Является ли это ошибкой в ​​драйвере Oracle или метаданные содержат дополнительную информацию, которая удаляется, когда мои инструменты обращаются к ней, что приводит к путанице со стороны инструментов ...

Вот пример (усеченный) DDL выход из

CREATE TABLE ARTIST 
(
    ID INTEGER NOT NULL, 
    FIRST_NAME VARCHAR2(128), 
    LAST_NAME VARCHAR2(128), 
    CONSTRAINT ARTIST_ID_PK PRIMARY KEY(ID), 
    CONSTRAINT ARTIST_CONTENT_ID_FK FOREIGN KEY(ID, ID, ID) REFERENCES CMS_CONTENT(CONTENT_ID, CONTENT_ID, CONTENT_ID) 
    -- note the multiple instances of ID and CONTENT_ID in the above line 
    -- rest assured there is nothing bizarre about the foreign table CMS_CONTENT 
) 

Я пытаюсь найти пример Java, который может показать поведение, и будет обновлять вопрос, когда у меня есть конкретный пример.

ответ

2

Вы можете попробовать встроенный Oracle DBMS_METADATA.GET_DDL ('TABLE', 'ARTIST') и посмотреть, устраняет ли это проблему (т. Е. Является ли это ошибкой в ​​инструментах или БД).

Вы также можете посмотреть таблицы данных. В этом случае ALL_CONSTRAINTS и ALL_CONS_COLUMNS.

select ac.owner, ac.constraint_name, ac.table_name, ac.r_owner, ac.r_constraint_name, 
     acc.column_name, acc.position 
from all_constraints ac join all_cons_columns acc on 
(ac.owner = acc.owner and ac.constraint_name = acc.constraint_name) 
where ac.table_name = 'ARTIST' 
and ac.constraint_type = 'R' 

Я подозреваю, что это ошибка в инструментах, и они пропустили объединение на владеющему схеме, и вы подбирая тот же стол/ограничение, но в схеме другого пользователя.

+0

Я никогда не был в состоянии получить что-нибудь, но 31603 из GET_DDL() и получение разрешений изменены в этой системе является гигантская боль в заднице, но ЗЕЬЕСТ работы и, кажется, поддерживает ваше предположение , Угадайте, что мне придется записывать ошибку в DBVis и ddlutils. – Jherico

0

Насколько я понимаю, dbvis (6.5.7) использует собственный код, когда вы используете вкладку «DDL», и использует dbms_metadata при использовании вкладки «DDL with Storage». Разве это имеет значение для вас?

Ronald

+0

Как я уже упоминал выше, с использованием функции oracle GET_DDL(), которая, по сути, является вкладкой «DDL with Storage», создает ошибку для меня. – Jherico

Смежные вопросы