Informix error in Perl: ISAM: 107: ISAM error: record is locked. at test_db_connectivity.pl line 14

Informix error in Perl: ISAM: 107: ISAM error: record is locked. at test_db_connectivity.pl line 14

我正在尝试连接到我们生产环境中的数据库。我收到 107 ISAM error: record is locked 。我已经检查了关于它可能是什么的各种文章,但没有运气。我与我们的 DBA 仔细检查了数据库详细信息,信息是正确的。

仅供参考 - 我收到的 "record is locked" 错误之前的第一个错误是 SQL: -931: 找不到 web1_tcp service/tcp 服务在 /etc/services。在 test_db_connectivity.pl 行 13. 。我与我们的 SA 合作将其输入,但不再出现。谁能提供有关 ISAM 107 错误的任何指导?我的连接字符串错了吗?不应该有锁,因为我什至没有打开与数据库的连接。

test_db_connectivity.pl:

#/usr/bin/perl -w

use DBI;
use strict;
use DBI qw(:sql_types);
use DBD::Informix qw(:ix_types);

    my $driver = "Informix";
    my $database = "web1";
    my $dsn = "DBI:$driver:dbname=$database";
    my $userid = "user";
    my $password = "password";
    print "I got this far!\n";
    my $dbh = DBI->connect($dsn, $userid, $password, {RaiseError => 1}) or      die $DBI::errstr;
    print "Opened db successfully\n";
    $dbh->disconnect();

部分变量设置:

export INFORMIXDIR=/opt/informix

export   LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$INFORMIXDIR/lib:$INFORMIXDIR/lib/cli:$INFORMIXDIR/lib/esql:$INFORMIXDIR/lib/tools

export INFORMIXSERVER=web1

INFORMIX SQL主机文件:

#dbservername 网络类型主机名服务名选项

web1 onsoctcp 10.199.***.* web1dev1_tcp

etc/services 文件:

web1dev1_tcp 1533/tcp # 分配给数据库的端口

virtual-places 1533/tcp # Virtual Places 软件

web1dev1_tcp 1533/udp # 分配给数据库的端口

在Linux,出现系统错误107:

107 (ENOTCONN): Transport endpoint is not connected

很难将其与 C-ISAM 错误 107(数字相同)区分开来。但是,在上下文中,我认为 ENOTCONN 比

更有可能成为问题
ISAM ERROR 107: record is locked.

我发现您在 $dsn 中使用了 DBD::Informix 未测试的符号:

my $dsn = "DBI:$driver:dbname=$database";

dbname= 部分不正确。你应该使用:

my $dsn = "DBI:$driver:$database";

请注意,DBI 规范(我上次查看时)说驱动程序名称后面的内容是特定于驱动程序的。您可以提交增强请求。

然而,在我的工作系统上,当我使用 dbname=stores 符号时,我得到的错误是:

DBI connect('dbname=stores', '',...) failed: SQL: -354: Incorrect database or cursor name format. at dbname-dsn.pl line 8.

这是完全不同的。你说你得到了:

SQL: -931: Cannot locate web1_tcp service/tcp service in /etc/services. at test_db_connectivity.pl line 13

错误信息非常明确。您需要在 /etc/services 中输入一个条目,例如:

web1_tcp    9088/tcp

目前,您没有这样的条目,因此甚至没有尝试连接,更不用说成功了。