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.