2012-08-29 130 views
0

尝试使用Perl进行sql server数据库的远程备份。但不知何故得到以下错误:Perl的SQL Server备份命令

备份错误:3041严重性:16,状态:1. BACKUP未能完成命令BACKUP DATABASE testdb。检查备份应用程序日志中的详细消息。

use DBI; 
my $dsn = 'DBI:ODBC:Driver={SQL Server}'; 
my $host = 'hostname'; 
my $database = 'dbname'; 
my $user = 'sa'; 
my $auth = 'xxxxxxx'; 

my $dbh = DBI->connect("$dsn;Server=$host", 
         $user, 
         $auth, 
         { RaiseError => 1, 
         AutoCommit => 1} 
        ) || die "Database connection not made: $DBI::errstr"; 

my $sql = "BACKUP DATABASE testdb TO DISK='d:\sql_share\backup.bak'"; 
my $sth = $dbh->prepare($sql); 

$sth->execute(); 
print "\nexecuted"; 

$sth->finish(); 
$dbh->disconnect(); 

使用相同的脚本能够远程服务器上创建数据库,查询数据库等:

脚本像看起来。

+0

你“检查备份应用程序日志的详细消息”? –

回答

0

\用双引号有意思。逃避反斜杠。

0

在你的命令中的反斜杠在双引号背景下进行处理,并

my $sql = "BACKUP DATABASE testdb TO DISK='d:\sql_share\backup.bak'"; 

$sqlBACKUP DATABASE testdb TO DISK='d:sql_shareackup.bak'。打印出来看

我建议你用这个代替,它提供了单引号环境和使嵌入式单引号

my $sql = q(BACKUP DATABASE testdb TO DISK='D:\sql_share\backup.bak'); 
+0

试过了,在sql server日志中仍然出现同样的错误。 – user762421

+0

确定它在备份日志中说了什么(_not_服务器日志) – Borodin

+0

与SQL Server Management Studio Express一样工作 – user762421