【问题标题】:DBD::Sybase errorDBD::Sybase 错误
【发布时间】:2015-07-09 02:09:46
【问题描述】:

首先,让我感谢您的时间和知识分享,我对 perl 模块有点无知

我有一个 64 位 ubuntu Server 12.04,带有 Perl 版本 14、subversion 2 (v5.14.2),用于 x86_64-linux-gnu-thread-multi 和 CPAN 探索和模块安装 (v2.10)。

我正在尝试使用 perl 脚本访问 Microsoft SQL Server,但我在 DBD::Sybase 模块上遇到了困难

当我尝试安装 DBD::Sybase CPAN 时告诉我它已经安装:

cpan[1]> install DBD::Sybase
Reading '/root/.cpan/Metadata'
  Database was generated on Wed, 29 Apr 2015 14:53:21 GMT
DBD::Sybase is up to date (1.15).

我还在我的文件系统上找到了多个 Sybase.pm 文件,其中一些位于 Perl 路径下

root@server:# find /* -name Sybase.pm
/home/usriten/download/DBD-Sybase-1.15/Sybase.pm
/root/.cpan/build/DBD-Sybase-1.15-TtUI0T/Sybase.pm
/root/.cpan/build/DBD-Sybase-1.15-kNqdf7/Sybase.pm
/root/.cpan/build/DBD-Sybase-1.15-rZgcTa/Sybase.pm
/usr/local/lib/perl/5.14.2/Sybase.pm
/usr/local/lib/perl/5.14.2/DBD/Sybase.pm
/usr/local/lib/perl/5.14.2/DBI/Sybase.pm

但是当我尝试运行我的脚本时,它会在调用 'if ($self->{handle} = DBI->connect('

# ./check_mssql_health --hostname <MSSQL_Server_IP> --username <SQL_User> --password <Pass> --mode connection-time
mode connection-time
CRITICAL - cannot connect to <MSSQL_Server_IP>. install_driver(Sybase) failed: Can't locate loadable object for module DBD::Sybase in @INC (@INC contains: . /etc/perl /usr/local/lib/perl/5.14.2 /usr/local/share/perl/5.14.2 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.14 /usr/share/perl/5.14 /usr/local/lib/site_perl) at (eval 10) line 3
Compilation failed in require at (eval 10) line 3.
Perhaps a module that DBD::Sybase requires hasn't been fully installed
 at ./check_mssql_health line 3192

我已经花了很多时间搜索帖子,但我没有找到解决方案,或者至少没有找到我可以理解和实施的解决方案。

最好的问候,塞巴斯蒂昂

【问题讨论】:

  • “无法定位模块 DBD::Sybase 的可加载对象”与无法定位 DBD::Sybase 不同。它正在寻找可能尚未安装在您的计算机上的可加载库。 .pm 文件告诉你“包装器”代码在那里,但它没有告诉你本地代码在那里被加载以执行 c 级操作。
  • 你真的有路径.../DBI/Sybase.pm [原文如此]?我不了解 Sybase 本身,但驱动程序安装在 DBI/ 下而不是 DBD/ 下是不寻常的,也许有人手动破坏了您的 DBD-Sybase 安装。
  • 在绝望中,我将 Sybase.pm 复制到 DBD/,我可以删除该 .pm 但它没有任何区别(我已经尝试过)

标签: perl cpan


【解决方案1】:

当我尝试安装 DBD::Sybase CPAN 时告诉我它已经安装:

这仅仅意味着它找到了一个 DBD/Sybase.pm。不进行任何测试;该模块甚至没有加载。

无奈之下,我已将 Sybase.pm 复制到 DBD/

这就是您所询问的错误的原因。 Perl 正在查找您复制过来的 .pm,但不是在安装过程中创建的其他文件。

删除您创建的文件[1],然后正确安装模块(例如,如果有,请使用系统的包管理器,如果没有,请使用cpan DBD::Sybase)。


  1. 您似乎至少创建了以下文件:

    • /usr/local/lib/perl/5.14.2/Sybase.pm
    • /usr/local/lib/perl/5.14.2/DBD/Sybase.pm
    • /usr/local/lib/perl/5.14.2/DBI/Sybase.pm

【讨论】:

  • 你是对的,我已经删除了复制的文件并使用 sudo apt-get install --reinstall libdbd-sybase-perl --force-yes -y 重新安装了 Sybase
【解决方案2】:

我会尝试通过 apt 安装它

sudo apt-get install libdbd-sybase-perl -y

我发现 CPAN 有时会丢失依赖项。

【讨论】:

    【解决方案3】:

    我让它在不同的设置下工作。

    不要使用 DBD::Sybase,而是安装 freetds、unixodbc,然后再安装 DBD::ODBC。在 freetds.conf 文件中设置适当的参数。我的是这样的

    [myMSSL]
            host = 111.22.33.44
            port = 1433
            tds version = 7.2
            client charset = UTF-8
    

    和 /etc/odbc.ini

    [mySQSL_mydb]
    APP = unixodbc
    Description     = Database mydb on myMSSQL
    Driver          = TDSdriver
    Server          = myhost
    Database        = mydb
    Port            = 1433
    #Trace           = No
    

    我认为这些是您需要的软件包。

    • libdbd-freetds - libdbi 的 Freetds 数据库服务器驱动程序
    • tdsodbc -ODBC 驱动程序,用于连接 MS SQL 和 Sybase SQL 服务器
    • freetds-bin - FreeTDS 命令行实用程序

    或者,另请参阅此帖子: Using Ubuntu, how do I install DBD::Sybase from CPAN?

    (以及其他一些,例如这个:Access SQL Server from Solaris

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-16
      • 2016-04-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 2013-07-23
      • 2013-08-08
      • 2014-04-01
      相关资源
      最近更新 更多