Могу ли я определить версию DDL таблицы в Oracle? - PullRequest
2 голосов
/ 26 января 2010

В Informix я могу сделать выбор из таблицы systables и изучить ее столбец версий, чтобы узнать, какая числовая версия у данной таблицы. Этот столбец увеличивается с каждым оператором DDL, который влияет на данную таблицу. Это означает, что у меня есть возможность увидеть, изменилась ли структура таблицы с момента моего последнего подключения.

Есть ли аналогичный способ сделать это в Oracle?

Ответы [ 3 ]

3 голосов
/ 26 января 2010

Вы можете сделать это (и более) с помощью триггера DDL, который отслеживает изменения в таблицах. Здесь есть интересная статья с примером .

3 голосов
/ 26 января 2010

Не совсем. Представление Oracle DBA / ALL / USER_OBJECTS имеет столбец LAST_DDL_TIME, но на него влияют операции, отличные от структурных изменений.

2 голосов
/ 26 января 2010

Если вы действительно хотите это сделать, вам придется использовать функции аудита Oracle для аудита изменений. Это может быть так просто, как:

AUDIT ALTER TABLE WHENEVER SUCCESSFUL on [schema I care about];

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

Вы также можете выполнить свой собственный аудит, написав триггеры системных событий, которые вызываются в операторах DDL. В конечном итоге вам придется написать собственный синтаксический анализатор SQL, если вы действительно хотите увидеть, что меняется.

...