Словарь данных Oracle
Обновлено: 21.11.2024
Получите полный доступ к Oracle Essentials: Oracle9i, Oracle8i и Oracle8, второе издание и более чем к 60 000 другим продуктам с бесплатной 10-дневной пробной версией O'Reilly.
Есть также прямые онлайн-мероприятия, интерактивный контент, материалы для подготовки к сертификации и многое другое.
Основной целью словаря данных Oracle является хранение данных, описывающих структуру объектов в базе данных Oracle. По этой причине в словаре данных Oracle существует множество представлений, предоставляющих информацию об атрибутах и составе структур данных в базе данных.
Все представления, перечисленные в этом разделе, на самом деле имеют три разновидности, которые обозначаются их префиксами:
Включает все объекты в базе данных. Для использования этого представления пользователь должен иметь права администратора баз данных.
Включает только объекты в собственной схеме базы данных пользователя.
Включает все объекты в базе данных, к которым имеет доступ конкретный пользователь. Если пользователю были предоставлены права на объекты в схеме другого пользователя, эти объекты будут отображаться в этом представлении.
Это означает, что, например, существует три представления, относящиеся к таблицам: DBA_TABLES, ALL_TABLES и USER_TABLES.
Некоторые из наиболее распространенных представлений, непосредственно связанных со структурами данных, описаны в Табл. 4-2.
Таблица 4-2. Представления словаря данных о структурах данных
Просмотр словаря данных
Тип информации
Информация об объекте и реляционных таблицах
Информация о реляционных таблицах
Комментарии к структурам таблиц
Статистика использования таблиц
Информация о разделах в многораздельной таблице
Различные представления с подробным описанием всех привилегий для таблицы, привилегий, предоставленных пользователем, и привилегий, предоставленных пользователю
Информация о столбцах в таблицах и представлениях
Комментарии к отдельным столбцам
Различные представления с подробным описанием всех привилегий для столбца, привилегий, предоставленных пользователем, и привилегий, предоставленных пользователю
Информация о столбцах типа больших объектов (LOB)
Информация о просмотрах
Информация об индексах таблиц
Информация о столбцах в каждом индексе
Информация о каждом разделе в секционированном индексе
Различные представления с подробным описанием структуры и шаблонов использования секционированных таблиц и индексов
Информация о столбцах в каждом ограничении
Информация об ограничениях для таблиц
Информация об объектах последовательности
Информация о синонимах
Статистика, используемая анализатором затрат
Информация о триггерах для таблиц
Информация о столбцах в триггерах
Получите Oracle Essentials: Oracle9i, Oracle8i и Oracle8, второе издание прямо сейчас с онлайн-обучением O’Reilly.
Члены O’Reilly проходят онлайн-обучение в режиме реального времени, а также получают книги, видео и цифровой контент от более чем 200 издателей.
Об О'Рейли
Поддержка
Загрузите приложение O’Reilly
Возьмите O’Reilly с собой и учитесь где угодно и когда угодно на своем телефоне и планшете.
Смотрите на большом экране
Просматривайте все видео O’Reilly, мероприятия Superstream и сеансы Meet the Expert на домашнем телевизоре.
Не продавать мою личную информацию
Не уходите с пустыми руками
Получите электронную книгу Марка Ричардса Шаблоны архитектуры программного обеспечения, чтобы лучше понять, как проектировать компоненты и как они должны взаимодействовать.
В этой главе описывается центральный набор доступных только для чтения справочных таблиц и представлений каждой базы данных Oracle, известных под общим названием словарь данных. Глава включает:
Введение в словарь данных
Одной из наиболее важных частей базы данных Oracle является словарь данных, представляющий собой доступный только для чтения набор таблиц, содержащий информацию о базе данных. Словарь данных содержит:
-
Определения всех объектов схемы в базе данных (таблицы, представления, индексы, кластеры, синонимы, последовательности, процедуры, функции, пакеты, триггеры и т. д.). Сколько места было выделено для схемы и в настоящее время используется ею. объекты Значения по умолчанию для столбцов Информация об ограничениях целостности Имена пользователей Oracle Привилегии и роли, предоставленные каждому пользователю Информация аудита, например, кто получал доступ к различным объектам схемы или обновлял их Другая общая информация о базе данных
Словарь данных структурирован в виде таблиц и представлений, как и другие данные базы данных. Все таблицы и представления словаря данных для данной базы данных хранятся в табличном пространстве SYSTEM этой базы данных.
Словарь данных является не только центральным элементом каждой базы данных Oracle, но и важным инструментом для всех пользователей, от конечных пользователей до разработчиков приложений и администраторов баз данных. Используйте операторы SQL для доступа к словарю данных.Поскольку словарь данных доступен только для чтения, вы можете выполнять только запросы (операторы SELECT) к его таблицам и представлениям.
"Табличное пространство SYSTEM" для получения дополнительной информации о табличных пространствах SYSTEM
Структура словаря данных
Словарь данных состоит из следующего:
Базовые таблицы
Базовые таблицы, в которых хранится информация о связанной базе данных. Только Oracle должен записывать и читать эти таблицы. Пользователи редко обращаются к ним напрямую, потому что они нормализованы, а большая часть данных хранится в зашифрованном формате.
Доступные пользователю представления
Представления, которые обобщают и отображают информацию, хранящуюся в базовых таблицах словаря данных. Эти представления декодируют данные базовой таблицы в полезную информацию, такую как имена пользователей или таблиц, используя объединения и предложения WHERE для упрощения информации. Большинству пользователей предоставляется доступ к представлениям, а не к базовым таблицам.
SYS, владелец словаря данных
Пользователь Oracle SYS владеет всеми базовыми таблицами и доступными пользователю представлениями словаря данных. Ни один пользователь Oracle не должен никогда изменять ( UPDATE , DELETE или INSERT ) какие-либо строки или объекты схемы, содержащиеся в схеме SYS, поскольку такие действия могут нарушить целостность данных. Администратор безопасности должен строго контролировать эту центральную учетную запись.
Изменение или манипулирование данными в таблицах словаря данных может необратимо и пагубно повлиять на работу базы данных.
Как используется словарь данных
Словарь данных используется в трех основных целях:
-
Oracle обращается к словарю данных, чтобы найти информацию о пользователях, объектах схемы и структурах хранения. Oracle изменяет словарь данных каждый раз, когда выдается оператор языка определения данных (DDL). Любой пользователь Oracle может использовать словарь данных в качестве справочника только для чтения для получения информации о базе данных.
Как Oracle использует словарь данных
Данные в базовых таблицах словаря данных необходимы для работы Oracle. Следовательно, только Oracle должен записывать или изменять информацию словаря данных. Oracle предоставляет сценарии для изменения таблиц словаря данных при обновлении или понижении версии базы данных.
Ни один пользователь не должен изменять или удалять данные в любой таблице словаря данных.
Во время работы с базой данных Oracle читает словарь данных, чтобы убедиться, что объекты схемы существуют и что пользователи имеют к ним надлежащий доступ. Oracle также постоянно обновляет словарь данных, чтобы отражать изменения в структурах баз данных, аудите, грантах и данных.
Например, если пользователь Кэти создает таблицу с именем parts , в словарь данных добавляются новые строки, отражающие новую таблицу, столбцы, сегмент, экстенты и привилегии Кэти в отношении таблицы. Эта новая информация будет видна при следующем запросе представлений словаря.
Общедоступные синонимы для представлений словаря данных
Oracle создает общедоступные синонимы для многих представлений словаря данных, чтобы пользователи могли легко получить к ним доступ. Администратор безопасности также может создавать дополнительные общедоступные синонимы для объектов схемы, которые используются во всей системе. Пользователям следует избегать называть свои собственные объекты схемы теми же именами, которые используются для общедоступных синонимов.
Кэшировать словарь данных для быстрого доступа
Большая часть информации словаря данных хранится в SGA в кэше словаря, поскольку Oracle постоянно обращается к словарю данных во время работы базы данных, чтобы проверить доступ пользователя и проверить состояние объектов схемы. Вся информация хранится в памяти с использованием алгоритма наименее использовавшегося ранее (LRU).
Информация для синтаксического анализа обычно хранится в кеше. Столбцы COMMENTS, описывающие таблицы и их столбцы, не кэшируются, если к ним не обращаются часто.
Другие программы и словарь данных
Другие продукты Oracle могут ссылаться на существующие представления и создавать дополнительные таблицы словаря данных или собственные представления. Разработчики приложений, которые пишут программы, которые ссылаются на словарь данных, должны обращаться к общедоступным синонимам, а не к базовым таблицам: синонимы с меньшей вероятностью изменятся между выпусками программного обеспечения.
Как использовать словарь данных
Представления словаря данных служат справочником для всех пользователей базы данных. Получите доступ к представлениям словаря данных с помощью операторов SQL. Некоторые представления доступны всем пользователям Oracle, а другие предназначены только для администраторов баз данных.
Словарь данных всегда доступен, когда база данных открыта. Он находится в табличном пространстве SYSTEM, которое всегда подключено к сети.
Словарь данных состоит из наборов представлений. Во многих случаях набор состоит из трех представлений, содержащих одинаковую информацию и отличающихся друг от друга своими префиксами:
Таблица 4-1. Префиксы представления словаря данных
Представление пользователя (что находится в схеме пользователя)
Расширенное представление пользователя (к чему пользователь может получить доступ)
Вид администратора базы данных (что есть в схемах всех пользователей)
Набор столбцов во всех представлениях одинаков, за исключением следующих моментов:
-
Представления с префиксом USER обычно исключают столбец OWNER. Этот столбец подразумевается в представлениях USER как пользователь, выдающий запрос. В некоторых представлениях DBA есть дополнительные столбцы, содержащие информацию, полезную для администратора.
Справочник по базе данных Oracle9i для получения полного списка представлений словаря данных и их столбцов
Представления с префиксом USER
Обычным пользователям базы данных наиболее интересны представления с префиксом USER . Эти представления:
-
Обратитесь к собственной частной среде пользователя в базе данных, включая информацию об объектах схемы, созданных пользователем, грантах, предоставленных пользователем, и т. д. Отображать только строки, относящиеся к пользователю. Иметь столбцы, идентичные другим представлениям, за исключением того, что столбец ВЛАДЕЛЕЦ подразумевается Возвращает подмножество информации во ВСЕХ представлениях Может иметь сокращенные синонимы PUBLIC для удобства
Например, следующий запрос возвращает все объекты, содержащиеся в вашей схеме:
Представления с префиксом ALL
Представления с префиксом ALL относятся к общему представлению пользователя о базе данных. Эти представления возвращают информацию об объектах схемы, к которым пользователь имеет доступ через общедоступные или явные предоставления привилегий и ролей, в дополнение к объектам схемы, которыми владеет пользователь. Например, следующий запрос возвращает информацию обо всех объектах, к которым у вас есть доступ:
Представления с префиксом DBA
Представления с префиксом DBA показывают глобальное представление всей базы данных. Для этих представлений не создаются синонимы, поскольку представления DBA должны запрашиваться только администраторами. Таким образом, чтобы запрашивать представления DBA, администраторы должны ставить перед именем представления его владельца, SYS , как показано ниже:
Oracle рекомендует реализовать защиту словаря данных, чтобы пользователи, имеющие ЛЮБЫЕ системные привилегии, не могли использовать такие привилегии для словаря данных. Если вы включаете защиту словаря ( O7_DICTIONARY_ACCESSIBILITY имеет значение false ), то доступ к объектам в схеме SYS (объектам словаря) ограничен пользователями со схемой SYS. Это пользователи SYS и те, кто подключается как SYSDBA .
Руководство администратора базы данных Oracle9i для получения подробной информации об ограничениях системных привилегий
Таблица DUAL
Таблица с именем DUAL представляет собой небольшую таблицу в словаре данных, на которую Oracle и написанные пользователем программы могут ссылаться, чтобы гарантировать известный результат. В этой таблице есть один столбец с именем DUMMY и одна строка, содержащая значение X .
Справочник по Oracle9i SQL для получения дополнительной информации о таблице DUAL
Таблицы динамической эффективности
Во время своей работы Oracle поддерживает набор виртуальных таблиц, в которых записывается текущая активность базы данных. Эти таблицы называются таблицами динамической производительности.
Таблицы динамической производительности не являются настоящими таблицами, и большинству пользователей не следует обращаться к ним. Однако администраторы баз данных могут запрашивать и создавать представления для таблиц и предоставлять доступ к этим представлениям другим пользователям. Эти представления иногда называют фиксированными представлениями, поскольку они не могут быть изменены или удалены администратором базы данных.
SYS владеет динамическими таблицами производительности; все их имена начинаются с V_$ . Для этих таблиц создаются представления, а затем для представлений создаются общедоступные синонимы. Имена синонимов начинаются с V$. Например, представление V$DATAFILE содержит информацию о файлах данных базы данных, а представление V$FIXED_TABLE содержит информацию обо всех таблицах и представлениях динамической производительности в базе данных.
Справочник по базе данных Oracle9i для получения полного списка синонимов динамических представлений производительности и их столбцов
Метаданные объекта базы данных
Пакет DBMS_METADATA предоставляет интерфейсы для извлечения полных определений объектов базы данных. Определения могут быть выражены либо в виде XML, либо в виде SQL DDL. Предусмотрено два стиля интерфейса:
-
Гибкий, сложный интерфейс для программного управления. Упрощенный интерфейс для специальных запросов.
В этой главе описывается центральный набор доступных только для чтения справочных таблиц и представлений каждой базы данных Oracle, известных под общим названием словарь данных. В этой главе также описываются динамические представления производительности, представляющие собой специальные представления, которые постоянно обновляются, пока база данных открыта и используется.
Эта глава состоит из следующих разделов:
Обзор словаря данных
Важной частью базы данных Oracle является словарь данных, который представляет собой доступный только для чтения набор таблиц, содержащий административные метаданные о базе данных. Словарь данных содержит следующую информацию:
Определения каждого объекта схемы в базе данных, включая значения по умолчанию для столбцов и информацию об ограничениях целостности
Объем пространства, выделенного и используемого в настоящее время объектами схемы
Имена пользователей Oracle Database, привилегии и роли, предоставленные пользователям, и информация аудита, связанная с пользователями (см. «Учетные записи пользователей»)
Словарь данных является центральной частью управления данными для каждой базы данных Oracle. Например, база данных выполняет следующие действия:
Доступ к словарю данных для поиска информации о пользователях, объектах схемы и структурах хранения
Изменяет словарь данных каждый раз, когда выдается инструкция DDL (см. «Операции языка определения данных (DDL)»)
Поскольку Oracle Database хранит данные словаря данных в таблицах, как и другие данные, пользователи могут запрашивать данные с помощью SQL. Например, пользователи могут запускать операторы SELECT, чтобы определить свои привилегии, какие таблицы существуют в их схеме, какие столбцы находятся в этих таблицах, строятся ли индексы для этих столбцов и т. д.
Содержание словаря данных
Словарь данных состоит из следующих типов объектов:
Эти базовые таблицы хранят информацию о базе данных. Только Oracle Database может записывать и читать эти таблицы. Пользователи редко обращаются к базовым таблицам напрямую, поскольку они нормализованы, а большая часть данных хранится в зашифрованном формате.
Эти представления декодируют данные базовой таблицы в полезную информацию, такую как имена пользователей или таблиц, используя объединения и предложения WHERE для упрощения информации. Эти представления содержат имена и описания всех объектов в словаре данных. Некоторые представления доступны всем пользователям базы данных, тогда как другие предназначены только для администраторов.
Обычно представления словаря данных группируются в наборы. Во многих случаях набор состоит из трех представлений, содержащих одинаковую информацию и отличающихся друг от друга своими префиксами, как показано в таблице 6-1. Запрашивая соответствующие представления, вы можете получить доступ только к важной для вас информации.
Таблица 6-1 Наборы представлений словаря данных
Некоторые представления DBA_ имеют дополнительные столбцы, содержащие информацию, полезную для администратора.
Объекты, к которым у пользователя есть права
Включает объекты, принадлежащие пользователю. Эти представления подчиняются текущему набору включенных ролей.
Объекты, принадлежащие пользователю
Представления с префиксом USER_ обычно исключают столбец OWNER . Этот столбец подразумевается в представлениях USER_ как пользователь, выдающий запрос.
Не все наборы представлений состоят из трех элементов. Например, словарь данных содержит представление DBA_LOCK, но не содержит представление ALL_LOCK.
Предоставленное системой представление DICTIONARY содержит имена и сокращенные описания всех представлений словаря данных. Следующий запрос этого представления включает частичный образец вывода:
Справочник по базе данных Oracle для получения полного списка представлений словаря данных и их столбцов
Представления с префиксом DBA_
В представлениях с префиксом DBA_ отображается вся необходимая информация во всей базе данных. Представления DBA_ предназначены только для администраторов.
Например, следующий запрос показывает информацию обо всех объектах в базе данных:
Руководство администратора базы данных Oracle для получения подробной информации об административных привилегиях
Представления с префиксом ALL_
Представления с префиксом ALL_ относятся к общему представлению пользователя о базе данных. Эти представления возвращают информацию об объектах схемы, к которым у пользователя есть доступ через общедоступные или явные предоставления привилегий и ролей, в дополнение к объектам схемы, которыми владеет пользователь.
Например, следующий запрос возвращает информацию обо всех объектах, к которым у вас есть доступ:
Поскольку представления ALL_ подчиняются текущему набору включенных ролей, результаты запроса зависят от того, какие роли включены, как показано в следующем примере:
Разработчики приложений должны учитывать влияние ролей при использовании ВСЕХ представлений в хранимой процедуре, где роли не включены по умолчанию.
Представления с префиксом USER_
Обычным пользователям базы данных наиболее интересны представления с префиксом USER_ . Эти представления:
Ссылка на частную среду пользователя в базе данных, включая метаданные об объектах схемы, созданных пользователем, грантах, сделанных пользователем, и т. д.
Отображать только строки, относящиеся к пользователю, возвращая подмножество информации во ВСЕХ представлениях
Имеет столбцы, идентичные другим представлениям, за исключением того, что подразумевается столбец ВЛАДЕЛЕЦ
Для удобства можно использовать сокращенные синонимы PUBLIC
Например, следующий запрос возвращает все объекты, содержащиеся в вашей схеме:
Таблица DUAL
DUAL — это небольшая таблица в словаре данных, на которую могут ссылаться базы данных Oracle и написанные пользователем программы, чтобы гарантировать известный результат. Двойная таблица полезна, когда значение должно быть возвращено только один раз, например, текущая дата и время. Все пользователи базы данных имеют доступ к DUAL .
В таблице DUAL есть один столбец с именем DUMMY и одна строка, содержащая значение X . Следующий пример запрашивает DUAL для выполнения арифметической операции:
Справочник по языку Oracle Database SQL для получения дополнительной информации о таблице DUAL
Хранение словаря данных
Базовые таблицы словаря данных — это первые объекты, созданные в любой базе данных Oracle. Все таблицы словаря данных и представления для базы данных хранятся в табличном пространстве SYSTEM. Поскольку табличное пространство SYSTEM всегда находится в сети, когда база данных открыта, словарь данных всегда доступен, когда база данных открыта.
"Табличное пространство SYSTEM" для получения дополнительной информации о табличном пространстве SYSTEM
Как Oracle Database использует словарь данных
Пользователь Oracle Database SYS владеет всеми базовыми таблицами и доступными пользователю представлениями словаря данных. Данные в базовых таблицах словаря данных необходимы для работы Oracle Database. Следовательно, только Oracle Database может записывать или изменять информацию словаря данных. Ни один пользователь базы данных Oracle никогда не должен изменять строки или объекты схемы, содержащиеся в схеме SYS, поскольку такие действия могут поставить под угрозу целостность данных. Администратор безопасности должен строго контролировать эту центральную учетную запись.
Изменение или манипулирование данными в таблицах словаря данных может необратимо и пагубно повлиять на работу базы данных.
Во время работы с базой данных Oracle Database считывает словарь данных, чтобы убедиться, что объекты схемы существуют и что пользователи имеют к ним надлежащий доступ. Oracle Database также постоянно обновляет словарь данных, чтобы отражать изменения в структурах базы данных, аудите, грантах и данных.
Например, если пользователь hr создает таблицу с именем interns , в словарь данных добавляются новые строки, отражающие новую таблицу, столбцы, сегмент, экстенты и привилегии, которые hr имеет в отношении таблицы. Эта новая информация будет видна при следующем запросе представлений словаря.
Общедоступные синонимы для представлений словаря данных
Oracle Database создает общедоступные синонимы для многих представлений словаря данных, чтобы пользователи могли легко получить к ним доступ. Администратор безопасности также может создавать дополнительные общедоступные синонимы для объектов схемы, которые используются во всей системе. Пользователям следует избегать называть свои собственные объекты схемы теми же именами, которые используются для общедоступных синонимов.
Кэшировать словарь данных для быстрого доступа
Большая часть информации словаря данных находится в кэше словаря данных, поскольку база данных постоянно требует эту информацию для подтверждения доступа пользователя и проверки состояния объектов схемы. Информация для синтаксического анализа обычно хранится в кэшах. Столбцы COMMENTS, описывающие таблицы и их столбцы, не кэшируются в кэше словаря, но могут кэшироваться в буферном кэше базы данных.
Другие программы и словарь данных
Другие продукты Oracle Database могут ссылаться на существующие представления и создавать дополнительные таблицы словаря данных или собственные представления. Разработчики приложений, которые пишут программы, обращающиеся к словарю данных, должны обращаться к общедоступным синонимам, а не к базовым таблицам. Синонимы с меньшей вероятностью меняются между выпусками.
Обзор динамических представлений производительности
На протяжении всей своей работы Oracle Database поддерживает набор виртуальных таблиц, в которых записывается текущая активность базы данных. Эти представления называются динамическими представлениями производительности, поскольку они постоянно обновляются, пока база данных открыта и используется. Представления, также иногда называемые представлениями V$ , содержат следующую информацию:
Параметры системы и сеанса
Использование и выделение памяти
Состояния файлов (включая файлы резервных копий RMAN)
Ход выполнения заданий и задач
Статистика и показатели
Динамические представления производительности используются в следующих основных целях:
Oracle Enterprise Manager использует представления для получения информации о базе данных (см. «Oracle Enterprise Manager»).
Администраторы могут использовать представления для мониторинга производительности и отладки.
Справочник по базе данных Oracle для получения полного списка динамических представлений производительности
Содержимое динамических представлений производительности
Динамические представления производительности иногда называют фиксированными представлениями, поскольку они не могут быть изменены или удалены администратором базы данных. Однако администраторы базы данных могут запрашивать и создавать представления для таблиц и предоставлять доступ к этим представлениям другим пользователям.
SYS владеет динамическими таблицами производительности, имена которых начинаются с V_$ . Для этих таблиц создаются представления, а затем общедоступные синонимы с префиксом V$. Например, представление V$DATAFILE содержит информацию о файлах данных. Представление V$FIXED_TABLE содержит информацию обо всех таблицах и представлениях динамической производительности.
Почти для каждого представления V$ существует соответствующее представление GV$.В Oracle Real Application Clusters (Oracle RAC) при запросе представления GV$ информация о представлении V$ извлекается из всех подходящих экземпляров базы данных (см. «Сетка сервера базы данных»).
При использовании помощника по настройке базы данных (DBCA) для создания базы данных Oracle автоматически создает словарь данных. База данных Oracle автоматически запускает сценарий catalog.sql, который содержит определения представлений и общедоступные синонимы динамических представлений производительности. Вы должны запустить catalog.sql, чтобы создать эти представления и синонимы.
Руководство администратора базы данных Oracle, чтобы научиться запускать catalog.sql вручную
Хранение динамических представлений производительности
Динамические представления производительности основаны на виртуальных таблицах, построенных из структур памяти базы данных. Таким образом, они не являются обычными таблицами, хранящимися в базе данных. Согласованность чтения для представлений не гарантируется, поскольку данные обновляются динамически.
Поскольку динамические представления производительности не являются настоящими таблицами, данные зависят от состояния базы данных и экземпляра. Например, вы можете запросить V$INSTANCE и V$BGPROCESS, когда база данных запущена, но не смонтирована. Однако вы не можете запросить V$DATAFILE, пока база данных не будет смонтирована.
Метаданные объекта базы данных
Пакет DBMS_METADATA предоставляет интерфейсы для извлечения полных определений объектов базы данных. Определения могут быть выражены либо в виде XML, либо в виде SQL DDL. Предусмотрено два стиля интерфейса: гибкий, сложный интерфейс для программного управления и упрощенный интерфейс для специальных запросов.
Словарь данных полон «Метаданных», информации о том, что происходит внутри вашей базы данных. Словарь данных представлен нам в виде ряда представлений. Представления словаря бывают двух основных форм:
Представления DBA, ALL или USER
- Эти представления используются для управления структурами базы данных.
Динамические представления производительности V$
– Эти представления используются для мониторинга статистики базы данных в реальном времени.
В оставшейся части этой книги мы познакомим вас с представлениями словаря данных, которые можно использовать для управления базой данных. Полный список представлений словаря данных Oracle можно найти в онлайн-документации Oracle.
В словаре данных сотни просмотров. Чтобы увидеть глубину представлений словаря данных, вот представления, в которых хранятся данные о таблицах Oracle:
* dba_all_tables
* dba_indexes
* dba_ind_partitions
* dba_ind_subpartitions
* dba_object_tables
* dba_part_col_statistics
* dba_subpart_col_statistics
* dba_tables
* dba_tab_cols
* dba_tab_columns
* dba_tab_col_statistics p>
* dba_tab_partitions
* dba_tab_subpartitions
Совет. Вы также можете запросить представление DICT или DICTIONARY, чтобы увидеть список всех представлений и комментариев к ним, которые существуют в словаре данных. Это представление позволяет быстро найти в словаре данных именно то, что вам нужно.
В словаре данных Oracle
Если вы похожи на меня, вы немного забывчивы. Словарь данных — это хранилище информации о базе данных Oracle, известной как метаданные. Метаданные — это «информация об информации», а словарь данных — это информация о базе данных. В этом разделе мы хотим показать вам, как использовать словарь данных для получения информации о таблицах.
Oracle предоставляет несколько представлений словаря данных, которые можно использовать для сбора информации о представлениях в базе данных. Эти представления включают:
* dba_tables, all_tables, user_tables
* dba_tab_columns, all_tab_columns и user_tab_columns
Итак, мы забыли, где находится таблица BOOKS. Из учетной записи SYSTEM мы можем запросить представление dba_tables, чтобы найти нашу таблицу:
К другим представлениям, показывающим, где находятся ваши таблицы, относятся user_tables и all_tables.
Oracle также предоставляет представления, позволяющие просматривать атрибуты столбцов таблицы. Представление dba_tab_columns (а также all_tab_columns и user_tab_columns) предоставляет разнообразную информацию о столбцах таблицы.
Управление Oracle требует использования ряда представлений, предоставляемых Oracle. Эти представления включают словарь данных и динамические представления производительности. Вместе эти представления позволяют:
* Управление базой данных
* Настроить базу данных
* Мониторинг базы данных
В этой главе мы сначала рассмотрим представления словаря данных. Затем мы рассмотрим динамические представления производительности, доступные в Oracle Database 10g.
В основе каждой базы данных Oracle лежит словарь данных. Словарь данных создается при первом создании базы данных. В этом разделе мы обсудим словарь данных Oracle. В нем мы обсудим:
* Назначение словаря данных
* Архитектура словаря данных
* Использование словаря данных
Назначение словаря данных
Метаданные — это данные о данных или данные, определяющие другие данные. Словарь данных Oracle — это метаданные о базе данных. Например, если вы создаете таблицу в Oracle, метаданные об этой таблице сохраняются в словаре данных. Такие вещи, как имена столбцов, длина и другие атрибуты, сохраняются. Таким образом, словарь данных содержит большой объем полезной информации о вашей базе данных. Почти все, что вы хотели бы знать о своей базе данных, содержится в словаре данных в той или иной форме.
Как администратор баз данных вы понимаете, почему словарь данных так важен. Поскольку вы не можете помнить все о своей базе данных (например, имена всех таблиц и столбцов), Oracle запоминает это за вас. Все, что вам нужно сделать, это научиться находить эту информацию. Мы покажем вам, как это сделать, в следующем разделе этой книги.
Архитектура словаря данных
Словарь данных создается при создании базы данных Oracle. Он принадлежит пользователю SYS и хранится в основном в табличном пространстве SYSTEM, хотя некоторые компоненты хранятся в табличном пространстве SYSAUX в Oracle Database 10g.
Словарь данных состоит из нескольких таблиц и представлений Oracle. Oracle хочет, чтобы вы держали руки подальше от этих таблиц, и если вы не являетесь настоящим экспертом, я бы порекомендовал вам именно это.
Конечно, словарь данных был бы бесполезен, если бы у нас не было доступа к данным. Oracle предоставляет ряд представлений, которые вы можете запрашивать и которые дадут вам прямой доступ к таблицам словаря данных. Эти представления обычно настраиваются Oracle для быстрого доступа к базовым объектам, и имена представлений часто отражают использование этого представления гораздо лучше, чем имена базовых объектов. Представления словаря данных бывают трех основных разновидностей:
Например, если вы хотите просмотреть информацию о пользователе, есть три представления: USER_USERS, ALL_USERS и dba_users. Каждое из этих представлений видит пользователя немного по-разному.
Все представления, начинающиеся с USER, видят только информацию, относящуюся к пользователю, под которым вы вошли в систему. Например, если вы вошли в систему как SCOTT, при просмотре представления user_tables вы увидите информацию только о таблицах, принадлежащих пользователю SCOTT. У вас может быть доступ к таблицам в схеме GEORGE, но вы не увидите их в представлении user_tables. Вот пример простого запроса к представлению user_tables:
ВЫБРАТЬ имя_таблицы ИЗ user_tables;
Вид ВСЕ позволяет вам видеть все объекты, к которым у вас есть доступ. Например, если вы вошли в систему как SCOTT и запрашиваете представление all_tables, вы увидите все таблицы, принадлежащие SCOTT, но вы также увидите все таблицы, к которым у вас есть доступ и которые принадлежат GEORGE или любому другому пользователю. У вас должны быть права доступа к этим объектам (которые вы бы получили с помощью команды предоставления, которую мы обсуждали в предыдущей главе).
Как правило, два основных различия между представлениями USER и ALL заключаются в том, что владелец объекта включается в представления ALL, а не в представления USER, что имеет смысл, поскольку вы будете видеть только свои объекты. В этом примере мы запрашиваем представление all_tables для всех таблиц, начинающихся с EMP:
Прародительницей представлений словаря данных являются представления DBA. Эти представления являются неограниченными окнами во все объекты словаря данных Oracle. Из-за этого они доступны только администраторам баз данных (как следует из названия). Все представления DBA начинаются с DBA. В этом примере мы запрашиваем представление dba_tables для всех таблиц, начинающихся с EMP и принадлежащих пользователям, имена которых начинаются с ROBERT:
Таблицы словаря данных можно найти в Справочном руководстве по базе данных Oracle 10g, которое является частью общего набора документации по базе данных Oracle. Только в Oracle Database 10g существует почти 600 представлений DBA и такое же количество представлений USER и ALL. Представления ALL и USER в значительной степени являются потомками представлений DBA, и вы не найдете представления ALL или USER для каждого представления DBA. Вы также можете найти представления, задокументированные в самом словаре данных. Представление DICTIONARY (сокращенно DICT) содержит все таблицы словаря данных, а также комментарии о том, для чего используется каждая таблица.
Скрипты словаря данных
Как и многие другие вещи, использование словаря данных требует некоторой практики. Требуется понять, что вы хотите найти, а затем, глядя на представление, выяснить, как найти представление. Иногда, конечно, вам придется объединить два, три или более просмотров вместе, чтобы получить нужный вам ответ.
Для начала в этом разделе мы предоставим вам несколько примеров запросов к словарю данных. Это будут запросы, которые вы могли бы использовать в своих ранних эксплойтах DBA. Большинство администраторов баз данных имеют под рукой коллекцию сценариев словарей данных (признаюсь, мы получаем огромное удовольствие, просто печатая запросы, сидя за компьютером и проверяя мои знания словаря данных).
В этом разделе мы предоставим вам примеры того, как:
* Определите, какие пользователи настроены в вашей базе данных
* Определите, какие табличные пространства настроены в вашей базе данных и где расположены соответствующие файлы данных.
* Определить, кому принадлежит конкретная таблица и ее табличное пространство.
* Определите, какие индексы связаны с конкретной таблицей.
Надеюсь, эти примеры дадут вам некоторое представление о том, как можно использовать словарь данных для управления базой данных.
Эти примеры призваны дать вам некоторое представление о том, как можно использовать представления словаря данных для управления базой данных. Очень часто хорошие администраторы баз данных объединяют сценарии, которые выполняются по регулярному расписанию через CRON или какое-либо другое средство планирования. Эти сценарии будут отслеживать базу данных в поисках проблем, таких как нехватка места на диске.
В Интернете есть множество скриптов, которые можно использовать для подобных целей. Мы хотим, чтобы вы поняли, что делают эти скрипты, и именно для этого предназначены эти примеры. Используйте их, чтобы узнать о том, как работает словарь данных, и увидеть, какую полезную информацию он предоставляет.
Это отрывок из бестселлера Easy Oracle Jumpstart Роберта Фримана и Стива Карама (Oracle ACE и Oracle Certified Master). Это всего 19,95 долларов США при покупке напрямую у издателя здесь.
Бурлесон — американская команда
Примечание. Эта документация по Oracle была создана в качестве справочника по поддержке и обучению Oracle для использования нашими специалистами-консультантами по настройке производительности администраторов баз данных. Не стесняйтесь задавать вопросы на нашем форуме Oracle.
Проверьте опыт! Любой, кто рассматривает возможность использования услуг эксперта службы поддержки Oracle, должен самостоятельно проверить свои полномочия и опыт, а не полагаться на рекламу и самопровозглашенный опыт. Все законные эксперты Oracle публикуют свои квалификации Oracle.
Ошибки? Технология Oracle меняется, и мы стараемся обновлять нашу информацию о поддержке BC Oracle. Если вы обнаружите ошибку или у вас есть предложение по улучшению нашего контента, мы будем признательны за ваш отзыв. Просто электронная почта:
и укажите URL-адрес страницы.
Burleson Consulting
Оракул поддержки баз данных
Получите полный доступ к Oracle Security и более чем 60 000 других продуктов с бесплатной 10-дневной пробной версией O'Reilly.
Есть также прямые онлайн-мероприятия, интерактивный контент, материалы для подготовки к сертификации и многое другое.
Представления словаря данных можно разделить на четыре основные категории:
Показывающие данные о собственных объектах пользователя с пометкой "USER_"
Показывающие данные, доступные любому пользователю в базе данных с пометкой "ALL_"
Показывающие данные, доступные любому администратору баз данных, с пометкой "DBA_"
Вид СЛОВАРЬ
Oracle предоставляет в словаре данных представление, к которому вы можете получить доступ, чтобы увидеть состав всех представлений словаря данных. Если вы запросите представление DICTIONARY, вы найдете конкретные имена объектов словаря данных, к которым у вас есть права доступа. Никаких других объектов вы не увидите. Представление DICTIONARY очень простое и содержит всего два столбца: имя_таблицы и комментарии. Столбец «имя_таблицы» несколько вводит в заблуждение, потому что все имена «таблиц» на самом деле являются представлениями, синонимами или другими объектами. Ни одна из перечисленных сущностей на самом деле не является таблицей. Вот очень небольшой примерный раздел представления DICTIONARY с небольшим форматированием, чтобы вы могли видеть, о чем мы говорим:
Если вы создаете пользователя в базе данных версии 8.0.4 и предоставляете этому пользователю только возможность подключения к базе данных (привилегия CREATE SESSION), список имен таблиц, доступных этому пользователю, как получено из представления DICTIONARY , всего 242, распределенных следующим образом:
Личные данные объекта с префиксом «USER_»: 101
Все данные объекта с префиксом «ALL_»: 85
Объекты DBA с префиксом «DBA_»: 0
Все остальное: 56
Как видно из этого списка, между представлениями «ALL», «DBA» и «USER» нет точного соответствия с точки зрения чисел. Для каждой категории пользователей доступны отдельные представления. Например, USER_TABLES, ALL_TABLES и DBA_TABLES хранят информацию о таблицах в базе данных, но с разными уровнями привилегий; несмотря на их имена, все эти объекты на самом деле являются представлениями одних и тех же таблиц! Имена представлений были выбраны, чтобы передать их общее назначение. Вот комментарии из словаря данных для этих трех представлений:
Описание собственных таблиц пользователя
Описание всех таблиц, доступных пользователю
Описание всех таблиц в базе данных
Если вы посмотрите на код, который Oracle RDBMS использует для просмотра трех типов представлений TABLES, перечисленных здесь, вы заметите некоторые интересные вещи:
Все три представления содержат один и тот же список SELECT, за исключением того, что столбец «владелец» отсутствует в представлении USER_TABLES. Это имеет смысл, так как ожидается, что это представление будет возвращать только имена таблиц, принадлежащих пользователю.
Все три представления используют один и тот же список таблиц словаря данных, за исключением таблицы user$, которую представление USER_TABLES не использует.
Мы объясним эти внутренние ($) таблицы позже в этой главе.
Итак, если списки SELECT по существу одинаковы, а список таблиц FROM по существу одинаков, в чем разница? Разница заключается в предложении WHERE, которое содержит ограничивающие условия для извлечения данных. Вы найдете много примеров того, как Oracle использует одну и ту же таблицу с разными ограничениями в операторах создания представления словаря данных.
Определение представления хранится в словаре данных и в большинстве случаев обрабатывается точно так же, как таблица, но представление не хранит никаких данных. Представление — это просто определение того, что, а иногда и как следует извлекать определенные данные. В операторах SQL DML не делается различия между «таблицей» и «представлением». Для практических целей эти термины взаимозаменяемы. Например, в следующем утверждении:
нет квалификатора для идентификации объекта ALL_TABLES как представления или таблицы; на самом деле ALL_TABLES — это представление.
Предупреждение
Хотя таблицы и представления можно считать взаимозаменяемыми, не упускайте из виду потенциальное влияние использования представления на производительность, как описано в главе 3.
О безопасности на уровне строк
Представление DICTIONARY — хороший пример того, как может быть реализована безопасность на уровне строк. Данные, возвращаемые из запроса, будут контролироваться на уровне строки условием (WHERE . ) в определении представления. Представление DICTIONARY представляет собой запрос на объединение из трех частей. Мы показываем текст этого представления в том виде, в каком он появляется в CATALOG.SQL , чтобы дать вам представление о том, как вы можете реализовать контроль над тем, кто что видит в вашей базе данных:
Проверка кода для первого запроса
Давайте подробнее рассмотрим механизм, который Oracle использует для управления доступом к информации. В первом запросе этого объединения из трех частей две строки:
убедитесь, что будут возвращены только представления (тип = 4), принадлежащие SYS (владелец = 0). Строки дополнительно уточняются с помощью раздела «and (o.name like `USER%' . », поэтому будут возвращены только знакомые представления словаря данных. Вложенный SELECT гарантирует, что эта часть запроса на объединение вернет строку только в том случае, если пользователь имеет определенную системную привилегию SELECT ANY TABLE. Вы можете легко протестировать эту часть оператора создания представления DICTIONARY. Создайте пользователя (например, mary) и предоставьте пользователю только привилегию CREATE SESSION. Это минимальная привилегия, необходимая для доступа базу данных. Подключитесь как mary и введите следующую команду:
В системе Windows 95 Personal Oracle7 было возвращено значение 2. При подключении в качестве системы к той же базе данных с включенной ролью администратора баз данных было получено 93 значения. В системе Windows NT с Oracle 8.0 .3, пользователь mary только с привилегией CREATE SESSION не показал доступных строк в представлении DICTIONARY для таблиц, начинающихся с суффикса «DBA», в то время как пользователь system показал 117 доступных строк. Из этого упражнения вы можете усвоить два важных момента:
Пользователи с разными правами доступа могут видеть разные объекты.
С каждым новым выпуском Oracle RDBMS доступны новые или другие представления.
При разработке системы безопасности помните о втором моменте, чтобы не полагаться на объекты, которые могут измениться или исчезнуть в более поздних версиях программного обеспечения Oracle.
Проверка кода для второго и третьего запросов
Второй запрос представления DICTIONARY возвращает описания определенных представлений, перечисленных в предложении «in (. )», а третий запрос возвращает синонимы, принадлежащие system . Представление DICTIONARY вернет пользователю, выполняющему запрос, только все имена объектов, в которых пользователь создал объект и ему были предоставлены некоторые права доступа к объекту.
О CATALOG.SQL
В системе Windows NT размер файла Oracle версии 7 CATALOG.SQL составляет 234 Кбайт. В той же системе Oracle8 CATALOG.SQL имеет размер 416 Кбайт. Различия в размерах в основном вызваны созданием глобальных представлений «GV» и новым подходом к аварийному восстановлению, реализованным в Oracle8. Как в версии 7, так и в версии 8 практически каждый объект, определенный в этом скрипте, является либо представлением, либо синонимом. Кроме того, большинство представлений квалифицируются аналогично примеру DICTIONARY, чтобы ограничить возвращаемые строки только теми, которые пользователь имеет право видеть. Для этого ядро должно иметь две определенные части информации о пользователе: имя пользователя и идентификатор пользователя.Кроме того, эта информация должна быть доступна в таблицах словаря данных. Поскольку имя пользователя и идентификатор пользователя известны из процесса входа в систему, и поскольку эти данные были проверены по записям в словаре данных, ядро всегда имеет доступную информацию для определения уровней доступа, которые должны быть доступны для каждого пользователя.
Применение концепций
Если вы хотите применить подход, который использует Oracle, в коде словаря данных, вам понадобится какой-то метод связывания пользователей с данными в таблицах приложения. Как правило, информация, которая вам понадобится, носит организационный характер. Пользователь, чье настоящее имя Мэри Джейн, может находиться в подразделении AB, отделе 4. Если ее идентификатор пользователя mjane хранится как часть ее записи в таблице сотрудников вместе с ее подразделением и отделом, то вы собрали минимальный объем информации, необходимый вашей системе безопасности для ограничения доступа к данным.
Как правило, когда доступ к персональным данным разрешен, существует ограничение, согласно которому каждый пользователь должен иметь возможность просматривать только свои собственные данные, если этот пользователь не является главой отдела или начальником отдела. Вот пример кода, который можно использовать для реализации необходимого ограничения в таблице сотрудников:
Последний запрос вернет повторяющуюся строку, если начальник отдела или начальник отдела использует это представление. Однако оператор UNION автоматически удаляет повторяющиеся строки.
Есть ли другие способы сделать это? Абсолютно, при условии, что в базе данных присутствует структура, поддерживающая подход.
Получите Oracle Security прямо сейчас с онлайн-обучением O’Reilly.
Члены O’Reilly проходят онлайн-обучение в режиме реального времени, а также получают книги, видео и цифровой контент от более чем 200 издателей.
Читайте также: