11. Табличное пространство (TABLESPACE)

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

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

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

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

Для создания табличного пространства понадобится оператор CREATE TABLESPACE:

Листинг 11.1 Синтаксис оператора создания табличного пространства CREATE TABLESPACE

CREATE TABLESPACE <имя табличного пространства> FILE '<путь к файлу>';

Права на создание табличных пространств есть только у администраторов и пользователей с привилегией CREATE TABLESPACE. Максимально доступно 254 табличных пространства.

Для создания табличного пространства необходимо указать путь к файлу. Можно указывать как абсолютный путь, так и относительный, в том числе с использованием псевдонима директории, заданного в directories.conf в секции tablespaces. В directories.conf указывается реальный путь к директории с псевдонимом <псевдоним директории>. Путь к файлу табличного пространства с использованием псевдонима директории указывается в формате: <псевдоним директории>/<файл>, например, dir/file.dat. Первый компонент пути (dir) будет обработан как псевдоним директории. Если псевдоним не будет найден в directories.conf, то путь будет обработан как относительный (относительно директории, в которой размещен основной файл базы данных). Все директории, используемые в пути, должны быть созданы заранее. В системную таблицу RDB$TABLESPACES в любом случае будет записан абсолютный путь к файлу табличного пространства.

Пример создания табличного пространства с использованием псевдонима директории:

CREATE TABLESPACE TS1 FILE 'dir/ts1.dat';

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

CREATE TABLE <имя таблицы> (<столбец> [, <столбец>...])
    [IN] TABLESPACE {<имя табличного пространства> | PRIMARY};

Чтобы переместить существующую таблицу в табличное пространство, примените оператор:

ALTER TABLE <имя таблицы> SET TABLESPACE [TO] <имя табл. пространства>;

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

Для перемещения таблицы в основной файл базы данных примените оператор:

ALTER TABLE <имя таблицы> SET TABLESPACE [TO] PRIMARY;

Предупреждение

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

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

CREATE INDEX <имя индекса> [IN] TABLESPACE {<имя табличного пространства> | PRIMARY};

Чтобы переместить существующий индекс в табличное пространство, примените оператор:

ALTER INDEX <имя индекса> SET TABLESPACE [TO] <имя табл. пространства> ;

Для перемещения индекса в основной файл базы данных примените оператор:

ALTER INDEX <имя индекса> SET TABLESPACE [TO] PRIMARY;

Предупреждение

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

Можно указать табличное пространство для ограничений PK, FK, UNIQUE, созданных в CREATE TABLE и ALTER TABLE. Cинтаксис описан в главе 10.

Для изменения путей к файлам табличных пространств используется оператор ALTER TABLESPACE:

Листинг 11.2 Синтаксис оператора изменения табличного пространства ALTER TABLESPACE

ALTER TABLESPACE <имя табличного пространства> SET FILE [TO] '<путь к файлу>';

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

Для изменения путей к файлам табличных пространств необходимо указать путь к файлу. Можно указывать как абсолютный путь, так и относительный, в том числе с использованием псевдонима директории, заданного в directories.conf в секции tablespaces. В directories.conf указывается реальный путь к директории с псевдонимом <псевдоним директории>. Путь к файлу табличного пространства с использованием псевдонима директории указывается в формате: <псевдоним директории>/<файл>, например, dir/file.dat. Первый компонент пути (dir) будет обработан как псевдоним директории. Если псевдоним не будет найден в directories.conf, то путь будет обработан как относительный (относительно директории, в которой размещен основной файл базы данных). Все директории, используемые в пути, должны быть созданы заранее. В системную таблицу RDB$TABLESPACES в любом случае будет записан абсолютный путь к файлу табличного пространства.

Права на изменение табличных пространств есть только у администраторов и пользователей с привилегией ALTER ANY TABLESPACE.

Для удаления существующего табличного пространства используется оператор DROP TABLESPACE.

Листинг 11.3 Синтаксис оператора удаления табличного пространства DROP TABLESPACE

DROP TABLESPACE <имя табличного пространства>;

Если в удаляемом табличном пространстве хранятся таблицы или индексы, то будет выдано сообщение об ошибке.

Предупреждение

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

Права на удаление табличных пространств есть только у администраторов и пользователей с привилегией DROP ANY TABLESPACE.

11.1. Примечание для табличного пространства

Для существующего табличного пространства можно добавить комментарий, используя оператор COMMENT ON:

COMMENT ON
   TABLESPACE <имя табличного пространства> IS {'<текст примечания>' | NULL};

Значение NULL удаляет существующее примечание.

Примечание

Выполнить оператор COMMENT ON TABLESPACE могут администраторы, владельцы домена или пользователи с привилегией ALTER ANY TABLESPACE.