26
May

Метаданные Oracle (DBMS_METADATA)

Posted in: Базы данных, SQL, Oracle |

Все выражения в SQL делятся на две основные категории:
DDL - data definition language - язык определения данных;
DML - data manipulation languauge - язык манипулирования данными.
Язык DML необходим для изменения содержимого таблиц. Его операторы - это всем известные insert, update, delete. Для того, чтобы изменения стали видны всем пользователям базы данных, требуется выполнение оператора commit, а для отката изменений - оператора rollback.
DDL-выражения (метаданные) можно получить из уже существующей схемы. Они очень полезны при оптимизации и анализе баз данных. О том, как получить метаданные из Oracle и будет эта статья.

В более ранних версиях Oracle метаданные можно было получить с помощью SQL-запросов и разных утилит для экспорта. Эти способы имеют свои ограничения и недостатки. Ответом на эти неудобства стал пакет DBMS_METADATA с набором функций для работы с метаданными (начиная с Oracle9i). Теперь определения данных доступны как в формате XML, так и в виде DDL-выражений.
Основная функция, которая нам понадобится - это get_ddl. Вызывать ее можно как с двумя (тип объекта, имя объекта), там и с тремя (+ имя схемы) параметрами. Например, для получения метаданных триггера TRIGGER1 из схемы SCHEMA1 можно использовать такое выражение:

select dbms_metadata.get_ddl('TRIGGER',
    'TRIGGER1', 'SCHEMA1') from dual.

Если пользователь работает со своей собственной схемой, третий параметр можно не указывать. Доступные типы объектов очевидны - PROCEDURE, TABLE, CONSTRAINT, INDEX и т.д.
Таблица dual - это вспомогательная таблица Oracle. Она состоит ровно из одной колонки с именем DUMMY и одной записи - “X” (попробуйте выполнить “select * from dual”). Владелец этой таблицы - SYS, но доступиться до нее может любой пользователь базы данных. При выполнении select над таблицей dual с использованием констант, мы гарантированно получим ровно одну запись. Можно конечно подправить таблицу dual, но делать этого я вам не советую.
Для получения метаданных объекта, необходимо знать его имя. Список объектов текущей схемы можно получить так (пример для таблиц):

select * from USER_TABLES.

Данные по другим объектам находятся в USER_CONSTRAINTS, USER_TAB_COLUMNS, USER_INDEXES и т.д.
Метаданные у нас в руках, используйте их для своих нужд. Удачи.

No Comments yet »

RSS feed for comments on this post. TrackBack URI



Leave a comment

XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>