我有两个MSSQL实例:SERVERNAME1和SERVERNAME2 \ SQL01我尝试使用DBI从Linux机器连接到它:Sybase。
连接到SERVERNAME1没有问题,我使用:
DBI->connect("dbi:Sybase:server=SERVERNAME.domain.com:PORT;database=master", "user", "pass")
这对我来说很好。第二个服务器也包含实例名称(SQL01)...所以,我的问题是 - 我应该如何为SERVERNAME2 \ SQL01构建连接字符串?我还需要在其中传递domain.com和PORT。
非常感谢您的帮助。
答案 0 :(得分:1)
实例名称只是端口的名称 在某些情况下,您需要使用端口而不是实例名称
就是这种情况。
客户端在端口1434上调用SQL Server Browser。此服务从名称中解析端口。并非所有客户都知道如何做到这一点,也可能不被允许
SQL Server名称实例需要a static port assigned
答案 1 :(得分:0)
每个数据库实例都映射到服务器上的特定端口。只要DBA确实更改了映射,您可以向DBA询问数据库所服务的端口,也可以使用此例程找出映射到哪个端口的实例。只需使用服务器的IP地址调用程序即可。根据此程序的输出编辑freetds.conf文件。
#!/usr/bin/perl
$|++;
use strict;
use IO::Socket::INET;
my $message = new IO::Socket::INET(Proto => "udp", PeerPort => 1434, PeerAddr => "$ARGV[0]", LocalPort => 1434, Timeout => 10)
or die "Can't make UDP socket: $@";
$message->send("\x02");
print "Sent message, waiting on response\n";
my ($datagram,$flags);
$message->recv($datagram,1024,$flags);
#print "Got message from ", $message->peerhost,", flags ",$flags || "none",": $datagram\n";
my @PARAMS=split(';',substr($datagram,3));
print "------------------\n Server $ARGV[0] reports:\n\n";
for(my $i=0;$i<($#PARAMS)+1;$i+=2) {
if ($PARAMS[$i] eq "") {
print "---------\n";
$i--;
next;
};
print "$PARAMS[$i]=$PARAMS[$i+1]\n";
};
-Rusty