Я работаю над приложением, которое использует встроенные в Oracle механизмы аутентификации для управления учетными записями пользователей и паролями. Приложение также использует безопасность на уровне строк. По сути, каждый пользователь, который регистрируется через приложение, получает имя пользователя и пароль Oracle вместо обычной записи в таблице «USERS». Пользователи также получают ярлыки на определенных таблицах. Для этого типа функциональности требуется, чтобы во многих случаях выполнялись операторы DML и DDL, но это создает проблему, поскольку операторы DDL выполняют неявные фиксации. Если ошибка произойдет после выполнения инструкции DDL, управление транзакциями не откатит все назад. Например, когда новый пользователь регистрируется в системе, может произойти следующее:
- Начать транзакцию
- Вставка сведений о человеке в таблицу. (то есть имя, фамилия и т. д.) -DML
- Создать учетную запись оракула (создать пользователя testuser, идентифицированного паролем;) -DDL неявная фиксация. Транзакция заканчивается.
- Новая транзакция начинается.
- Выполнение дополнительных DML-проверок (вставки, обновления и т. Д.).
- Произошла ошибка, транзакция возвращается только к шагу 4.
Я понимаю, что приведенная выше логика работает, как задумано, но мне трудно провести модульное тестирование этого типа функциональности и управлять им на уровне доступа к данным. У меня произошел сбой базы данных или произошли ошибки во время модульных тестов, которые привели к загрязнению схемы тестирования данными тестирования, которые должны были быть откатаны. Когда это происходит, достаточно просто стереть схему тестирования, но меня беспокоит сбой базы данных в производственной среде. Я ищу стратегии для управления этим.
Это приложение Java / Spring. Spring обеспечивает управление транзакциями.