问题标签 [oracle.manageddataaccess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
256 浏览

c# - .Net Oracle.ManagedDataAccess 异常处理(ORA-00001:违反唯一约束 (x))

我想从我的 .net 应用程序中检测 ORA-0001,该应用程序使用 Oracle.ManagedDataAccess 客户端连接到 Oracle。

当我检查违反约束时引发的 OracleException 的详细信息时,这就是我所看到的;

在此处输入图像描述

除了解析异常的 Message 属性之外,我找不到更好的方法来检测约束违规。

在此处输入图像描述

最好的做法是什么?任何更好,更方便的方法。

PS:我不想为此编写 pl/sql。

谢谢

0 投票
1 回答
425 浏览

oracle - 如何使用 oracle.ManagedDataAccess.EntityFramework 为 19c 数据库选择正确的 oracle.ManagedDataAccess 包版本

在服务器端使用运行时为 19.3.0.0 的 Oracle 数据库。

我有一个需要使用oracle.ManagedDataAccess包连接到该数据库的.NetFW 4.6.1客户端

当我查看包管理器时,我得到了 19c 的oracle.ManagedDataAccess包的多个选项,范围从19.3.0 - 19.8.0(最新稳定版)。

在此处输入图像描述

如何选择正确的版本?

0 投票
0 回答
67 浏览

c# - Oracle .Net ManagedDatabaseAccess CLOB 非常慢

我有两个数据库(10g 和 11g)。我通过 C# 连接到数据库,如下所示:

该表有大约 15000 行,其中平均 CLOB 大小为 10KB。上面的代码每 100 行需要 1 分钟。两个数据库都有同样的问题。

如果我评论“var clob = ...”这一行,那么我会得到非常好的表现。

我试图dbms_lob.substr(clob_field,4000,1) where length(clob_field)<=4000在几秒钟内拆分查询并获得 1-3k 行。但另一部分(剩余 3-4k 行)大约需要 10 分钟。

在 SQLDeveloper 中执行查询会在几秒钟内返回所有数据(每 1000 行不到 1 秒)。

任何人都可以帮助我获得合理的表现吗?

0 投票
0 回答
149 浏览

c# - OracleCommand TimeOut 在 C# 代码中不起作用

我正在尝试通过 Oracle.ManagedDataAccess 库通过 c# 窗口服务使用上述代码执行 db。数据库是Oracle 11g。这里的问题是,即使查询执行时间超过 15 分钟,命令超时也不起作用。请指导如何使它工作?

0 投票
1 回答
411 浏览

oracle - Oracle Managed Data Access Bulk Copy ORA-39776: 加载表时发生致命的 Direct Path API 错误

我们最近开始在我们的应用程序中使用 Oracle.ManagedDataAccess 现在它支持批量复制

尝试复制相当大的表时出现以下错误。

Oracle.ManagedDataAccess.Client.OracleException: 'ORA-39776: 加载表 SFOL.ENTITYTRANSACTIONLOG 的致命直接路径 API 错误

ORA-00600: 内部错误代码, 参数: [klalbfrloc_10], [], [], [], [], [], [], [], [], [], [], []'

数据库是 Oracle 19c,ManagedDataAccess 客户端是 19.10.0

有任何想法吗?

0 投票
0 回答
91 浏览

oracle - Oracle Managed Data Access Bulk Copy Error pasing insert statement for table (virtual columns)

我们最近开始在我们的应用程序中使用 Oracle.ManagedDataAccess,现在它支持批量复制。问题是它似乎很难处理具有非托管客户端没有的虚拟列的表。

Oracle.ManagedDataAccess.Client.OracleException: 'ORA-02373: 解析表 SFOL.BUILDRECORD 的插入语句时出错。

ORA-54013: 不允许对虚拟列执行 INSERT 操作

上面的具体错误似乎表明它不喜欢提供的 DataTable 但 DataTable 明确指定了列并且不包含任何虚拟列。基础表本身确实有虚拟列,但我们没有插入它们。

数据库是 Oracle 19c,ManagedDataAccess 客户端是 19.10.0

有任何想法吗?

0 投票
0 回答
273 浏览

c# - Oracle.ManagedDataAccess.Core 的高内存使用率

我需要一点帮助。

我现在面临 Oracle.ManagedDataAccess.Core 的问题。

我有一个为集中式 oracle 查询Clases.Oracle()(真正的问题是它永远不会释放该内存,如果我再次执行该查询,则会上升到 2GB,这是迄今为止的上限。 诊断工具

我试过添加GC.Collect()GC.WaitForPendingFinalizers()没有结果。

我的命令执行功能Clases.Oracle()是:

我正在使用该using子句,因此对象正在处理。

我用这个函数调用连接:

Clases.Oracle()不需要是一次性的,因为我使用的所有对象都是一次性的,并且正在被处置,以及 ConnectionString 的 2 个字符串和数据库所有者的名称。

这是来自 VS 的内存使用转储 内存使用情况

在 ExecuteReader 完成并返回结果之后很长时间,您可以看到OracleInternal.Common.ZoneValue使用大量内存的 oracle 相关对象 ()。

不知道我是不是做错了什么。

编辑:
我忘记了。这是一个 ASP .Net Core x64 WebAPI,使用 .NET Core 3.1 和 C#,以及 Visual Studio 2019 Enterprise。

Edit2:
我知道它很脏,但是添加它ObtieneAuditoriaUsuarios会使事情变得更好。(在这种情况下,我不关心 CPU 使用率,因为这个数据提取应该每周执行几次,而不是日常操作的一部分):

Edit3:我同时发送了 8 个请求,在某些测试中内存使用量上升到 3GB。但只需要 1 个请求,过滤器返回少于 100 行,内存使用量降至 1GB 以下

内存使用量下降

0 投票
1 回答
34 浏览

c# - Oracle.ManagedDataAccess 是按应用程序还是按服务器池化?

我了解连接池是从连接字符串创建的。

我使用 Oracle.ManagedDataAccess 运行 2 个不同的应用程序,并且都使用相同的连接字符串。我是每个应用程序获得 1 个池还是两者都获得 1 个?

0 投票
0 回答
539 浏览

c# - Oracle 托管数据访问 - ORA-01017

我已经通过各种不同的 SO 帖子和问题试图在这里找到答案,但到目前为止我没有运气,所以我要问是否有人有任何新的帮助。

我的情况:我正在开发一个内置于 Windows Forms 中的胖客户端应用程序(它是一个旧版应用程序,最近以低预算复活,而且生产的跑道真的很短)。

  • Oracle 12.2c 数据库,我没有 DBA 权限。我们的安全要求不允许我们的 DBA 将其更改SEC_CASE_SENSITIVE_LOGONFALSE(意味着它已设置为TRUE并且必须保持不变)。
  • ODP.NET 托管数据访问 DLL 版本 19.11.0,但我也尝试使用 12.2.1100
  • .NET Framework 4.6.2,但我也尝试将 ODP.Net Core 与 .NET Core 3 一起使用,并且遇到了同样的问题
  • 注册表设置Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\FipsAlgorithmPolicyEnabled0,
  • 我尝试在连接字符串中将用户名和密码用引号括起来,但它仍然失败。
  • 如果我使用 ODP.NET 非托管驱动程序,具有完全相同的连接字符串(并且所有其他部分相同),我可以成功连接到 Oracle 12c,但托管驱动程序会导致ORA-01017 - invalid username/password
  • 正如其他帖子中提到的,如果我尝试太多次,我的帐户将被锁定,因此它确实会命中数据库,但会被拒绝。

我尝试过(或被拒绝尝试)的最相关问题/答案: Oracle.ManagedDataAccess 和 ORA-01017:用户名/密码无效;登录被拒绝

我已经尝试了所有可以尝试的方法,但我仍然无法使其正常工作。我真的不希望将 Oracle 客户端作为我的应用程序的依赖项(出于安全原因,它添加了不切实际的文档和验证量<在此处插入眼球>)。

编辑以解决以下评论:

出于安全原因,我不得不严格编辑连接字符串,但它是 EZ Connect 格式。我不打算使用任何 oracle 客户端,但我的笔记本电脑上确实安装了 Oracle 客户端(不是即时客户端),并ORACLE_HOME设置了。我已经按照 Oracle 的 ODP.NET 文档的说明安装了 Oracle.ManagedDataAccess nuget 包。此代码片段在 LINQPad 中运行(因此调用.Dump())。它在调用时引发异常.Open()

我有两个配置完全相同的项目,唯一的区别是Oracle.DataAccess.Clientvs Oracle.ManagedDataAccess.Client,第一个工作。

用于连接的代码如下所示:

抛出的异常是 anOracleException并且消息是ORA-01017: invalid username/password; logon denied。堆栈跟踪如下所示:

在 OracleInternal.ConnectionPool.PoolManager`3.Get(ConnectionString csWithDiffOrNewPwd, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch) at OracleInternal.ConnectionPool.OraclePoolManager.Get(ConnectionString csWithNewPassword, Boolean bGetForApp, CriteriaCtx criteriaCtx, String affinityInstanceName, Boolean bForceMatch)在 OracleInternal.ConnectionPool.OracleConnectionDispenser`3.Get(ConnectionString cs, PM conPM, ConnectionString pmCS, SecureStringsecurePassword, SecureStringsecureProxyPassword, CriteriaCtx criteriaCtx) 在 Oracle.ManagedDataAccess.Client.OracleConnection.Open() 在 UserQuery.Main() 在 System。 System.Threading.ExecutionContext 处的 Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)。Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx) at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state) at System.Threading.ThreadHelper.ThreadStart()

这是在 LINQPad 中转储时的异常。 在此处输入图像描述

0 投票
0 回答
78 浏览

c# - 打开的 Oracle 连接过多

我在 IIS 上运行了一个 .NET Core Web api,我使用 oracle 作为数据库,我确实像这样连接到它。

我没有使用EF左右。我(反)将来自阅读器的数据直接序列化为 json 或 xml 字符串。

我有一个小批处理文件来测试 api。批处理每秒使用 curl 发送一个请求,当我运行批处理文件 5 次以模拟一点流量时,(我知道有一些工具可以做到这一点,但这不是问题)api 已打开 7 个连接到数据库。为什么打开 7 个 db 连接,如何处理它,以便最多同时打开 2 个或 3 个,即使请求必须等待?

我不想“让它工作”,我希望它以正确的方式工作。正因为如此,我现在想,“连接池”是这里的关键字吗?特别是最大池大小,我可以将其设置为 3,还是我忘记设置一些东西,或者什么?