Боже мой! Посмотрите на размер моего временного табличного пространства!
Или ... как уменьшить временные табличные пространства в Oracle.
Да, я выполнил запрос, чтобы увидеть, насколько велика моя временная табличная область:
SQL> SELECT tablespace_name, file_name, bytes
2 FROM dba_temp_files WHERE tablespace_name like 'TEMP%';
TABLESPACE_NAME FILE_NAME BYTES
----------------- -------------------------------- --------------
TEMP /the/full/path/to/temp01.dbf 13,917,200,000
Первый вопрос, который вы должны задать, - почему временное табличное пространство такое большое.
Вы можете знать ответ на это от макушки головы. Это может быть связано с
большой запрос, который вы только что выполнили с сортировкой, которая была ошибкой (я сделал это
более одного раза.) Это может быть связано с некоторыми другими исключительными обстоятельствами. Если это
в этом случае все, что вам нужно сделать, чтобы очистить, это сократить временные
табличное пространство и двигаться дальше в жизни.
Но что, если вы не знаете? Прежде чем вы решите уменьшить, вам может потребоваться сделать некоторые
расследование причин большого табличного пространства. Если это происходит на
на регулярной основе, возможно, вашей базе данных просто нужно столько места.
Динамическое представление производительности
V$TEMPSEG_USAGE
может быть очень полезным при определении причины.
Может быть, вы просто не заботитесь о причине, и вам просто нужно уменьшить ее.
Это твой третий день на работе. Данные в базе данных только 200MiB
если данные и временное табличное пространство 13 ГБ - просто уменьшите их и продолжайте.
Если оно снова вырастет, мы посмотрим на причину. В то же время я
на том диске недостаточно места, и мне просто нужно вернуть его обратно.
Давайте посмотрим на его сокращение. Это будет немного зависеть от того, какая версия
Oracle, с которым вы работаете, и как было настроено временное табличное пространство.
Oracle сделает все возможное, чтобы вы не допустили никаких ужасных ошибок
поэтому мы просто попробуем команды, и если они не будут работать, мы уменьшим
по-новому.
Сначала давайте попробуем сжать файл данных. Если мы сможем сделать это, мы вернемся
пространство, и мы можем беспокоиться о том, почему оно выросло завтра.
SQL>
SQL> alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M;
alter database tempfile '/the/full/path/to/temp01.dbf' resize 256M
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value
В зависимости от сообщения об ошибке вы можете попробовать это с разными размерами
которые меньше, чем текущий сайт файла. Я имел ограниченный
успех с этим. Oracle будет сокращать файл, только если временное табличное пространство
находится в начале файла, и если он меньше, чем размер, который вы
уточнить. В какой-то старой документации Oracle (они исправили это) сказано, что
Вы можете выполнить команду, и сообщение об ошибке скажет вам, что
Размер, который вы могли бы уменьшить. К тому времени, когда я начал работать в качестве администратора, это было
не правда. Вы просто должны были угадать и повторить команду несколько раз
и посмотрим, сработало ли это.
Хорошо. Это не сработало. Как насчет этого?
SQL> alter tablespace YOUR_TEMP_TABLESPACE_NAME shrink space keep 256M;
Если вы в 11 г (может, в 10 г тоже), то это оно! Если это работает, вы можете захотеть
вернуться к предыдущей команде и дать ей еще несколько попыток.
Но что, если это не удастся. Если временное табличное пространство является временным по умолчанию
который был установлен, когда база данных была установлена, то вам может потребоваться сделать
много больше работы. В этот момент я обычно переоцениваю, действительно ли мне это нужно
пространство назад. Ведь дисковое пространство стоит всего $ X.XX ГиБ. Обычно я не хочу
внести изменения, как это во время производства часов. Это значит работать в 2 часа ночи
СНОВА! (Не то чтобы я действительно возражал
работать в 2 часа ночи - это просто так ... Ну, я тоже люблю спать. И моя жена
любит, чтобы я был дома в 2 часа ночи ... не бродил по улицам центра города в 4 часа ночи, пытаясь
вспомнить, где я припарковал машину 3 часа назад. Я слышал об этом "дистанционном управлении"
вещь. Я просто волнуюсь, что я доберусь до половины, а затем и моего подключения к интернету
не удастся - тогда я должен спешить в центр города, чтобы все это исправить, прежде чем люди появятся в
утро использовать базу данных.)
Хорошо ... Вернемся к серьезным вещам ...
Если временное табличное пространство, которое вы хотите сжать, по умолчанию
временное табличное пространство, вам придется сначала создать новый временный
табличное пространство, установите его как временное табличное пространство по умолчанию, затем отбросьте
ваше старое временное табличное пространство по умолчанию и создайте его заново. Послесловие
отбросьте вторую созданную временную таблицу.
SQL> CREATE TEMPORARY TABLESPACE temp2
2 TEMPFILE '/the/full/path/to/temp2_01.dbf' SIZE 5M REUSE
3 AUTOEXTEND ON NEXT 1M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;
Database altered.
SQL> DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
SQL> CREATE TEMPORARY TABLESPACE temp
2 TEMPFILE '/the/full/path/to/temp01.dbf' SIZE 256M REUSE
3 AUTOEXTEND ON NEXT 128M MAXSIZE unlimited
4 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
Tablespace created.
SQL> ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;
Database altered.
SQL> DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
Tablespace dropped.
Надеюсь, одна из этих вещей поможет!