Усовершенствованное управление табличными пространствами в Oracle Database 10g и 11g
Oracle, предоставляет несколько маленьких и изящных средств управления табличными пространствами:
- Default Permanent Tablespace
- Переименование табличного пространства
- Табличное пространство SYSAUX
- Составное табличное пространство Temp
Default Permanent Tablespace
Oracle 9i ввел понятие временного табличного пространства по умолчанию (default temporary tablespace), что позволило предотвратить случайное использование табличного пространства SYSTEM для временных сегментов. Oracle 10g предоставляет такую возможность включением постоянного табличного пространства по умолчанию (default permanent tablespace) для предотвращения установки табличного пространства SYSTEM по умолчанию для пользователей. Предложение DEFAULT TABLESPACE в предложении CREATE DATABASE позволяет создать и назвать табличное пространство по умолчанию. Если этот параметр во время создания не указан, или в дальнейшем будет нуждаться в изменении, он может быть установлен следующей командой:
ALTER DATABASE DEFAULT TABLESPACE users;
Просмотреть текущие настройки для табличного пространства по умолчанию можно выполнив запрос:
COLUMN property_name FORMAT A30
COLUMN property_value FORMAT A30
COLUMN description FORMAT A50
SET LINESIZE 200
SELECT *
FROM database_properties
WHERE property_name like '%TABLESPACE';
PROPERTY_NAME PROPERTY_VALUE DESCRIPTION DEFAULT_TEMP_TABLESPACE
------------- --------------- ---------- -----------------------
TEMP Name of default temporary tablespace USERS
DEFAULT_PERMANENT_TABLESPACE
----------------------------
Name of default permanent tablespace
Переименование табличного пространства
Переименование постоянного и временного (permanent и temporary) табличных пространств в Oracle 10g выполняется командой:
ALTER TABLESPACE ts_current_name RENAME TO ts_new_name;
Разрешено переименовывать все табличные пространства за исключением SYSTEM и SYSAUX. Во время переименования все табличные пространства и их файлы должны быть online и параметр совместимости должен быть выставлен в 10.0.0 или выше.
Если табличное пространство в режиме "только для чтения" заголовки файлов данных не будут изменены и не отразят новое имя и сообщение в журнале (alert log) проинформирует вас об этом. Во время восстановления, эти табличные пространства будут восстановлены со старым именем, если управляющий файл пересоздавался и файлы данных содержат старые заголовки.
Если переименовано табличное пространство UNDO, в экземпляре использующем предпочтительно pfile, чем spfile, сообщение в alert log напомнит о необходимости изменить значение параметра UNDO_TABLESPACE.
Табличное пространство SYSAUX
Табличное пространство SYSAUX предоставляет единое хранилище для всех второстепенных метаданных. Ранее схема объектов для поддержки возможностей базы данных находилась в табличном пространстве SYSTEM. Сейчас все это перенесено в SYSAUX. Как результат, сейчас табличное пространство SYSTEM не напоминает хаотичную помойку, и его содержимое более упорядочено. В дополнение, общее число табличных пространств для поддержки возможностей базы данных было уменьшено.
Содержимое табличного пространства SYSAUX представлено в представлении V$SYSAUX_OCCUPANTS. Представление содержит колонку MOVE_PROCEDUR, которая содержит имя процедуры которое может использоваться для перемещения компонент для этой компоненты в другое табличное пространство. Это используется, если схема ассоциированная с одной компонентой вырастает настолько, что требует отдельного табличного пространства.
Компоненты занимающие основную часть пространства в SYSAUX, это репозиторий Automatic Workload Repository (AWR) и Enterprise Manager (EM). Другие компоненты, такие как Oracle UltraSearch, Oracle Text и Oracle Streams не занимают существенного пространства.
Составное временное табличное пространство
Группы табличных пространств позволяют пользователям использовать более одного табличного пространства для хранения временных сегментов. Группа табличных пространств создается неявно, как только первое табличное пространство связано с ним:
-- Создаем группу табличных пространств
-- добавлением в группу существующего табличного пространства.
ALTER TABLESPACE temp TABLESPACE GROUP temp_ts_group;
-- Добавление.табличного пространства в группу
CREATE TEMPORARY TABLESPACE temp2
TEMPFILE '/u01/app/oracle/oradata/DB10G/temp201.dbf' SIZE 20M
TABLESPACE GROUP temp_ts_group;
Табличные пространства и их принадлежность к группам можно посмотреть выполнив запрос:
SELECT * FROM dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------ -----------------
TEMP_TS_GROUP TEMP
TEMP_TS_GROUP TEMP2
2 rows selected.
Однажды созданная группа может быть присвоена пользователю как табличное пространство или как временное табличное пространство:
-- Связываем группу как временное табличное пространство
-- для пользователя.
ALTER USER scott TEMPORARY TABLESPACE temp_ts_group;
-- Связываем группу как временное табличное пространство
-- по умолчанию.
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp_ts_group;
-- Табличное пространство может быть исключено из группы
ALTER TABLESPACE temp2 TABLESPACE GROUP '';
SELECT * FROM dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
----------------- -----------------
TEMP_TS_GROUP TEMP
1 row selected.
Теоритически нет предела количеству табличных пространств в группе, но их должно быть более одного. Группа удаляется автоматически, как только из нее удален последний член. Последний член группы может быть удален в том случае, если группа назначена как временное табличное пространство. В следующем примере это проиллюстрировано:
-- Перехрдим с группы на указанное табличное пространство.
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
-- Удаляем табличное пространство из группы.
ALTER TABLESPACE temp TABLESPACE GROUP '';
-- Проверяем что группа удалена.
SELECT * FROM dba_tablespace_groups;
no rows selected
На этом пожалуй все.