DBI - MSSQL - 具有实例名称的连接字符串

时间:2014-09-23 12:16:51

标签: sql-server perl sybase dbi

我有两个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。

非常感谢您的帮助。

2 个答案:

答案 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