oracle 用户在 EF6 Code First 中创建数据库和执行挂起迁移的最低权限是啥
Posted
技术标签:
【中文标题】oracle 用户在 EF6 Code First 中创建数据库和执行挂起迁移的最低权限是啥【英文标题】:What are the minimum privileges of oracle user to create database and execure pending migrations in EF6 Code Firstoracle 用户在 EF6 Code First 中创建数据库和执行挂起迁移的最低权限是什么 【发布时间】:2019-09-30 07:11:34 【问题描述】:在使用 EF6 代码首先使用 ORACLE 迁移更新数据库时会出现这样的错误。
ORA-00604 : 在递归 SQL 级别 1 发生错误\nORA-06519: 检测到活动的自主事务并回滚\nORA-065212 "
同样的操作在我们的开发服务器上运行良好。但在我们的客户服务器中它不起作用。
我对用户权限有疑问。
我们开发服务器中的用户 授予角色 => 连接(授予,默认),DBA(授予,默认) 系统权限 => 无限表空间(已授予)
用户在客户服务器中的特权 授予角色 => 连接(默认),资源(默认) 系统权限 => UNLIMITED TABLESPACE()
我在互联网上搜索但我找不到任何东西,在 EF 6 代码中首先为 oracle 创建数据库和更新挂起迁移的最低用户权限是什么
【问题讨论】:
这取决于what you do,您是否:1) 简单地填充现有表,2) 创建新表,3) 更改现有表,4) 删除现有表,5) 添加外键,6 ) 创建新数据库?在某些情况下,有人可能会在迁移时生成函数/过程。 我可以在服务器上手动执行此操作,但是 db update 给出错误你能提供什么吗? 【参考方案1】:这是错误堆栈中的相关行:
ORA-06519:检测到活动的自主事务并回滚。
这是一个设计问题,与权限无关。
在您的代码中的某处,您在没有 COMMIT 或 ROLLBACK 的程序单元中定义了 pragma autonomous_transaction
。自治事务不能运行超过程序单元的末尾,因此必须在此之前提交(或回滚)。如果程序流到达单元末尾而没有提交 Oracle 会抛出 ORA-06519。
解决方案是梳理您的代码,找到自治事务并删除它或添加必要的提交。哪个选项正确取决于您尝试实现的业务逻辑。我发现pragma autonomous_transaction
往往被滥用为损坏数据模型或有缺陷的业务逻辑的杂物。除非您正在记录或审核,否则更好的解决方案可能是删除。
【讨论】:
感谢您的回答,但我测试了“Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production”和“Oracle Database 18c Express Edition Release 18.0.0.0.0 - Production”的相同操作“它没有问题。我们的客户使用的是 11.2.0.4.0 版本 我只能告诉您您发布的错误堆栈的原因。也许您的客户拥有与您正在运行的不同版本的数据库代码?也许您发布的错误不是真正的错误,您需要再次搜索日志?以上是关于oracle 用户在 EF6 Code First 中创建数据库和执行挂起迁移的最低权限是啥的主要内容,如果未能解决你的问题,请参考以下文章
C# Mysql EF6 Code First System.ComponentModel.Win32Exception 文件未找到