如何在 SQL Server 上的 Flyway 中禁用单个迁移的事务
Posted
技术标签:
【中文标题】如何在 SQL Server 上的 Flyway 中禁用单个迁移的事务【英文标题】:How to disable transactions for individual migrations in Flyway on SQL Server 【发布时间】:2020-03-18 17:09:12 【问题描述】:我的 Flyway 迁移在 Flyway Community Edition 6.0.8 中失败并出现以下错误:
The procedure 'sys.sp_grantdbaccess' cannot be executed within a transaction.
我原来的迁移脚本是:
EXEC sp_grantdbaccess 'foo', 'bar'
我尝试将它作为动态 SQL 运行,但遇到了同样的问题:
exec('EXEC sp_grantdbaccess N''foo'', N''bar''')
我还尝试了 flyway migrate 命令行上的 -mixed=true 选项以允许运行事务性和非事务性迁移,但我收到了同样的错误。
可以在每次迁移的基础上禁用事务吗?甚至是整个“迁移”操作?如果这些都不是选项,那么迁移脚本本身是否有办法在不遇到事务限制的情况下影响相关更改?
这不是 Is there any way to disable flyway SQL migration from the transaction 的副本,原因如下:
-
不同的 SQL 操作发生错误。
有问题的行为似乎已在 Flyway 的早期版本中得到解决,但此操作仍在发生。
【问题讨论】:
不确定 FlyAway 或这里的上下文,所以我可能离题了....但是你能不设置事务隔离级别吗? docs.microsoft.com/en-us/sql/t-sql/statements/… 【参考方案1】:本周发布的 Flyway 6.1 中添加了将单个脚本配置为(不)在事务中运行的功能:https://flywaydb.org/documentation/migrations#manual-override
【讨论】:
以上是关于如何在 SQL Server 上的 Flyway 中禁用单个迁移的事务的主要内容,如果未能解决你的问题,请参考以下文章
Flyway:如何在 flyway 创建 flyway_schema_history 之前创建 SQL Server 数据库
如何在多架构 MS SQL Server 环境中使用 Flyway?