Oracle SQL*Plus 中的 session 出来后回滚
Rollback after coming out of the session in Oracle SQL*Plus
我正在编写包装器 shell 或 perl 脚本,它确实使用 sqlplus 打开 oracle session,然后通过扫描目录执行一些 sql 文件。因此,作为其中的一部分,假设我们在一个目录中有多个 sql 文件,
例如:first.sql、second.sql、third.sql
我打算创建一个包含以下内容的文件 (AllSqlFilesInDirectory.sql
)。
>cat AllSqlFilesInDirectory.sql
@first.sql
@second.sql
@third.sql
>
现在我打算通过打开 oracle sqlplus session 来 运行 文件 AllSqlFilesInDirectory.sql。
执行后,我打算从oracle sqlplus session 中出来,我打算在日志文件中搜索任何错误。
如果有任何错误,我想执行回滚。但我认为,因为我不在 sqlplus session 范围内,所以回滚是不可能的。我只关心作为目录中多个 sql 文件的一部分执行的 DML 语句。
所以我有这些疑惑
- 我可以简单地忽略而不关心回滚吗
- 我可以为已经关闭的 session 执行回滚吗?
- 如果以上都成立,那怎么办呢?
- Can I simply ignore and not be concerned about rollback at all
这是您必须回答的业务问题。如果您希望在出现错误时回滚更改,则需要进行回滚。
- Can I do the rollback for a session which was already closed?
实际上,可能不会。从技术上讲,您可以使用 flashback transaction backout,但这通常比您通常想要处理的复杂得多。
- If above is valid, then how can do it?
与其写入日志文件并解析日志文件以确定是否存在任何错误,更简单的做法是简单地输入一个
whenever sqlerror exit rollback
在脚本的顶部。这告诉 SQL*Plus 在遇到错误时回滚事务并退出。您不必编写逻辑来解析日志文件。
我正在编写包装器 shell 或 perl 脚本,它确实使用 sqlplus 打开 oracle session,然后通过扫描目录执行一些 sql 文件。因此,作为其中的一部分,假设我们在一个目录中有多个 sql 文件,
例如:first.sql、second.sql、third.sql
我打算创建一个包含以下内容的文件 (AllSqlFilesInDirectory.sql
)。
>cat AllSqlFilesInDirectory.sql
@first.sql
@second.sql
@third.sql
>
现在我打算通过打开 oracle sqlplus session 来 运行 文件 AllSqlFilesInDirectory.sql。 执行后,我打算从oracle sqlplus session 中出来,我打算在日志文件中搜索任何错误。 如果有任何错误,我想执行回滚。但我认为,因为我不在 sqlplus session 范围内,所以回滚是不可能的。我只关心作为目录中多个 sql 文件的一部分执行的 DML 语句。 所以我有这些疑惑
- 我可以简单地忽略而不关心回滚吗
- 我可以为已经关闭的 session 执行回滚吗?
- 如果以上都成立,那怎么办呢?
- Can I simply ignore and not be concerned about rollback at all
这是您必须回答的业务问题。如果您希望在出现错误时回滚更改,则需要进行回滚。
- Can I do the rollback for a session which was already closed?
实际上,可能不会。从技术上讲,您可以使用 flashback transaction backout,但这通常比您通常想要处理的复杂得多。
- If above is valid, then how can do it?
与其写入日志文件并解析日志文件以确定是否存在任何错误,更简单的做法是简单地输入一个
whenever sqlerror exit rollback
在脚本的顶部。这告诉 SQL*Plus 在遇到错误时回滚事务并退出。您不必编写逻辑来解析日志文件。