Когда будут удалены данные в временной таблице сеанса Oracle?

Я прочитал, что в сессионных таблицах данные сохраняются в процессе фиксации. На словах Спросить Tom.

ON COMMIT PRESERVE ROWS делает это временным сеансом Таблица. строки будут оставаться в этой таблице до выхода из системы. Только я вижу их, хотя ни одна другая сессия никогда не увидит "мои" строки даже после того, как я совершают

Проблемная фраза для меня здесь "до выхода". Возьмем случай с веб-приложением, которое поддерживает одно соединение с БД. Таким образом, это означает, что все пользователи, зарегистрированные в веб-приложении, будут совместно использовать один и тот же сеанс БД. Итак, означает ли это, что все пользователи будут видеть один и тот же контент во временной таблице?

В практическом веб-приложении обычно мы поддерживаем несколько соединений с БД. Эти соединения поддерживаются в "пуле", и они используются повторно для многих пользователей. В этом случае поведение может быть довольно неустойчивым, и пользователь может просматривать данные, заполненные последним пользователем.

Ответ 1

Именно поэтому Oracle предоставляет опцию ON ON COMMIT DELETE ROWS.

Данные в глобальных временных таблицах могут иметь область сеанса (т.е. ON COMMIT PRESERVE ROWS) или область транзакции (ON COMMIT DELETE ROWS).

Очевидно, что в случае объединения пула соединений и общих серверов/общих сеансов вам понадобится область транзакций (ON COMMIT DELETE ROWS).

Надеюсь, что это поможет.