我正在尝试在生产环境中连接到我们的数据库。我收到 107 ISAM错误:记录被锁定。我已经检查了它可能是什么的各种文章,但没有运气。我用DBA仔细检查了数据库详细信息,信息是正确的。
仅供参考 - 我收到的“记录被锁定”错误之前的第一个错误是 SQL:-931:无法在/ etc / services中找到web1_tcp service / tcp服务。在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 SQLHOSTS FILE:
#dbservername nettype hostname servicename options
web1 onsoctcp 10.199。***。* web1dev1_tcp
etc / services FILE:
web1dev1_tcp 1533 / tcp#分配给数据库的端口
web1dev1_tcp 1533 / udp#分配给数据库的端口
答案 0 :(得分:1)
在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:无法在/ etc / services中找到web1_tcp service / tcp服务。在test_db_connectivity.pl第13行
错误消息非常明确。您需要/etc/services
中的条目,例如:
web1_tcp 9088/tcp
目前,您没有这样的条目,因此甚至没有尝试连接,更不成功。