You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Function App连接Oracle数据库遇ORA-12537错误求助

Azure Function连接Oracle数据库遇到ORA-12537错误的排查方案

问题详情

我有一个基于.NET 6、Azure Functions v4的函数应用,需要连接Oracle数据库,相关配置与代码如下:

.csproj配置

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net6.0</TargetFramework>
    <AzureFunctionsVersion>v4</AzureFunctionsVersion>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.NET.Sdk.Functions" Version="4.1.1" />
    <PackageReference Include="Oracle.ManagedDataAccess.Core" Version="3.21.80" />
    
  </ItemGroup>
  <ItemGroup>
    <None Update="host.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </None>
    <None Update="local.settings.json">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <CopyToPublishDirectory>Never</CopyToPublishDirectory>
    </None>
  </ItemGroup>
</Project>

函数代码

using System;
using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using Microsoft.Extensions.Logging;
using Oracle.ManagedDataAccess.Client;

namespace TestOracleConn
{
    public class TestOracleConn
    {
        [FunctionName("TestOracleConn")]
        public void Run([TimerTrigger("0 */3 * * * *")] TimerInfo myTimer, ILogger log)
        {
            log.LogInformation($"1. C# Timer trigger function executed at: {DateTime.Now}");

            try
            {
                // Connect to Oracle
                string constr = "Data Source=(DESCRIPTION =" +
                                "(ADDRESS = (PROTOCOL = TCP)(HOST = myHost)(PORT = ****))" +
                                "(CONNECT_DATA =" +
                                "(SERVICE_NAME=myServiceName.oraclecloud.com)));" +
                                "User Id=myUser;Password=*****";                
                
                log.LogInformation($"2. before initializing the Oracle connection class");

                OracleConnection con = new OracleConnection(constr);
                log.LogInformation($"3. After initializing Oracle connection BUT before open()");
                con.Open();
 
                // Display Version Number
                log.LogInformation("4. Connected to Oracle " + con.ServerVersion); 
 
                // Close and Dispose OracleConnection
                con.Close();
                con.Dispose();
                
                log.LogInformation($"5. after close");   
            }
            catch (Exception excp)
            {
                log.LogInformation("TestOracleConn Something went wrong " + excp.Message.ToString());
            }
        }
    }
}

错误现象

函数在Azure门户运行时抛出错误:

TestOracleConn Something went wrong ORA-12537: Network Session: End of file

尝试切换到Oracle.DataAccess.Client(来自同一NuGet包)时,出现System.IO.FileLoadException错误。因安全限制无法本地测试,需排查解决。

排查与解决建议

1. 验证网络连通性

  • 确认Azure Function的出站IP已添加到Oracle数据库的访问控制列表(ACL)或安全组中,允许访问目标端口。
  • 若Oracle为云服务(如Oracle Cloud),需检查Azure Function所在区域与Oracle服务区域的网络连通性,必要时配置VNet对等或专用链接。

2. 修正连接字符串

  • 核对HOST、PORT、SERVICE_NAME的拼写与正确性,Oracle Cloud的服务名通常格式为<dbname>_<pdbname>.oraclecloud.com。
  • 尝试使用简化的EZConnect格式替代TNS格式,减少配置复杂度:
    User Id=myUser;Password=*****;Data Source=myHost:****/myServiceName.oraclecloud.com;
    
  • 若密码包含特殊字符,需用双引号包裹或进行转义。

3. 升级Oracle托管驱动版本

当前使用的Oracle.ManagedDataAccess.Core 3.21.80版本较旧,存在与Azure环境的兼容性问题,建议升级到最新稳定版(如3.21.110及以上)。

4. 禁用非托管驱动

Oracle.DataAccess.Client为非托管驱动,依赖本地Oracle客户端组件,无法在Azure Function环境中运行,必须使用纯托管的Oracle.ManagedDataAccess.Client,确保代码中只引用托管版本。

5. 启用详细日志

在host.json中添加Oracle驱动的日志配置,获取连接过程的详细错误信息:

{
  "logging": {
    "logLevel": {
      "Default": "Information",
      "Oracle.ManagedDataAccess.Client": "Debug"
    }
  }
}

部署后查看函数日志,定位具体失败环节。

6. 检查函数运行时模式

若使用进程内模式,尝试切换到隔离模式:

  • 在host.json中添加配置:"functionRuntime": "isolated"
  • 修改.csproj,添加隔离模式依赖包:
    <PackageReference Include="Microsoft.Azure.Functions.Worker" Version="1.19.0" />
    <PackageReference Include="Microsoft.Azure.Functions.Worker.Sdk" Version="1.14.0" />
    

隔离模式可避免部分组件兼容性冲突。


内容的提问来源于stack exchange,提问作者ibda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 05:40:22