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
目前,您没有这样的条目,因此甚至没有尝试连接,更不用说成功了。
我正在尝试连接到我们生产环境中的数据库。我收到 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
目前,您没有这样的条目,因此甚至没有尝试连接,更不用说成功了。