21-й час
Работа с системным каталогом

В ходе этого урока мы с вами поговорим о системном каталоге, в некоторых реализациях реляционных баз данных называемом также словарем данных (data dictionary). К концу урока вам станет ясно назначение и содержимое системного каталога и вы сможете извлекать из него необходимую информацию о базе данных с помощью команд, изученных в ходе предыдущих уроков. Системный каталог с информацией о самой базе данных в той или иной форме присутствует во всех главных реализациях реляционных баз данных. В ходе этого урока мы приводим списки наиболее важных элементов системных каталогов основных производителей реляционных баз данных.

Основными на этом уроке будут следующие темы.

• Что такое системный каталог?
• Как создается системный каталог?
• Содержимое системного каталога
• Таблицы системного каталога
• Доступ к данным системного каталога
• Обновление системного каталога

  Что такое системный каталог?

Системный каталог — это набор таблиц и представлений, содержащих важную информацию о базе данных. Системный каталог имеется в любой базе данных. Информация в системном каталоге определяет структуру всей базы данных. Например, в системном каталоге хранятся операторы DDL (Data Definition Language — Язык определения данных) для всех таблиц базы данных. Схематически место системного каталога в базе данных показано на рис. 21.1.

Как видно из рис. 21.1, системный каталог фактически является частью базы данных. В базе данных имеются различные объекты, в частности, таблицы, индексы и представления. Системный каталог представляет собой группу объектов, содержащих определения других объектов базы данных и структуры самой базы данных, а также другую не менее важную информацию.

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

Рис. 21.1. Системный каталог

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

В каждой реализации приняты свои соглашения по назначению имен таблицам и представлениям системного каталога. Но имена не так важны по сравнению с пониманием того, какие объекты этими именами представлены, какую информацию эти объекты содержат и как эту информацию можно извлечь

  Как создается системный каталог?

Системный каталог создается либо автоматически при создании базы данных, либо администратором базы данных сразу же после ее создания. Например, в Oracle выполняется набор поставляемых производителем макросов SQL, которые атоматически создают доступные пользователям таблицы и представления системного каталога. Таблицы и представления системного каталога принадлежат системе, а не какой-нибудь отдельной схеме. Например, в Oracle владельцем системного каталога яшшется пользователь с именем SYS, имеющий права неограниченного доступа к базе данных. В Sybase системный каталог для сервера SQL размещается в базе данных MASTER.

  Содержимое системного каталога

Системный каталог содержит массу информации, доступной многим пользователям и иногда используемой этими пользователями для своих собственных нужд. Системный каталог содержит информацию по следующим разделам.

• Учетные записи пользователей и установки по умолчанию.
• Привилегии и другая связанная с безопасностью информация.
• Статистика, характеризующая производительность системы.
• Размеры объектов.
• Динамика роста объектов.
• Структура таблиц и параметры их хранения.
• Структура индексов и параметры их хранения.
• Информация о других объектах базы данных, в частности, представлениях, синонимах, триггерах, сохраненных процедурах.
• Ограничения для таблиц и информация о ссылочной целостности данных.
• Пользовательские сеансы доступа.
• Информация об аудитах.
• Внутренние параметры базы данных.
• Размещение файлов базы данных.

Системный каталог управляется сервером базы данных. Например, при создании таблицы сервер базы данных вставляет данные об этом в соответствующую таблицу или представление каталога. При изменении пользователем структуры своей таблицы соответствующие объекты словаря данных тоже обновляются. В следующих разделах систематично описываются типы данных, которые отслеживаются в системном каталоге.

  Пользовательские данные

В системном каталоге хранится информация обо всех пользователях базы данных: их привилегиях доступа к системе и объектам, информация о принадлежащих им объектах, а также информация о не принадлежащих им объектах, к которым эти пользователи имеют доступ. Пользовательские таблицы и представления оказываются доступными для извлечения этой информации. По поводу имеющихся в системном каталоге объектов обратитесь к документации, предлагаемой вашей реализацией базы данных.

  Информация о безопасности

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

  Информация о структуре базы данных

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

  Статистика производительности системы

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

  Таблицы системного каталога

Разные реализации баз данных предлагают свои таблицы и представления системного каталога, часто разделенные на группы по уровням доступа на пользовательские, системные и предназначенные для администратора базы данных. Конкретную информацию о содержимом таблиц системного каталога можно получить из запросов к этим таблицам и из документации к базе данных. Для некоторых из наиболее распространенных реализаций соответствующая информация представлена в табл. 21.1.


 

Microsoft SQL Server

Имя таблицы

Описание

SYSUSERS

SYSSEGMENTS

SYSINDEXES

SYSCONSTRAINTS

Информация о пользователях базы данных 

Информация обо всех сегментах базы данных 

Информация обо всех индексах 

Информация обо всех условиях ограничения


dBase

Имя таблицы

Описание

SYSVIEWS 

SYSTABLS 

SYSIDXS 

SYSCOLS

Информация обо всех представлениях 

Информация обо всех таблицах 

Информация обо всех индексах 

Информация о столбцах таблиц


Microsoft Access

Имя таблицы

Описание

MSysColumns 

MSyslndexes 

MSysMacros 

MSysObjects 

MSysQueries

MSysRelationships

Информация о столбцах таблиц 

Информация об индексах таблиц 

Информация о созданных макросах 

Информация обо всех объектах базы данных 

Информация о созданных запросах 

Информация о связях между таблицами


Sybase

Имя таблицы

Описание

SYSMESSAGES 

SYSKEYS 

SYSTABLES 

SYSVIEWS 

SYSCOLUMNS 

SYSINDEXES 

SYSOBJECTS 

SYSDATABASES 

SYSPROCEDURES

Список всех сообщений об ошибках сервера 

Информация о ключах и внешних ключах 

Информация обо всех таблицах и представлениях 

Тексты всех представлений 

Информация о столбцах таблиц 

Информация об индексах 

Информация о таблицах, триггерах, представлениях и т. п. 

Информация обо всех базах данных на сервере 

Информация о представлениях, триггерах и сохраненных процедурах


Oracle

Имя таблицы

Описание

ALLJTABLES

USER_TABLES 

DBAJTABLES 

DBA_SEGMENTS 

DBAJNDEXES 

DBA_USERS 

DBA_ROLE_PRIVS 

DBA_ROLES 

DBA_SYS_PRIVS 

DBA_FREE_SPACE 

V$DATABASE 

V$SESSION

Информация о таблицах, доступных пользователю 

Информация о таблицах, принадлежащих пользователю 

Информация обо всех таблицах в базе данных 

Информация о сегментах 

Информация о всех индексах 

Информация о всех пользователях базы данных 

Информация о выданных ролях 

Информация обо всех ролях в базе данных 

Информация о выданных привилегиях доступа к системе 

Информация о доступном базе данных свободном пространстве 

Информация о создании базы данных 

Информация о текущем сеансе доступа

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

 

  Использование данных системного каталога

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

Запрос SQL на выборку данных из системного каталога по форме не отличается от запроса к любой другой таблице базы данных.

Например, следующий запрос возвратит все строки данных таблицы SYSTABLES в Sybase.

SELECT * FROM SYSTABLES 

GO

В следующих разделах представлено несколько примеров запросов к таблицам системного каталога и соответствующая информация, которая может оказаться вам полезной.

  Примеры запросов к системному каталогу

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

Следующий запрос возвращает список всех имен пользователей базы данных.

SELECT USERNAME 

       FROM ALL_USERS;

USERNAME
               ------------

        SYS

        SYSTEM

        RYAN

        SCOTT

        DEMO

        RON

        USER1

        USER2

8 строк выбраны. Следующий запрос возвращает список всех таблиц данного пользователя.

SELECT TABLE_NAME 

       FROM USER_TABLES;

TABLE_NAME

         -----------

        CANDY_TBL

        CUSTOMER_TBL

        EMPLOYEE_PAY_TBL

        EMPLOYEE_TBL

        PRODUCTS_TBL

        ORDERS_TBL

        6 строк выбраны.

Следующий запрос возвращает список всех привилегий доступа к системе, имеющихся у пользователя с именем BRANDON.

SELECT GRANTEE, PRIVILEGE 

        FROM SYS.DBA_SYS_PRIVS 

        WHERE GRANTEE = 'BRANDON';

GRANTEE     PRIVILEGE

        -------------------------

            BRANDON        ALTER ANY TABLE    

            BRANDON        ALTER USER

      BRANDON        CREATE USER

      BRANDON        DROP ANY TABLE

      BRANDON        SELECT ANY TABLE

      BRANDON        UNLIMITED TABLESPACE

            6 строк выбраны. 

А вот пример из MS Access:

SELECT NAME

             FROM MSYSOBJECTS

      WHERE NAME = 'MSYSOBJECTS'

NAME 

        ------------

         MSYSOBJECTS

Показанные здесь примеры иллюстрируют ничтожно малую долю той информации которую можно извлечь из любого системного каталога По поводу имеющихся в системном каталоге таблиц и их содержимого необходимо обратиться к документации той базы данных, с которой вы работаете

  Обновление содержимого системного каталога

Системный каталог позволяет только выборку его данных — даже когда его использует администратор базы данных. Обновление системного каталога осуществляется автоматически сервером базы данных. Например, в базе данных пользователем создается таблица с помощью оператора CREATE TABLE. При этом сервер базы данных помещает соответствующий оператор DDL в определенную таблицу системного каталога. Необходимости обновлять таблицы системного каталога вручную не возникает никогда. Во всех реализациях эту работу выполняет сервер базы данных по схеме, показанной на рис. 21.2

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


Рис. 21.2. Обновление системного каталога

  Резюме

В ходе этого урока обсуждались назначение и содержимое системного каталога реляционной базы данных. Системный каталог в некотором смысле является базой данных внутри базы данных и по существу представляет собой базу данных с информацией о той базе данных, в рамках которой этот системный каталог создан. С помощью системного каталога проще осуществлять управление общей структурой базы данных, следить за происходящими в базе данных событиями и изменениями, получать полезную для управления базой данных информацию. Системный каталог предполагает только чтение его данных. Пользователям базы данных не позволено вносить какие бы то ни было изменения непосредственно в системный каталог. Изменения в системный каталог вносятся автоматически каждый раз, когда меняется структура базы данных, например, когда пользователем создаются таблицы. Такие изменения в системный каталог вносятся сервером базы данных.

  Вопросы и ответы

Как пользователь базы данных я имею возможность получить информацию о своих объектах. Но как получить информацию об объектах других пользователей?

Есть целый ряд таблиц и представлений системного каталога, доступ к которым может получить любой пользователь базы данных. Среди таких таблиц и представлений обязательно найдутся такие, в которых содержится информация о тех объектах, к которым доступ вам разрешен.

Если пользователь забыл свой пароль, может ли администратор базы данных извлечь пароль пользователя из какой-нибудь таблицы системного каталога?

И да, и нет. Пароль действительно хранится в специальной таблице системного каталога, но обычно этот пароль бывает зашифрован, так что даже администратор не сможет его прочитать. Но пароль можно переустановить, что для администратора базы данных оказывается достаточно простым делом.

Как выяснить, из каких столбцов состоит некоторая таблица системного каталога?

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

  Практикум

Задания практических занятий разделены на тесты и упражнения. Тесты предназначены для проверки общего уровня понимания рассмотренного материала. Упражнения дают возможность применить на практике идеи, обсуждавшиеся в ходе текущего урока, в комбинации с идеями из предыдущих уроков. Мы рекомендуем ответить на тестовые вопросы и выполнить упражнения прежде, чем продолжать дальнейшее чтение книги. Ответы можно проверить по Приложению Б, "Ответы".

  Тесты

1. Как по другому называется системный каталог в некоторых базах данных?

2. Имеет ли возможность обычный пользователь обновлять системный каталог?

3. Какая системная таблица Sybase содержит информацию о существующих в базе данных представлениях?

4. Кто является владельцем системного каталога?

5. В чем различия между системными объектами ALLJTABLES и DBAJTABLES в Oracle?

6. Кто вносит изменения в таблицы системного каталога?

  Упражнения

1. Попытайтесь выполнить запросы к системным таблицам в рамках своей базы данных. Начните с запроса к таблице, содержащей информацию о вашем учетной записи пользователя базы данных.

2. Получите из системного каталога список всех таблиц, к которым вы имеете право доступа.

3. Получите из системного каталога список всех имеющихся у вас привилегий доступа к системе и объектам.

4. Если вы имеете привилегию DBA или SELECT в отношении таблиц администратора базы данных, выполните запрос на выборку данных этих таблиц. Если же таких привилегий у вас нет, ознакомьтесь с образцами этих таблиц по документации, сопровождающей базу данных.