CREATE TEMPORARY TABLESPACE ts_tmp
TEMPFILE 'E:\temp01.dbf' SIZE 10000M
REUSE AUTOEXTEND ON EXTENT MANAGEMENT LOCAL;
Это создает временное табличное пространство (область на диске, где будут сохранены промежуточные результаты сортировки). Индекс представляет собой отсортированный набор данных, и сортировка требует большого количества пространства.
«Временное» означает, что хранящиеся данные являются временными по своей природе, а не тем, что пространство таблиц является временным. Подумайте об этом как /tmp
в Unix
или %TEMP%
, сложенном в Windows
: сам каталог/папка является постоянным, но хранящиеся в нем данные являются временными.
REUSE
означает, что файл не существует, если файл уже существует (обычно используется, когда имя файла указывает на необработанное устройство, например, неформатированный раздел диска, чтобы избежать накладных расходов на управление файлами) OS
. Вместо этого он просто откроет файл для записи и заполнит его новыми данными. Если не для этого предложения, команда будет терпеть неудачу, если файл с указанным именем существует.
AUTOEXTEND ON
означает «при необходимости произрасти файл». Если вы отключите его и 10Gb
будет недостаточно для операции сортировки, табличное пространство не будет автоматически расти, и операция завершится неудачно.
EXTENT MANAGEMENT LOCAL
означает, что расположение табличного пространства сохраняется в самом табличном пространстве (не в системных таблицах). Не уверен насчет 11g
, но в предыдущих версиях Oracle
этот параметр не был доступен для временных табличных пространств.
ALTER USER me TEMPORARY TABLESPACE ts_tmp;
Это делает пользователь me
использовать вновь созданную временную табличную в качестве временной среды хранения
CREATE UNIQUE INDEX big_table_idx ON big_table (record_id);
Это просто создает индекс.
DROP TABLESPACE ts_tmp;
Это отбрасывает временное табличное пространство.
Перед запуском скрипта, выяснить текущее табличного значения по умолчанию:
SELECT temporary_tablespace
FROM dba_users
WHERE username = 'ME'
Скорее всего, это будет возвращать TEMP
.
Перед отбрасыванием ts_tmp
, восстановить временный по умолчанию табличного пространства для пользователя:
ALTER USER me TEMPORARY TABLESPACE temp; -- or whatever the previous query returned.
Спасибо, но ... Не могли бы вы взглянуть на ссылку руководства DBA и посмотреть, правильно ли я ее реализовал? Я надеялся, что объясню исходный материал, а не то, что я написал. – Rudiger
'@ Rudiger': в основном, все это просто гарантирует, что у вас будет достаточно места на диске для создания индекса. Да, вы внедрили это правильно, за исключением предложения 'EXTENT MANAGEMENT', о котором я не уверен. Если код не вызывает ошибок, то это нормально. Единственное, что вы пропустили, это то, что вам нужно будет вернуть табличное пространство пользователя по умолчанию до предыдущего значения, прежде чем вы уроните вновь созданный. – Quassnoi
Что такое инструкция 'ALTER USER', которая возвращает мое временное табличное пространство в исходное временное табличное пространство? – Rudiger