Как сжать временную табличную область в oracle? - PullRequest
31 голосов
/ 01 декабря 2009

Как мы можем уменьшить временное табличное пространство в Oracle? И почему он так сильно увеличивается, как до 25 ГБ, поскольку в базе данных только одна схема для приложения, а размер табличного пространства данных составляет 2 ГБ, а размер табличного пространства индекса равен 1 ГБ.

Ответы [ 7 ]

101 голосов
/ 10 декабря 2009

Боже мой! Посмотрите на размер моего временного табличного пространства! Или ... как уменьшить временные табличные пространства в 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.

Надеюсь, одна из этих вещей поможет!

6 голосов
/ 01 декабря 2009

Опции для управления табличными пространствами стали намного лучше по сравнению с версиями, начиная с 8i. Это особенно верно, если вы используете файлы соответствующих типов для временного табличного пространства (то есть локально управляемых временных файлов).

Итак, это может быть так же просто, как эта команда, которая сократит ваше табличное пространство до 128 мегабайт ...

alter tablespace <your_temp_ts> shrink space keep 128M;

Онлайн-документация Oracle довольно хорошая. Узнайте больше.

редактировать

Казалось бы, у ОП есть более ранняя версия базы данных. В более ранних версиях мы должны изменить размеры отдельных файлов данных. Итак, прежде всего, найдите имена файлов. Один или другой из этих запросов должен сделать это ...

select file_name from dba_data_files where tablespace_name = '<your_temp_ts>'
/

select file_name from dba_temp_files where tablespace_name = '<your_temp_ts>'
/ 

Затем используйте этот путь в этой команде:

alter database datafile '/full/file/path/temp01.dbf'  resize 128m
/
2 голосов
/ 01 декабря 2009

Вы должны были написать, какую версию Oracle вы используете. Скорее всего, вы используете что-то другое, чем Oracle 11g, поэтому вы не можете уменьшить временное табличное пространство.

Альтернативы:

1) alter database tempfile '[your_file]' resize 128M;, что, вероятно, не удастся
2) Удалите и заново создайте табличное пространство. Если временное табличное пространство, которое вы хотите сжать, является временным табличным пространством по умолчанию, вам, возможно, придется сначала создать новое временное табличное пространство, установить его в качестве временного табличного пространства по умолчанию, а затем удалить старое временное табличное пространство по умолчанию и заново создать его. После этого удалите вторую созданную временную таблицу. 3) Для Oracle 9i и выше вы можете просто удалить временные файлы и добавить новые

Все описано здесь очень подробно.


См. Ссылку: http://databaseguide.blogspot.com/2008/06/resizing-temporary-tablespace.html
Это уже было связано, но, может быть, вы пропустили это, так что это снова.

1 голос
/ 01 декабря 2009

Это будет увеличиваться, потому что вам понадобится место для временного хранения, возможно, из-за декартового произведения или большой операции сортировки.

Динамическое представление производительности V$TEMPSEG_USAGE поможет диагностировать причину.

0 голосов
/ 20 декабря 2018

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

Шаги для сокращения табличного пространства TEMP

0 голосов
/ 03 апреля 2014

Я не беспокоюсь о том, чтобы сбросить альтернативную температуру на случай, если в будущем мне понадобится восстановить память ...

  1. из группы временного режима установить по умолчанию в автономный режим
  2. подождите немного, затем измените размер членов временной группы
  3. установить значение по умолчанию обратно в временную группу
  4. Подожди немного, измени размер. нет спешки, чтобы сделать последний шаг
0 голосов
/ 01 декабря 2009
alter database datafile  'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M;

Если это не поможет:

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