Я думаю, что PL / SQL пытается удалить бесполезные транзакции, чтобы избежать ошибок сеанса. Кажется, что всякий раз, когда вы нажимаете кнопку «Получить последнюю страницу», PL / SQL Developer запускает commit write batch
, если в операторе содержится ссылка на базу данных, если в сеансе в настоящий момент нет открытых транзакций и если в операторе нет FOR UPDATE
.
Это много странных условий, но, похоже, они гарантируют, что программа не выполнит фиксацию, когда не должна. Я предполагаю, что PL / SQL Developer использует commit write batch
, чтобы использовать меньше ресурсов, чем обычный commit
. Это предположение основано на увеличении числа, возвращаемого этим запросом, когда я нажимаю кнопку. (Есть другая статистика для user commits
, и это число не увеличивается.)
select value
from v$mystat
join v$statname on v$mystat.statistic# = v$statname.statistic#
where lower(display_name) = 'commit batch performed';
Это поведение немного странно, но оно может помочь предотвратить некоторые ошибки в сеансе. Например, если вы позже попытаетесь запустить alter session enable parallel dml
, сеанс выдаст ошибку ORA-12841: Cannot alter the session parallel DML state within a transaction
. Совершая (бесполезную) транзакцию, вы избегаете некоторых из этих ошибок.