我有两个MSSQL实例:SERVERNAME1和SERVERNAME2\SQL01,我试图使用DBI:Sybase从Linux机器连接到它们。
我没有问题连接到SERVERNAME1,我使用:
DBI->connect("dbi:Sybase:server=SERVERNAME.domain.com:PORT;database=master", "user", "pass")
第二个服务器也包含实例名(SQL01)。。。所以,我的问题是-我应该如何为SERVERNAME2\SQL01构建连接字符串?我还需要通过domain.com和其中的PORT。
非常感谢您的帮助。
实例名称只是端口的名称。
在某些情况下,您需要使用端口而不是实例名
这就是一个这样的例子。
客户端在端口1434上调用SQL Server Browser。此服务从名称解析端口。并非所有客户都知道如何做到这一点,或者可能不允许太
SQL Server名称实例将需要一个分配给的静态端口
每个DB实例都映射到服务器上的特定端口。只要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 responsen";
my ($datagram,$flags);
$message->recv($datagram,1024,$flags);
#print "Got message from ", $message->peerhost,", flags ",$flags || "none",": $datagramn";
my @PARAMS=split(';',substr($datagram,3));
print "------------------n Server $ARGV[0] reports:nn";
for(my $i=0;$i<($#PARAMS)+1;$i+=2) {
if ($PARAMS[$i] eq "") {
print "---------n";
$i--;
next;
};
print "$PARAMS[$i]=$PARAMS[$i+1]n";
};
-生锈的