Javenue logo

Javenue

Программирование на Java

Информационные технологии

Метаданные Oracle - DBMS_METADATA

[The version of the article in English can be found here.]

Все выражения в SQL делятся на две основные категории:

  • DDL - data definition language - язык определения данных;
  • DML - data manipulation language - язык манипулирования данными.

Язык DML необходим для изменения содержимого таблиц. Его операторы - это всем известные insert, update, delete. Для того, чтобы изменения стали видны всем пользователям базы данных, требуется выполнение оператора commit, а для возврата в предыдущее состояние (еще говорят для отката изменений) - оператора rollback.

DDL-выражения используются для создания и модификации объектов баз данных, таких как таблицы, процедуры, индексы. DDL-выражения, их еще называют метаданными, можно получить из уже существующей схемы. Они очень полезны при оптимизации и анализе баз данных. О том, как получить метаданные из БД Oracle и будет эта статья.

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

Основная функция, которая нам понадобится для извлечения метаданных - это get_ddl. Вызывать ее можно как с двумя (тип объекта, имя объекта), там и с тремя (в дополнение еще и имя схемы) параметрами. Например, для получения метаданных триггера TRIGGER1 из схемы SCHEMA1 можно использовать такое выражение:

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

Если пользователь работает со своей собственной схемой, третий параметр можно не указывать. Доступные типы объектов очевидны - PROCEDURE, TABLE, CONSTRAINT, INDEX, PACKAGE и так далее.

Стоп, а что же такое dual? Таблица dual - это вспомогательная таблица Oracle. Она состоит ровно из одной колонки с именем DUMMY и одной записи - "X" (попробуйте выполнить "select * from dual"). Владелец этой таблицы - SYS, но доступиться до нее может любой пользователь базы данных. При выполнении select над таблицей dual с использованием констант, мы гарантированно получим ровно одну запись. Можно конечно вручную подправить таблицу dual, но делать этого я вам не советую.

Для получения метаданных объекта конечно же необходимо знать его имя. Список объектов текущей схемы можно получить, например, так:

select * from USER_TABLES;
select * from USER_TAB_COLUMNS;
select * from USER_INDEXES;

Это запросы для таблиц, колонок и индексов соответственно.

Данные по другим объектам базы данных находятся в таких таблицах:

  • USER_VIEWS - данные по представлениям (или как еще их ласково называют - вьюхи);
  • USER_CONSTRAINTS - данные по первичным и вторичным ключам и проверкам типа not null;
  • USER_SEQUENCES - данные по последовательностям-генераторам;
  • USER_TRIGGERS - данные по триггерам;
  • USER_SOURCE - данные по PL/SQL объектам, таким как процедуры, функции, пакеты.

Ну вот и все: метаданные у нас в руках. Используйте их для своих нужд. Удачи.



Комментариев: 0

  Выйти

  * для публикации комментариев нужно