Мне нужно запустить запрос на создание таблицы, каждый раз, когда это занимает более полутора часов, а затем отображается сообщение об ошибке, например ora_01652: невозможно расширить временный сегмент на 8192 в табличном пространстве xyz, как я могу это исправить?
как исправить ora-01652
Ответы (2)
Во-первых, вы можете alter session set resumable_timeout = 86400
. Это приостановит выполнение запроса вместо того, чтобы позволить ему просто потерпеть неудачу, давая вам время посмотреть на ситуацию, пока это происходит. Как упомянул @davek, вам может понадобиться где-то добавить место. И вам нужно выяснить, почему он использует так много места.
Временное табличное пространство используется в основном для сортировки и хэширования данных. Например, если вы сортируете или хэшируете таблицу размером 50 ГБ, вам потребуется около 50 ГБ временного табличного пространства. Как предположил @tbone, у действительно плохого запроса или плана выполнения может быть перекрестное соединение, которое пытается создать массивный набор результатов, который не поместится ни на одном диске. Убедитесь, что ваши соединения верны, а план выполнения выглядит разумным. Некоторые вещи, которые нужно искать, это MERGE JOIN (CARTESIAN)
или, возможно, есть некоторые фильтры, которые применяются после хэширования или сортировки, а не до. Повторный сбор статистики обычно является хорошим первым шагом, если план плохой.
Если запрос и план в порядке, но вам просто не хватает места, вам нужно как-то разбить запрос. Это может быть несколько вставок вместо одной CTAS. Разбиение запросов обычно является плохой идеей, но необходимо в некоторых редких случаях, когда ресурсы ограничены. Или вы можете рассмотреть возможность использования соединения по разделам чтобы уменьшить требуемое пространство.
Либо ваш диск заполнен (или почти заполнен), либо у вас нет разрешения на расширение соответствующего табличного пространства.