【问题标题】:Error "no sqljdbc_auth in java.library.path" installing TeamCity on Windows Server 2012在 Windows Server 2012 上安装 TeamCity 时出现错误“java.library.path 中没有 sqljdbc_auth”
【发布时间】:2015-10-17 08:38:00
【问题描述】:

我正在 Windows 2012 服务器上安装 TeamCity。我在数据库连接设置屏幕,但收到此错误。

“执行时出现 SQL 错误:从数据源获取连接:java.library.path 中没有 sqljdbc_auth”

我已将sqljdbc_auth.dll 复制到C:\Windows\System32 文件夹,并添加了指向该文件夹的系统环境变量java.library.path

【问题讨论】:

    标签: java windows teamcity windows-server-2012


    【解决方案1】:

    即使您在 64 位平台上,Teamcity 也会安装 32 位版本,除非您故意使用 64 位。因此,我将向您提供有关使用 Windows 身份验证和 Teamcity SQL 数据库设置的 32 位说明。 64位设置的说明相同,只需将x86更改为x64

    1. 在 SQL Server 中创建一个空数据库
    2. 确保在 TeamCity 服务上配置的 Windows 帐户可以访问数据库
    3. 复制sqljdbc42.jar到<TeamCity_data_dir>\lib\jdbc\sqljdbc42.jar
    4. auth\x86\sqljdbc_auth.dll 从 Microsoft 下载复制到 <TeamCity_data_dir>\lib\sqljdbc_auth.dll
    5. 打开系统 > 高级系统设置 > 环境变量并添加系统变量 TEAMCITY_SERVER_OPTS 设置为值 -Djava.library.path=<TeamCity_data_dir>\lib 或运行 setx TEAMCITY_SERVER_OPTS=-Djava.library.path=<TeamCity_data_dir>\lib
    6. 在所有对话框中单击“确定”并重新启动 Teamcity 服务。

    现在您可以使用 Windows 身份验证将 Teamcity 连接到 SQL 服务器,之后向导将创建数据库。

    编辑:2020 年 1 月 27 日

    随着 2019.2.1 更新,我不得不将 sql_jdbcauth.dll 文件移动到 <TeamCity_data_dir>\system\caches\jdbc\native\windows-i386 这可能只是升级过程中的一个错误。

    【讨论】:

    • 这应该是 TeamCity 说明的编写方式,而不是他们当前的文档,这让我无处可去。非常感谢这个答案
    • 第 5 步令人困惑。 Server 2016 有一个改进的对话框,要求您将变量名称和变量值分开。正确的变量名是TEAMCITY_SERVER_OPTS,正确的变量值是-Djava.library.path=<TeamCity_data_dir>\lib,当然用<TeamCity_data_dir>代替你实际的teamcity数据目录路径。
    【解决方案2】:

    这个

    http://www.mikeobrien.net/blog/teamcity-sqlserver-integrated-security

    帮了我。

    我使用的是 JDBC 4.1 版本。

    【讨论】:

    • 我投了赞成票,因为它对我有很大帮助 - 但我建议在链接旁边添加更多信息。全部总结为:用x64 jre替换TC jre。
    • 或者,如果您在 32 位上运行,只需将 x86 版本的 sqljdbc_auth.dll(来自 jdbc 下载)放入 <TeamCityProgramDir>\bin
    • @BrianLacy 这是唯一对我有用的东西,谢谢。您应该将其添加为答案。
    【解决方案3】:

    在数据库配置设置期间,我设法通过使用 SQL Server 身份验证而不是 Windows 身份验证解决了这个问题。不知道为什么这应该修复与 Java 环境变量相关的错误,但我只能假设该错误是由于无法登录数据库而产生的,并且由于某种原因引发了一个不相关的错误。

    这似乎是 TeamCity 抛出错误消息的错误。如果您收到此错误,请尝试切换到 SQL Server 身份验证。

    【讨论】:

    • Windows 身份验证具有特定的配置要求 - 访问 Microsoft 提供的 DLL 以支持它。正常的 SQL 身份验证不需要这个。看我的回答。
    • 您必须提供 dll 的路径-Djava.library.path=path/to/dll,请在此处阅读更多内容stackoverflow.com/a/50115530/6655459
    • 从 Windows 身份验证切换到 SQL Server 身份验证只是为了修复文件未找到错误就像使用大炮杀死蚊子一样
    【解决方案4】:

    如果您在 32 位上运行,您只需将 x86 版本的 sqljdbc_auth.dll(从 jdbc 下载)复制到 <TeamCityProgramDir>\bin

    【讨论】:

    • 这在迁移步骤中对我有用。但是之后运行 TeamCity 时,仍然找不到该文件。所以我最终将文件复制到TeamCityProgramDir\binTeamCityProgramDir\lib,现在一切都很好。
    • 这应该是答案!
    • bin 文件夹中的文件在 TeamCity 自动更新期间被移动:[2019-03-19 16:18:14,375] 信息 - jetbrains.buildServer.UPDATE - 移动 C:\TeamCity \bin\sqljdbc_auth.dll 到 .old
    【解决方案5】:

    您应该检查您的 TeamCity 服务器日志。我的(位于c:\TeamCity\logs\teamcity-server.log)提到以下内容:

    [2019-03-20 07:54:56,045] 信息 - jetbrains.buildServer.STARTUP - 在 E:\BuildServer\lib\jdbc\native\windows-i386 或 E: 下找不到本机库 sqljdbc_auth.dll: \BuildServer\lib\jdbc\native;将继续查找 sun.boot.library.path 和 java.library.path。

    在将sqljdbc_auth.dll 库放入E:\BuildServer\lib\jdbc\native\windows-i386 并重新启动服务后,一切都很好,花花公子;无需干预bin 文件夹(它们在 TC 升级期间被重置)或不必定义环境变量。

    【讨论】:

      【解决方案6】:

      在我的情况下,它不起作用,因为以前安装和版本 TeamCity 安装了一些文件。我卸载了 TeamCity,删除了所有 TeamCity 文件夹并重新安装。然后它就像一个魅力。

      【讨论】:

        【解决方案7】:

        我今天在使用捆绑 Java 的 TeamCity 10.x 时遇到了这个问题,我想将现有的内部数据库迁移到 SQL Server。

        1. 关注Setting up TeamCity with MS SQL Server,直到您需要设置 JDBC 驱动程序。
        2. 使用与设置 SQL Server 相同的 Windows 帐户登录 TeamCity 服务器。
        3. 他们说用当前版本下载 6.0+ 驱动程序,然后参考 4.x 版本。您需要 Downloads\Microsoft JDBC Driver 6.2 for SQL Server\sqljdbc_6.2\enu\mssql-jdbc-6.2.2.jre8.jar 中的版本,并将其复制到 C: \ProgramData\JetBrains\TeamCity\lib\jdbc\mssql-jdbc-6.2.2.jre8.jar
        4. 从同一个 6.x 驱动程序下载中,复制 Downloads\Microsoft JDBC Driver 6.2 for SQL Server\sqljdbc_6.2\enu\auth\x86\sqljdbc_auth.dllC:\ ProgramData\JetBrains\TeamCity\lib\sqljdbc_auth.dll
        5. 添加一个名为TEAMCITY_SERVER_OPTS 的新系统环境变量,其值为-Djava.library.path=C:\ProgramData\JetBrains\TeamCity\lib
        6. 为了使 MaintainDB 工具正常工作,请添加另一个名为 TEAMCITY_MAINTAINDB_OPTS 且具有相同值 (-Djava.library.path=C:\ProgramData\JetBrains\TeamCity\lib) 的系统环境变量。

        现在您可以运行 MaintainDB 而不会收到关于 sqljdbc_auth.dll 不在 JAVA 库路径中的错误。

        请参阅Creating Backup via maintainDB command-line tool - maintainDB Startup Options,了解为什么需要设置这两个环境变量。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-02-09
          • 2023-03-12
          • 1970-01-01
          • 1970-01-01
          • 2014-06-19
          相关资源
          最近更新 更多