Случайно столкнулся с такой странностью и никак не могу вычитать что-либо по этому вопросу в документации (тем более, что она обширная).
В общем, дело было так:
1. Имеется DATABASE LINK db2
2. Выполнен распределенный запрос: SELECT ... FROM local, remote@db2 WHERE ...;
3. После выборки всех полученных строк сессия остается активной (она создается при запуске приложения и сохраняется до его закрытия).
Выяснилось, что после этих действий остается незавершенная транзакция, которую нужно сбрасывать COMMIT, ROLLBACK или завершением сессии.
Проверял так:
SELECT s.OSUSER || '@' || s.TERMINAL || '(' || s.PROGRAM || ')' ident,
t.START_DATE, t.START_SCN
FROM V$TRANSACTION t, V$SESSION s
WHERE t.SES_ADDR = s.SADDR
ORDER BY t.START_SCNB
А наткнулся совершенно случайно: ALTER TABLESPACE ... READ ONLY долго стоит, легко останавливается и в доке сказано, что ему мешают другие транзакции.
Очень странно это ан фоне утверждения, что все это должно быть transparently...
Или я что-то не понимаю.