Выполнить Oracle скрипт с помощью SqlPlus; go указывать перед обработкой скрипта, если есть какие-либо исключения - PullRequest
0 голосов
/ 10 января 2020

У меня есть много сценариев, которые содержат все виды транзакций, включая сложные DML и DDL.

Мне нужно найти способ запустить их полностью или не выполнять вообще. Я хотел бы видеть следующее поведение: если какая-либо ошибка возникает в середине обработки сценария => go обратно в состояние перед обработкой сценария.

Я думал, что просто поместил бы весь сценарий в один большой транзакции, поместите точку сохранения в начале и выполните откат до точки сохранения в случае любого исключения, но AFAIK это невозможно, поскольку Oracle не поддерживает вложенные транзакции.

Не могли бы вы поделиться своими мыслями об этом деле?

Ответы [ 2 ]

1 голос
/ 10 января 2020

Я не думаю, что есть простое решение для этого, потому что у вас есть DDL в вашем скрипте. DDL выполняет commit перед обработкой, поэтому rollback не поможет.

В качестве альтернативы вы можете использовать параметр флэшбэка Oracle. Но это влияет на всю базу данных. Вы создаете flashback restore point, запускаете сценарий, если какие-либо ошибки произошли, вы возвращаете базу данных для восстановления точки восстановления. Это вернет все изменения во все схемы вашей базы данных. Это хорошо, когда у вас есть отдельная база данных для запуска / тестирования ваших скриптов. Это довольно быстро. База данных должна находиться в режиме архивирования.

Другой вариант - использовать утилиту экспорта / импорта (expdp / impdp). Это также вряд ли автоматизировано в одном скрипте, поэтому вы делаете восстановление вручную. Вы берете дамп экспорта, запускаете сценарий, если какие-либо ошибки произошли - вы восстанавливаете дамп вашей схемы БД, выполняющей impdp.

0 голосов
/ 10 января 2020

Возможно, что вам нужно, это пункт «всякий раз, когда sqlerror выход». Проверьте это здесь из

...