共用方式為

排查 Azure 数据工厂 和 Azure Synapse 中的 Oracle 连接器问题

适用于:Azure 数据工厂 Azure Synapse Analytics

本文提供了一些建议,用于排查 Azure 数据工厂 和 Azure Synapse 中常见的 Oracle 连接器问题。

版本 2.0

错误消息:ORA-12650:没有常见的加密或数据完整性算法

  • 症状:遇到以下错误消息: ORA-12650: No common encryption or data integrity algorithm

  • 原因:在协商期间,客户端和服务器未能就常见的加密/数据完整性行为或算法达成一致。 默认客户端配置如下所示:

    • encryptionClient: required
    • encryptionTypesClient: (AES256)
    • cryptoChecksumClient: required
    • cryptoChecksumTypesClient: (SHA512)
  • 建议

    1. 检查服务器端配置,包括 SQLNET。ENCRYPTION_SERVER和 SQLNET。CRYPTO_CHECKSUM_SERVER。 如有需要,请在客户端更新链接服务的其他属性 encryptionClientcryptoChecksumClient 。 请注意,实际行为由客户端和服务器配置之间的协商结果确定,如下所示。

      客户端\服务器 拒绝 接受 要求 必填
      拒绝 关闭 关闭 关闭 连接失败
      接受 关闭 关闭 开启 开启
      要求 关闭 开启 开启 开启
      必填 连接失败 开启 开启 开启
    2. 检查服务器端配置,包括 SQLNET.ENCRYPTION_TYPES_SERVER 和 SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER。 在客户端更新链接服务的其他属性 encryptionTypesClientcryptoChecksumTypesClient,以确保能够在它们之间找到通用算法。 您可以将encryptionTypesClient设置为(AES128, AES192, AES256, 3DES112, 3DES168),将cryptoChecksumTypesClient设置为(SHA1, SHA256, SHA384, SHA512),以包含所有支持的客户端算法。

“十进制精度过大”错误

  • 症状:从 Oracle 复制 NUMBER 类型列时,复制可能会失败,或者写入接收器的数据不能被其他工具进一步使用,因为小数精度太大。

  • 原因:为了避免数据丢失,用于表示 Oracle NUMBER 类型的十进制精度为 256,超过了接收器连接器或下游使用者支持的最大精度。

  • 建议

    使用以下两种方法之一解决此问题:

    • 使用查询,将列显式转换为 BINARY_DOUBLE。 例如:
      SELECT CAST(ColA AS BINARY_DOUBLE) AS ColB FROM TableA.

    • 将链接服务附加属性 supportV1DataTypes 设置为 true,这可确保版本 2.0 使用与版本 1.0 相同的数据类型映射。

错误消息:ORA-00933:SQL 命令未正确结束

  • 症状:遇到以下错误消息: ORA-00933: SQL command not properly ended

  • 原因:当前 Oracle 版本 2.0 不支持以分号结尾的查询。

  • 建议:删除查询末尾的分号。

版本 1.0

错误代码:ArgumentOutOfRangeException

  • 消息:

  • 原因:在 Azure 数据工厂和 Synapse 管道中,支持从 0001-01-01 00:00:00 到 9999-12-31 23:59:59 范围内的日期时间值。 但是,Oracle 支持范围更广的日期时间值(例如公元前世纪或 min/sec>59),这会导致失败。

  • 建议

    若要查看 Oracle 中的值是否处于支持的日期范围内,请运行 select dump(<column name>)

    若要了解结果中的字节序列,请参阅如何在 Oracle 中存储日期?

使用自承载集成运行时版本 5.36.8726.3 或更高版本时添加安全算法

  • 症状:使用自承载集成运行时版本 5.36.8726.3 或更高版本时,将遇到以下错误消息:[Oracle]ORA-12650: No common encryption or data integrity algorithm

  • 原因:安全算法未添加到 Oracle 服务器。

  • 建议:如果尚未包含这些安全算法,请更新 Oracle 服务器设置以添加它们

    • 对于“SQLNET.ENCRYPTION_TYPES_SERVER”,需要添加以下被 OpenSSL 视为安全且将用于 OAS(Oracle 高级安全性)加密的算法

      • AES256
      • AES192
      • 3DES168
      • AES128
      • 3DES112
      • DES
    • 对于“SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER”,需要添加以下被 OpenSSL 视为安全且将用于 OAS(Oracle 高级安全性)数据完整性的算法

      • SHA256
      • SHA384
      • SHA512

      注意

      推荐的数据完整性算法 SHA256、SHA384 和 SHA512 可用于 Oracle 19c 或更高版本。

错误代码:UserErrorFailedToConnectOdbcSource

有三条与此错误代码关联的错误消息。 检查每条错误信息的相应原因和建议。

  • 消息:

  • 原因truststore 不适用于 OpenSSL 3.0,因为 truststore 文件是使用 RC4、MD5 和 SHA1 等弱密码生成的。

  • 建议:需要使用 AES256 等强密码重新创建 truststore。 有关使用 设置 TLS 连接的详细信息,请参阅此truststore


  • 消息
    SSL Handshake Failure reason[Unknown SSL Error]
    SSL Handshake Failure reason [error:OA000410:SSL routines::sslv3 alert handshake failure]

  • 原因:服务器未配置为使用强密码进行 SSL 通信。 OpenSSL 3.0 应使用 TLS 1.0 及更高版本,因为它已弃用 SSL 协议版本。 例如,服务器可能会接受与版本在 TLS 1.0 之前的 TLS 协议的连接。

  • 建议:修改服务器配置以使用更强大的 TLS 版本。


  • 消息:

  • 原因:CryptoProtocolVersion 设置为将弃用的 TLS 协议版本与 OpenSSL 3.0 配合使用。

  • 建议:指定连接字符串属性 CryptoProtocolVersion=TLSv1.2

尝试通过以下资源获得故障排除方面的更多帮助: