Временные табличные пространства

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

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


На заметку! СУБД Oracle Database пишет все данные программы в локальной области (PGA) порциями по 64 Кбайт, поэтому советуют создавать табличные пространства с размерами экстентов, кратными 64 Кбайт. Для крупных хранилищ данных и баз данных, поддерживающих системы принятия решений, которые интенсивно используют временные табличные пространства, рекомендуется размер экстента в 1 Мбайт.


Самый первый оператор после запуска экземпляра базы Oracle, который использует временное табличное пространство, создает сегмент сортировки, разделяемый всеми операциями сортировки в экземпляре. Когда вы останавливаете базу данных, она освобождает этот сегмент. Вы можете запросить представление V$SORT_SEGMENT, чтобы просмотреть выделение и освобождение места для этого сегмента сортировки. Увидеть, кто в данный момент использует сегмент сортировки, можно, опросив представление V$SORT_USAGE.Используйте представления V$TEMPFILE и DBA_TEMP_FILES, чтобы ознакомиться с подробностями о временных файлах, выделенных в данный момент временному табличному пространству.

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

Создание временного табличного пространства

Вы создаете временное табличное пространство точно так же, как и постоянное,лишь с тем отличием, что указываете конструкцию TEMPORARY в операторе CREATE TABLESPACE и подставляете эту конструкцию TEMPFILE вместо DATAFILE. Вот пример:

SQL> CREATE TEMPORARY TABLESPACE temp_demo
TEMPFILE 'temp01.dbf' SIZE 500M
AUTOEXTEND ON;

Конструкция SIZE во второй строке указывает размер файла данных и, как следствие, размер временного табличного пространства — 500 Мбайт. В приведенном операторе конструкция AUTOEXTEND ON приведет к автоматическому увеличению размера временного файла и вместе с ним — размера временного табличного пространства. По умолчанию все временные табличные пространства создаются с экстентами унифицированного размера — 1 Мбайт. Тем не менее, можно указать конструкцию UNIFORM SIZE,чтобы задать другой размер, как показано в следующем операторе: 

SQL> CREATE TEMPORARY TABLESPACE temp_demo
TEMPFILE 'temp01.dbf' SIZE 500M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M;

В приведенном операторе конструкция EXTENT MANAGEMENT необязательна.Конструкция UNIFORM SIZE специфицирует специальный размер экстента в 16 Мбайт вместо 1 Мбайт по умолчанию.


Совет. При выделении места временному табличному пространству применяйте конструкцию TEMPFILE вместо DATAFILE.


Обычно принято создавать одно временное табличное пространство (именуемое, как правило, Temp) для каждой базы данных, но вполне можно иметь и несколько временных табличных пространств, входящих в группу временных табличных пространств,если база данных нуждается в выполнении интенсивных операций сортировки.Чтобы уничтожить данные во временном табличном пространстве по умолчанию,необходимо сначала воспользоваться командой ALTER TABLESPACE для создания нового табличного пространства по умолчанию в базе данных. Предыдущее временное табличное пространство по умолчанию затем можно уничтожить подобно любому другому.


На заметку! Oracle рекомендует устанавливать в качестве временного табличного пространства по умолчанию управляемое локально временное табличное пространство с унифицированным размером экстента в 1 Мбайт.


Изменение временного табличного пространства

С помощью команды ALTER TEMPORARY TABLESPACE можно выполнять различные задачи управления временным табличным пространством, включая добавление временного файла для его увеличения. Вот пример того, как можно увеличить временное табличное пространство:

SQL> ALTER TABLESPACE temp
ADD TEMPFILE '/u01/app/oracle/tempfile/tempo3.dbf' size 1000M reuse;

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

SQL> ALTER DATABASE TEMPFILE '/u01/app/oracle/tempfile/temp03.dbf'
RESIZE 200M;

Для уничтожения временного файла и удаления соответствующего файла операционной системы служит следующий оператор: 

SQL> ALTER DATABASE TEMPFILE '/u01/app/oracle/tempfile/temp03.dbf'
DROP INCLUDING DATAFILES;

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

Временное табличное пространство можно сократить, как и любое нормальное табличное пространство. Следующий пример показывает применение команды ALTER TABLESPACE для сокращения временного табличного пространства:

SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 500m;

Сокращение временных табличных пространств

Иногда может понадобиться увеличить временное табличное пространство, чтобы вместить данные очень крупного задания, которое интенсивно использует это временное табличное пространство. После завершения такого задания можно сократить это временное табличное пространство, используя конструкцию SHRINK SPACE в операторе ALTER TABLESPACE. Вот пример: 

SQL> ALTER TABLESPACE temp SHRINK SPACE;
Tablespace altered.
SQL>

Конструкция SHRINK SPACE уменьшит временные файлы до минимального размера,который составляет около 1 Мбайт. С помощью конструкции KEEP можно задать минимальный размер для временных файлов, как показано ниже: 

SQL> ALTER tablespace temp SHRINK SPACE
KEEP 250m;

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

SQL> ALTER TABLESPACE temp SHRINK SPACE KEEP 1000M;
Tablespace altered.
SQL>

Если запросить представление V$TEMPFILE, можно будет увидеть следующее:

SQL> SELECT file#, name, bytes/1024/1024 mb FROM v$tempfile;
FILE# NAME                                   MB
----- ------------------------------------   ---------
1     /u01/app/oracle/tempfile/temp01.dbf    999.9375
2     /u01/app/oracle/tempfile/temp02.dbf'   1.0625

База данных сократит один из двух временных файлов вплоть до 1 Мбайт, а другой — только на 1 Мбайт, оставив в нем нетронутыми 999 Мбайт пространства. Если ваша цель — сократить определенный временный файл до заданного минимума, можете сделать это, указав имя временного файла, который нужно сократить: 

SQL> ALTER TABLESPACE temp SHRINK SPACE
TEMPFILE tempfile '/u01/app/oracle/oradata/prod1/temp02.dbf'
KEEP 100m;
Tablespace altered.
SQL>

Приведенный выше оператор ALTER TABLESPACE сокращает только указанный временный файл до размера, заданного в конструкции KEEP. Остальные временные файлы из табличного пространства TEMP остаются нетронутыми. Конструкция KEEP в приведенном выше операторе гарантирует, что временный файл, который был специфицирован, сохранит 500 Мбайт пространства. Следующий пример демонстрирует, как сократить отдельный временный файл, не указывая сохранившегося пространства:

SQL> ALTER TABLESPACE temp
SHRINK tempfile '/u01/app/oracle/tempfile/temp03.dbf'; 

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

Временное табличное пространство по умолчанию

Когда вы создаете пользователей базы данных, то должны назначить каждому временное табличное пространство по умолчанию, в котором они будут выполнять свои временные работы, подобные сортировке. Если не указать явно пользователю его временное табличное пространство, для этих целей применяется табличное пространство System, что может привести к высокой степени фрагментации этого табличного пространства, помимо его заполнения и торможения всей деятельности базы данных.Избежать таких нежелательных ситуаций можно, создав временное табличное пространство по умолчанию (default) для базы данных при ее создании с помощью конструкции DEFAULT TEMPORARY TABLESPACE. Oracle затем будет использовать это временное табличное пространство по умолчанию для всех пользователей, кому таковое не будет назначено явно. Создание временного табличного пространства по умолчанию будет продемонстрировано в моей новой статье, где пойдет речь о создании новой базы данных Oracle.

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

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temptbs02;

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

SQL> SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM database_properties
WHERE property_name='DEFAULT_TEMP_TABLESPACE';
PROPERTY_NAME            PROPERTY_VALUE
-----------------------  -----------------
DEFAULT_TEMP_TABLESPACE  TEMP

На заметку! Для временного табличного пространства использовать конструкцию AUTOALLOCATE нельзя. По умолчанию все временные табличные пространства создаются с локально управляемыми экстентами унифицированного размера. Размер экстента по умолчанию составляет 1 Мбайт, как и для всех других табличных пространств, но при желании можно задать другой размер экстента при создании временного табличного пространства.


Группы временных табличных пространств

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

Ниже перечислены некоторые из основных характеристик группы временных табличных пространств.

  • Группа временных табличных пространств должна состоять минимум из одного табличного пространства. Ограничений на максимальное их количество не существует.
  • Если вы удалите все члены группы временных табличных пространств, группа также будет автоматически удалена.
  • Группа временных табличных пространств имеет то же самое пространство имен,что и временные табличные пространства, являющиеся частью группы.
  • Имя временного табличного пространства не может совпадать с именем любой из групп табличных пространств.
  • При назначении временного табличного пространства пользователю можно применять имя группы временных табличных пространств вместо имени конкретного табличного пространства. Имя группы можно также использовать, назначая временное табличное пространство по умолчанию для всей базы данных.

Преимущества групп временных табличных пространств

Использование группы временных табличных пространств вместо обычного одиночного временного табличного пространства обеспечивает следующие преимущества.

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

Создание группы временных табличных пространств

Когда вы назначаете первое временное табличное пространство в группу, то тем самым автоматически создаете группу. Чтобы создать группу табличных пространств, просто специфицируйте конструкцию TABLESPACE GROUP в операторе CREATE TABLESPACE,как показано ниже: 

SQL> CREATE TEMPORARY TABLESPACE temp01
TEMPFILE '/u01/oracle/oradata/temp01_01.dbf'
SIZE 500M TABLESPACE GROUP tmpgrp1;

Приведенный оператор SQL создаст новое временное табличное пространство temp01 вместе с новой группой табличных пространств по имени tmpgrp1. Oracle создает новую группу табличных пространств, поскольку здесь при создании нового временного табличного пространства указана ключевая конструкция TABLESPACE GROUP.

Можно также создать группу временных табличных пространств, специфицируя ту же конструкцию TABLESPACE GROUP в команде ALTER TABLESPACE, как показано ниже:

SQL> ALTER TABLESPACE temp02
TABLESPACE GROUP tmpgrp1
Tablespace altered.
SQL>

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

Если вы специфицируете пару кавычек ('') вместо имени группы табличных пространств, вы тем самым неявно указываете Oracle не включать данное временное табличное пространство в группу. Вот пример: 

SQL> CREATE TEMPORARY TABLESPACE temp02
TEMPFILE '/u01/oracle/oradata/temp02_01.dbf' SIZE 500M
TABLESPACE GROUP '';

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

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

SQL> CREATE TEMPORARY TABLESPACE temp03
TEMPFILE '/u01/oracle/oradata/temp03_01.dbf' SIZE 500M;
Tablespace created.
SQL>

Добавление табличного пространства к группе временных табличных пространств

Как показано в предыдущем разделе, с помощью команды ALTER TABLESPACE можно добавить временное табличное пространство в группу. Можно также изменить группу, к которой относится данное табличное пространство, используя команду ALTER TABLESPACE. Например, можно указать, что табличное пространство temp02 принадлежит группе tmpgrp2, выполнив следующую команду:

SQL> ALTER TABLESPACE temp02 TABLESPACE GROUP tmpgrp2; 

При этом база данных создаст новую группу по имени tmpgrp2, если такой группы еще не существовало.

Установка группы в качестве табличного пространства по умолчанию для базы данных

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

SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE tmpgrp1;

Приведенный оператор ALTER DATABASE назначает все табличные пространства из группы tmpgrp1 в качестве временных табличных пространств по умолчанию для всей базы данных.

Назначение групп временных табличных пространств при создании или изменении пользователей

Когда вы создаете новых пользователей, вы можете назначать им группы временных табличных пространств вместо одного временного табличного пространства. Вот пример: 

SQL> CREATE USER salapati IDENTIFIED BY sammyy1
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE tmpgrp1;
User created.

Создав пользователя, можно также применить оператор ALTER USER, чтобы изменить группу табличных пространств, которую он будет использовать. Вот оператор SQL,который делает это:

SQL> ALTER USER salapati TEMPORARY TABLESPACE tmpgrp2;

Просмотр информации о группах табличных пространств

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

SQL> SELECT group_name, tablespace_name
FROM dba_tablespace_groups;
GROUP_NAME  TABLESPACE_NAME
----------  ---------------
TMPGRP1     TEMP01
SQL>

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

SQL> SELECT username, temporary_tablespace
FROM dba_users;
USERNAME   TEMPORARY_TABLESPACE
--------   ---------------------
SYS        TEMP
SYSTEM     TEMP
SAM        TMPGRP1
SCOTT      TEMP
. . .
SQL>

 

Вас заинтересует / Intresting for you:

THREADED_EXECUTION в Oracle 12...
THREADED_EXECUTION в Oracle 12... 2035 просмотров Андрей Васенин Thu, 01 Nov 2018, 12:58:50
Как увеличить табличное простр...
Как увеличить табличное простр... 8250 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Как удалить табличное простран...
Как удалить табличное простран... 4192 просмотров Александров Попков Tue, 21 Nov 2017, 13:18:46
Как отключить табличное простр...
Как отключить табличное простр... 2010 просмотров Ольга Потемкина Tue, 21 Nov 2017, 13:18:46
Войдите чтобы комментировать