Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ответы к экзамену ИИС.doc
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
445.95 Кб
Скачать

Структуры хранения и отношения между ними

Виды сегментов

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

Таблица

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

Секционирование таблиц

Наиболее важными свойствами таблицы базы данных, информация которой интенсивно используется несколькими процессами одновременно, являются ее доступность и масштабируемость. В таких случаях данные таблицы могут храниться в нескольких секциях, которые расположены в различных табличных пространствах. В настоящий момент сервер Oracle обеспечивает секционирование по диапазону ключевых значений и хеш-секционирование. Каждой секции секционированной таблицы соответствует сегмент, для управления которым могут быть указаны особые параметры хранения. Для использования такого вида сегментов требуется Oracle9i Enterprise Edition.

Индекс

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

Индекс-таблицы

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

Секционирование индекса

Индекс может быть секционирован и распределен на несколько табличных пространств. В этом случае каждая секция индекса соответствует какому-то сегменту и не может охватывать более одного табличного пространства. Основной целью использования секционированного индекса является необходимость минимизации конкуренции при помощи распределения ввода-вывода * индекса. Для использования такого вида сегментов требуется Oracle9i Enterprise Edition с режимом секционирования.

Сегмент отката (Undo segment)

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

Временный сегмент

Когда выполняются команды, требующие сортировки (например, CREATE INDEX, SELECT DISTINCT и SELECT GROUP BY на таблицу без индексов), серверный процесс старается выполнить сортировку в памяти. Этот объем памяти ограничен и на диск могут записываться промежуточные результаты тех сортировок, для которых требуется мною места. Например, при создании индексов для больших таблиц. В этом случае используются временные сегменты.

Сегмент LOB

Для хранения больших объектов (LOB), таких как текстовые документы, изображения или видео-данные, могут использоваться один или более столбцов таблицы. Если этот столбец особенно велик, сервер Oracle хранит его значения в отдельном сегменте, называемом сегмент LOB. В таблице содержится лишь указатель на местоположение соответствующих данных LOB.

Поддержка нескольких размеров блока данных

Блок базы данных:

  • Минимальная единица ввода/вывода

  • Состоит из одного или более блоков ОС

  • Задается при создании базы данных

  • DB_BLOCK_SIZE указывает размер стандартного блока

  • В базе данных могут присутствовать табличные пространства со стандартным размером блока (указывается при создании базы и не меняется) и еще от одного до четырех других размеров.

  • Размеры блоков могут быть 2, 4, 8 , 16 или 32 Кб.

Стандартный размер блока

  • Устанавливается в момент создания базы данных параметром инициализации DB_BLOCK_SIZE (устанавливают в 8KВ); не может быть изменен без пересоздания базы

  • Используется для табличных пространств SYSTEM и временных

  • DB_CACHE_SIZE устанавливает размер кэша буферов для стандартного блока:

  • Минимальный размер = одна гранула (4 MB или 16 MB)

  • По умолчанию = 48 MB

Примечание: Гранула - наименьшая единица непрерывной области виртуальной памяти, которой манипулирует Oracle при размещении SGA. Размер гранулы зависит от параметра SGA_MAX_SIZE: 4MB, если максимальный размер < 128MB, иначе 16MB.

Содержимое блока базы данных:

Блоки данных

Блоки данных Oracle содержат:

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

  • Пространство данных; данные столбцов, вставляемые в блок с конца.

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