Как уменьшить временную табличную область в оракуле?

Я знаком с Java, а не C#, но почему земля Вы хотели бы члена парламента, не занимающего официального поста в интерфейсе? Это не могло иметь никакой реализации и будет невидимо для классов с реализацией, быть бесполезным - также. Интерфейсы существуют для определения поведения. Если Вам нужно поведение по умолчанию, чем использование абстрактный класс.

33
задан APC 1 December 2009 в 07:58
поделиться

5 ответов

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

может быть очень полезным для определения причины.

Может быть, вам просто наплевать на причину, и вам просто нужно уменьшить ее. Это твой третий рабочий день. Объем данных в базе данных составляет всего 200 МБ если размер данных и временного табличного пространства составляет 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;

Если вы в 11g (Maybee в 10g тоже), вот и все! Если это сработает, вы можете захотеть чтобы вернуться к предыдущей команде и дать ей еще несколько попыток.

Но что, если это не удастся. Если временное табличное пространство является временным по умолчанию который был настроен при установке базы данных, тогда вам может потребоваться выполнить побольше работы. На этом этапе я обычно пересматриваю, действительно ли мне это нужно. пространство назад. В конце концов, дисковое пространство стоит всего $ 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.

Надеюсь, что-нибудь из этого поможет!

104
ответ дан 27 November 2019 в 17:30
поделиться

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

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

alter tablespace <your_temp_ts> shrink space keep 128M;

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

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

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

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
/
6
ответ дан 27 November 2019 в 17:30
поделиться

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

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

1
ответ дан 27 November 2019 в 17:30
поделиться

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

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

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

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


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

2
ответ дан 27 November 2019 в 17:30
поделиться
alter database datafile  'C:\ORA_SERVER\ORADATA\AXAPTA\AX_DATA.ORA' resize 40M;

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

  • Создать новое табличное пространство
  • Переключиться на новое временное табличное пространство
  • Подождать, пока старое табличное пространство не будет использоваться
  • Удалить старое табличное пространство
0
ответ дан 27 November 2019 в 17:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: