2010-04-21 6 views
3

У меня есть глобальная таблица темп, которая устанавливается как delete при фиксации. Как он относится к проблеме параллелизма? Я имею в виду, что произойдет, если другой сеанс захочет использовать эту глобальную временную таблицу? Ответ, вероятно, не будет «они имеют одни и те же данные».Глобальная временная таблица Параллельность

Теперь, если моя догадка правильная :), является ли таблица заблокированной до тех пор, пока не произойдет первое соединение, или не создаст dbms глобальную таблицу темп для каждого соединения? (Что-то вроде экземпляра таблицы?)

ответ

7

От documentation:

Данные во временной таблице видно только сессии, которая вставляет данные в таблицу.

Каждая сессия будет иметь свою логическую копию временной таблицы.

Поскольку вы не можете видеть данные других сессий, и поскольку Oracle имеет дело с блокировками на уровне строк, вы не можете быть заблокированы DML других сессий. Параллельный DML (Insert, Delete, Update) не влияет на другие сеансы.

только DDL потребуется блокировка таблицы (например: ALTER TABLE ...)

+0

Я заинтересован в этом вопросе - вы говорите, что глобальные временные таблицы не являются хорошим способом заблокировать набор строк? Если у меня есть два потока, которые должны работать с списком записей, заданных определенное время, могут ли глобальные таблицы temp помогать каждому потоку захватывать раздел этого списка записей без перекрытия? – Dirk

+1

@michael: каждый поток будет иметь свой сеанс (или они не могут работать параллельно), поэтому они не будут видеть временные данные друг друга. Только таблицы Temp не позволят вам блокировать строки без перекрытия, вам понадобятся другие функции. См. [Ваш вопрос] (http://stackoverflow.com/q/5907003/119634). –

Смежные вопросы