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.