问题标签 [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.
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 秒)。
任何人都可以帮助我获得合理的表现吗?
c# - OracleCommand TimeOut 在 C# 代码中不起作用
我正在尝试通过 Oracle.ManagedDataAccess 库通过 c# 窗口服务使用上述代码执行 db。数据库是Oracle 11g。这里的问题是,即使查询执行时间超过 15 分钟,命令超时也不起作用。请指导如何使它工作?
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
有任何想法吗?
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
有任何想法吗?
c# - Oracle.ManagedDataAccess.Core 的高内存使用率
我需要一点帮助。
我现在面临 Oracle.ManagedDataAccess.Core 的问题。
我有一个为集中式 oracle 查询Clases.Oracle()
(真正的问题是它永远不会释放该内存,如果我再次执行该查询,则会上升到 2GB,这是迄今为止的上限。
我试过添加GC.Collect()
但GC.WaitForPendingFinalizers()
没有结果。
我的命令执行功能Clases.Oracle()
是:
我正在使用该using
子句,因此对象正在处理。
我用这个函数调用连接:
Clases.Oracle()
不需要是一次性的,因为我使用的所有对象都是一次性的,并且正在被处置,以及 ConnectionString 的 2 个字符串和数据库所有者的名称。
在 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 以下
c# - Oracle.ManagedDataAccess 是按应用程序还是按服务器池化?
我了解连接池是从连接字符串创建的。
我使用 Oracle.ManagedDataAccess 运行 2 个不同的应用程序,并且都使用相同的连接字符串。我是每个应用程序获得 1 个池还是两者都获得 1 个?
c# - Oracle 托管数据访问 - ORA-01017
我已经通过各种不同的 SO 帖子和问题试图在这里找到答案,但到目前为止我没有运气,所以我要问是否有人有任何新的帮助。
我的情况:我正在开发一个内置于 Windows Forms 中的胖客户端应用程序(它是一个旧版应用程序,最近以低预算复活,而且生产的跑道真的很短)。
- Oracle 12.2c 数据库,我没有 DBA 权限。我们的安全要求不允许我们的 DBA 将其更改
SEC_CASE_SENSITIVE_LOGON
为FALSE
(意味着它已设置为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\FipsAlgorithmPolicy
为Enabled
0, - 我尝试在连接字符串中将用户名和密码用引号括起来,但它仍然失败。
- 如果我使用 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.Client
vs 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()
c# - 打开的 Oracle 连接过多
我在 IIS 上运行了一个 .NET Core Web api,我使用 oracle 作为数据库,我确实像这样连接到它。
我没有使用EF左右。我(反)将来自阅读器的数据直接序列化为 json 或 xml 字符串。
我有一个小批处理文件来测试 api。批处理每秒使用 curl 发送一个请求,当我运行批处理文件 5 次以模拟一点流量时,(我知道有一些工具可以做到这一点,但这不是问题)api 已打开 7 个连接到数据库。为什么打开 7 个 db 连接,如何处理它,以便最多同时打开 2 个或 3 个,即使请求必须等待?
我不想“让它工作”,我希望它以正确的方式工作。正因为如此,我现在想,“连接池”是这里的关键字吗?特别是最大池大小,我可以将其设置为 3,还是我忘记设置一些东西,或者什么?