DDL упал с ошибкой. Почему ROLLBACK не вернул данные?
DDL упал с ошибкой. Почему ROLLBACK не вернул данные? В Oracle Database 19c неявный COMMIT выполняется перед синтаксически корректным DDL, даже если сам DDL затем завершается ошибкой. Поэтому ошибка изменения схемы не означает откат предыдущего изменения данных. Учебный пример: таблица ddl_demo уже существует, строка id = 1 содержит note = 'до', исходные данные зафиксированы. Autocommit отключён, триггеров и автономных транзакций нет. UPDATE ddl_demo SET note = 'после' WHERE id = 1; CREATE TABLE ddl_demo (id NUMBER); -- Ожидается ORA-00955: имя уже занято. ROLLBACK; Обычный SELECT во второй сессии после этих команд: SELECT note FROM ddl_demo WHERE id = 1; -- Ожидается: после Перед DDL UPDATE уже зафиксирован. Для диагностики сравните видимость данных во второй сессии до DDL и после ошибки: если они видны раньше, проверьте autocommit и явные COMMIT клиента. Не проводите эту проверку в заранее открытой транзакции SERIALIZABLE. Один файл скрипта не равен одной транзакции. Отмечайте точки фиксации и отдельно планируйте изменения данных и схемы, включая восстановление после ошибки. Сохраните эту проверку для учебной практики Oracle: сценарий ошибки так же важен, как успешное выполнение. #Oracle #БазыДанных #УЦФОРС